Scripts
Bake object transforms
Copy and paste
Emailer
Flush
Implode explode
Instantiate
Make names unique
Poly counter
Print selection
Reset viewport
Selector
Implode & explode
Implode : Collapse the selected objects into a single object.
Explode : Break the selected object's elements into individual objects.
--The following script explodes an EditablePoly object to elements,
--each polygon becomes one element
macroScript Selection_implode
icon:#("implode_explode", 2)
category:"MaxPack"
buttonText:"Implode"
tooltip:"Implode"
(
on isEnabled do
(
return selection.count != 0
)
on execute do
(
objs = selection as array
if(objs.count == 0) then
(
return false
)
suspendEditing which:#modify
disableSceneRedraw()
undo off
(
meditIsOpen = false
if(MatEditor.isOpen()) then
(
meditIsOpen = true
MatEditor.Close()
)
tempMedit = #()
for d = 1 to meditMaterials.count do --flush materialeditor
(
append tempMedit meditMaterials[d]
meditMaterials[d] = standardMaterial()
)
head_obj = editable_mesh() -- first object in array
convertTo head_obj Editable_Poly
for i = 1 to objs.count do
(
obj = objs[i]
if isValidNode obj and obj != head_obj and classOf obj != Targetobject and obj.renderable == true then
(
if superclassOf obj == GeometryClass or superclassOf obj == Shape then
(
InstanceMgr.MakeObjectsUnique obj #group
if obj.modifiers.count != 0 then maxOps.CollapseNodeTo obj 1 off
if obj.material == undefined then
(
obj.material = standardMaterial name:obj.name
)
if canConvertTo obj Editable_poly then
(
addModifier obj (poly_Select())
)
else
(
addModifier obj (mesh_Select())
addModifier obj (poly_Select())
)
if obj.scale.x < 0 or obj.scale.y < 0 or obj.scale.z < 0 then
(
if obj.modifiers.count != 0 then maxOps.CollapseNodeTo obj 1 off
addModifier obj (normalModifier flip:true)
ResetXForm obj
)
if obj.modifiers.count != 0 then maxOps.CollapseNodeTo obj 1 off
polyOp.attach head_obj obj
)
)
)
ResetTransform head_obj
ResetScale head_obj
ResetPivot head_obj
centerpivot head_obj
ResetXForm head_obj
if head_obj.modifiers.count != 0 then maxOps.CollapseNodeTo head_obj 1 off
convertToMesh head_obj
)
enableSceneRedraw()
resumeEditing which:#modify
-- Re-open materail editor
if(meditIsOpen) then
(
MatEditor.Open()
)
for d = 1 to tempMedit.count do --flush materialeditor
(
meditMaterials[d] = tempMedit[d]
)
select head_obj
)
)
macroScript Selection_explode
icon:#("implode_explode", 1)
category:"MaxPack"
buttonText:"Explode"
tooltip:"Explode"
(
on isEnabled do
(
return selection.count != 0
)
on execute do
(
ele_array = #()
disableSceneRedraw()
suspendEditing()
for obj in selection as array do
(
head_obj = editable_mesh() -- first object in array
convertTo head_obj Editable_Poly
if superclassOf obj == GeometryClass or superclassOf obj == Shape then
(
InstanceMgr.MakeObjectsUnique obj #group
if obj.modifiers.count != 0 then maxOps.CollapseNodeTo obj 1 off
if canConvertTo obj Editable_poly then
(
addModifier obj (poly_Select())
)
else
(
addModifier obj (mesh_Select())
addModifier obj (poly_Select())
)
if obj.scale.x < 0 or obj.scale.y < 0 or obj.scale.z < 0 then
(
if obj.modifiers.count != 0 then maxOps.CollapseNodeTo obj 1 off
addModifier obj (normalModifier flip:true)
ResetXForm obj
)
if obj.modifiers.count != 0 then maxOps.CollapseNodeTo obj 1 off
polyOp.attach head_obj obj
)
else continue
obj = head_obj
convertToMesh obj
for p = 1 to meshop.getNumFaces obj do
(
if meshop.getNumFaces obj > 0 then
(
face_array = meshop.getElementsUsingFace obj #{1}
if classOf face_array == bitArray then
(
new_emesh = Editable_mesh()
new_emesh.name = (uniqueName obj.name)
new_emesh.mesh = meshop.detachFaces obj face_array delete:true asMesh:true
new_emesh.material = obj.material
in coordsys world
(
new_emesh.transform = obj.transform
)
ResetTransform new_emesh
ResetScale new_emesh
ResetPivot new_emesh
centerpivot new_emesh
ResetXForm new_emesh
if new_emesh.modifiers.count != 0 then maxOps.CollapseNodeTo new_emesh 1 off
append ele_array new_emesh
)
)
)
delete obj
)
select ele_array
resumeEditing()
enableSceneRedraw()
)
)