Render.ru

Получить список размеров объектов

sergeos

Пользователь сайта
Рейтинг
2
#1
Добрый день!
Скажите есть ли опция в максе которая могла бы вывести все размеры выделенных объектов?
Допустим, нарисовал я тумбочку: Боковые стенки, верхняя крышка и нижняя. Получилось 4 объекта. Как получить их размеры? Например как-то так:
Объект 1 380х450х18
Объект 2 450х220х18
Объект 3 380х450х18
Объект 4 450х220х18
Есть ли что-то в этом духе для подсчета размеров?
 

igorznag

Мастер
Рейтинг
103
#2
Пример. Выделяем нужные объекты.
Запускаем скрипт. В новом окне нажимаем кнопку 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

Пользователь сайта
Рейтинг
2
#3
Очень даже работоспособно. Проверил на небольшом участке, выдаёт верно.
Попользуюсь дольше - расскажу больше.
igorznag, Гран мерси!
 
Сверху