The ProCutter Compound Object is part of the ProBoolean Extension which is integral part of 3ds Max 9 and higher.
It can be used to cut one or more stock objects using a cutter object:
Methods:
ProCutter.CreateCutter #(<object_1>{,<objectr_2>}) <addMethod> <stockOutsideCutter> <stockInsideCutter> <cutterOutsideStock> <autoExtractMesh> <explodeByElements>
Creates a ProCutter object using node <operand_1>
and multiple nodes <operand_2>
, all stored in an array.
#( <object_1> { , <object_2> } )
-Specifies the objects used to build the Cutter. Note that the cutter will take over the node and name from <object_1>
. The object of the first node will become the first cutter sub-object.
<addMethod>
specifies how the <operand_2>
node(s) will be used.
Possible values are:
1 - instance, operand is an instance of the original node
2 - reference, operand is a reference to original node
3 - copy, operand is a copy of original node
4 - move, original node should be deleted
One of the following three options must be set to true:
<stockOutsideCutter>
specifies what to do with the portions of the Stock or Stocks outside the Cutter.
True - keep Stock outside the Cutter
False -remove Stock outside the Cutter
<stockInsideCutter>
specifies what to do with the portions of the Stock or Stocks inside the Cutter.
True - keep Stock inside the Cutter
False -remove Stock inside the Cutter
<cutterOutsideStock>
specifies what to do with the portions of the Cutter outside of the Stock or Stocks.
True - keep Cutter outside of the Stock(s)
False -remove Cutter outside of the Stock(s)
<autoExtractMesh>
specifies whether the result of the operation should be maintained in the Cutter compound object or extracted into separate mesh.
True - don't modify the cutter object, just cut the stock mesh and extract it into a new object. Note that once the operation is done, the result is an editable mesh with no sub-objects. This flag is useful if you want to use the cutter like a cookie cutter where you reuse the cutter over and over to make holes in an object.
False - maintain all objects in the Cutter compound object. Once the operation is performed the result is a procedural Cutter object with both cutters and stocks as sub-objects that can be edited.
<explodeByElements>
specifies whether mesh elements should be separated into individual meshes.
True - creates a separate mesh for each element. It is a good way to break apart an object into smaller volumes by setting this flag to true while <autoExtractMesh>
along with <stockOutsideCutter>
and <stockInsideCutter>
are also set to true.
False -create a single mesh with a mesh element for each separate volume.
ProCutter.AddStocks <cutter_object> #(<stock_1>{,<stock_2>}) <addMethod> <matMethod>
Adds one or more stock objects to an existing ProCutter compound object.
<cutter_object>
is the original ProCutter node created using ProCutter.CreateCutter()
#(<stock_2>{,<stock_2>})
- specifies one or more stock nodes in an array of nodes. Note that even if you have only one stock object, you need to use an array, for example #(stockb).
<mat_method>
specifies how the materials of the two operands should be handled. Possible values are:
1 - applies operand material
2 - retains original material
ProCutter.getOperandSel <bool_obj> <integer>
Gets the index of the operand currently selected in the operands list.
ProCutter.setOperandSel <bool_obj> <integer> <boolean>
Sets the index of the operand to be selected in the operands list.
ProCutter.getDisplayResult <bool_obj>
ProCutter.setDisplayResult <bool_obj> <boolean>
These methods get and set whether Results or Operands are displayed. If true, Result is displayed. If false, Operands are displayed.
ProCutter.getShowHiddenOps <bool_obj>
ProCutter.setShowHiddenOps <bool_obj> <boolean>
these methods get and set whether Results + Hidden Operands are displayed. If true, Results + Hidden Operands are displayed. If false, the Results or Operands as specified using ProCutter.SetDisplayResult()
are displayed.
ProCutter.getUpdateMode <bool_obj>
ProCutter.setUpdateMode <bool_obj> <integer>
These methods get and set the Update mode as follows:
0 - Always
1 - When Selected
2 - When Rendering
3 - Manually
ProCutter.getDecimationPercent <bool_obj>
ProCutter.setDecimationPercent <bool_obj> <float>
These methods get and set the decimation percentage that determines the percentage of edges that will be removed from the total set of polygons on this Boolean.
ProCutter.getMakeQuad <bool_obj>
ProCutter.setMakeQuad <bool_obj> <boolean>
These methods get and set whether the operation will change the tessellation of the Boolean from triangles to quadrilaterals
ProCutter.getQuadSizePercent <bool_obj>
ProCutter.setQuadSizePercent <bool_obj> <float>
These methods get and set the percentage of the overall length of the quadrilaterals.
ProCutter.getPlanarEdgeRemoval <bool_obj>
ProCutter.setPlanarEdgeRemoval <bool_obj> <integer>
These methods determine how the polygons on planar faces will be handled:
1 - Removes all extra co-planar edges on a face
2 - Removes only invisible edges on each face
3 - No edge removal
The ProCutter is a two stage operation for scripting. First you create the cutter then you add stocks to the existing cutter.
EXAMPLE 1
Create two boxes to be used in cutter and one box for stock. The resulting cutter object will contain 3 operands.
a = box length:10 height:10 width:10 b = box length:4 height:4 width:15 c = box length:13 height:15 width:10 ProCutter.CreateCutter #(a,b) 1 True False False False False ProCutter.AddStocks a #(c) 1 1
EXAMPLE 2
This is the sort of set up to use when you want to break an object apart into separate little volumes.
--- Use cutter to break apart volumes of stock --- into separate little volumes that are extracted --- into separate meshes. This is what you might do --- if you want an object to "explode" into smaller --- pieces. Note that after the operation the original --- cutter object stays around and can be used again. a = box length:10 height:10 width:10 b = box length:4 height:4 width:15 c = box length:13 height:15 width:10 ProCutter.CreateCutter #(a,b) 1 True True False True True ProCutter.AddStocks a #(c) 1 1