1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Общие вопросы", создана пользователем sergeos, 18 май 2015.

Модераторы: Артер
  1. sergeos

    sergeos Пользователь сайта

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

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Пример. Выделяем нужные объекты.
    Запускаем скрипт. В новом окне нажимаем кнопку 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 нравится это.
  3. sergeos

    sergeos Пользователь сайта

    С нами с:
    23.04.2015
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    Очень даже работоспособно. Проверил на небольшом участке, выдаёт верно.
    Попользуюсь дольше - расскажу больше.
    igorznag, Гран мерси!
     
Модераторы: Артер

Поделиться этой страницей