Дальнейшая работа с Zero-Touch
Понимая, как создать проект Zero-Touch, мы можем подробно рассмотреть особенности создания узла, изучив пример ZeroTouchEssentials на Dynamo Github.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-a2c4caf5ed932f8ea863ea38eefdddf6dc3d8e2b%252Footbzerotouch.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5d6910c3&sv=1)
Многие стандартные узлы Dynamo, по сути, являются узлами Zero-Touch, как и большинство узлов Math, Color и DateTime.
Для начала скачайте проект ZeroTouchEssentials на странице https://github.com/DynamoDS/ZeroTouchEssentials
В Visual Studio откройте файл решения ZeroTouchEssentials.sln
и выполните сборку.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-2175e6c902f745a3360892b13e6af37ec53501e5%252Fvs-build-zte.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6d49881f&sv=1)
Файл
ZeroTouchEssentials.cs
содержит все методы, которые будут импортированы в Dynamo.
Откройте Dynamo и импортируйте ZeroTouchEssentials.dll
, чтобы получить узлы, на которые мы будем ссылаться в следующих примерах.
Примеры кода извлекаются из ZeroTouchEssentials.cs. XML-документация удалена для краткости. В каждом примере с помощью кода будет создан узел, приведенный на изображении над ним.
Входные значения по умолчанию
Dynamo поддерживает определение значений по умолчанию для входных портов в узле. Значения по умолчанию передаются в узел, если у портов нет соединений. Значения по умолчанию выражаются с помощью механизма указания дополнительных аргументов на C# в соответствии с материалами Руководства по программированию на C#. По умолчанию задаются следующим образом.
Задайте для параметров метода значение по умолчанию:
inputNumber = 2.0
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-84ee31b0318008b2cecc81d8ae51556e59725700%252Fdefaultval.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b418de64&sv=1)
Значение по умолчанию отображается при наведении курсора на входной порт узла.
Возврат нескольких значений
Возврат нескольких значений — несколько более сложная задача, чем создание нескольких наборов входных данных. В этом случае данные возвращаются с использованием словаря. Записи словаря становятся портами на выходной стороне узла. Порты с возвратом нескольких значений создаются следующим образом.
Добавьте
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
Узел, возвращающий несколько выходных данных.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-7ad7968f0ce50ac5e0d1beec7607a4a2db78a862%252Fmultipleoutputs.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2ab8af12&sv=1)
Обратите внимание, что теперь существует два выходных порта, названных в соответствии с указанными ключами словаря.
Документация, подсказки и поиск
Рекомендуется прикреплять к узлам 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-документации).
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-a526b41f4e8d4ad674997ded1fea6954684bed81%252Fvs-xml.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=16e30ac5&sv=1)
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
.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-b372b1e6e123888f1693e35e5ef909493e201f3c%252Fdyn-constructor.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6d362d73&sv=1)
Использование типов геометрии Dynamo
В библиотеках Dynamo можно использовать собственные типы геометрии Dynamo в качестве входных данных и создавать новую геометрию в качестве выходных данных. Типы геометрии создаются следующим образом.
Вставьте ссылку на файл ProtoGeometry.dll в проект, добавив
using Autodesk.DesignScript.Geometry;
в верхней части файла C# и добавив пакет NuGet библиотеки ZeroTouchLibrary в проект.Важно. Дополнительную информацию об управлении ресурсами геометрии, возврат которых не выполняется из функций, см. в приведенном ниже разделе Удаление/использование операторов.
Примечание. Геометрические объекты Dynamo используются так же, как и любые другие объекты, передаваемые функциям.
См. пример кода в ZeroTouchEssentials.cs
Узел, который получает длину кривой и удваивает ее.
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-ab6b254167abb063d918dc1ab3da3da3d3a43967%252Fdoublelength.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d938e74f&sv=1)
В качестве входных данных для этого узла можно использовать геометрию кривой.
Удаление/использование операторов
Если вы не используете 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>
![](https://primer2.dynamobim.org/~gitbook/image?url=https%3A%2F%2F2422276774-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frrl0CzV5yPtxYRNkwD4h%252Fuploads%252Fgit-blob-827c583675a6e1bb0ee549f484db5c396c53a912%252Fvs-migrations-file.jpg%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=178357c0&sv=1)
Щелкните правой кнопкой мыши и выберите
Add > New Item
(Добавить > Новый элемент).Выберите
XML File
(XML-файл).В нашем проекте мы присвоим файлу миграции имя
ZeroTouchEssentials.Migrations.xml
.
Этот код указывает Dynamo, что узлы с именем GetClosestPoint
теперь называются ClosestPointTo
.
См. пример кода в файле ProtoGeometry.Migrations.xml
Универсальные типы
Zero-Touch в настоящее время не поддерживает использование универсальных типов. Их можно использовать, но не в коде, который импортируется напрямую, если тип не задан. Универсальные методы, свойства и классы, у которых нет типа, нельзя предоставить.
В примере ниже узел Zero-Touch типа T
не будет импортирован. Если остальные компоненты библиотеки импортируются в Dynamo, возникнут исключения отсутствующих типов.
При использовании универсального типа с типом, заданным в этом примере, импорт в Dynamo будет выполнен.
Last updated