3D Engineering

...Лучшее из общего.

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Свойство масштаба (scale) определяет сжатие или растяжение объекта вдоль указанной оси

Свойство масштаба (scale) определяет сжатие или растяжение объекта вдоль указанной оси. По умолчанию значение составляющих X, Y и Z свойства масштаба равно 1,0, что соответствует масштабу 100% объекта по каждой из осей координат. Если установить значение одной из составляющих свойства масштаба равным 2,0, исходный масштаб объекта увеличится вдвое, а если установить ее значение равным 0,5, то исходный масштаб объекта сократится наполовину.

Масштаб объекта можно изменить по всем трем координатам следующим образом:

s.scale = [2.0, 1.0, 0.5]

Аналогично положению, масштаб указывается в виде данных типа Point3. В приведенном выше примере объект растягивается в два раза вдоль оси X, не изменяет свой размер вдоль оси Y и сокращается вдоль оси Z. Если же объект требуется растянуть только вдоль оси X, для этого достаточно ввести следующую строку кода:

s.scale.x = 2.0

Для пропорционального масштабирования объекта достаточно умножить свойство масштаба на требуемую величину:

s.scale = 3.0 * s.scale -- или
s.scale *= 3.0

Приведенный выше фрагмент кода означает следующее: “Установить новое значение свойства масштаба, которое в 3 раза больше его текущего значения”. При этом объект масштабируется по всем трем осям.

Аналогично свойству pos и методу move для свойства масштаба имеется соответствующий метод scale. Данный метод реализуется следующим образом:

b = box()
scale b [1.0, 2.0, 3.0]

В этом фрагменте кода параллелепипед масштабируется на разную величину в направлении каждой из осей координат. Свойство .scale и метод scale действуют таким же образом, как и свойство .position и метод move, а именно: значение свойства задается явно в виде данных типа Point3, а метод изменяет это значение с указанным приращением.

Для масштабирования объекта выполните следующее упражнение.

                       1.  Введите в окне приемника команд следующую строку кода:

b = box()

                       2.  Для того чтобы установить свойство масштаба, введите и вычислите следующую строку кода:

b.scale = [2, 2, 2]

В качестве результата в приемнике команд возвращается значение [2, 2, 2] данного свойства.

                       3.  Для того чтобы вновь установить масштаб, введите следующую строку кода:

b.scale = [2, 2, 2]

В приемнике команд по-прежнему возвращается значение [2, 2, 2].

                       4.  Примените метод scale, введя следующую строку кода:

scale b [2, 2, 2]

В приемнике команд возвращается значение [4, 4, 4].

 

Архив статей

 июн   Июль 2020   авг

ВПВСЧПС
   1  2  3  4
  5  6  7  8  91011
12131415161718
19202122232425
262728293031 
Julianna Willis Technology

Случайная новость

vladirr

Приветствую всех снова... Сегодня мы с вами продолжим работу по улучшению интерфейса макса и приведению его в соответствие нашим пожеланиям. Исходная посылка - та же, что и в прошлом уроке - мы подготавливаем удобные инструменты для lp-моделирования. На примере сегодняшнего урока я хочу показать, как можно упростить себе жизнь, не заморачиваясь на серьезное программирование.
Итак, вводная - мы моделируем, требования к моделингу жесткие, мы практически постоянно должны контролировать количество вершин, фейсов, направления ребер... По умолчанию в максе отображаются только видимые ребра (Vizible Edges), но для нашей ситуации это не подходит. Конечно, мы можем кликнуть правой кнопкой по объекту, выбрать его свойства, снять флажок "Edges Only" и нажать OK. Итого - 4 операции, для обратного действия - столько же. Много! Нам желательно - один клик, либо нажатие одной клавиши.
Перво-наперво идем Customize->Customize User Interface вкладка Keyboard...

и убеждаемся, что такого параметра для назначения горячей клавиши нам не предоставили :( Смотрим то же на владке Toolbars - может быть, есть возможность вытащить на панель закладок кнопку с данной функцией? Опять неудача. Ищем пункт Properties в списке Action, в надежде посмотреть на макроскрипт и "выдрать" оттуда необходимый нам кусок...

М-да... Редактирование макроса для свойств объекта нам недоступно... Приблизительно к таким же по существу результатам приводит попытка найти информацию в справке по максскрипту. Тупик? Не совсем. Открываем окно MaxScript Listener и активируем MacroRecorder

- этот инструмент позволяет фиксировать большую часть событий, происходящих в пределах макса. Создаем бокс, кликаем по нему правой кнопкой мыши и выбираем пункт - Properties, снимаем галку Edges Only и жмем OK. смотрим в окно MaxScript Listener:

Ура, у нас есть параметр! Вводим для проверки в окне MaxScript Listener:

$.alledges = not $.alledges

и жмем ввод. Мы задали выражение на смену значения булевской переменной на противоположное. В окне проекции можно видеть, что вкрытые ребра исчесзли. Выполняем эту команду еще раз - появились, и так - по циклу. Замечательно. Следующий этап нам уже знаком - открываем пустой файл скрипта и пешем "рыбу" - шапку будущего макроса и закрытые круглые скобки в качестве тела макроса:

--------------------------------
macroScript ShowEdges
category:"MAX Script Tools"
internalcategory:"MAX Script Tools"
buttontext:"ShowHiddenEdges"
toolTip:"Show hidden edges"
(
)
------------------------------------

Сохраняем в каталог //root_max/ui/macroscript под именем Macro_AllEdges и заменяем разрешение на *.mcr. Перезапускаем макс и по аналогии с прошлым уроком размещаем кнопку нашего макроса на панели Main Toolbar. Теперь поработаем над красивостями :) а потому открываем фотошоп или аналогичный редактор, и рисуем иконки. В соответствии со справкой, нам надо нарисовать 4 *.bmp файла с общим названием и разными префиксами, я их обозвал MacroScriptTools*.bmp :
1. MacroScriptTools_16a.bmp - разрешение 16x15px, оттенки серого (определяем прозрачность иконки)
2. MacroScriptTools_16i.bmp - разрешение 16x15px, собственно сама иконка (маленькая)
3. MacroScriptTools_24a.bmp - разрешение 24x24px, оттенки серого (определяем прозрачность иконки)
4. MacroScriptTools_24i.bmp - разрешение 24x24px, собственно сама иконка (большая)

Над дизайном я особо не заморачивался, использовав уже существующую иконку и слегка ее изменив. Вы можете нарисовать свои иконки сами или скачать уже готовые мои :) Чтобы скачать архив иконок нажмите на изображение:

Замечательно, размещаем полученные изображения в папку
\\root_max\UI\Icons\

Идем обратно в макс и кликаем правой кнопкой мыши по созданной нами иконке макроса. Выбираем в контекстном меню пункт Edit Button Appearance и переключаемся в положение Images Button.

В разделе Group выбираем нашу группу: MacroScriptTools , в соответствии с названием, данным иконкам. В окне ниже - только одна иконка, и это правильно, поскольку данную группу создали мы и в ней всего одна иконка. Выбираем ее и жмем OK. Получили аккуратную иконку в интерфейсе :)


Щелкаем по иконку правой кнопкой мыши, выбираем пункт редактирования макроса и дорабатываем тело скрипта:
-----------------------------------
macroScript ShowEdges
category:"MAX Script Tools"
internalcategory:"MAX Script Tools"
buttontext:"ShowHiddenEdges"
toolTip:"Show hidden edges"

(
on execute do
(
if $selection.count == undefined then
(
)
else
try( $.alledges = not $.alledges ) catch ()

)


)
--------------------------------

Что мы написали?

Собственно говоря, только то, что если ничего не выделено (if $selection.count == undefined ) - ничего и не делать, в противном же случае (то есть когда что-то выделено) - изменить режим показа ребер выделения на противоположный.
В тело макроса так же добавлена конструкция

try( ...) catch ()

позволяющая избежать ошибки при попытке выполнить поставленную задачу над объектом, не имеющим ребер как таковых. Как и в прошлом уроке, по существу работы данной функции я вас отсылаю к справке :)
Ну что ж, сохраняем макрос (CTRL+S) и "компилируем" его (CTRL+E), создаем в сцене несколько различных объектов и, поочередно выделяя их по одному пытаемся нажать на нашу кнопку... результат очевиден :)

В качестве послесловия. В данном примере, в отличие от предыдущего, мы не стали задавать изменение состояния кнопки макроса, поскольку функция у нас циклична, и кнопка работает как классический триггер - "перебрасывает" объект из одного состояния в другое и обратно. Главная идея урока - помимо создания нужного мне инструмента :) - показать еще один способ поиска решения поставленной задачи, а так же показать "облегченный" алгоритм, подходящий для описания всех действий, изменяющих состояние или свойства объекта, которые можно описать с помощью булевских переменных. Напомню еще раз, что для уже созданного макроса всегда можно назначить горячую клавишу вызова, тогда вам не придется даже нажимать на кнопку, на создание которой потрачено столько трудов :)

Ну вот вроде и все на сегодня - пользуйтесь, экспериментируйте, творите.

Всегда Ваш - VladiRR

далее