Render.ru

Как получить габаритные размеры всех объектов в сцене ?

Рейтинг
95
#1
Каждый объект имеет габаритные размеры, посмотреть их можно в Properties каждого объекта. Так же можно посмотреть в основном меню Properties/Summary info, там список всех объектов, но вот размеров каждого объекта там нет.
Подскажите, может быть как-то можно получить список всех объектов в сцене с их габаритными размерами ? может плагин какой есть для этого ?
 

igorznag

Мастер
Рейтинг
103
#2
Подскажите, может быть как-то можно получить список всех объектов в сцене с их габаритными размерами?
Пример. Запускаем скрипт. Размеры будут в Generic Units:
Код:
actionMan.executeAction 0 "40472";clearlistener();
for o in objects do (n=in coordsys local nodelocalboundingbox o;
n=(n[2]-n[1])*o.scale;print (o.name+" "+n as string))
 
Рейтинг
95
#3
Пример. Запускаем скрипт. Размеры будут в Generic Units:
Код:
actionMan.executeAction 0 "40472";clearlistener();
for o in objects do (n=in coordsys local nodelocalboundingbox o;
n=(n[2]-n[1])*o.scale;print (o.name+" "+n as string))

спасибо !
Скажите, а можно ли его доработать ?
имена объектов я убрал, а можно убрать кавычки и скобки ?
"Box4870 [-1.60001,-72.1999,-31]"
хотелось бы как-то округлить размеры:
т.е. размер объекта 1.6, 72.2, 31
а в скрипте вот что -1.60001,-72.1999,-31
можно как-то округлить размеры и убрать минус перед размерами ?
 

igorznag

Мастер
Рейтинг
103
#4
Скажите, а можно ли его доработать?
Да. Запускаем скрипт. В новом окне нажимаем кнопку Get.
Код:
rollout test "Test"
(
fn prec v p= if p==0 then v as integer else floor (v*(pow 10 p))/(pow 10 p)
spinner sp_p "Precision:" range:[0,6,1] type:#integer scale:1 fieldWidth:40
button btn_get "Get"; edittext et_size height:200;  on btn_get pressed do
(
str="";for o in objects do 
(
n=in coordsys local nodelocalboundingbox o;n=(n[2]-n[1])*o.scale;
p=sp_p.value;n_x=(prec(abs n[1]) p)as string
n_y=(prec(abs n[2]) p)as string;n_z=(prec(abs n[3]) p)as string
n=n_x+","+n_y+","+n_z;str+=n+"\n"
)--for o in objects do 
et_size.text=str
)--on bnt_get pressed do
); createdialog test 300 280
 
Рейтинг
95
#5
Да. Запускаем скрипт. В новом окне нажимаем кнопку Get.

Спасибо большое, Ваши скрипты, то что нужно !
округление правда не работает, скрипт просто убирает знаки после запятой, но не округляет, это не фатально конечно, т.к. дальше через буфер обмена передаю в эксель и там уже дорабатываю, видимо в максе такое нельзя сделать.
а можно маштабность ввести ? т.е. все размеры умножить на 10
а можно между размерами не запятые ставить, а пробел ?
а можно между целой и дробной частью ставить не точку, а запятую ?
можно сделать, что бы скрипт показывал размеры только выделенных объектов ?
а можно как-то скроллинг списка сделать

как можно скрипт вывести на кнопочку ?
_______________________________
 
Рейтинг
95
#6
Хорошо, что теперь размеры разбиты на три колонки, до этого они были в одну строчку, при переносе в эксель

что сам смог изменить:
- умножил размеры на 10 (хорошо бы кнопочку маштабирования и число, на которое нужно умножить все размеры)
- убрал запятую между размерами, заменив на пробел
_________________
что хотелось бы ещё:
- если возможно, то округление, а не отбрасывание разрядности, т.е. 51.1999 -> 51.2
- заменить точку, между целой и дробной части на запятую
- добавить скроллинг в окне с размерами
- что бы показывал размеры только выделенных объектов, или сделать такую возможность, что бы не копировать нужные объекты в отдельный файл, что бы получить список их размеров.
Если округление сделать нельзя, то Precision сделать по умолчанию 6, а коэффициент, на который умножаются размеры, по умолчанию 10 и чт бы скрипт сразу выдавал результат, по настройкам по умолчанию, что бы не жать кнопочку Get. А если нужно изменить умолчания, то меняешь и жмешь опять Get
как добавить скрипт на кнопочку на тулбаре ?


Код:
rollout test "Test"
(
fn prec v p= if p==0 then v as integer else floor (v*(pow 10 p))/(pow 10 p)
spinner sp_p "Precision:" range:[0,6,1] type:#integer scale:1 fieldWidth:40
button btn_get "Get"; edittext et_size height:820; on btn_get pressed do
(
str="";for o in objects do
(
n=in coordsys local nodelocalboundingbox o;n=(n[2]-n[1])*o.scale;
p=sp_p.value;n_x=(prec(abs n[1]*10) p)as string
n_y=(prec(abs n[2]*10) p)as string;n_z=(prec(abs n[3]*10) p)as string
n=n_x+" "+n_y+" "+n_z;str+=n+"\n"
)--for o in objects do
et_size.text=str
)--on bnt_get pressed do
); createdialog test 300 900
 

igorznag

Мастер
Рейтинг
103
#7
Чтобы добавить скрипт на кнопочку на тулбаре, нужно выделить текст скрипта и перетащить его на тулбар.
Код:
rollout test "Test"
(
fn round_to val n = 
(
mult = pow 10 n; a=(floor ((val * mult) + 0.5)) / mult; a=a as string
if a.count>2 then if a[a.count]=="0" and a[a.count-1]=="." then a=substring a 1 (a.count-2)
a
)
fn comma val = (a=val;b=filterstring val "."; if b.count==2 then a=b[1]+","+b[2];a)
spinner sp_p "Round:" range:[0,6,1] type:#integer scale:1 fieldWidth:40
spinner sp_s "Scale:" range:[0,1e+9,1] type:#float fieldWidth:50
button btn_get "Get"; button btn_copy_to_clipboard "Copy to clipboard"
listbox lb_size height:12
on btn_copy_to_clipboard pressed do 
(
str=""; for i=1 to lb_size.items.count do str+=lb_size.items[i]+"\n"
setclipboardText str
)--on btn_copy_to_clipboard pressed do 
on btn_get pressed do
(
size_a=#();for o in selection do 
(
n=in coordsys local nodelocalboundingbox o;n=(n[2]-n[1])*o.scale*sp_s.value; p=sp_p.value;
n_x=(n[1] as string) as float
n_y=(n[2] as string) as float
n_z=(n[3] as string) as float
n_x=comma((round_to(abs n_x) p)as string)
n_y=comma((round_to(abs n_y) p)as string)
n_z=comma((round_to(abs n_z) p)as string)
n=n_x+" "+n_y+" "+n_z; append size_a n
)--for o in objects do 
lb_size.items=size_a 
)--on bnt_get pressed do
on test open do btn_get.pressed()
); createdialog test 300 280
 
Рейтинг
95
#8
Чтобы добавить скрипт на кнопочку на тулбаре, нужно выделить текст скрипта и перетащить его на тулбар.
Спасибо, тестирую перенос размеров в файл...
_____________________________________________
всё отлично, округляется правильно !!!
просто супер !
все функции работают
 
Рейтинг
95
#9
Чтобы добавить скрипт на кнопочку на тулбаре, нужно выделить текст скрипта и перетащить его на тулбар.

обнаружена ошибка !
если размер больше 3-х символов в целой части, т.е. 1000 и больше, то при переносе в эксель, все три размера пишутся слитно, без пробелов =(
_____________________________________
вылечил добавлением второго пробела между размерами
 
Сверху