Система публикации функций и интерфейсы
Подключаемые модули 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, чтобы получить перечень свойств и методов, доступных для любого объекта.