Добрый день!
Скажите есть ли опция в максе которая могла бы вывести все размеры выделенных объектов?
Допустим, нарисовал я тумбочку: Боковые стенки, верхняя крышка и нижняя. Получилось 4 объекта. Как получить их размеры? Например как-то так:
Объект 1 380х450х18
Объект 2 450х220х18
Объект 3 380х450х18
Объект 4 450х220х18
Есть ли что-то в этом духе для подсчета размеров?
Пример. Выделяем нужные объекты.
Запускаем скрипт. В новом окне нажимаем кнопку Get.
try destroydialog test catch()
rollout test "Size"
(
button btn_get "Get" pos:[5,5] width:50 height:30
button btn_cc "Copy to Clipboard" pos:[160,5]
spinner sp_round "Round" range:[0,4,0] fieldWidth:30 type:#integer pos:[65,7]
edittext et_size height:160 pos:[5,40]
fn round_to val n =
(local mult = 10.0 ^ n;(floor ((val * mult) + 0.5)) / mult)
on btn_cc pressed do setclipboardText et_size.text
on btn_get pressed do
(
s=1.0;
if units.DisplayType==#Metric then
(
s= case units.SystemType of
(
#inches:s=2.54
#feet:s=30.48
#miles:160934.4
#millimeters:0.1
#centimeters:1
#meters:100
#kilometers:100000
default:1
)--s= case units.SystemType of
if units.MetricType==#Millimeters then s*=10
if units.MetricType==#Centimeters then s/=1
if units.MetricType==#Meters then s/=100
if units.MetricType==#Kilometers then s/=100000
s*=units.SystemScale
)--if units.DisplayType==#Metric then
str=""
for obj in selection do
(
setclipboardText
m=obj.objecttransform.rotationpart as matrix3
in coordsys m
(
nlbb=nodelocalboundingbox obj
xd=nlbb[2].x-nlbb[1].x; yd=nlbb[2].y-nlbb[1].y; zd=nlbb[2].z-nlbb[1].z
xd*=s;yd*=s;zd*=s
n=sp_round.value
xd=round_to xd n;yd=round_to yd n;zd=round_to zd n
if n==0 then (xd=int xd; yd=int yd; zd=int zd; )
xd=xd as string;yd=yd as string;zd=zd as string;
ss=obj.name+" "+xd+"x"+yd+"x"+zd
str+=ss; str+="\n"
)--in coordsys obj.objecttransform
)--for obj in selection do
et_size.text=str
)--on btn_get pressed do
); createdialog test 300 200
Чтобы запустить скрипт нужно:
1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
2. Сохраняем текстовый файл с названием "test.ms"
3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
sergeos
Скажите есть ли опция в максе которая могла бы вывести все размеры выделенных объектов?
Допустим, нарисовал я тумбочку: Боковые стенки, верхняя крышка и нижняя. Получилось 4 объекта. Как получить их размеры? Например как-то так:
Объект 1 380х450х18
Объект 2 450х220х18
Объект 3 380х450х18
Объект 4 450х220х18
Есть ли что-то в этом духе для подсчета размеров?
igorznag
Запускаем скрипт. В новом окне нажимаем кнопку Get.
try destroydialog test catch() rollout test "Size" ( button btn_get "Get" pos:[5,5] width:50 height:30 button btn_cc "Copy to Clipboard" pos:[160,5] spinner sp_round "Round" range:[0,4,0] fieldWidth:30 type:#integer pos:[65,7] edittext et_size height:160 pos:[5,40] fn round_to val n = (local mult = 10.0 ^ n;(floor ((val * mult) + 0.5)) / mult) on btn_cc pressed do setclipboardText et_size.text on btn_get pressed do ( s=1.0; if units.DisplayType==#Metric then ( s= case units.SystemType of ( #inches:s=2.54 #feet:s=30.48 #miles:160934.4 #millimeters:0.1 #centimeters:1 #meters:100 #kilometers:100000 default:1 )--s= case units.SystemType of if units.MetricType==#Millimeters then s*=10 if units.MetricType==#Centimeters then s/=1 if units.MetricType==#Meters then s/=100 if units.MetricType==#Kilometers then s/=100000 s*=units.SystemScale )--if units.DisplayType==#Metric then str="" for obj in selection do ( setclipboardText m=obj.objecttransform.rotationpart as matrix3 in coordsys m ( nlbb=nodelocalboundingbox obj xd=nlbb[2].x-nlbb[1].x; yd=nlbb[2].y-nlbb[1].y; zd=nlbb[2].z-nlbb[1].z xd*=s;yd*=s;zd*=s n=sp_round.value xd=round_to xd n;yd=round_to yd n;zd=round_to zd n if n==0 then (xd=int xd; yd=int yd; zd=int zd; ) xd=xd as string;yd=yd as string;zd=zd as string; ss=obj.name+" "+xd+"x"+yd+"x"+zd str+=ss; str+="\n" )--in coordsys obj.objecttransform )--for obj in selection do et_size.text=str )--on btn_get pressed do ); createdialog test 300 200Чтобы запустить скрипт нужно:1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
2. Сохраняем текстовый файл с названием "test.ms"
3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
sergeos
Попользуюсь дольше - расскажу больше.
igorznag, Гран мерси!