--DRAW ORDER TOOL --Version 1.2 --by Mark Blosser --email: mjblosser@gmail.com --idea for script based on Reorder Track View by Borislav "Bobo" Petrov ------------------------------------------------------- rollout draworder_dg "Draw Order Toolkit" ( local SortList = #() local obj_array = $* as array local sel_array = selection as array local FaceIndexShow = false local lastviewport global mjb_callbacks local redrawscr_mjb -- group "About..." -- ( -- label rtv03 "by Mark Blosser" -- label rtv04 "mjblosser@gmail.com" -- ) group "Reorder Selection" ( button movetop "FIRST" width:42 height:20 across:4 align:#left enabled:true offset:[0,0] button moveup "UP" width:42 height:20 align:#center enabled:true offset:[0,0] button movedown "DN" width:42 height:20 align:#center enabled:true offset:[0,0] button movebottom "LAST" width:42 height:20 align:#right enabled:true offset:[0,0] --radiobuttons single_mode "" Labels:#("by Order","by Name") default:1 align:#center columns:2 checkbox cb_geomteryonly "Geometry Only" checked:true offset:[40,0] tooltip:"Display poly/mesh objects only" -- group "Sort..." -- ( -- button sub_sort "Children of Selected Nodes" width:140 enabled:true align:#center -- radiobuttons descend_mode "" Labels:#("Ascend","Descend") default:1 align:#center --) label lb_title "Draw Order (first to last)" offset:[0,5] listbox SortListbox items:SortList height:25 readOnly:true button name_sort "Refresh List" width:140 enabled:true align:#center ) group "Face Index Viewer" ( checkbutton cb_showindex "Show Index Toggle" checked:false tooltip:"Display indexes on a selection of faces" ) --label lb_author "v1.2 " label lb_author2 "by Mark Blosser" offset:[0,5] label lb_author3 "mjblosser@gmail.com " offset:[0,-5] hyperLink hl_youtube "Youtube" color:(color 0 191 243) hoverColor:(color 0 191 243) visitedColor:(color 0 191 243) address:"https://www.youtube.com/@bond1_mjblosser/videos" align:#right offset:[-25,0] across:2 hyperLink hl_artstation "Artstation" color:(color 0 191 243) hoverColor:(color 0 191 243) visitedColor:(color 0 191 243) address:"https://www.artstation.com/mark_blosser" align:#right offset:[-10,0] function fn_displaysortgeo = ( SortList = #() local totObjs = Objects.count for i = 1 to totObjs do ( if classOf Objects[i] == Editable_Poly or classOf Objects[i] == Editable_Mesh or classOf Objects[i] == PolyMeshObject then --if Objects[i].renderable==true then --alternatively can check renderable flag instead ( print (i as string + ". " + Objects[i].name) Sortname = (i as string + ". " + Objects[i].name) append SortList Sortname ) SortListbox.items = SortList --f =createFile "E://list.txt" --format (SortList as string) to:f ) ) --end function function fn_displaysortall = ( SortList = #() local totObjs = Objects.count for i = 1 to totObjs do ( --if classOf Objects[i] == Editable_Poly or classOf Objects[i] == Editable_Mesh or classOf Objects[i] == PolyMeshObject then ( print (i as string + ". " + Objects[i].name) Sortname = (i as string + ". " + Objects[i].name) append SortList Sortname ) SortListbox.items = SortList ) ) --end function -- on SortListbox selected nameIndex do -- ( -- select (getNodeByName SortListbox.items[nameIndex]) -- ) on movetop pressed do ( if selection.count == 0 then Messagebox "Select one or more objects!" else ( obj_array = $* as array sel_array = selection as array d = dummy () for i = 1 to obj_array.count do ( if obj_array[i].parent == undefined then ( move_it = true for j = 1 to sel_array.count do if obj_array[i] == sel_array[j] then move_it = false if move_it then ( obj_array[i].parent = d obj_array[i].parent = undefined ) ) )--end i loop delete d if cb_geomteryonly.checked == true then fn_displaysortgeo() else fn_displaysortall() )--end movetop ) on movebottom pressed do ( if selection.count == 0 then Messagebox "Select one or more objects!" else ( sel_array = selection as array for j = 1 to sel_array.count do ( if sel_array[j].parent == undefined then ( d = dummy () sel_array[j].parent = d delete d ) )--end j loop if cb_geomteryonly.checked == true then fn_displaysortgeo() else fn_displaysortall() )--end movebottom ) on moveup pressed do ( if selection.count == 0 then Messagebox "Select one or more objects!" else ( sel_array = #() obj_array = $* as array sel_array = for nodes in selection collect nodes.name --if single_mode.state == 2 then sort sel_array list_array = #() current_pos = 0 for i = 1 to obj_array.count do ( if obj_array[i].parent == undefined then append list_array obj_array[i] if obj_array[i].name == sel_array[1] then current_pos = list_array.count ) if current_pos >1 then ( d = dummy () list_array[current_pos-1].parent = d list_array[current_pos].parent = d delete d d = dummy () for i = list_array.count to current_pos+1 by -1 do ( list_array[i].parent = d ) delete d )--end if if cb_geomteryonly.checked == true then fn_displaysortgeo() else fn_displaysortall() )--end moveup ) on movedown pressed do ( if selection.count == 0 then Messagebox "Select one or more objects!" else ( sel_array = #() obj_array = #() current_pos = 0 sel_array = for nodes in selection collect nodes.name --if single_mode.state == 2 then sort sel_array obj_array = for object in $* collect object list_array = #() for i = 1 to obj_array.count do ( if obj_array[i].parent == undefined then append list_array obj_array[i] if obj_array[i].name == sel_array[1] then current_pos = list_array.count ) if current_pos