/* face detacher v 1.1.0 Author: Georgy Chakarov Version: 3dsmax 9 or later analize and detach polys of selected object by material ID my site: http://georgychakarov.hit.bg/ */ /****************************************************************************************************************************/ /* FUNCTIONS /****************************************************************************************************************************/ macroScript detachFaces category:"Georgy Chakarov" buttontext:"Face Detacher" tooltip:"Face Detacher 1.0 beta" icon:#("gch_icons",1) ( rollout FaceDetacher "Face Detacher 1.0 beta" width:220 height:130 ( group "main panel" ( label Label_numIDs "number material IDs: " pos:[15,18] width:156 height:16 label Label_numIDs_var "n/a" pos:[120,18] label Label_IDs "material IDs:" pos:[16,31] width:133 height:18 label Label_IDs_array "n/a" pos:[75,45] edittext new_obj_name_text text:"new object" pos:[16,60] checkbox del "delete original" pos:[16,82] checked:true button scan "Scan" pos:[16,100] width:65 height:20 toolTip:"analyze selected object" button detach "<>" pos:[100,100] width:70 height:20 toolTip:"detaching faces by material ID" ) group "about" ( label lbl_about_row1 "Georgy Chakarov" pos:[20,145] label lbl_info_row2"Copyright © 2007-2011" pos:[20,160] button site_link "georgychakarov.hit.bg" pos:[65,175] ) on site_link pressed do ( ShellLaunch "http://georgychakarov.hit.bg/" "" ) on scan pressed do ( NumFaces = $.getnumfaces () m = #() for k = 1 to NumFaces do ( append m (polyop.getFaceMatID $ k) ) num_mIDs = 1 mIDs = #() append mIDs ((m[1]) as integer) for i = 2 to m.count do ( new_mID = "yes" for j = 1 to mIDs.count do ( if ((m[i]) as integer) == ((mIDs[j]) as integer) then ( new_mID = "no" ) ) if new_mID == "yes" then ( num_mIDs = num_mIDs + 1 append mIDs m[i] ) ) Label_numIDs_var.text = (num_mIDs as string) Label_IDs_array.text = (mIDs as string) ) -------------- detaching on detach pressed do ( new_obj_name = new_obj_name_text.text NumFaces = $.getnumfaces () m = #() for k = 1 to NumFaces do ( append m (polyop.getFaceMatID $ k) ) num_mIDs = 1 mIDs = #() append mIDs ((m[1]) as integer) for i = 2 to m.count do ( new_mID = "yes" for j = 1 to mIDs.count do ( if ((m[i]) as integer) == ((mIDs[j]) as integer) then ( new_mID = "no" ) ) if new_mID == "yes" then ( num_mIDs = num_mIDs + 1 append mIDs m[i] ) ) format "---------result---------" format ("num_mIDs = "+((num_mIDs) as string)+"\n") format "mIDs" mIDs format "----------end of results-----------" for n = 1 to num_mIDs do ( new_obj_polys = #{} for p = 1 to NumFaces do ( if (polyop.getFaceMatID $ p) == mIDs[n] then append new_obj_polys p --format "appended" ) print new_obj_polys polyOp.detachFaces $ new_obj_polys delete:false asNode:true name:((new_obj_name)+"_"+(mIds[n] as string)) ) if del.checked == true then ( delete $ ) ) ) createdialog FaceDetacher width:200 height:200 --NewWindoww = newrolloutfloater "Face Detacher 1.0 beta" 200 141 --addrollout FaceDetacher NewWindoww )