The previous section showed a very simple machined part that was quite simple to plan. Also, the rules for planning were overlooked. In this section a more complex part will be suggested, and the complete rule set will be presented.
The part shown below is a rod support mount that was randomly selected from a drafting textbook. It contains many similar operations in the previous example, but is more extensive.
// A sample mechanical part to be machined.
EQUATION: ( & Stock ( ~ Rod_Hole ) ( ~ Mount_Feature;Mount_Hole_1
) ( ~ Mount_Feature;Mount_Hole_2 ) ( ~ Top_Channel )
( ~ Bottom_Channel ) Top_Round )
EQUATION: ( + Mount_Hole Mount_Gouge )
The file above is more sophisticated than the previous design file, and should give the reader an appreciation of the power of this representation technique. For example there is a reused feature in the design called the ‘Mount_Feature’. This feature is used twice in the design.
The rule file below will only be shown once because of size, although the same file is used for the first three examples in this chapter (i.e. the angles part, the rod support mount, and in the next section the big clothes pin).
// This set of equation forms sets up search patterns in the equation,
// and suggests rules which can be fired by a match
EQUATION: ( ? VAR:V:0;PROP ...)
EQUATION: ( ? VAR:V:1;PROP ...)
EQUATION: ( ? VAR:V:1;PROP ...)
EQUATION: ( & ...( ~ VAR:V:0 ):VAR:PEEP
EQUATION: ( & ...( ~ VAR:V:0 ):LABEL:REF
EQUATION: ( : ...( & VAR:V:0 ):LABEL:REF
EQUATION: ( : ( & VAR:V:1 ):LABEL:REF
EQUATION: ( & VAR:V:0 VAR:V:1 ...)
EQUATION: (> : VAR:V:0 VAR:V:1 ...)
EQUATION: (> : VAR:V:0;PROP VAR:V:1 ...)
// Assume if here there are no other options, so squash in terms
EQUATION: ( ? VAR:V:0;PROP ...)
// This section lists the possible rules which may be fired. Each rule
// references a set of conditions which are in the following section
EQUATION: ( + TRANSPORT_X TRANSPORT_Y TRANSPORT_Z )
EQUATION: ( + TRANSPORT2_X TRANSPORT2_Y TRANSPORT2_Z )
EQUATION: ( & PART_0_EXISTS PART_1_EXISTS )
EQUATION: ( & SPRING_SHAPE ( ~ SPRING_ENDS ) )
EQUATION: ( & SPRING_SHAPE L_SPRING_ENDS )
EQUATION: ( & CYLINDER_SHAPE DRILL_SIZE )
RESULT: ADD_PROPS_TO_PRIMITIVE
EQUATION: ( & CONE_SHAPE DRILL_SIZE )
EQUATION: ( & BLOCK_SHAPE METAL )
EQUATION: ( & BLOCK_SHAPE BLOCK_STOCK METAL )
EQUATION: ( & BLOCK_SHAPE BLOCK_STOCK THERMO_PLASTIC )
RESULT: CUT_BLOCK_STOCK_PLASTIC
EQUATION: ( & BLOCK_AND_BLOCK )
EQUATION: ( & BLOCK_SHAPE METAL )
EQUATION: ( & BLOCK_SHAPE THERMO_PLASTIC )
RESULT: CUT_BLOCK_STOCK_PLASTIC
EQUATION: ( & CYLINDER_SHAPE METAL )
RESULT: APPEND_PROPERTIES_TO_SET_2
// Basic conditions for reasoning in the plan
COMPARE ( PROP0.translate_x $ )
COMPARE ( PROP0.translate_x > 20 )
COMPARE ( PROP0.translate_y $ )
COMPARE ( PROP0.translate_y > 20 )
COMPARE ( PROP0.translate_z $ )
COMPARE ( PROP0.translate_z > 20 )
COMPARE ( PROP1.translate_x $ )
COMPARE ( PROP1.translate_x > 20 )
COMPARE ( PROP1.translate_y $ )
COMPARE ( PROP1.translate_y > 20 )
COMPARE ( PROP1.translate_z $ )
COMPARE ( PROP1.translate_z > 20 )
COMPARE ( V0.form == CYLINDER )
COMPARE ( V1.form == CYLINDER )
COMPARE ( V0.form == COMPLEX )
MATH ( V0.ratio = V0.height / V0.radius )
COMPARE ( V0.ratio > V0.minimum )
FIND ( V0.axis = ROTATIONAL_AXIS V0 )
FIND ( V1.axis = ROTATIONAL_AXIS V1 )
FIND ( V0.material_class = MATERIAL_CLASS V0.material )
COMPARE ( V0.material_class == THERMO_PLASTIC )
FIND ( V0.material_class = MATERIAL_CLASS V0.material )
COMPARE ( V0.material_class == METAL )
// Various Results to build the plan, and alter the equation.
result ADD_PROPS_TO_PRIMITIVE {
COPY_SET ( PEEP COMBINED_SET )
EQUATION_INSERT_SYMBOL ( :0 COMBINED_SET )
FIND ( COMBINED_SET name SET_NAME V0 )
result APPEND_PROPERTIES_TO_SET {
APPEND_SET ( PROP0 COMBINED_SET )
EQUATION_INSERT_SYMBOL ( :0 COMBINED_SET )
FIND ( COMBINED_SET name SET_NAME V0 )
result APPEND_PROPERTIES_TO_SET_2 {
APPEND_SET ( PROP1 COMBINED_SET )
EQUATION_INSERT_SYMBOL ( :1 COMBINED_SET )
FIND ( COMBINED_SET name SET_NAME V1 )
EQUATION_DELETE_VARIABLE_TERM ( REF )
ADD_PROPERTY ( DRILL_HOLE a1 = 0.5 )
ADD_PROPERTY ( DRILL_HOLE a2 = 1.0 )
ADD_PROPERTY ( DRILL_HOLE height = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( DRILL_HOLE height + V0 height )
PROPERTY_FUNCTION_NUMBER ( DRILL_HOLE height / 20.0 )
FIND ( DRILL_HOLE name SET_NAME V0 )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( drill hole : ‘
DELETE_PROPERTY ( DRILL_HOLE name )
PLAN_PUSH_TEXT ( ‘ CUTTING ( FEATURE single diameter hole ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MACHINE qa1000 ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MATERIAL t-7075 ) ‘ )
PLAN_PUSH_FORMAT ( ‘ CUTTING ( PARAMETERS ‘ DRILL_HOLE.height
DRILL_HOLE.a1 DRILL_HOLE.a2 ‘ ) ‘ )
ADD_PROPERTY ( DRILL_HOLE cost = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( DRILL_HOLE cost + V0 height )
PROPERTY_FUNCTION_VARIABLE ( DRILL_HOLE cost * V0 radius )
PROPERTY_FUNCTION_NUMBER ( DRILL_HOLE cost * 1250.25 )
PROPERTY_FUNCTION_NUMBER ( DRILL_HOLE cost + 0.25 )
DECLARE_COST ( DRILL_HOLE cost )
EQUATION_DELETE_VARIABLE_TERM ( REF )
ADD_PROPERTY ( CHAMFER_HOLE a1 = 0.5 )
ADD_PROPERTY ( CHAMFER_HOLE a2 = 1.0 )
ADD_PROPERTY ( CHAMFER_HOLE height = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( CHAMFER_HOLE height + V0 height )
PROPERTY_FUNCTION_NUMBER ( CHAMFER_HOLE height / 20.0 )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( drill chamfer ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( FEATURE Front Countersunk Hole ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MACHINE qa1000 ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MATERIAL t-7075 ) ‘ )
PLAN_PUSH_FORMAT ( ‘ CUTTING ( PARAMETERS ‘ CHAMFER_HOLE.height
CHAMFER_HOLE.a1 CHAMFER_HOLE.a2 ‘ ) ‘ )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( mill surface at angle ) ‘ )
EQUATION_DELETE_SYMBOL ( :0: )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( mill surface at angle ) ‘ )
EQUATION_DELETE_VARIABLE_TERM ( REF )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( get block from stock room ) ‘ )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( coil spring from wire ) ‘ )
ADD_PROPERTY ( COIL_SPRING wire_dia = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( COIL_SPRING wire_dia + V0
PROPERTY_FUNCTION_VARIABLE ( COIL_SPRING wire_dia - V0
ADD_PROPERTY ( COIL_SPRING turns = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( COIL_SPRING turns + V0 turns )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( bend coil spring ) ‘ )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( wire dia. =
‘ COIL_SPRING.wire_dia ‘ ) ‘ )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( turns. = ‘ COIL_SPRING.turns
COPY_SET ( V0 BEND_SPRING_ENDS )
DELETE_PROPERTY ( BEND_SPRING_ENDS ends )
ADD_PROPERTY ( BEND_SPRING_ENDS offset = 0.0 )
ADD_PROPERTY ( BEND_SPRING_ENDS length = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( BEND_SPRING_ENDS length + V0
PROPERTY_FUNCTION_NUMBER ( BEND_SPRING_ENDS length * 2.0 )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( bend spring ends ) ‘ )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( L offset on spring = ‘
BEND_SPRING_ENDS.offset ‘ ) ‘ )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( length of free end = ‘
BEND_SPRING_ENDS.length ‘ ) ‘ )
EQUATION_INSERT_SYMBOL ( :0: BEND_SPRING_ENDS )
EQUATION_DELETE_SYMBOL ( :1: )
COPY_SET ( V1 MILL_OUT_BLOCK )
FIND ( MILL_OUT_BLOCK name SET_NAME V1 )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( mill out block shape : ‘
DELETE_PROPERTY ( MILL_OUT_BLOCK name )
PLAN_PUSH_TEXT ( ‘ CUTTING ( FEATURE Flat Rectangular Surface -
Open, Cutter Axis Perpend. ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MACHINE qa1000 ) ‘ )
PLAN_PUSH_FORMAT ( ‘ CUTTING ( MATERIAL ‘ BASE_BLOCK.material
PLAN_PUSH_FORMAT ( ‘ CUTTING ( PARAMETERS ‘ MILL_OUT_BLOCK.width
MILL_OUT_BLOCK.depth MILL_OUT_BLOCK.height ‘ ) ‘ )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( cut a block from stock with band
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( width = ‘ BLOCK_STOCK.width
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( depth = ‘ BLOCK_STOCK.depth
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( height = ‘ BLOCK_STOCK.height
ADD_PROPERTY ( BLOCK_STOCK cost = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost + V0 width )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost * V0 depth )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost * V0 height )
FIND ( BLOCK_STOCK matl_cost MATERIAL_COST V0 material )
PROPERTY_FUNCTION_NUMBER ( BLOCK_STOCK cost + 0.50 )
DECLARE_COST ( BLOCK_STOCK cost )
result CUT_BLOCK_STOCK_PLASTIC {
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( cut a block from stock with hot
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( width = ‘ BLOCK_STOCK.width
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( depth = ‘ BLOCK_STOCK.depth
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( height = ‘ BLOCK_STOCK.height
ADD_PROPERTY ( BLOCK_STOCK cost = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost + V0 width )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost * V0 depth )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost * V0 height )
FIND ( BLOCK_STOCK matl_cost MATERIAL_COST V0 material )
PROPERTY_FUNCTION_VARIABLE ( BLOCK_STOCK cost * BLOCK_STOCK
PROPERTY_FUNCTION_NUMBER ( BLOCK_STOCK cost + 0.30 )
DECLARE_COST ( BLOCK_STOCK cost )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( cut round stock ) ‘ )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( length = ‘ ROUND_STOCK.length
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( radius = ‘ ROUND_STOCK.radius
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( get WIP from inventory ) ‘ )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( name = ‘ WIP_STOCK.description
FIND ( FIXTURED_PART name SET_NAME V0 )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( fixture part : ‘
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( add part to fixtured part ) ‘ )
FIND ( PART name SET_NAME V1 )
FIND ( PART name2 SET_NAME V0 )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( add ‘ PART.name ‘ to ‘
DELETE_PROPERTY ( PART name2 )
APPEND_SET ( PROP0 LOGO_PART )
EQUATION_INSERT_SYMBOL ( :0 LOGO_PART )
DELETE_PROPERTY ( LOGO_PART operation )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( Add Logo to part ) ‘ )
APPEND_SET ( PROP0 MOVED_PART )
EQUATION_INSERT_SYMBOL ( :0 MOVED_PART )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( Move (x,y,z) by ‘
MOVED_PART.translate_x ‘ , ‘ MOVED_PART.translate_y ‘ , ‘
MOVED_PART.translate_z ‘ ) ‘ )
DELETE_PROPERTY ( MOVED_PART translate_x )
DELETE_PROPERTY ( MOVED_PART translate_y )
DELETE_PROPERTY ( MOVED_PART translate_z )
APPEND_SET ( PROP1 MOVED_PART )
EQUATION_INSERT_SYMBOL ( :1 MOVED_PART )
PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( Move (x,y,z) by ‘
MOVED_PART.translate_x ‘ , ‘ MOVED_PART.translate_y ‘ , ‘
MOVED_PART.translate_z ‘ ) ‘ )
DELETE_PROPERTY ( MOVED_PART translate_x )
DELETE_PROPERTY ( MOVED_PART translate_y )
DELETE_PROPERTY ( MOVED_PART translate_z )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( Mill Out Block Shape ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( FEATURE Blind Pocket ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MACHINE qa1000 ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MATERIAL t-7075 ) ‘ )
PLAN_PUSH_FORMAT ( ‘ CUTTING ( PARAMETERS ‘ MILLED_CHUNK.width
MILLED_CHUNK.depth MILLED_CHUNK.height ‘ ) ‘ )
EQUATION_DELETE_VARIABLE_TERM ( REF )
ADD_PROPERTY ( MILLED_CHUNK cost = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( MILLED_CHUNK cost + V0 height )
PROPERTY_FUNCTION_VARIABLE ( MILLED_CHUNK cost * V0 width )
PROPERTY_FUNCTION_VARIABLE ( MILLED_CHUNK cost * V0 depth )
PROPERTY_FUNCTION_NUMBER ( MILLED_CHUNK cost * 1250.25 )
PROPERTY_FUNCTION_NUMBER ( MILLED_CHUNK cost + 0.25 )
DECLARE_COST ( MILLED_CHUNK cost )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( Mill Off Round Shape ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( FEATURE External Round ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MACHINE qa1000 ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MATERIAL t-7075 ) ‘ )
PLAN_PUSH_FORMAT ( ‘ CUTTING ( PARAMETERS ‘ MILLED_ROUND.radius
ADD_PROPERTY ( MILLED_ROUND cost = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( MILLED_ROUND cost + V0 radius )
PROPERTY_FUNCTION_VARIABLE ( MILLED_ROUND cost * V0 height )
PROPERTY_FUNCTION_NUMBER ( MILLED_ROUND cost * 900.25 )
PROPERTY_FUNCTION_NUMBER ( MILLED_ROUND cost + 0.25 )
DECLARE_COST ( MILLED_ROUND cost )
PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( Mill Off Wedge Shape ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( FEATURE External Planes ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MACHINE qa1000 ) ‘ )
PLAN_PUSH_TEXT ( ‘ CUTTING ( MATERIAL t-7075 ) ‘ )
PLAN_PUSH_FORMAT ( ‘ CUTTING ( PARAMETERS ‘ MILLED_WEDGE.width
MILLED_WEDGE.depth MILLED_WEDGE.height ‘ ) ‘ )
ADD_PROPERTY ( MILLED_WEDGE cost = 0.0 )
PROPERTY_FUNCTION_VARIABLE ( MILLED_WEDGE cost + V0 width )
PROPERTY_FUNCTION_VARIABLE ( MILLED_WEDGE cost * V0 depth )
PROPERTY_FUNCTION_VARIABLE ( MILLED_WEDGE cost * V0 height )
PROPERTY_FUNCTION_NUMBER ( MILLED_WEDGE cost * 400.25 )
PROPERTY_FUNCTION_NUMBER ( MILLED_WEDGE cost + 0.25 )
When this rule file is applied to the part we obtain an enlarged design file, as shown below.
EQUATION: ( & Stock ( ~ Rod_Hole ) ( ~ Mount_Feature;Mount_Hole_1
) ( ~ Mount_Feature;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~
EQUATION: ( + Mount_Hole Mount_Gouge )
EQUATION: ( ~ Mount_Feature;Mount_Hole_1 )
EQUATION: ( ~ Mount_Feature;Mount_Hole_2 )
EQUATION: ( ~ Bottom_Channel )
FEATURE ( 1.000000 Rod_Support Rod_Support_OP1 Rod_Support_PART )
EQUATION: ( & Stock ( ~ Rod_Hole ) ( ~ ( + Mount_Hole Mount_Gouge
);Mount_Hole_1 ) ( ~ ( + Mount_Hole Mount_Gouge );Mount_Hole_2 )
( ~ Top_Channel ) ( ~ Bottom_Channel ) Top_Round )
OPERATION ( AND RULE 2:0:0 9183.336250 Rod_Support_OP2
OPERATION ( AND RULE 3:0:0 9183.336250 Rod_Support_OP3
DESCRIPTION ( drill hole : Rod_Hole )
CUTTING ( FEATURE single diameter hole )
EQUATION: ( & Stock ( ~ ( + Mount_Hole Mount_Gouge );Mount_Hole_1
) ( ~ ( + Mount_Hole Mount_Gouge );Mount_Hole_2 ) ( ~
Top_Channel ) ( ~ Bottom_Channel ) Top_Round )
OPERATION ( AND RULE 4:0:0 0.000000 Rod_Support_OP4
OPERATION ( AND RULE 5:0:0 0.000000 Rod_Support_OP5
DESCRIPTION ( drill hole : Rod_Hole )
CUTTING ( FEATURE single diameter hole )
CUTTING ( PARAMETERS 0.565000 0.5 1.0 )
EQUATION: ( & Stock ( ~ Mount_Hole;Mount_Hole_1 ) ( ~
Mount_Gouge;Mount_Hole_1 ) ( ~ Mount_Hole;Mount_Hole_2 ) ( ~
Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~ Bottom_Channel
EQUATION: ( & Stock ( ~ COMBINED_SET_5 ) ( ~
Mount_Gouge;Mount_Hole_1 ) ( ~ Mount_Hole;Mount_Hole_2 ) ( ~
Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~ Bottom_Channel
OPERATION ( AND RULE 6:0:0 4469.893750 Rod_Support_OP6
OPERATION ( AND RULE 7:0:0 0.000000 Rod_Support_OP7
EQUATION: ( & Stock ( ~ Mount_Hole;Mount_Hole_1 ) ( ~
COMBINED_SET_6 ) ( ~ Mount_Hole;Mount_Hole_2 ) ( ~
Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~ Bottom_Channel
name = Mount_Gouge;Mount_Hole_1
DESCRIPTION ( drill hole : COMBINED_SET_5 )
CUTTING ( FEATURE single diameter hole )
CUTTING ( PARAMETERS 0.325000 0.5 1.0 )
EQUATION: ( & Stock ( ~ Mount_Gouge;Mount_Hole_1 ) ( ~
Mount_Hole;Mount_Hole_2 ) ( ~ Mount_Gouge;Mount_Hole_2 ) ( ~
Top_Channel ) ( ~ Bottom_Channel ) Top_Round )
EQUATION: ( & Stock ( ~ COMBINED_SET_5 ) ( ~ COMBINED_SET_8 ) ( ~
Mount_Hole;Mount_Hole_2 ) ( ~ Mount_Gouge;Mount_Hole_2 ) ( ~
Top_Channel ) ( ~ Bottom_Channel ) Top_Round )
OPERATION ( AND RULE 8:0:0 4469.893750 Rod_Support_OP8
OPERATION ( AND RULE 9:0:0 0.000000 Rod_Support_OP9
DESCRIPTION ( drill hole : COMBINED_SET_5 )
CUTTING ( FEATURE single diameter hole )
CUTTING ( PARAMETERS 0.325000 0.5 1.0 )
EQUATION: ( & Stock ( ~ COMBINED_SET_8 ) ( ~
Mount_Hole;Mount_Hole_2 ) ( ~ Mount_Gouge;Mount_Hole_2 ) ( ~
Top_Channel ) ( ~ Bottom_Channel ) Top_Round )
EQUATION: ( & Stock ( ~ COMBINED_SET_5 ) ( ~ COMBINED_SET_8 ) ( ~
COMBINED_SET_10 ) ( ~ Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel
) ( ~ Bottom_Channel ) Top_Round )
OPERATION ( AND RULE 10:0:0 4469.893750 Rod_Support_OP10
OPERATION ( AND RULE 11:0:0 0.000000 Rod_Support_OP11
name = Mount_Hole;Mount_Hole_2
DESCRIPTION ( drill hole : COMBINED_SET_5 )
CUTTING ( FEATURE single diameter hole )
CUTTING ( PARAMETERS 0.325000 0.5 1.0 )
EQUATION: ( & Stock ( ~ COMBINED_SET_8 ) ( ~ COMBINED_SET_10 ) (
EQUATION: ( & Stock ( ~ COMBINED_SET_5 ) ( ~ COMBINED_SET_8 ) ( ~
COMBINED_SET_10 ) ( ~ COMBINED_SET_12 ) ( ~ Top_Channel ) ( ~
OPERATION ( AND RULE 12:0:0 4469.893750 Rod_Support_OP12
name = Mount_Gouge;Mount_Hole_2
DESCRIPTION ( drill hole : COMBINED_SET_5 )
CUTTING ( FEATURE single diameter hole )
CUTTING ( PARAMETERS 0.325000 0.5 1.0 )
EQUATION: ( & Stock ( ~ COMBINED_SET_8 ) ( ~ COMBINED_SET_10 ) (
~ COMBINED_SET_12 ) ( ~ Top_Channel ) ( ~ Bottom_Channel )
OPERATION ( AND RULE 13:0:0 70734.394000 Rod_Support_OP13
DESCRIPTION ( Mill Out Block Shape )
CUTTING ( FEATURE Blind Pocket )
CUTTING ( PARAMETERS 2.6 3.4 6.4 )
EQUATION: ( & Stock ( ~ COMBINED_SET_10 ) ( ~ COMBINED_SET_12 ) (
~ Top_Channel ) ( ~ Bottom_Channel ) Top_Round )
name = Mount_Gouge;Mount_Hole_1
DESCRIPTION ( drill hole : COMBINED_SET_10 )
CUTTING ( FEATURE single diameter hole )
CUTTING ( PARAMETERS 0.325000 0.5 1.0 )
EQUATION: ( & Stock ( ~ COMBINED_SET_12 ) ( ~ Top_Channel ) ( ~
OPERATION ( AND RULE 15:0:0 70734.394000 Rod_Support_OP15
DESCRIPTION ( Mill Out Block Shape )
CUTTING ( FEATURE Blind Pocket )
CUTTING ( PARAMETERS 2.6 3.4 6.4 )
EQUATION: ( & Stock ( ~ Top_Channel ) ( ~ Bottom_Channel )
name = Mount_Gouge;Mount_Hole_2
DESCRIPTION ( Mill Out Block Shape )
CUTTING ( FEATURE Blind Pocket )
CUTTING ( PARAMETERS 2.5 3.4 4.0 )
EQUATION: ( & Stock ( ~ Bottom_Channel ) Top_Round )
OPERATION ( AND RULE 17:0:0 26780.605000 Rod_Support_OP17
DESCRIPTION ( Mill Out Block Shape )
CUTTING ( FEATURE Blind Pocket )
CUTTING ( PARAMETERS 3.5 3.4 1.8 )
EQUATION: ( & Stock Top_Round )
OPERATION ( AND RULE 18:0:0 0.250000 Rod_Support_OP18
DESCRIPTION ( Mill Off Round Shape )
CUTTING ( FEATURE External Round )
CUTTING ( PARAMETERS 3.4 12.0 )
DESCRIPTION ( cut a block from stock with band saw )
equation = ( & Stock ( ~ Rod_Hole ) ( ~ ( + Mount_Hole
Mount_Gouge );Mount_Hole_1 ) ( ~ ( + Mount_Hole Mount_Gouge
The file listed above lists not only the design file information, but also the process plan information, as discussed in the previous chapters. One point of interest is that for some of the operations there are multiple choices. Only one of these has been selected, but the system is at least choosing between a number of alternatives. When this file is interpreted through to the final design, the operation plan results are listed below.
-------- Work Order Sheets ------------
OPERATION SUMMARY_SHEET: Rod_Support_PART - Quantity 1.000000
------------------------------------------
0 cut a block from stock with band saw
50 drill hole : COMBINED_SET_10
70 drill hole : COMBINED_SET_5
Here again we can see that many of the operations may be alternated in order. For example, BCAPP would be quite likely to schedule the drilling of the ‘Mount_feature’ holes before the ‘Mount_gouges’. This would not make sense, but without the solid modeling capabilities, it is difficult to detect the excess volume that would have to be drilled for the reversed sequence.