"A" - About "Pick Target" - Указать целевой объект "R" - Reset XForm с последующим конвертированием в Editable Poly всех выделенных объектов "Pivot to Center" - Pivot всех выделенных объектов устанавливается в центр "x" "y" "z" - фиксировать оси "Alignment" - выровнять позиции выделенных объектов, вдоль фиксированных осей, относительно целевого объекта "Spread" - распределить выделенные объекты вдоль фиксированных осей целевого объекта, учитывая его размер и позицию Внимание! объекты выстраиваются относительно Pivot целевого объекта
Для автоматического запуска скрипта при старте 3dsMax, его можно разместить по адресу: ..3ds Max\Scripts\Startup\
rollout webbrowser_rollout "About" width:600 height:600 ( edittext edt_url "URL:" text:"http://www.youtube.com/user/ruslannow" dotNetControl wb "System.Windows.forms.WebBrowser" pos:[10,22] width:580 height:570 fn openURL urlString = ( wb.url = dotNetObject "System.Uri" urlString ) on edt_url entered txt do openURL txt on webbrowser_rollout open do openURL edt_url.text )
rollout rolArrange "Arrange" width:112 height:216 ( pickbutton btnPickTarget "Pick Target" pos:[32,8] width:78 height:16 button btnAbout "A" pos:[8,8] width:16 height:16 button btnResetXForm "R" pos:[8,32] width:16 height:16 button btnPivotToCenter "Pivot to Center" pos:[32,32] width:78 height:16 GroupBox grpAlignment "Alignment" pos:[8,56] width:96 height:72 checkbutton ckb_x_alignment "x" pos:[24,80] width:16 height:16 checkbutton ckb_y_alignment "y" pos:[48,80] width:16 height:16 checkbutton ckb_z_alignment "z" pos:[72,80] width:16 height:16 button btnAlignment "Alignment" pos:[24,104] width:64 height:16 GroupBox grpSpread "Spread" pos:[8,136] width:96 height:72 checkbutton ckb_x_spread "x" pos:[24,160] width:16 height:16 checkbutton ckb_y_spread "y" pos:[48,160] width:16 height:16 checkbutton ckb_z_spread "z" pos:[72,160] width:16 height:16 button btnSpread "Spread" pos:[24,184] width:64 height:16 ------------------------------------------------------------------------ global TargetObj = undefined ------------------------------------------------------------------------ fn DeleteTargetObject = ( tempObj=callbacks.notificationParam() if (tempObj == TargetObj) then ( TargetObj = undefined btnPickTarget.text = "Pick Target" ) ) -- end fn DeleteTargetObject ------------------------------------------------------------------------ on rolArrange open do ( callbacks.removeScripts id:#DeleteTargetObject callbacks.addScript #nodePreDelete "rolArrange.DeleteTargetObject()" id:#DeleteTargetObject ) -- end on rolArrange ------------------------------------------------------------------------ on btnPickTarget picked obj do ( if obj != undefined do ( TargetObj=obj btnPickTarget.text = TargetObj.name ) -- end if obj != undefined ) -- end on btnPickTarget ------------------------------------------------------------------------ on btnAlignment pressed do ( undo on if (TargetObj != undefined) then ( for i=1 to selection.count do ( Obj=selection[i] if (ckb_x_alignment.checked==true) then Obj.position.x = TargetObj.position.x if (ckb_y_alignment.checked==true) then Obj.position.y = TargetObj.position.y if (ckb_z_alignment.checked==true) then Obj.position.z = TargetObj.position.z ) -- end for i=1 to selection.count do ) -- end if (TargetObj != undefined) ) -- end on btnAlignment ------------------------------------------------------------------------ on btnSpread pressed do ( undo on if (TargetObj != undefined) then ( AABB_max = TargetObj.max AABB_min = TargetObj.min if (ckb_x_spread.checked==true) then ( Len= (abs(AABB_max.x - AABB_min.x)) delta = ( Len / (selection.count + 1) ) for i=1 to selection.count do ( Obj=selection[i] Obj.position.x = ( ((TargetObj.position.x) - (Len/2)) + (delta*i) ) ) -- end for i=1 to selection.count ) -- end if (ckb_x_spread.checked==true) if (ckb_y_spread.checked==true) then ( Len= (abs(AABB_max.y - AABB_min.y)) delta = ( Len / (selection.count + 1) ) for i=1 to selection.count do ( Obj=selection[i] Obj.position.y = ( (TargetObj.position.y) - (Len/2) + (delta*i) ) ) -- end for i=1 to selection.count ) -- end if (ckb_y_spread.checked==true)
if (ckb_z_spread.checked==true) then ( Len= (abs(AABB_max.z - AABB_min.z)) delta = ( Len / (selection.count + 1) ) for i=1 to selection.count do ( Obj=selection[i] Obj.position.z = ( (TargetObj.position.z) - (Len/2) + (delta*i) ) ) -- end for i=1 to selection.count ) -- end if (ckb_z_spread.checked==true) ) -- end if (TargetObj != undefined) ) -- end on btnSpread ------------------------------------------------------------------------ on btnAbout pressed do ( createdialog webbrowser_rollout ) ------------------------------------------------------------------------ on btnPivotToCenter pressed do ( for i in selection do i.pivot = i.center ) ------------------------------------------------------------------------ on btnResetXForm pressed do ( for i in selection do ( ResetXForm i convertToPoly i ) ) ------------------------------------------------------------------------ ) -- end rollout rolArrange CreateDialog rolArrange style: #(#style_titlebar, #style_border, #style_sysmenu)
« Последнее редактирование: 31 Августа 2011, 13:10:41 от Ruslan » |
|