http://www.scriptspot.com/3ds-max/scripts/detach-by-material-id#comments
scaricatelo da quel sito. comunque, come back up, scrivo il contenuto del file detachbyId.ms anche qui
- Code:
/*
Detach by Material ID
Version: 2
by Jefferson Lim
Terabye Inc./ Shirogumi Inc.
[features]
Detach Polygons based on its Material ID
- works on a selection of objects
- Options to name detached objects
- material propagation
- this will assign a corresponding material by id to the detached object
[usage]
1. select any number of objects
2. set the desired paramteters
3. optional: if you know the maximun number of ids the object has
set the Max IDs to help speed up detachment.
4. press detach
[Internal Operations]
Procedure:
- object[s] is/are copied
- then collapsed to an editable poly
- faces are finally detached by material ID
Naming:
- "Numbered"
- will creae numbered names
- e.g. 0,1,2,3
- preferable to use with the Prefix option checked
- "Bitmap Name"
- if not diffuse bitmap found, it will use the material name
- if no material applied, it will use the object's name
- "Material Name"
- if no material applied, it will use the object's name
- "Object Name"
- will create a unique name based on the object's name
*/
try(destroyDialog detachByID)catch()
rollout detachByID "Detach by ID" width:140 height:250
(
local name_type = 1
local the_polyobj
local ran_color = true
local the_name
local the_mat_arr = #()
local id_list = #()
label lbl_maxids "Max IDs:" pos:[10,190] width:55 height:15
GroupBox grp_naming "Naming: " pos:[5,0] width:130 height:125
GroupBox grp_prefix "" pos:[5,75] width:130 height:50
GroupBox grp_ops "Options:" pos:[5,125] width:130 height:90
radiobuttons rb_naming "" pos:[10,15] width:107 height:64 enabled:true labels:#("Object Name", "Material Name", "Bitmap Name", "Numbered") default:1 columns:1
checkbox chk_prefix "Use Prefix" pos:[10,85] width:70 height:15 checked:false
edittext edt_prefix "" pos:[5,100] width:125
checkbox chk_prop "Propagate Materials" pos:[10,140] width:120 height:15 checked:true
checkbox btn_del "Delete Original" pos:[10,155] width:120 height:15 checked:true
checkbox chk_rancolor "Random Wire Colors" pos:[10,170] width:120 height:15 checked:true
spinner spn_maxids "" pos:[70,190] width:60 height:16 range:[0,99,99] type:#integer scale:0.05
button detach_bot "DETACH" pos:[5,220] width:130 height:25
fn getMaterialIDs obj =
(
id_arr = #()
for i in 1 to spn_maxids.value do
(
obj.selectByMaterial i
the_faces = getFaceSelection obj
if (the_faces as array).count != 0 do
(
append id_arr i
)
)
id_arr
)
fn getMatTextureName mat =
(
local the_map_name = the_polyobj.name
try
(
bmp = mat.diffusemap
if classof bmp == Bitmaptexture then
(
the_mapfile = mat.diffuseMap.bitmap.filename
the_map_name = getFileNameFile the_mapfile
)
else
(
the_map_name = mat.name
)
)
catch()
the_map_name
)
on rb_naming changed val do
(
name_type = val
the_name = edt_prefix.text
)
on edt_prefix entered txt do
(
the_name = txt
)
on chk_rancolor changed val do
(
ran_color = val
)
on detach_bot pressed do
(
undo "Detach by ID" on
(
the_sel = selection as array
if the_sel.count != 0 do
(
for obj in the_sel where \
superclassof obj == GeometryClass and \
obj.material != undefined do
(
try(convertToPoly obj)catch(exit; print "DetacByID: Error Occured on Object Conversion")
the_orig = obj
the_polyobj = copy the_orig
the_mat = obj.material
id_count = the_mat.numSubs
id_list = getMaterialIDs the_polyobj
-- start detaching
for i in id_list do
(
the_polyobj.selectByMaterial i
the_faces = getFaceSelection the_polyobj
case name_type of
(
1: the_name = uniquename (the_polyobj.name)
2: the_name = uniquename (the_mat[i].name)
3: the_name = uniquename (getMatTextureName the_mat[i])
4: the_name = uniquename the_name
)
if chk_prefix.checked do the_name = edt_prefix.text + the_name
polyOp.detachFaces the_polyobj the_faces asnode:true name:the_name
theDetachedObj = (getnodebyname the_name)
if isValidNode theDetachedObj do
(
if chk_prop.checked do theDetachedObj.material = the_mat[i]
if ran_color do theDetachedObj.wirecolor = random black white
)
)-- end detach loop
if btn_del.checked do delete the_orig
)-- end object check loop
)-- end selection loop
)-- end Undo
)-- end button press
)
createDialog detachByID style:#(#style_sysmenu,#style_toolwindow)
/*
[2.0]
2008-12-09
- added material propagation
- faster detachment procedure
- old script was looping through every face to look for IDs
- the new procedure will only search thru the <Max IDs> set by the user
- cleaned up code
- reworked UI
[1.0]
2005-05-24
- initial public release
[to do]
- make a more intuitive naming option
- save settings to ini file
- add progress bar
[notes]
- script request by Eye of Hawk (CGTalk)
- "Propagate Materials" feature request by titane357 (scriptspot)
*/
Last edited by Andrea Lojelo on Mon Jan 10, 2011 12:05 pm; edited 1 time in total
Fri Dec 02, 2016 6:09 am by Rick Crawford
» How can i have my laptimes in the world records page?
Tue Nov 22, 2016 9:14 pm by Guest
» Problems event.ini and account
Fri Aug 26, 2016 10:45 pm by Guest
» Account problem
Thu Aug 25, 2016 7:57 pm by Marc Nassif
» AI driver laptime bug,
Tue May 17, 2016 10:15 pm by Guest
» not registered to do lap times?
Sat May 07, 2016 3:57 am by Germain Donne
» i beat Wr.. but im no in list
Fri Apr 29, 2016 12:54 pm by Giuliano Buzzi
» Nürburgring GP (GT)
Sun Apr 24, 2016 3:48 pm by Guest
» Problem in All Round PRO Ranking with BMW M3 E30 Gr. A @ Vallelunga
Tue Apr 19, 2016 4:27 am by Guest