Share

Boolean : Modifier

BooleanMod - superclass: modifier; super-superclass:MAXWrapper - 15:0 - classID: #(2076314029L, 29076573L); creatable: true

The BooleanMod modifier provides exposure to the Boolean Modifier functionality.

Example

resetMaxFile #noprompt
s = sphere()

s2 = sphere pos:[15,15,0] radius:15
s3 = sphere pos:[-15, 0, 0] radius:15
s4 = sphere pos:[15, -15,0] radius:15

b = BooleanMod()
addModifier s b

b.appendOperand #single operandNode:s2 operationType:#subtraction
b.appendOperand #single operandNode:s3 operationType:#attach
b.appendOperand #single operandNode:s4 operationType:#union

Properties

<BooleanMod>.disableInteractiveUpdates     BooleanClass    default: false   --  boolean

Specifies whether to disable viewport updates during operand transformation.

<BooleanMod>.displayShading     Integer    default: 2   --  integer

Specifies how to display operands (depending on .DisplayType), where:

  • 0 = wire
  • 1 = shaded
  • 2 = wire and shaded
<BooleanMod>.DisplayType     Integer    default: 2   --  integer

Specifies what to display, where:

  • 0 = Results
  • 1 = Operands
  • 2 = Selected Operands only
<BooleanMod>.doDeterministicEdgeSort     BooleanClass    default: true   --  boolean

Specifies whether to perform edge sorting at each evaluation. This is true by default in 3ds Max 2024.1 Update and later, but will be non-existent or false in previous versions. This resolves an issue with vertex painting on geometry that uses the boolean modifier. Note that this property is exposed to MAXScript only, it does not appear in the UI.

<BooleanMod>.doTinyFragmentCleanup     BooleanClass    default: true   --  boolean

Specifies whether to clean up leftover triangles and closed pairs of triangles or quads.

Note that this property is exposed to MAXScript only, it does not appear in the UI.

<BooleanMod>.hideBooleanOnCreate     BooleanClass    default: true   --  boolean

Gets/sets the state of the Hide Boolean checkbox in the Boolean Modifier UI. This specifies whether the original boolean object is hidden when the user clicks the Create Objects button, or if CreateObjects() (below) is called.

<BooleanMod>.hideReference     BooleanClass    default: true   --  boolean

Specifies whether to automatically hide operands when they are added to the operand list.

<BooleanMod>.method     Integer    default: 0   --  integer

Gets/sets the boolean's calculation method where:

  • 0 = Mesh
  • 1 = OpenVDB
<BooleanMod>.operandItems     ArrayParameter    default: #()   --  paramBlock2 array; SubAnim

Contains an array of operands for the boolean.

<BooleanMod>.Operands     ArrayParameter    default: #(ReferenceTarget:ParamBlock2)   --  paramBlock2 array; SubAnim
<BooleanMod.Operands[1]>.SeamSize     Float    default: 0.0   --  animatable
<BooleanMod>.operationVersion     Integer    default: 5   --  integer

Gets the internal version of the Boolean Modifier.

<BooleanMod>.pivotAlign     BooleanClass    default: false   --  boolean

Specifies whether to align an operand's pivot with the base object's pivot when the operand is selected. Note that .useLiveReference must also be true for this setting to have an effect.

<BooleanMod>.preserveNormalData     BooleanClass    default: false   --  boolean

Specifies whether to retain explicit normals from the operands.

<BooleanMod>.retainNonPlanarFaces     BooleanClass    default: true   --  boolean

Specifies whether to keep non-planar faces from the operands.

<BooleanMod>.selectedOpacity     Float    default: 0.15   --  float

Gets/sets the opacity of selected operands when Selected Operands are displayed as shaded or wired and shaded.

Note:

this option is not exposed in the UI.

<BooleanMod>.toleranceFactor     Float    default: 3.0e-8f   --  animatable; worldUnits

For internal use. Used internally by the Boolean computation. The longest dimension of the bounding box of the Boolean operands is multiplied by this value to determine the Boolean intersection tolerance for a given operation. Smaller values can generally provide more accurate results, but values nearing 0.0 can cause failures due to numeric imprecision. Default = 3.0e-8f, Range = 0.0 - 1.0e-3f.

<BooleanMod>.Transform     ArrayParameter    default: #()   --  maxObject array; SubAnim

Contains an array of transforms for the boolean's operands.

<BooleanMod>.unselectedOpacity     Float    default: 0.05   --  float

Gets/sets the opacity of unselected operands.

<BooleanMod>.useLiveReference     BooleanClass    default: false   --  boolean

Specifies whether to retain the operand's scene node and transform as a "live" reference when it is picked. When true, operands are treated as live references - the object remains in its original node and uses the node's transform to position and orient the operand. The node remains in the scene but is hidden. When false, the operand object's geometry is incorporated into the Boolean, its node is deleted from the scene, and the operand obtains a position and orientation that is relative to the modified object. Both options allow for manipulation of the operand's geometry and modifier stack, but the "Live" reference is more computationally expensive, requiring re-evaluation when either the operand's node or the modified object's node is transformed.

<BooleanMod>.useOperandMaterial     BooleanClass    default: true   --  boolean

Specifies whether the Boolean results should use the operand's material. This takes place only when the operand is initially picked. The operand's material is evaluated, and if it contains any materials (single or multi/sub-object) that differ from those in the modified object, the modified object's material is updated to a multi/sub-object material which includes the operand's materials, and the material IDs of the operand are re-mapped to use the corresponding material IDs of the new material.

<BooleanMod>.voxelSize     Float    default: 1.0   --  animatable; worldUnits

When the boolean method is OpenVDB, this property controls how finely the mesh is encoded into a volume. The lower the voxel size, the sharper the results. A higher size produces rounder features.

Warning:

The smaller the voxel size, the more memory is used to store the object. Using extremely small voxel sizes can result in the computer running out of memory.

BooleanMod interfaces:

Interface: BooleanModifier

Methods:

<integer>GetNumOperands()

Returns the number of operands in the boolean. This includes the base object and operands in folders, but does not include folders.

<boolean>GetRootOperandName <index>operandIndex <&string>nameout
       nameout is Out parameter

Gets the name of the operand at the operandIndex in the nameout by reference parameter. For this method, the index only applies to items at the root level, items inside folders are not part of the index.

<boolean>SetRootOperandName <index>operandIndex <string>name

Sets the name of the operand at the operandIndex to the specified name. For this method, the index only applies to items at the root level, items inside folders are not part of the index.

<boolean>GetFlatOperandName <index>operandIndex <&string>nameout
       nameout is Out parameter

Gets the name of the operand at the flat index operandIndex, returned in the nameout by reference parameter. The "flat index" is the index in the operand list flattened out so that items in folders are considered part of the top-level. For example, the first operand in a folder at index position 2 would have a flat index of 3.

<boolean>SetFlatOperandName <index>operandIndex <string>name

Sets the name of the operand at the flat index operandIndex to the name. The "flat index" is the index in the operand list flattened out so that items in folders are considered part of the top-level. For example, the first operand in a folder at index position 2 would have a flat index of 3.

<boolean>GetFolderOperandName <index>operandIndex <index>subOperandIndex <&string>nameout
       nameout is Out parameter

Gets the name of an operand or sub-folder in operandIndex, where subOperandIndex is the position of the item in the folder, returning the name in the nameout by-reference parameter.

<boolean>SetFolderOperandName <index>operandIndex <index>subOperandIndex <string>name

Sets the name of an operand in folder operandIndex, where subOperandIndex is the position of the item in the folder. Returns true if the operation succeeded.

<boolean>GetRootOperandType <index>operandIndex <&enum>type
       type enums: {#modified|#single|#folder}
       type is Out parameter

Gets the type of object at operandIndex, returned in the type by-reference parameter. The type can be one of:

  • #modified - the modified base object
  • #single - an operand object
  • #folder - a folder
<boolean>GetNumFolderOperands <index>operandIndex <&integer>count
       count is Out parameter

Returns the number of operands contained in the folder at operandIndex, returned in the count by-reference parameter.

<boolean>GetOperationType <index>operandIndex <&enum>type
       type enums: {#union|#intersection|#subtraction|#merge|#attach|#insert|#split}
       type is Out parameter

Gets the operation type for the operand or folder at operandIndex, returned in the type by-reference parameter.

<boolean>SetOperationType <index>operandIndex <enum>type
       type enums: {#union|#intersection|#subtraction|#merge|#attach|#insert|#split}

Sets the operation type for the operand or folder at operandIndex to the specified type.

<boolean>GetOperationOption <index>operandIndex <&enum>option
       option enums: {#none|#imprint|#cookie}
       option is Out parameter

Gets the operation option for the operand at operandIndex, returned in the by-reference option parameter.

<boolean>SetOperationOption <index>operandIndex <enum>option
       option enums: {#none|#imprint|#cookie}

Sets the operation option for the operand at operandIndex to the option.

<boolean>GetDisable <index>operandIndex <&boolean>disable
       disable is Out parameter

Gets the disabled status of the operand at operandIndex, returning it in the by-reference disable parameter.

<boolean>SetDisable <index>operandIndex <boolean>disable

Sets the disabled status of the operand at operandIndex to the disable value, where true is disabled, and false is enabled. Returns true if the operation succeeds, false otherwise.

<boolean>RemoveOperand <index>operandIndex

Removes the operand at the operandIndex. Returns true if the operation succeeds, false otherwise.

<boolean>AppendOperand <enum>operandtype operandNode:<node> operationType:<enum> operationOption:<enum>
       operandtype enums: {#modified|#single|#folder}
       operandNode default value: undefined
       operationType enums: {#union|#intersection|#subtraction|#merge|#attach|#insert|#split}
       operationType default value: #union
       operationOption enums: {#none|#imprint|#cookie}
       operationOption default value: #none

Appends an operand to the boolean, returning true on success, false on failure. The operand is added at the end of the operand list.

The operandType specifies whether this is the base modified object, a single operand, or a folder containing other operands.

The operandNode specifies the scene node to add as an operand. This is not required if operandType is #folder.

The operationType specifies what type of boolean operation to perform.

the operationOption specifies additional options for the boolean operation. #cookie means the faces from the operand are not added to the boolean mesh, cutting a hole in it. #imprint means new edges are added to the boolean mesh where the operand intersects with the base object.

Returns true if the operation succeeds, false otherwise.

<boolean>InsertOperand <enum>operandtype <index>where operandNode:<node> operationType:<enum> operationOption:<enum>
       operandtype enums: {#modified|#single|#folder}
       operandNode default value: undefined
       operationType enums: {#union|#intersection|#subtraction|#merge|#attach|#insert|#split}
       operationType default value: #union
       operationOption enums: {#none|#imprint|#cookie}
       operationOption default value: #none

Inserts an operand into the boolean between existing operands, at the index specified by where, returning true on success, false on failure.

The operandType specifies whether this is the base modified object, a single operand, or a folder containing other operands.

The operandNode specifies the scene node to add as an operand. This is not required if operandType is #folder.

The operationType specifies what type of boolean operation to perform.

the operationOption specifies additional options for the boolean operation. #cookie means the faces from the operand are not added to the boolean mesh, cutting a hole in it. #imprint means new edges are added to the boolean mesh where the operand intersects with the base object.

Returns true if the operation succeeds, false otherwise.

<boolean>RemoveFolderOperand <index>operandIndex <index>subOperandIndex

Removes the operand at the position subOperandIndex in the folder at operandIndex. Returns true if the operation succeeds, false otherwise.

<boolean>AppendFolderOperand <index>operandIndex <node>operandNode

Appends the operand operandNode to the list of operands in the folder at the operandIndex position. Returns true if the operation succeeds, false otherwise.

<boolean>InsertFolderOperand <index>operandIndex <index>where <node>operandNode

Inserts the operand operandNode into the folder at operandIndex at location where in the folder. Returns true if the operation succeeds, false otherwise.

<boolean>AlignPivot <index>operandIndex

Aligns the pivot of the node containing the "Live" operand at flat index operandIndex with the pivot of the base object. Has no effect on 'captured' operands. Returns true if the operation succeeds, false otherwise.

<boolean>ExtractAsObject <index>operandIndex

Extracts the operand at the specified operandIndex as an object. Returns true if the operation succeeds, false otherwise.

<boolean>CutOperand()

Cuts the currently selected operand. Returns true if the operation succeeds, false otherwise.

<boolean>PasteOperand <index>operandIndex

Pastes the operand on the clipboard at the position specified by operandIndex. Returns true if the operation succeeds, false otherwise.

<boolean>PasteToNewModifier()

Pastes the operand on the clipboard to a new boolean modifier. Returns true if the operation succeeds, false otherwise.

<boolean>ExtractSeams <index>operandIndex

Creates a new shape from the seams of the operand at operandIndex. Returns true if the operation succeeds, false otherwise.

<boolean>CreateObjects <&node array>createdNodes
       createdNodes is In and Out parameter

Creates objects from the boolean, returning them in the createdNodes by-reference parameter. Returns true if the operation succeeds, false otherwise.

BooleanModifierInterface : Interface

This interface provides backwards-compatibility for scenes using the Boolean Modifier.

Properties:

    .SaveFinalResult : boolean : Read|Write

In 3ds Max 2024.1 Update and later, the Boolean Modifier uses a caching mechanism, and therefore scenes created in these versions cannot be opened in 3ds Max 2024. Setting this property to false before saving turns off the cache and makes the scene compatible with 3ds Max 2024.

Was this information helpful?