Дальнейшая работа с Zero-Touch
Last updated
Last updated
Понимая, как создать проект Zero-Touch, мы можем подробно рассмотреть особенности создания узла, изучив пример ZeroTouchEssentials на Dynamo Github.
Многие стандартные узлы Dynamo, по сути, являются узлами Zero-Touch, как и большинство узлов Math, Color и DateTime.
Для начала скачайте проект ZeroTouchEssentials на странице https://github.com/DynamoDS/ZeroTouchEssentials
В Visual Studio откройте файл решения ZeroTouchEssentials.sln
и выполните сборку.
Файл
ZeroTouchEssentials.cs
содержит все методы, которые будут импортированы в Dynamo.
Откройте Dynamo и импортируйте ZeroTouchEssentials.dll
, чтобы получить узлы, на которые мы будем ссылаться в следующих примерах.
Примеры кода извлекаются из ZeroTouchEssentials.cs. XML-документация удалена для краткости. В каждом примере с помощью кода будет создан узел, приведенный на изображении над ним.
Dynamo поддерживает определение значений по умолчанию для входных портов в узле. Значения по умолчанию передаются в узел, если у портов нет соединений. Значения по умолчанию выражаются с помощью механизма указания дополнительных аргументов на C# в соответствии с материалами Руководства по программированию на C#. По умолчанию задаются следующим образом.
Задайте для параметров метода значение по умолчанию: inputNumber = 2.0
Значение по умолчанию отображается при наведении курсора на входной порт узла.
Возврат нескольких значений — несколько более сложная задача, чем создание нескольких наборов входных данных. В этом случае данные возвращаются с использованием словаря. Записи словаря становятся портами на выходной стороне узла. Порты с возвратом нескольких значений создаются следующим образом.
Добавьте using System.Collections.Generic;
для использования Dictionary<>
.
Добавьте using Autodesk.DesignScript.Runtime;
для использования атрибута MultiReturn
. В данном случае ссылка на DynamoServices.dll содержится в пакете NuGet DynamoServices.
Добавьте к методу атрибут [MultiReturn(new[] { "string1", "string2", ... more strings here })]
. Строки ссылаются на ключи в словаре и становятся именами выходных портов.
Выполните возврат Dictionary<>
из функции с ключами, совпадающими с именами параметров в атрибуте: return new Dictionary<string, object>
.
См. этот пример кода в ZeroTouchEssentials.cs
Узел, возвращающий несколько выходных данных.
Обратите внимание, что теперь существует два выходных порта, названных в соответствии с указанными ключами словаря.
Рекомендуется прикреплять к узлам Dynamo документацию, описывающую функции узла, входные и выходные данные, теги поиска и т. д. Для этого используются теги XML-документации. XML-документация создается следующим образом.
Документацией считается любой текст комментария после значка «///» (три наклонные черты),
Например: /// Documentation text and XML goes here
(Текст документации и XML размещается здесь)
После трех наклонных черт создайте теги XML над методами, которые Dynamo будет считывать при импорте DLL-файла.
Например: /// <summary>...</summary>
Включите XML-документацию в Visual Studio, выбрав Project > Project Properties > Build
(Проект > Свойства проекта > Сборка) и поставив флажок XML documentation file
(Файл XML-документации).
Visual Studio создаст XML-файл в указанной папке.
Типы тегов:
/// <summary>...</summary>
обозначает основную документацию для узла, которая отображается в виде подсказки над узлом в строке поиска слева.
/// <param name="inputName">...</param>
создает документацию для конкретных входных параметров.
/// <returns>...</returns>
создает документацию для выходного параметра.
/// <returns name = "outputName">...</returns>
создает документацию для нескольких выходных параметров.
/// <search>...</search>
сопоставляет узел с результатами поиска на основе списка, разделенного запятыми. Например, если создать узел, который разделяет сетку, можно добавить такие теги, как mesh, subdivision и catmull-clark.
Ниже приведен пример узла с описаниями входных и выходных данных, а также сводкой, которая будет отображаться в библиотеке.
См. пример кода в ZeroTouchEssentials.cs
Обратите внимание на содержимое этого примера узла.
Сводка узла.
Описание входных данных.
Описание выходных данных.
В Dynamo отсутствует ключевое слово new
, поэтому объекты создаются с использованием статических методов конструирования. Объекты создаются следующим образом.
Сделайте конструктор внутренним internal ZeroTouchEssentials()
, если не требуется иное.
Постройте объект с помощью статического метода, например public static ZeroTouchEssentials ByTwoDoubles(a, b)
.
Примечание. В Dynamo используется префикс «By», указывающий на то, что статический метод является конструктором. Использовать этот префикс необязательно, но с ним ваша библиотека будет соответствовать общепринятому стилю Dynamo.
См. пример кода в ZeroTouchEssentials.cs
После импорта DLL-файла ZeroTouchEssentials в библиотеке появится узел ZeroTouchEssentials. Этот объект можно создать с помощью узла ByTwoDoubles
.
В библиотеках Dynamo можно использовать собственные типы геометрии Dynamo в качестве входных данных и создавать новую геометрию в качестве выходных данных. Типы геометрии создаются следующим образом.
Вставьте ссылку на файл ProtoGeometry.dll в проект, добавив using Autodesk.DesignScript.Geometry;
в верхней части файла C# и добавив пакет NuGet библиотеки ZeroTouchLibrary в проект.
Важно. Дополнительную информацию об управлении ресурсами геометрии, возврат которых не выполняется из функций, см. в приведенном ниже разделе Удаление/использование операторов.
Примечание. Геометрические объекты Dynamo используются так же, как и любые другие объекты, передаваемые функциям.
См. пример кода в ZeroTouchEssentials.cs
Узел, который получает длину кривой и удваивает ее.
В качестве входных данных для этого узла можно использовать геометрию кривой.
Если вы не используете Dynamo версии 2.5 или более поздней, управлять геометрическими ресурсами, которые не возвращены из функций, необходимо вручную. В Dynamo 2.5 и более поздних версий геометрические ресурсы обрабатываются системой, однако в сложных сценариях и для сокращения объема используемой памяти вы можете удалять геометрию вручную. Движок Dynamo обрабатывает все геометрические ресурсы, которые возвращаются из функций. Невозвращенные геометрические ресурсы можно обработать вручную следующими способами.
С помощью оператора using:
Документация об использовании оператора using
Дополнительные сведения о новых функциях обеспечения стабильности, появившихся в Dynamo 2.5, см. в разделе Повышение стабильности геометрии в Dynamo
При выполнении вызовов Dispose вручную:
При публикации более поздней версии библиотеки имена узлов могут измениться. Изменения имени можно указать в файле миграции, чтобы графики, построенные на основе предыдущих версий библиотеки, продолжали работать правильно при обновлении. Миграция выполняется следующим образом.
Создайте файл .xml
в той же папке, что и файл .dll
, в следующем формате: ИмяФайлаDLL.Migrations.xml.
В диалоговом окне .xml
создайте один элемент <migrations>...</migrations>
.
Внутри элемента миграции создайте элементы <priorNameHint>...</priorNameHint>
для каждого изменения имени.
При каждом изменении имени укажите <oldName>...</oldName>
и <newName>...</newName>
Щелкните правой кнопкой мыши и выберите
Add > New Item
(Добавить > Новый элемент).Выберите
XML File
(XML-файл).В нашем проекте мы присвоим файлу миграции имя
ZeroTouchEssentials.Migrations.xml
.
Этот код указывает Dynamo, что узлы с именем GetClosestPoint
теперь называются ClosestPointTo
.
См. пример кода в файле ProtoGeometry.Migrations.xml
Zero-Touch в настоящее время не поддерживает использование универсальных типов. Их можно использовать, но не в коде, который импортируется напрямую, если тип не задан. Универсальные методы, свойства и классы, у которых нет типа, нельзя предоставить.
В примере ниже узел Zero-Touch типа T
не будет импортирован. Если остальные компоненты библиотеки импортируются в Dynamo, возникнут исключения отсутствующих типов.
При использовании универсального типа с типом, заданным в этом примере, импорт в Dynamo будет выполнен.