Skip to main content

Cook Interface (LuaScript)

Cook Interface представляет собой универсальный интерфейс, предназначенный для запроса и изменения данных Scenegraph.

Используемые в процессе работы с данными методы могут быть условно разделены на две группы:

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

Атрибуты CookInterface

CookInterface.get_attr(name, location, input_index, inherit)

Возвращает указанный атрибут Scenegraph. Используется как вспомогательный инструмент при выполнении задач или для вывода результата взаимодействия нескольких атрибутов. get_attr позволяет получить данные любой части графа сцены по имени и его расположению (как абсолютному, так и относительному).

Стандартно get_attr возвращает значение указанного атрибута относительно стандартной точки входа. В большинстве случаев, граф обладает одной точкой входа, поэтому указывать ветку необязательно. Если граф обладает несколькими входами, например, как в случае с узлом Merge, то для того, чтобы указать ветку используется параметр input_index. При указании, input_index должен соответствовать условию 0 <= input_index < num_input_indexes() (индекс должен быть больше нуля, но меньше количества входов узла).

note

get_attr возвращает исходные данные локации. Таким образом, при использовании метода set_attr изменения не будут отображаться в результате метода get_attr. В случае, если пользователю требуются данные выхода, необходимо использовать метод get_output_attributes.

Parameters:

  • name — Имя атрибута.
  • location — Путь к локации.
  • input_index — Индекс входа.
  • inherit — Если данное значение равно true, то атрибуты будут извлекаться с учетом наследования.

Returns — Значение атрибута на локации по указанному индексу.

CookInterface.get_output_attributes(name)

Возвращает указанный атрибут для текущей локации. Данный метод может быть использован при определении выходных атрибутов с помощью exec_func которые могут быть обработаны при дальнейших операциях.

Parameters:

  • name — Имя запрашиваемого атрибута.

Returns — Атрибут на выходе узла. Если не установлен, будет возвращено значение null.

Изменение атрибутов

CookInterface.set_attr(name, att)

Устанавливает указанный атрибут на локацию.

name может быть указано перечислением через точку, например: attr1.attr2.attr3. В данном случае GroupAttribute будет создан для каждого указанного уровня иерархии. В свою очередь, значение groupInherit будет определять глубину наследования GroupAttribute.

note

Изменение атрибутов с помощью set_attr в текущей локации не будет отражено на функциях, которые взаимодействуют со входом узла, например, на get_attr.

Метод get_attr запрашивает информацию входа локации. Те данные, которые были изменены другими методами или локациями, не будут отображены. Чтобы отобразить все текущие модификации, используйте метод get_output_attributes.

Parameters:

  • name — имя атрибута, который будет создан.
  • att — значение атрибута.

Scene graph

CookInterface.is_root()

Отображает, является ли текущая локация корневой.

note

Корневая локация часто, но не всегда соответствует пути /root.

CookInterface.get_root_path()

Возвращает значение текущей локации относительно корневой.

Returns — Путь корневой локации.

CookInterface.name()

Метод для получения имени текущей локации.

Returns — Имя текущей локации.

CookInterface.full_path()

Метод для получения полного пути к текущей локации.

Returns — Полный путь к текущей локации.

CookInterface.parent_path()

Метод получения пути к родительской локации относительно текущей.

Например, при получении исполнении метода на локации geo, будет возвращен следующий путь:

"/root/world/geo" -> "world/geo"

Returns — Родительскую локацию относительно текущей.

CookInterface.get_potential_children()

Возвращает список String атрибутов в виде списка, содержащего список потенциальных дочерних локаций.

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

Parameters:

  • out — список потенциальных дочерних локаций.

Управление списком локаций

CookInterface.create_child(name, fn_args, new_fn, data, data_destr)

Создает дочернюю локацию с указанным именем и атрибутами, если локация с этим именем не существует. В случае, если указана существующая локация, целевая локация сохранит имеющиеся значения атрибутов и дочерние локации. Чтобы гарантированно создать дочернюю локацию без предустановленных атрибутов, рекомендуется использовать remove_child перед созданием локации.

Parameters:

  • name — Имя локации
  • fn_args — Аргументы новой функции, если она указана посредством аргумента new_fn.
  • new_fn — Тип функции SceneLibFunction, который будет применен к дочерним локациям. Если не указан, применяется текущая функция.
  • data — Опциональный указатель на приватные данные, которые могут использоваться на дочерних локациях.
  • data_destr — Опциональное значение функции обратного вызова, которое используется для очистки приватных данных.

CookInterface.remove_child(name)

Удаляет указанную дочернюю локацию.

note

Метод remove_child более эффективен, чем переход в дочернюю локацию и последующее ее удаление с помощью delete_self. Так как использование delete_self не удаляет локацию из списка get_potential_children.

Parameters:

  • name — Имя дочерней локации для удаления.

CookInterface.remove_children()

Удаляет на текущей локации все дочерние. В том числе те, которые были созданы в ходе выполнения текущего скрипта.

CookInterface.delete_self()

Удаляет выбранную локацию.

note

Вызов функции delete_self не затрагивает родительские локации, оставляя локацию в списке потенциальных дочерних элементов. Поэтому, при удалении локации в большинстве случаев предпочтителен метод remove_child.

Управление обходом локаций

CookInterface.stop_child_traverse()

Останавливает обход дочерних локаций относительно текущей.

Значение Motion Blur

Значения shutter_open и shutter_close определяют минимальное и максимальное время, за которое виртуальный затвор открывается и закрывается. Чем больше разница значений открытого и закрытого затвора, тем большее размытие будет у объектов при движении. Если эти значения равны, размытие движений будет неактивно.

CookInterface.get_frame()

Возвращает значение текущего кадра

Returns — Получить значение текущего кадра.

CookInterface.get_shutter_open()

Время открытия затвора относительно текущего кадра.

Returns — Время открытия затвора.

CookInterface.get_shutter_close()

Время закрытия затвора относительно текущего кадра.

Returns — Время закрытия затвора.

CookInterface.get_num_samples()

Возвращает целочисленное значение временных выборок между открытием и закрытием затвора.

Returns — Целочисленное значение временных выборок.

Функции другого типа

CookInterface.prefetch(location_path, input_index)

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

Метод prefetch рекомендуется использовать, если модуль SceneLib высчитывает несколько различных родительских локаций одновременно.

note

Не требуется указывать родительские локации функцией prefetch входа по-умолчанию.

Использование prefetch создает зависимость потока данных, поэтому не следует включать в предварительную выборку данные, которые не требуются для задачи.

:param location_path: локация предварительной выборки. :param input_index: индекс, по которому запрашивается указанный атрибут location_path. В большинстве случаев он соответствует стандартному входу. В случае, если узел содержит несколько входных веток (например, Merge), индекс необходимо указывать.

CookInterface.get_private_data()

Возвращает указатель приватных данных на текущей локации.

Returns — Указатель приватных данных.

CookInterface.get_fn_arg(name)

Возвращает значение указанного атрибута или все аргументы локации, если имя атрибута не указано.

Значения атрибутов возвращаются в формате GroupAttribute. Данный метод позволяет получить любые доступные на локации значения атрибутов.

В случае, если требуется получить несколько значений атрибутов, их имена перечисляются без пробелов через знак ".". |br| Например: a.b.c

Parameters:

  • name — Список атрибутов через точку.

Returns — Значения атрибутов.

exec_func(string function_type, GroupAttribute args)

Исполнить на локации выбранную функцию SceneLib с указанными аргументами. Возвращает true если функция с указанными параметрами была выполнена и найдена, false если функция с указанными параметрами не найдена.

Parameters:

  • function_type — Тип функции, которая должна быть запущена.
  • args — GroupAttribute, который передает аргументы указанной функции SceneLib.

num_input_indexes()

Returns — Количество входов текущей локации.

get_input_index()

Возвращает индекс входа выбранной локации.

В большинстве случаев, метод get_input_index будет возвращать значение "0". Если метод возвращает значение равное 0, то используется стандартный индекс. Если значение индекса > 0, то помимо стандартного, используются дополнительные входы.

Метод используется для определения номера входа при использовании Merge.

Некоторые из локаций могут использовать только дополнительные входы. Такие локации создаются отдельно, а затем применяются на остальные с помощью Merge.

Returns — Индекс входа, на котором была создана локация.