-- Exploder v.1.0 [2012.11.30] by Anubis [project3d.narod.ru] -- NOTE: if you want to install this script as macros - just uncomment next line and run it once. -- macroScript mcrExploder category:"Anubis Tools" ButtonText:"Exploder" tooltip:"Detach Faces" ( if classOf ::roExploder == RolloutClass do DestroyDialog roExploder rollout roExploder "Exploder" ( fn selFilter obj = (canConvertTo obj Editable_Poly) fn explodeFaces obj &newNodes allFaces:on keepSrcObj:on rename:on numDigits:3 = ( -- return boolean if not isKindOf obj Editable_Poly do convertToPoly obj local polyList = ( if allFaces then #{1..obj.faces.count} else polyOp.getFaceSelection obj ) newNodes = #() if polyList.isEmpty then false else ( local objsCount = objects.count if rename then ( local _name = obj.name + "_" local _frm = "." + (numDigits as String) + "d" for p = polyop.getNumFaces obj to 1 by -1 do polyOp.detachFaces obj #{p} delete:(not keepSrcObj) \ asNode:true name:(_name + (formattedPrint p format:_frm)) ) else ( for p = polyop.getNumFaces obj to 1 by -1 do polyOp.detachFaces obj #{p} delete:(not keepSrcObj) asNode:true ) local result = if objects.count == objsCount then false else ( newNodes = for i=(objsCount+1) to objects.count collect objects[i] true ) if not keepSrcObj do (delete obj) result ) ) fn setPivotDir poly = ( local theRot = inverse ((matrixFromNormal (polyop.getFaceNormal poly 1)*poly.transform) as Quat) animate off in coordsys local poly.rotation *= theRot poly.objectOffsetRot *= theRot poly.objectOffsetPos *= theRot ) mapped fn setPivotsDir polys = (setPivotDir polys) group "Base Options" ( checkBox cbxKeep "Keep Original Object(s)" checked:on checkBox cbxRen "Rename New Objects" checked:on spinner spnNum "Num. Digits: " range:[1,10,3] type:#integer fieldWidth:26 ) group "Detach Faces" ( radioButtons rbtnFaces labels:#("ALL", "Selected") columns:2 ) group "Pivot Alignment" ( checkBox cbxC "Face Center" checked:on checkBox cbxN "Face Normals" checked:on ) button bntSelAndGo "Select & GO" width:140 on roExploder open do (setFocus bntSelAndGo) on cbxRen changed state do (spnNum.enabled = state) on bntSelAndGo pressed do ( local usrObjs = selectByName filter:selFilter showHidden:on if IsKindOf usrObjs Array do ( local newObjs = #(), _name = "" setWaitCursor() with redraw off for obj in usrObjs do ( free newObjs if explodeFaces obj &newObjs allFaces:(rbtnFaces.state == 1) \ keepSrcObj:cbxKeep.state rename:cbxRen.state numDigits:spnNum.value do ( if cbxC.state do centerPivot newObjs if cbxN.state do setPivotsDir newObjs ) ) setArrowCursor() redrawViews() free usrObjs ) ) ) CreateDialog roExploder )