## 1.3 A MORE COMPLEX MACHINED PART

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.

Figure 1.4 A Rod Support Mount

//

// A sample mechanical part to be machined.

//

main Rod_Support {

EQUATION: ( & Stock ( ~ Rod_Hole ) ( ~ Mount_Feature;Mount_Hole_1

) ( ~ Mount_Feature;Mount_Hole_2 ) ( ~ Top_Channel )

( ~ Bottom_Channel ) Top_Round )

}

Stock {

material = brass

form = BLOCK

width = 11.3

depth = 3.2

height = 6.4

}

Figure 1.5 A File to Describe the Rod Support Mount

Rod_Hole {

form = CYLINDER

height = 11.3

rotate_y = -90

translate_x = 1.4

}

Mount_Feature {

EQUATION: ( + Mount_Hole Mount_Gouge )

}

Mount_Gouge {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

}

Mount_Hole {

form = CYLINDER

height = 6.5

}

Mount_Hole_1 {

translate_x = -4.35

}

Mount_Hole_2 {

translate_x = 4.35

}

Top_Channel {

form = BLOCK

width = 2.5

depth = 3.4

height = 4.0

translate_z = 1.8

}

Bottom_Channel {

form = BLOCK

width = 3.5

depth = 3.4

height = 1.8

translate_z = -2.4

}

Top_Round {

form = CYLINDER

height = 12.0

translate_x = 0.2

rotate_y = 90

}

### A File to Describe the Rod Support Mount (cont’d)

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_form EQN_A {

EQUATION: ( ? VAR:V:0;PROP ...)

RULE: translate_part

}

equation_form EQN_C {

EQUATION: ( ? VAR:V:1;PROP ...)

RULE: translate_second_part

}

equation_form EQN_D {

EQUATION: ( ? VAR:V:1;PROP ...)

RULE: translate_second_part

}

equation_form EQN_0 {

EQUATION: ( & ...( ~ VAR:V:0 ):VAR:PEEP

RULE: before_drill_hole

}

equation_form EQN_1 {

EQUATION: ( & ...( ~ VAR:V:0 ):LABEL:REF

RULE: drill_hole

RULE: chamfer_drill

RULE: mill_out_block

}

equation_form EQN_2 {

EQUATION: ( & VAR:V:1 )

RULE: cut_angled_chunk1

RULE: cut_angled_chunk2

}

equation_form EQN_3 {

EQUATION: ( : ...( & VAR:V:0 ):LABEL:REF

RULE: get_stock

RULE: cut_plastic_stock

}

Figure 1.1 The General Rule File Developed for Discrete Manufacturing

equation_form EQN_4 {

EQUATION: ( : ( & VAR:V:1 ):LABEL:REF

RULE: cut_bar_stock

RULE: cut_plastic_stock

}

equation_form EQN_5 {

EQUATION: ( : ( & VAR:V:i ) )

// RULE: cut_bar_stock

}

equation_form EQN_6 {

EQUATION: ( : VAR:V:0 )

RULE: spring_roll

RULE: spring_ends

}

equation_form EQN_7 {

EQUATION: ( & VAR:V:0 VAR:V:1 ...)

RULE: mill_off_wedge

RULE: mill_off_round

RULE: mill_off_block

}

equation_form EQN_8 {

EQUATION: (> : VAR:V:0 )

RULE: fixture_part

}

equation_form EQN_9 {

EQUATION: (> : VAR:V:0 VAR:V:1 ...)

RULE: assemble_parts

}

equation_form EQN_10 {

EQUATION: (> : VAR:V:0;PROP VAR:V:1 ...)

RULE: assemble_parts

}

equation_form EQN_11 {

EQUATION: (> ? VAR:V:0 )

RULE: get_cut_block_stock

RULE: get_cut_plastic_stock

RULE: get_cut_round_stock

RULE: get_WIP

}

equation_form EQN_12 {

// Assume if here there are no other options, so squash in terms

EQUATION: ( ? VAR:V:0;PROP ...)

RULE: append_properties

}

equation_form EQN_13 {

EQUATION: ( ? VAR:V:1;PROP ...)

RULE: append_properties_2

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

// This section lists the possible rules which may be fired. Each rule

// references a set of conditions which are in the following section

rule mill_off_round {

EQUATION: ( & ROUND_SHAPE_2 )

RESULT: MILL_OFF_ROUND

}

rule mill_off_wedge {

EQUATION: ( & WEDGE_SHAPE_2 )

RESULT: MILL_OFF_WEDGE

}

rule mill_out_block {

EQUATION: ( & BLOCK_SHAPE )

RESULT: MILL_OUT_BLOCK

}

rule translate_part {

EQUATION: ( + TRANSPORT_X TRANSPORT_Y TRANSPORT_Z )

RESULT: TRANSPORT

}

rule translate_second_part {

EQUATION: ( + TRANSPORT2_X TRANSPORT2_Y TRANSPORT2_Z )

RESULT: TRANSPORT2

}

EQUATION: ( & IS_LOGO )

}

rule fixture_part {

EQUATION: ( & PART_0_EXISTS )

RESULT: FIXTURE_PART

}

rule assemble_parts {

EQUATION: ( & PART_0_EXISTS PART_1_EXISTS )

RESULT: ASSEMBLE_PARTS

}

rule spring_roll {

EQUATION: ( & SPRING_SHAPE ( ~ SPRING_ENDS ) )

RESULT: MAKE_SPRING

}

rule spring_ends {

EQUATION: ( & SPRING_SHAPE L_SPRING_ENDS )

RESULT: SPRING_BEND_ENDS_L

}

rule before_drill_hole {

EQUATION: ( & CYLINDER_SHAPE DRILL_SIZE )

}

rule drill_hole {

EQUATION: ( & CYLINDER_SHAPE DRILL_SIZE )

RESULT: DRILL_HOLE

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

rule chamfer_drill {

EQUATION: ( & CONE_SHAPE DRILL_SIZE )

RESULT: DRILL_CHAMFER

}

rule cut_angled_chunk1 {

EQUATION: ( & WEDGE_SHAPE )

RESULT: CUT_ANGLED_SURFACE

}

rule cut_angled_chunk2 {

EQUATION: ( & WEDGE_SHAPE )

RESULT: CUT_ANGLED_SURFACE2

}

rule get_stock {

EQUATION: ( & BLOCK_SHAPE METAL )

RESULT: GET_BLOCK_STOCK

}

rule cut_bar_stock {

EQUATION: ( & BLOCK_SHAPE BLOCK_STOCK METAL )

RESULT: CUT_BLOCK_STOCK

}

rule cut_plastic_stock {

EQUATION: ( & BLOCK_SHAPE BLOCK_STOCK THERMO_PLASTIC )

RESULT: CUT_BLOCK_STOCK_PLASTIC

}

rule mill_off_block {

EQUATION: ( & BLOCK_AND_BLOCK )

RESULT: MILL_BLOCK_SHAPE

}

rule get_cut_block_stock {

EQUATION: ( & BLOCK_SHAPE METAL )

RESULT: CUT_BLOCK_STOCK

}

rule get_cut_plastic_stock {

EQUATION: ( & BLOCK_SHAPE THERMO_PLASTIC )

RESULT: CUT_BLOCK_STOCK_PLASTIC

}

rule get_cut_round_stock {

EQUATION: ( & CYLINDER_SHAPE METAL )

RESULT: CUT_ROUND_STOCK

}

rule get_WIP {

EQUATION: ( & COMPLEX_SHAPE )

RESULT: GET_WIP_STOCK

}

rule append_properties {

EQUATION: ( ~ SHAPE )

RESULT: APPEND_PROPERTIES_TO_SET

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

rule append_properties_2 {

EQUATION: ( ~ SHAPE2 )

RESULT: APPEND_PROPERTIES_TO_SET_2

}

//

// Basic conditions for reasoning in the plan

condition SHAPE {

COMPARE ( PROP0.form \$ )

}

condition SHAPE2 {

COMPARE ( PROP1.form \$ )

}

condition TRANSPORT_X {

COMPARE ( PROP0.translate_x \$ )

COMPARE ( PROP0.translate_x > 20 )

}

condition TRANSPORT_Y {

COMPARE ( PROP0.translate_y \$ )

COMPARE ( PROP0.translate_y > 20 )

}

condition TRANSPORT_Z {

COMPARE ( PROP0.translate_z \$ )

COMPARE ( PROP0.translate_z > 20 )

}

condition TRANSPORT2_X {

COMPARE ( PROP1.translate_x \$ )

COMPARE ( PROP1.translate_x > 20 )

}

condition TRANSPORT2_Y {

COMPARE ( PROP1.translate_y \$ )

COMPARE ( PROP1.translate_y > 20 )

}

condition TRANSPORT2_Z {

COMPARE ( PROP1.translate_z \$ )

COMPARE ( PROP1.translate_z > 20 )

}

condition IS_LOGO {

COMPARE ( PROP0.operation == emboss )

}

condition PART_0_EXISTS {

COMPARE ( V0.form \$ )

}

condition PART_1_EXISTS {

COMPARE ( V1.form \$ )

}

condition BLOCK_AND_BLOCK {

COMPARE ( V0.form == BLOCK )

COMPARE ( V1.form == BLOCK )

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

condition CYLINDER_SHAPE {

COMPARE ( V0.form == CYLINDER )

}

condition ROUND_SHAPE_2 {

COMPARE ( V1.form == CYLINDER )

}

condition WEDGE_SHAPE_2 {

COMPARE ( V1.form == WEDGE )

}

condition COMPLEX_SHAPE {

COMPARE ( V0.form == COMPLEX )

}

condition CONE_SHAPE {

COMPARE ( V0.form == CONE )

}

condition DRILL_SIZE {

MATH ( V0.ratio = V0.height / V0.radius )

ASSIGN ( V0.minimum = 0.5 )

COMPARE ( V0.ratio > V0.minimum )

COMPARE ( V0.ratio < 25 )

COMPARE ( V0.radius > 0.05 )

COMPARE ( V0.radius < 2.5 )

COMPARE ( V0.height > 0.1 )

COMPARE ( V0.height < 15.0 )

}

condition WEDGE_SHAPE {

COMPARE ( V0.form == WEDGE )

}

condition BLOCK_SHAPE {

COMPARE ( V0.form == BLOCK )

}

condition BLOCK_SHAPE_2 {

COMPARE ( V1.form == BLOCK )

}

condition BLOCK_STOCK {

COMPARE ( V1.form == BLOCK )

}

condition SPRING_SHAPE {

COMPARE ( V0.form == SPRING )

}

condition SPRING_ENDS {

COMPARE ( V0.ends \$ )

}

condition L_SPRING_ENDS {

COMPARE ( V0.ends == L )

}

condition COCENTRIC {

FIND ( V0.axis = ROTATIONAL_AXIS V0 )

FIND ( V1.axis = ROTATIONAL_AXIS V1 )

COMPARE ( V0.axis == V1.axis )

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

condition THERMO_PLASTIC {

FIND ( V0.material_class = MATERIAL_CLASS V0.material )

COMPARE ( V0.material_class == THERMO_PLASTIC )

}

condition METAL {

FIND ( V0.material_class = MATERIAL_CLASS V0.material )

COMPARE ( V0.material_class == METAL )

}

//

// Various Results to build the plan, and alter the equation.

//

COPY_SET ( V0 COMBINED_SET )

COPY_SET ( PEEP COMBINED_SET )

EQUATION_INSERT_SYMBOL ( :0 COMBINED_SET )

FIND ( COMBINED_SET name SET_NAME V0 )

EQUATION_DELETE_SYMBOL ( :1 )

}

result APPEND_PROPERTIES_TO_SET {

COPY_SET ( V0 COMBINED_SET )

APPEND_SET ( PROP0 COMBINED_SET )

EQUATION_INSERT_SYMBOL ( :0 COMBINED_SET )

FIND ( COMBINED_SET name SET_NAME V0 )

EQUATION_DELETE_SYMBOL ( :1 )

}

result APPEND_PROPERTIES_TO_SET_2 {

COPY_SET ( V1 COMBINED_SET )

APPEND_SET ( PROP1 COMBINED_SET )

EQUATION_INSERT_SYMBOL ( :1 COMBINED_SET )

FIND ( COMBINED_SET name SET_NAME V1 )

EQUATION_DELETE_SYMBOL ( :2 )

}

result DRILL_HOLE {

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 : ‘

DRILL_HOLE.name ‘ ) ‘ )

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 ‘ ) ‘ )

// A costing section is added here for a trial run

### The General Rule File Developed for Discrete Manufacturing (cont’d)

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 )

}

result DRILL_CHAMFER {

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 ‘ ) ‘ )

}

result CUT_ANGLED_SURFACE {

EQUATION_DELETE_TERM ( :0 )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( mill surface at angle ) ‘ )

}

result CUT_ANGLED_SURFACE2 {

EQUATION_DELETE_SYMBOL ( :0: )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( mill surface at angle ) ‘ )

}

result GET_BLOCK_STOCK {

EQUATION_DELETE_VARIABLE_TERM ( REF )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( get block from stock room ) ‘ )

}

result MAKE_SPRING {

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

‘ ) ‘ )

EQUATION_DELETE_SYMBOL ( :0 )

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

result SPRING_BEND_ENDS_L {

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: )

}

result MILL_BLOCK_SHAPE {

EQUATION_DELETE_TERM ( :1 )

COPY_SET ( V1 MILL_OUT_BLOCK )

COPY_SET ( V0 BASE_BLOCK )

FIND ( MILL_OUT_BLOCK name SET_NAME V1 )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( mill out block shape : ‘

MILL_OUT_BLOCK.name ‘ ) ‘ )

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 ‘ ) ‘ )

}

result CUT_BLOCK_STOCK {

COPY_SET ( V0 BLOCK_STOCK )

EQUATION_DELETE_TERM ( :0 )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( cut a block from stock with band

saw ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( width = ‘ BLOCK_STOCK.width

‘ ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( depth = ‘ BLOCK_STOCK.depth

‘ ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( height = ‘ BLOCK_STOCK.height

‘ ) ‘ )

// Calculate Cost

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

matl_cost )

### The General Rule File Developed for Discrete Manufacturing (cont’d)

PROPERTY_FUNCTION_NUMBER ( BLOCK_STOCK cost + 0.50 )

DECLARE_COST ( BLOCK_STOCK cost )

}

result CUT_BLOCK_STOCK_PLASTIC {

COPY_SET ( V0 BLOCK_STOCK )

EQUATION_DELETE_TERM ( :0 )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( cut a block from stock with hot

wire ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( width = ‘ BLOCK_STOCK.width

‘ ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( depth = ‘ BLOCK_STOCK.depth

‘ ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( height = ‘ BLOCK_STOCK.height

‘ ) ‘ )

// Calculate Cost

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

matl_cost )

PROPERTY_FUNCTION_NUMBER ( BLOCK_STOCK cost + 0.30 )

DECLARE_COST ( BLOCK_STOCK cost )

}

result CUT_ROUND_STOCK {

COPY_SET ( V0 ROUND_STOCK )

EQUATION_DELETE_TERM ( :0 )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( cut round stock ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( length = ‘ ROUND_STOCK.length

‘ ) ‘ )

‘ ) ‘ )

}

result GET_WIP_STOCK {

COPY_SET ( V0 WIP_STOCK )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( get WIP from inventory ) ‘ )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( name = ‘ WIP_STOCK.description

‘ ) ‘ )

EQUATION_DELETE_TERM ( :0 )

}

result FIXTURE_PART {

EQUATION_DELETE_TERM ( :0 )

COPY_SET ( V0 FIXTURED_PART )

FIND ( FIXTURED_PART name SET_NAME V0 )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( fixture part : ‘

FIXTURED_PART.name ‘ ) ‘ )

DELETE_PROPERTY ( FIXTURED_PART name )

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

result ASSEMBLE_PARTS {

EQUATION_DELETE_TERM ( :1 )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( add part to fixtured part ) ‘ )

COPY_SET ( V1 PART )

FIND ( PART name SET_NAME V1 )

FIND ( PART name2 SET_NAME V0 )

PLAN_PUSH_FORMAT ( ‘ DESCRIPTION ( add ‘ PART.name ‘ to ‘

PART.name2 ‘ ) ‘ )

DELETE_PROPERTY ( PART name )

DELETE_PROPERTY ( PART name2 )

}

COPY_SET ( V0 LOGO_PART )

APPEND_SET ( PROP0 LOGO_PART )

EQUATION_INSERT_SYMBOL ( :0 LOGO_PART )

DELETE_PROPERTY ( LOGO_PART operation )

EQUATION_DELETE_SYMBOL ( :1 )

PLAN_PUSH_TEXT ( ‘ DESCRIPTION ( Add Logo to part ) ‘ )

}

result TRANSPORT {

COPY_SET ( V0 MOVED_PART )

APPEND_SET ( PROP0 MOVED_PART )

EQUATION_INSERT_SYMBOL ( :0 MOVED_PART )

EQUATION_DELETE_SYMBOL ( :1 )

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 )

}

result TRANSPORT2 {

COPY_SET ( V1 MOVED_PART )

APPEND_SET ( PROP1 MOVED_PART )

EQUATION_INSERT_SYMBOL ( :1 MOVED_PART )

EQUATION_DELETE_SYMBOL ( :2 )

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 )

}

result MILL_OUT_BLOCK {

COPY_SET ( V0 MILLED_CHUNK )

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

### The General Rule File Developed for Discrete Manufacturing (cont’d)

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 )

}

result MILL_OFF_ROUND {

COPY_SET ( V1 MILLED_ROUND )

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

MILLED_ROUND.height ‘ ) ‘ )

EQUATION_DELETE_SYMBOL ( :1 )

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 )

}

result MILL_OFF_WEDGE {

COPY_SET ( V1 MILLED_WEDGE )

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 ‘ ) ‘ )

EQUATION_DELETE_SYMBOL ( :1 )

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 )

DECLARE_COST ( MILLED_WEDGE cost )

}

### The General Rule File Developed for Discrete Manufacturing (cont’d)

When this rule file is applied to the part we obtain an enlarged design file, as shown below.

main Rod_Support {

EQUATION: ( & Stock ( ~ Rod_Hole ) ( ~ Mount_Feature;Mount_Hole_1

) ( ~ Mount_Feature;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~

Bottom_Channel ) Top_Round )

}

Stock {

material = brass

form = BLOCK

width = 11.3

depth = 3.2

height = 6.4

}

Rod_Hole {

form = CYLINDER

height = 11.3

rotate_y = -90

translate_x = 1.4

}

Mount_Feature {

EQUATION: ( + Mount_Hole Mount_Gouge )

}

Mount_Gouge {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

}

Mount_Hole {

form = CYLINDER

height = 6.5

}

Mount_Hole_1 {

translate_x = -4.35

}

Mount_Hole_2 {

translate_x = 4.35

}

Top_Channel {

form = BLOCK

width = 2.5

depth = 3.4

height = 4.0

translate_z = 1.8

}

Figure 1.1 The Plan File for the Rod Support Mount

Bottom_Channel {

form = BLOCK

width = 3.5

depth = 3.4

height = 1.8

translate_z = -2.4

}

Top_Round {

form = CYLINDER

height = 12.0

translate_x = 0.2

rotate_y = 90

}

1:Rod_Support {

EQUATION: ( ~ Rod_Hole )

}

2:Rod_Support {

EQUATION: ( ~ Mount_Feature;Mount_Hole_1 )

}

3:Rod_Support {

EQUATION: ( ~ Mount_Feature;Mount_Hole_2 )

}

4:Rod_Support {

EQUATION: ( ~ Top_Channel )

}

5:Rod_Support {

EQUATION: ( ~ Bottom_Channel )

}

MAIN_BOM {

FEATURE ( 1.000000 Rod_Support Rod_Support_OP1 Rod_Support_PART )

}

_GLOBAL {

plan_count = 20

}

Rod_Support_OP1 {

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

drill_hole )

OPERATION ( AND RULE 3:0:0 9183.336250 Rod_Support_OP3

drill_hole )

ACTIVE: 0

EXPANDED ( 1 4 1 0 )

}

Rod_Support_OP2 {

DESCRIPTION ( drill hole : Rod_Hole )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 0.565000 0.5 1.0 )

### The Plan File for the Rod Support Mount (cont’d)

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

append_properties )

OPERATION ( AND RULE 5:0:0 0.000000 Rod_Support_OP5

append_properties )

ACTIVE: 0

EXPANDED ( 1 15 2 0 )

}

DRILL_HOLE_3 {

a1 = 0.5

a2 = 1.0

height = 0.565000

cost = 9183.336250

}

Rod_Support_OP3 {

DESCRIPTION ( drill hole : Rod_Hole )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

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

) Top_Round )

}

DRILL_HOLE_4 {

a1 = 0.5

a2 = 1.0

height = 0.565000

cost = 9183.336250

}

Rod_Support_OP4 {

EQUATION: ( & Stock ( ~ COMBINED_SET_5 ) ( ~

Mount_Gouge;Mount_Hole_1 ) ( ~ Mount_Hole;Mount_Hole_2 ) ( ~

Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~ Bottom_Channel

) Top_Round )

OPERATION ( AND RULE 6:0:0 4469.893750 Rod_Support_OP6

drill_hole )

OPERATION ( AND RULE 7:0:0 0.000000 Rod_Support_OP7

append_properties )

ACTIVE: 1

EXPANDED ( 0 15 1 0 )

}

COMBINED_SET_5 {

form = CYLINDER

height = 6.5

translate_x = -4.35

translate_x = -4.35

name = Mount_Hole;Mount_Hole_1

}

### The Plan File for the Rod Support Mount (cont’d)

Rod_Support_OP5 {

EQUATION: ( & Stock ( ~ Mount_Hole;Mount_Hole_1 ) ( ~

COMBINED_SET_6 ) ( ~ Mount_Hole;Mount_Hole_2 ) ( ~

Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~ Bottom_Channel

) Top_Round )

}

COMBINED_SET_6 {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

translate_x = -4.35

translate_x = -4.35

name = Mount_Gouge;Mount_Hole_1

}

Rod_Support_OP6 {

DESCRIPTION ( drill hole : COMBINED_SET_5 )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

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 )

}

DRILL_HOLE_7 {

a1 = 0.5

a2 = 1.0

height = 0.325000

cost = 4469.893750

}

Rod_Support_OP7 {

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

drill_hole )

OPERATION ( AND RULE 9:0:0 0.000000 Rod_Support_OP9

append_properties )

ACTIVE: 1

EXPANDED ( 0 15 1 0 )

}

COMBINED_SET_8 {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

translate_x = -4.35

translate_x = -4.35

name = Mount_Gouge;Mount_Hole_1

}

### The Plan File for the Rod Support Mount (cont’d)

Rod_Support_OP8 {

DESCRIPTION ( drill hole : COMBINED_SET_5 )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

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 )

}

DRILL_HOLE_9 {

a1 = 0.5

a2 = 1.0

height = 0.325000

cost = 4469.893750

}

Rod_Support_OP9 {

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

drill_hole )

OPERATION ( AND RULE 11:0:0 0.000000 Rod_Support_OP11

append_properties )

ACTIVE: 1

EXPANDED ( 0 15 1 0 )

}

COMBINED_SET_10 {

form = CYLINDER

height = 6.5

translate_x = 4.35

translate_x = 4.35

name = Mount_Hole;Mount_Hole_2

}

Rod_Support_OP10 {

DESCRIPTION ( drill hole : COMBINED_SET_5 )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 0.325000 0.5 1.0 )

EQUATION: ( & Stock ( ~ COMBINED_SET_8 ) ( ~ COMBINED_SET_10 ) (

~ Mount_Gouge;Mount_Hole_2 ) ( ~ Top_Channel ) ( ~

Bottom_Channel ) Top_Round )

}

DRILL_HOLE_11 {

a1 = 0.5

a2 = 1.0

height = 0.325000

cost = 4469.893750

}

### The Plan File for the Rod Support Mount (cont’d)

Rod_Support_OP11 {

EQUATION: ( & Stock ( ~ COMBINED_SET_5 ) ( ~ COMBINED_SET_8 ) ( ~

COMBINED_SET_10 ) ( ~ COMBINED_SET_12 ) ( ~ Top_Channel ) ( ~

Bottom_Channel ) Top_Round )

OPERATION ( AND RULE 12:0:0 4469.893750 Rod_Support_OP12

drill_hole )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

COMBINED_SET_12 {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

translate_x = 4.35

translate_x = 4.35

name = Mount_Gouge;Mount_Hole_2

}

Rod_Support_OP12 {

DESCRIPTION ( drill hole : COMBINED_SET_5 )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 0.325000 0.5 1.0 )

EQUATION: ( & Stock ( ~ COMBINED_SET_8 ) ( ~ COMBINED_SET_10 ) (

~ COMBINED_SET_12 ) ( ~ Top_Channel ) ( ~ Bottom_Channel )

Top_Round )

OPERATION ( AND RULE 13:0:0 70734.394000 Rod_Support_OP13

mill_out_block )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

DRILL_HOLE_13 {

a1 = 0.5

a2 = 1.0

height = 0.325000

cost = 4469.893750

}

Rod_Support_OP13 {

DESCRIPTION ( Mill Out Block Shape )

CUTTING ( FEATURE Blind Pocket )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 2.6 3.4 6.4 )

EQUATION: ( & Stock ( ~ COMBINED_SET_10 ) ( ~ COMBINED_SET_12 ) (

~ Top_Channel ) ( ~ Bottom_Channel ) Top_Round )

OPERATION ( AND RULE 14:0:0 4469.893750 Rod_Support_OP14

drill_hole )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

### The Plan File for the Rod Support Mount (cont’d)

MILLED_CHUNK_14 {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

translate_x = -4.35

translate_x = -4.35

name = Mount_Gouge;Mount_Hole_1

cost = 70734.394000

}

Rod_Support_OP14 {

DESCRIPTION ( drill hole : COMBINED_SET_10 )

CUTTING ( FEATURE single diameter hole )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 0.325000 0.5 1.0 )

EQUATION: ( & Stock ( ~ COMBINED_SET_12 ) ( ~ Top_Channel ) ( ~

Bottom_Channel ) Top_Round )

OPERATION ( AND RULE 15:0:0 70734.394000 Rod_Support_OP15

mill_out_block )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

DRILL_HOLE_15 {

a1 = 0.5

a2 = 1.0

height = 0.325000

cost = 4469.893750

}

Rod_Support_OP15 {

DESCRIPTION ( Mill Out Block Shape )

CUTTING ( FEATURE Blind Pocket )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 2.6 3.4 6.4 )

EQUATION: ( & Stock ( ~ Top_Channel ) ( ~ Bottom_Channel )

Top_Round )

OPERATION ( AND RULE 16:0:0 42508.750000 Rod_Support_OP16

mill_out_block )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

MILLED_CHUNK_16 {

form = BLOCK

width = 2.6

depth = 3.4

height = 6.4

translate_z = 1.3

translate_x = 4.35

translate_x = 4.35

### The Plan File for the Rod Support Mount (cont’d)

name = Mount_Gouge;Mount_Hole_2

cost = 70734.394000

}

Rod_Support_OP16 {

DESCRIPTION ( Mill Out Block Shape )

CUTTING ( FEATURE Blind Pocket )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

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

mill_out_block )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

MILLED_CHUNK_17 {

form = BLOCK

width = 2.5

depth = 3.4

height = 4.0

translate_z = 1.8

cost = 42508.750000

}

Rod_Support_OP17 {

DESCRIPTION ( Mill Out Block Shape )

CUTTING ( FEATURE Blind Pocket )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 3.5 3.4 1.8 )

EQUATION: ( & Stock Top_Round )

OPERATION ( AND RULE 18:0:0 0.250000 Rod_Support_OP18

mill_off_round )

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

MILLED_CHUNK_18 {

form = BLOCK

width = 3.5

depth = 3.4

height = 1.8

translate_z = -2.4

cost = 26780.605000

}

Rod_Support_OP18 {

DESCRIPTION ( Mill Off Round Shape )

CUTTING ( FEATURE External Round )

CUTTING ( MACHINE qa1000 )

CUTTING ( MATERIAL t-7075 )

CUTTING ( PARAMETERS 3.4 12.0 )

EQUATION: ( & Stock )

OPERATION ( AND RULE 19:0:0 34714.100000 Rod_Support_OP19

get_cut_block_stock )

### The Plan File for the Rod Support Mount (cont’d)

ACTIVE: 0

EXPANDED ( 2 0 0 0 )

}

MILLED_ROUND_19 {

form = CYLINDER

height = 12.0

translate_x = 0.2

rotate_y = 90

cost = 0.250000

}

Rod_Support_OP19 {

DESCRIPTION ( cut a block from stock with band saw )

DESCRIPTION ( width = 11.3 )

DESCRIPTION ( depth = 3.2 )

DESCRIPTION ( height = 6.4 )

EQUATION: NULL

}

BLOCK_STOCK_20 {

material = brass

form = BLOCK

width = 11.3

depth = 3.2

height = 6.4

cost = 34714.100000

matl_cost = 150.000000

}

Rod_Support_PART {

form = COMPLEX

description = Rod_Support

equation = ( & Stock ( ~ Rod_Hole ) ( ~ ( + Mount_Hole

Mount_Gouge );Mount_Hole_1 ) ( ~ ( + Mount_Hole Mount_Gouge

);Mount_Hole_2 ) ( ~ Top_Channel ) ( ~ Bottom_Channel )

Top_Round )

}

### The Plan File for the Rod Support Mount (cont’d)

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 ------------

Product: Rod_Support

OPERATION SUMMARY_SHEET: Rod_Support_PART - Quantity 1.000000

OP# Operation Description

------------------------------------------

0 cut a block from stock with band saw

width = 11.3

depth = 3.2

height = 6.4

10 Mill Off Round Shape

20 Mill Out Block Shape

30 Mill Out Block Shape

40 Mill Out Block Shape

50 drill hole : COMBINED_SET_10

60 Mill Out Block Shape

70 drill hole : COMBINED_SET_5

120 drill hole : Rod_Hole

Figure 1.1 An Operation Plan for the Rod Support Mount

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.