Predefined Node Attributes
The node attributes listed below are used by the starting point cost models.
2SetupMilling
This attribute is used by the Machining cost model to indicate that the selected node should count as two machining operations with independent setup directions, for example, Side Milling/Side Milling or Side Milling/Facing.
aggregationOperation
The Manufacturing Process tree in aPriori Desktop displays the children of a given operation if and only if the given operation has the node attribute aggregationOperation.
For example, in the starting point Machining cost model, the Surface Finishing operation for a Ring GCD has a child operation for each child surface of the ring (such as Facing for a planar face that is part of the ring). Surface Finishing has the aggregationOperation attribute, so its child operations (such as Facing on a child planar face) are included in the Manufacturing Process tree.
The attribute only needs to be present on the operation’s node—it does not need to have a value.
allowNumOccurrencesOverride
[[Define this attribute and set it to false to hide the Number of Occurrences context menu item.]]
assignOpsWithActivePrimaryAxesFirst
A process’s child operations are considered for assignment in pass 1 if and only if the process has the value true for the node attribute assignOpsWithActivePrimaryAxesFirst.
For information on operation-assignment passes, see Operation Assignment in this Guide and Operation Assignment for Machining in the Machining chapter of the aPriori User Guide.
checkForRollingInRouting
Starting point cost models use this attribute to indicate a roll bending process. In the Bar&Tube Fab cost model, the rolling processes (3, 4, and 5 Roll Bending) each have this attribute. This is used by various processes for feasibility checks and machine selection.
For example, the process Sheet Laser Cut cannot be performed after roll bending (it can only be performed on un-rolled sheet stock). The feasibility module for Sheet Laser Cut contains the following check:
 
Rule IncompatibleTubeStock: _
not(isNodePrecededBy(op, 'checkForRollingInRouting')) and _
not (stock.stockForm == 'Round Tube' or stock.stockForm == 'ROUND_TUBE')
 
Message IncompatibleTubeStock: _
'Laser Cut is not a typical process for round tube'
Another module that uses this attribute is machine selection for the Tube Laser process. It performs a check on either part diameter (if the stock is round or rolled) or part height (otherwise):
 
Rule MaxStockDiameterCheck: m.maxStockDiameter >= stockSize
 
stockSize = _
{ part.crossSection.outsideDiameter if _
(stock.stockForm == 'ROUND_BAR' or stock.stockForm == 'ROUND_TUBE' or _
stock.stockForm == 'Round Bar' or stock.stockForm == 'Round Tube' or _
hasNodeInTree(op,'checkForRollingInRouting'))
( max(part.crossSection.height,part.crossSection.width) ) otherwise }
The attribute only needs to be present on the operation’s node—it does not need to have a value.
contourCuttingProcess
The starting point Sheet Metal cost models sometimes use this attribute as an alternative to the predefined CSL function simpleName. The value of the attribute is the process name. Here is an example:
 
maxThicknessCutRate = {
maxPlasmaPunchThicknessCuttingRate if _
getAttributeValue(op, 'contourCuttingProcess') == 'PlasmaPunch' or _
getAttributeValue(op, 'contourCuttingProcess') == 'LaserPunch' _
maxWaterjetThicknessCuttingRate if _
getAttributeValue(op, 'contourCuttingProcess') == 'WaterjetCut' _
maxThicknessCuttingRate otherwise }
coring
This attribute is defined on nodes for RingedHole coremaking in the Casting cost model.
costModeClass
This node attribute is used by the Plastic Molding starting point cost model to specify that the Java class com.fbc.businessmodel.costing.CavityCostModeIM should be used to optimize the number of mold cavities when the user selects optimize mode for the PSO numberOfCavities.
For any cost model, aPriori uses this class to calculate the number of cavities if both the following hold:
A branch node of the current process routing defines this attribute and sets its value to com.fbc.businessmodel.costing.CavityCostModeIM.
Some process in the current routing defines a PSO numberOfCavities and the user has selected the mode optimize.
In this case, aPriori considers each row of the global lookup table layoutNumCav. It performs costing using the cavity layout specified by each table row in turn, setting the PSO (setup.numberOfCavities) to the number of cavities specified by the layout. aPriori treats each such costing as if it were for a distinct process-level routing, and selects the one with the lowest cost.
If you create a custom cost model with this attribute, note the following:
The attribute must be defined on a branch node of the Component template.
During consideration of each row of the lookup table, the PSO mode is set to user (this is visible from the debugger at a break point).
aPriori sets optimizeCostNumCavities to the optimal number of cavities. For the PSO numberOfCavities, you should define optimize mode with type FORMULA and formula optimizeCostNumCavities, so that the Process Options Editor UI reports the optimal number of cavities.
costPerimetersFirst
If this attribute is defined on a node and set to true, the cost engine evaluates the assignment of Perimeter GCDs in Pass 1 before any other GCDs are costed.
Starting point cost models use this to disable Machining operations on Planar Face and Curved Wall GCDs when they lie on a Perimeter GCD that has been assigned to Waterjet Cutting. This is governed by the status of a perRouting cache set in ofrPerimeterWaterjetCutting.csl, which must be evaluated before any other Machining operations are assigned in Pass 1. 
disableRingedHoleGeneration
If this attribute is defined on a node in a Machining routing, RingedHoles are not created.
displayOperationCategories
This attribute associates a cycle time subtotal class with a node. The cycle times for all nodes with a given class are aggregated together to form a displayed subtotal of total cycle time.
displayInSPDialog
A process node is available in the Cost Guide as a Secondary Process only if this attribute is defined and set to true for the node.
finishGrinding
This attribute is used by the Machining cost model to identify node that is either Finish Grinding, Net Shape Machining, ASSY Wall Finishing, Finish Grinding, Finishing, or Hole Grinding. It is used for finish machining rules.
generateRingedHoles
If this attribute is defined on a top-level branch node of the Component template and is set to true, geometry extraction creates RingedHole GCDs when appropriate.  If the attribute is set to false, extraction does not create RingedHole GCDs.
generatorName
Some cost models use this attribute to specify a Java class that the cost engine uses to generate instances of a special operation, such as Setup (for Machining) or Die Station (for Progressive Die). See Working with Zero-or-More Nodes for more information.
hasPiercing
Not currently used.
hasPiloting
Not currently used.
hasPilotingOp
Not currently used.
hasSetupAxisKey
The Machining cost model defines this attribute on nodes that support setup axes and setup axis keys.
ignoreUpperGtolBound
This node attribute has been deprecated.
inFoundryProcess
Starting point Casting cost models use this attribute to identify processes for which scrapped parts can be re-melted and reused instead of counting towards scrap parts for the purposes of calculating Final Yield.
isBarFeedLathe
Starting point cost models use this attribute to identify bar eed lathe processes in Machining:
2 Axis Bar Feed Lathe with Sub Spindle
3 Axis Bar Feed Lathe with Sub Spindle
This attribute is used interchangeably with requiresSingleFaceStockTrim.
Routings using a bar feed lathe should always choose a parting operation for face rings that are children of stock trim gcds.
Here is some sample CSL that uses this attribute:
Rule BarFeedLatheOnly: not(isTrue(isBarFeedLatheOnly))
Message BarFeedLatheOnly: 'Roughing/Finishing is not applicable for face rings when the routing includes a bar feed lathe process'
 
isBarFeedLatheOnly = { _
true if hasNodeInTreeWithTrueValue( op, 'isBarFeedLathe' )_
and gcd.approachFromName == 'FACE_B'_
and gcd.parentArtifact.artifactTypeName == 'StockTrim'
false otherwise}
isGreenSand
The Casting cost model defines this attribute on a node for a process that creates the green sand mold in Sand Casting.
isPerimeterCut
The Machining cost model defines this attribute on the branch node Perimeter Cutting. The cost model uses this to determine whether a Perimeter Cutting process is in the current routing.
isPerimeterStampingProcess
The Sheet Metal cost model defines this attribute on process nodes that can perform perimeter stamping (such as Progressive Die, Transfer Die, Stage Tooling, Tandem Die, and Turret Press). It is used to determine whether a Blanking operation is needed.
isPlasmaCutting
The Sheet Metal cost model defines this attribute on the Plasma Cut node. It is used to determine whether a kerf width needs to be applied when calculating minimum stock size in Stock Machining.
isWaterjetCutting
The Sheet Metal cost models defines this attribute on the Waterjet Cut node. It is used to determine whether a kerf width needs to be applied when calculating minimum stock size in Stock Machining.
isRoughing
Starting point cost models sometimes use this attribute to identify an operation that performs rough volume removal. If this attribute is set to ‘true’, no tolerance-related compensation factor is applied to feed rate or cycle time for roughing operations, since desired tolerance is achieved by a subsequent finishing operation.
See also operationCategory.
Here is an example of its use:
 
isRoughingOpOnly = {true if getAttributeValue(op, 'isRoughing') == 'true'_
or getAttributeValue(op, 'operationCategory') == 'Roughing'
false otherwise}
 
MachiningNode
This attribute is defined on the node named “Machining".
mcdType
Some special cost drivers (MCDs) are recognized during costing subsequent to geometry extraction. These are shown in the Geometric Cost Drivers pane, but only after costing. The MCDs recognized for a given routing are governed by the value of this attribute for the first node (going left to right) that defines the attribute.
Following are the supported attribute values:
Stock Machining
Assembly
Turning
Plastic Molding
Stage Tooling
Each value is associated with one or more MCDs. Stock machining, for example, is associated with the MCD Ringed Hole, as is Turning (but see generateRingedHoles). Plastic Molding is associated with MCDs for slide and lifter bundles. 
operationCategory
Starting point cost models use this attribute to identify operations in three categories:
Roughing
Finishing
Holemaking
The attribute is used to aggregate the operation types for display in custom process outputs in Machining. Here is an example of its use:
 
ba_totalRoughingOperations3 = _
select sum(op.formulaResults.cycleTime) from allSetupOps op where _
op.formulaResults.cycleTime != null _
and getAttributeValue( op, 'operationCategory' ) == 'Roughing'
This attribute is also sometimes used to ensure that no tolerance-related compensation factor is applied to feed rate or cycle time for roughing operations, since desired tolerance is achieved by a subsequent finishing operation. See also isRoughing.
otherSecondaryProcesses
The cost model for Other Secondary Processes defines this attribute on the Packaging node. It is used to determine whether Other Secondary Processes is included in the UGC Sheet Metal routing.  If it is in the routing, Part Length, Part Width, and Part Height are required user inputs.
PartiallyObstructedFaceMilling
The Machining cost model allows an obstructed setup to be used for an operation whose node defines this attribute.
perimeterCutting
Used to determine the appropriate feed rate for perimeter cutting processes (such as Plasma Cut and Waterjet Cut).
Plasma Cutting
The Sheet Metal cost model defines this attribute on the on the Plasma Cutting node of the Perimeter GCD in the Plasma Cut process. This is used by Stock Machining to determine whether the plasma cutting process is in the current routing.
PreviouslyCountersunk
Cost models define this attribute on nodes that are able to perform countersinking without any additional machining operations.
PreviouslyThreaded
Cost models define this attribute on nodes that are able to perform threading without any additional machining operations.
primaryGtolOp
Cost models define this attribute on default processes and default operations for creating finished holes or surfaces.
primaryHolemakingOp
Cost models use this attribute to help determine whether a hole finishing operation (such as reaming or boring) is required for a given GCD. This attribute is defined on each primary (that is, non-finishing) holemaking operation in Bar&Tube, Casting, Forging, Machining, Powder Metal, and Sheet Metal.
When aPirori considers whether to include a given hole finishing operation in the current operation sequence, it checks each upstream operation with this attribute, to see if one is capable of achieving the required tolerance for the current GCD. If one can, the finishing operation is not included.
When aPriori calculates cycle time for a primary holemaking operation, if a finishing operation is included in the operation sequence for the current GCD, no tolerance-related compensation is applied, since the extra time to achieve the required tolerance is incurred by the finishing operation. If there is no finishing operation, tolerance-related compensation is applied to the calculation of cycle time for the primary holemaking operation.
requiresRotationalAxes
Starting point Machining cost models use this attribute to identify some processes that use rotational setup axes (4 and 5-Axis Mill).
requiresSingleFaceStockTrim
The starting point Machining cost models define this attribute on the following processes:
2 Axis Bar Feed Lathe with Sub Spindle
3 Axis Bar Feed Lathe with Sub Spindle
When this attribute is defined for a node, a custom stockTrim cost driver is created with only two rings: one FACE ring and one OD ring. For the part in the figure below, aPriori generates either Ring:1 or Ring:2 (but not both) along with Ring:3.
The attribute is also used in Stock Machining to determine material stock length. Face stock length allowance only needs to be accounted for on one face instead of two:
 
minStockLength = {part.minStockLength _
+ faceStockLengthAllowance if isBarFeedLatheInRouting _
part.minStockLength + 2 * faceStockLengthAllowance otherwise}
 
defaultStockLengthAllowance = { partingRingWidth if isBarFeedLatheInRouting
defaultStockAllowance otherwise }
 
isBarFeedLatheInRouting = _
hasNodeInTreeWithTrueValue(op, 'requiresSingleFaceStockTrim') 
runFourthCostingPass
Process or branch nodes that define this attribute and set its value to true are evaluated in the fourth operation-assignment pass. For information on operation-assignment passes, see Operation Assignment in this Guide and Operation Assignment for Machining in the Machining chapter of the aPriori User Guide.
selectMachineAfterOpAssignment
For a process node that defines this attribute and sets it to a non-null value, the cost engine evaluates the machine selection module during the yield pass (prior to the first evaluation of the process taxonomy module, but after operation assignment).  In this case, childOps and allOps are in scope within the machine selection CSL, so that machine selection can take into account which operations (or in the case of Progressive Die, for example, how many die stations) are assigned.
SimpleHoleFinishing
The Machining cost model defines this attribute on the node called "Finish Machining".
sortGcdsByFinishArea
This attribute affects operation assignment for a process node or branch node that defines this attribute and sets its value to true. For such a node, operation assignment in passes 3 and 4 considers surfaces in order of descending size of the property areaFinished
For information on operation-assignment passes, see Operation Assignment in this Guide and Operation Assignment for Machining in the Machining chapter of the aPriori User Guide.
stockPrep
Stock Machining and Machining starting point cost models use the presence or absence of this attribute to determine if the current routing should include a separate or an integrated Stock Prep process.
 Here is an example of its use:
 
Rule CreateSeparateStockPrepProcess: _
not(isTrue(plant.createSeparateStockPrepProcess)) and _
not(hasStockPrepNodeIncluded)
Message CreateSeparateStockPrepProcess: _
'plant.createSeparateStockPrepProcess set to create separate stock prep processes or stock prep process manually selected'
stockPrepNode = getNodeInTree(op, 'stockPrep')
hasStockPrepNodeIncluded = { true if ( stockPrepNode!=null and _
stockPrepNode.inclusionStatus==InclusionStatus.USER_INCLUDE )
false otherwise } 
supportsStripNesting
Starting point Sheet Metal cost models define this attribute and set it to true for processes that support strip nesting. This attribute affects whether strip nesting occurs only if the current utilization mode is True-Part Shape Nesting. Other utilization modes are unaffected by the value of this attribute.  
supportsTruePartNesting
Starting point Sheet Metal cost models define this attribute and set it to true for processes that support true part-shape nesting. Setting this attribute to false for such a process has the following effects on routings that include that process:
The material utilization mode defaults to rectangular nesting.
The true part-shape nesting option is omitted from the Material Utilization section of the Material Selection dialog.
threading
Cost models define this attribute on the node called "threading".
toolMaterialKey
In the Casting starting point cost model, the following processes set this attribute to either moldingMaterial or patternMatieral:
Die Casting
Horizontal Automatic
Manual Floor Moldmaking
Manual Std Moldmaking
Vertical Automatic
useAdvancedUtilization
Setting this attribute to true causes the cost engine to use special internal procedures to evaluate the formulas utilization and numPartsPerSheet. Any CSL for these formulas is ignored.
Sheet Metal starting point cost models use this attribute for processes that support special non-CSL part-nesting analysis (which includes true part-shape nesting as well as other nesting modes). If the attribute is not defined, or is set to false, the CSL is used to evaluate these formulas.
In some nesting modes, the UI shows a nesting diagram for processes that set this attribute to true.
userNamedProcess
Every process group includes a process, User-Defined Process, which defines this attribute. When a new process group is created, such a process is added automatically. 
useSheetStock
The Bar&Tube Fab starting point cost models set this attribute to true to designate a utilization node (see utilizationProcess below) whose stock should be selected from sheet stock (rather than bar & tube stock). For the utilization node of roll bending routings, the cost model defines this attribute and sets it to true. This is used internally by aPriori to guide stock selection. All stock sizes are determined to be virtual stock. Custom cut mode is not valid for sheet stock. 
utilizationProcess
This attribute is used to designate a stock selector and materials utilization nodes. In a given routing, aPriori evaluates the material stock selection module for (and only for) the designated stock selector node. In addition, aPriori evaluates utilization for (and only for) the designated utilization node of a given routing.
The simplest way for a routing to designate the stock selector node is by the presence of the node attribute utilizationProcess, where the attribute has no value. If there is more than one node with this attribute (and they are all valueless), the cost engine treats the right-most active one as the stock selector node.
A routing can also designate the stock selector node by specifying the node’s name as the value of utilizationProcess for some other node in the routing. If there is more than one node with a value for this attribute, the left-most one specifies the name of the stock selector node.
For example, for the sheet metal process group, if a routing includes the branch node Prog Die, which has a node attribute utilizationProcess whose value is Progressive Die, the cost engine evaluates the stock selection module associated with Progressive Die (assuming no other node has a value for utilizationProcess).
If the stock selection module establishes a collection of stocks as the value for the CSL output validMaterialStocks, the cost engine considers each stock in the collection.
If the stock selection module does not establish a non-null value for the CSL output validMaterialStocks, the cost engine considers only one, virtual stock, specified as follows:
For the Machining process group, virtual stock dimensions are determined by the values of other CSL outputs for the stock selection module, the dimensions of the current part, and plant variables, as follows:
o Length:
- CSL output virtualStockLength, if non-null.
- Otherwise, the larger of the current part’s minStockLength and the value of the plant variable standardStockLength, if the plant variable is defined.
- Otherwise, the larger of the current part’s minStockLength and 20 feet.
o Width:
- CSL output virtualStockWidth, if non-null.
- Otherwise, the width of the current part’s cross-section.
o Height:
- CSL output virtualStockHeight, if non-null.
- Otherwise, the height of the current part’s cross-section.
o Inside diameter:
- CSL output virtualStockInsideDiameter, if non-null.
- Otherwise, the inside diameter of the current part’s cross-section.
o Outside diameter:
- CSL output virtualStockOutsideDiameter, if non-null.
- Otherwise, the outside diameter of the current part’s cross-section.
o Thickness:
- CSL output virtualStockThickness, if non-null.
- Otherwise, the thickness of the current part’s cross-section.
For the Sheet Metal process group, virtual stock dimensions are determined by the values of other CSL outputs for the stock selection module, the dimensions of the current part, and plant variables, as follows:
o Length:
- The larger of the blank’s length and the CSL output virtualStockLength, if non-null.
- Otherwise, the larger of the blank’s length and the value of the plant variable standardStockLength, if the plant variable is defined.
- Otherwise, the larger of the blank’s length and 8 feet.
o Width:
- The larger of the blank’s width and the CSL output virtualStockWidth, if non-null.
- Otherwise, the larger of the blank’s width and the value of the plant variable standardStockWidth, if the plant variable is defined.
- Otherwise, the larger of the blank’s width and 4 feet.
 
Waterjet Cutting
The Sheet Metal cost model defines this attribute on the Waterjet Cutting node of the Perimeter GCD in the Waterjet Cut process. This is used by Stock Machining to determine whether the waterjet cutting process is in the current routing.