20 Мая 2024, 15:16:44
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Навигация по форуму







guest3d
Quest3D - Русскоязычное сообщество > Другие программы > Maya, 3DsMAX, VRay и т.д. > [maxscript] утилита для распределения объектов
[maxscript] утилита для распределения объектов
(Прочитано 4706 раз)
  [1]
Печать
Ruslan | ***** | Ветеран | Сообщений: 664 | « 28 Августа 2011, 23:54:54 »
[maxscript] утилита для распределения объектов |
0
"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)

* Arrange3.jpg (33.9 Кб, 128x254 - просмотрено 1649 раз.)
« Последнее редактирование: 31 Августа 2011, 13:10:41 от Ruslan »
 
  [1]
Печать
 
Quest3D - Русскоязычное сообщество > Другие программы > Maya, 3DsMAX, VRay и т.д. > [maxscript] утилита для распределения объектов
Перейти в: