Система публикации функций и интерфейсы

Подключаемые модули 3dsMax позволяют создавать новые типы объектов. Одни подключаемые модули входят в стандартный комплект 3dsMax, а другие разрабатываются независимыми производителями с помощью набора инструментальных средств разработки программ (SDK — Software Developer Kit). Аналогично остальным типам объектов такие объекты обладают рядом свойств и методов. Система публикации функций (FPS — Function Publishing System) предоставляет средства для запроса подобных объектов в MAXScript с целью определить их свойства, методы и связанные с интерфейсоми действия.


Приложение

Система публикации функций была разработана и внедрена в версии 3dsMax 4, С тех пор все свойства и методы для новых и уже имеющихся объектов MAXScript публикуются с помощью данной системы, а не встраиваются непосредственно в объекты,

С точки зрения публикации функций интерфейс представляет собой ряд свойств, методов и связанными с интерфейсоми действий, доступных для объекта. Это понятие не следует путать с пользовательским интерфейсом. Доступные для объекта интерфейсы определяются с помощью функции getInterfaces:

getInterfaces <объект>

Данная функция выводит перечень интерфейсов для указанного объекта. Обна­ружив нужный интерфейс, вы можете запросить свойства, методы и связанные с интерфейсом действия, доступные посредством данного интерфейса, введя следующую команду:

showInterface <объект>.<интерфейс>

Эта команда сродни функции showProperties. Если функция showProperties выводит свойства, встроенные в объект, то команда showInterface выводит свойства, методы и действия, введенные в объекты, существующие с версии 3dsMax 4, или же в новые объекты, созданные с помощью подключаемых модулей.

Для вывода всех интерфейсов, доступных для объектов, стоящих ниже класса Node, служит следующая команда: showInterfaces node

С помощью любой из этих команд можно вывести интерфейсы наиболее удобным для написания сценариев способом. Так, функция getInterfaces и команда showInterface отображают интерфейсы для отдельного объекта независимо от их доступности для всех остальных узлов. А команда showInterfaces (с буквой V в конце) отображает интерфейсы для всех узлов.

Рассмотрим некоторые свойства и методы, доступные посредством системы публикации функций.

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

1. Установите 3dsMax в исходное состояние и очистите приемник команд.

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

b = box()

getInterfaces b

В итоге будут выведены все интерфейсы для параллелепипедного объекта:

#(<MixinInterface:IAssembly>,

<MixinInterface:INodeGIProperties>,

<MixinInterface:INode>,

<MixinInterface:INodeLayerProperties>, <MixinInterface:INodeBakeProperties>,

<MixinInterface:SkinPose>)

Эти интерфейсы могут быть использованы для обнаружения дополнительных свойств, методов и действий, доступных для параллелепипеда. Далее вам предстоит ознакомиться с интерфейсом Inode.

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


Приложение

По этой команде выводится ряд свойств и методов применительно к параллелепипеду. Так, свойство .handle предоставляет уникальный идентификационный номер, связанный с объектом.

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

При выполнении этой строки кода возвращается идентификационный номер 1 в качестве дескриптора параллелепипедного объекта. Смена имени параллелепипеда никак не сказывается на свойстве .handle. С его помощью параллелепипед остается по-прежнему доступным на сцене.

Кроме того, многие свойства интерфейса можно использовать, не указывая перед ними сам интерфейс.

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

При выполнении этой строки кода возвращается идентификационный номер 1. В данном случае свойство .handle использовано без указания перед ним интерфейса .INode. Если свойство интерфейса не вступает в конфликт с имеющимся в MAXScript свойством, сам интерфейс можно не указывать между именем объекта и свойством интерфейса.

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

При выполнении этой строки выводится каждый интерфейс, а также его свойства, методы и действия. Третьим выводится интерфейс INode. В этой части листинга приведены те же свойства, методы и действия, что и при выполнении команды showinterface b.INode.

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

1. В этом упражнении вам предстоит воспользоваться интерфейсом, который обнаруживается с помощью системы публикации функций, чтобы получить дополнительные методы для ограничения по линии взгляда. Установите 3dsMax в исходное состояние и очистите приемник команд.

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

clearListener()

lookAtObj = cone pos: [50,0,0]

lookAtTarg = dummy()

c = lookat_constraint()

lookAtObj.rotation.controller = c

В двух последних строках кода в переменной c создается экземпляр ограничения по линии взгляда и затем он присваивается конусу.

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

По этой команде выводятся встроенные свойства ограничения по линии взгляда.


Приложение

4. Введите в приемнике команд следующую строку кода: c.target_axis = 2

В этой строке кода встроенное свойство используется для выбора оси Y ориентации цели.

По команде showProperties выводятся свойства, используемые для получения и установки разных параметров осей, но не свойства для получения и установки параметров цели. Такие свойства и методы обнаруживаются посредством интерфейса.

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

По этой команде выводятся интерфейсы для ограничения по линии взгляда. В данном случае это единственный интерфейс constraints.

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

showInterface c.constraints

По этой команде выводятся свойства, методы и связанные с ними действия, доступные для данного интерфейса. Это, в частности, метод appendTarget для присоединения целей.

7. Введите в приемнике команд следующую строку кода: c.constraints.appendTarget lookAtTarg 50

С помощью метода из интерфейса в этой строке кода цель по линии взгляда вводится в список целей с весом 50.

8. Переместите конус, обратив внимание на то, что он нацелен на фиктивный объект.

Интерфейс constraints — это специальный вид интерфейса, называемого MixinInterface. Это означает, что интерфейс является средством доступа к множеству элементов. Иными словами, в одном интерфейсе совмещается множество элементов.

Если для решения конкретной задачи требуется найти подходящее свойство или метод, воспользуйтесь функцией getInterfaces и командами showInterface и showInterfaces, чтобы получить перечень свойств и методов, доступных для любого объекта.