📄 waltz.drl
字号:
edge3.setLabel( "B" );
drools.modifyObject( edge3 );
stage.setValue( "labeling" );
drools.modifyObject( stage );
</java:consequence>
</rule>
<!--
If we have an edge whose label we already know definitely, then
label the corresponding edge in the other direction
-->
<rule name="match_edge">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>edge1.getP1( ) == edge2.getP2( )</java:condition>
<java:condition>edge1.getP2( ) == edge2.getP1( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )
|| "-".equals( edge1.getLabel( ) )
|| "B".equals( edge1.getLabel( ) )
</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
int p1 = edge1.getP1( );
int p2 = edge1.getP2( );
String label = edge1.getLabel( );
edge1.setPlotted( true );
drools.modifyObject( edge1 );
edge2.setPlotted( true );
edge2.setLabel( label );
drools.modifyObject( edge2 );
System.out.println( "plot " + label + " " + p1 + " " + p2 );
</java:consequence>
</rule>
<!--
The following productions propogate the possible labellings of the edges
based on the labellings of edges incident on adjacent junctions. Since
from the initial boundary productions, we have determined the labellings of
of atleast two junctions, this propogation will label all of the junctions
with the possible labellings. The search space is pruned due to filtering,
i.e. - only label a junction in the ways physically possible based on the
labellings of adjacent junctions.
-->
<rule name="label_L">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"L".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>edge1.getP2( ) != edge2.getP2( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )
|| "-".equals( edge1.getLabel( ) )
</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "B" );
drools.modifyObject ( edge2 );
</java:consequence>
</rule>
<rule name="label_tee_A">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"tee".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge2.getP2( )</java:condition>
<java:condition>null == edge1.getLabel( )</java:condition>
<java:consequence>
edge1.setLabel( "B" );
drools.modifyObject ( edge1 );
edge2.setLabel( "B" );
drools.modifyObject ( edge2 );
</java:consequence>
</rule>
<rule name="label_tee_B">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"tee".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge2.getP2( )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge1.setLabel( "B" );
drools.modifyObject ( edge1 );
edge2.setLabel( "B" );
drools.modifyObject ( edge2 );
</java:consequence>
</rule>
<rule name="label_fork-1">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"fork".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>edge1.getP2( ) != edge2.getP2( )</java:condition>
<java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>"+".equals( edge1.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( "+" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_fork-2">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"fork".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>edge1.getP2( ) != edge2.getP2( )</java:condition>
<java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>"B".equals( edge1.getLabel( ) )</java:condition>
<java:condition>"-".equals( edge2.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge3.setLabel( "B" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_fork-3">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"fork".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>edge1.getP2( ) != edge2.getP2( )</java:condition>
<java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>"B".equals( edge1.getLabel( ) )</java:condition>
<java:condition>"B".equals( edge2.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge3.setLabel( "-" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_fork-4">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"fork".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>edge1.getP2( ) != edge2.getP2( )</java:condition>
<java:condition>edge1.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>edge2.getP2( ) != edge3.getP2( )</java:condition>
<java:condition>"-".equals( edge1.getLabel( ) )</java:condition>
<java:condition>"-".equals( edge2.getLabel( ) )</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge3.setLabel( "-" );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-1A">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge3.getP2( )</java:condition>
<java:condition>"B".equals( edge1.getLabel( ) )
|| "-".equals( edge1.getLabel( ) )
</java:condition>
<java:condition>null == edge2.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( edge1.getLabel( ) );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-1B">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP1( ) == edge1.getP2( )</java:condition>
<java:condition>junction.getP2( ) == edge2.getP2( )</java:condition>
<java:condition>junction.getP3( ) == edge3.getP2( )</java:condition>
<java:condition>"B".equals( edge1.getLabel( ) )
|| "-".equals( edge1.getLabel( ) )
</java:condition>
<java:condition>null == edge3.getLabel( )</java:condition>
<java:consequence>
edge2.setLabel( "+" );
drools.modifyObject ( edge2 );
edge3.setLabel( edge1.getLabel( ) );
drools.modifyObject ( edge3 );
</java:consequence>
</rule>
<rule name="label_arrow-2A">
<parameter identifier="stage"><class>Stage</class></parameter>
<parameter identifier="junction"><class>Junction</class></parameter>
<parameter identifier="edge1"><class>Edge</class></parameter>
<parameter identifier="edge2"><class>Edge</class></parameter>
<parameter identifier="edge3"><class>Edge</class></parameter>
<java:condition>"labeling".equals( stage.getValue( ) )</java:condition>
<java:condition>"arrow".equals( junction.getType( ) )</java:condition>
<java:condition>junction.getBasePoint( ) == edge1.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge2.getP1( )</java:condition>
<java:condition>junction.getBasePoint( ) == edge3.getP1( )</java:condition>
<java:condition>junction.getP3( ) == edge1.getP2( )</java:condition>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -