Dynamo
Primer for v2.0
Русский
Русский
  • О программе
  • Введение
    • Что представляет собой программа Dynamo и как она работает?
    • Руководство пользователя Dynamo Primer, сообщество и платформа Dynamo
  • Настройка Dynamo
  • Пользовательский интерфейс
    • Рабочее пространство
    • Библиотека
  • Узлы и провода
  • Основные узлы и понятия
    • Указатель узлов
    • Геометрия для машинного проектирования
      • Обзор концепции геометрии
      • Вектор, плоскость и система координат
      • Точки
      • Кривые
      • Поверхности
      • Тела
      • Сети
    • Компоновочные блоки программ
      • Передача данных
      • Math
      • Logic
      • Строки
      • Цвет
    • Проектирование на основе списков
      • Что такое список
      • Работа со списками
      • Списки списков
      • Многомерные списки
    • Словари в Dynamo
      • Что такое словарь
      • Узлы Dictionary
      • Словари в узлах Code Block
      • Примеры использования Revit
  • Пользовательские узлы и пакеты
    • Пользовательские узлы
      • Пользовательские узлы: введение
      • Создание пользовательских узлов
      • Публикация узлов в библиотеку
    • Пакеты
      • Пакеты: введение
      • Практикум по работе с пакетом: Mesh Toolkit
      • Разработка пакетов
      • Публикация пакетов
      • Импорт Zero Touch
  • Dynamo для Revit
    • Подключение к Revit
    • Выбор
    • Редактирование
    • Создание
    • Адаптация
    • Выпуск документации
  • Dynamo for Civil 3D
    • Совместимость с Civil 3D
    • Начало работы
    • Библиотека узлов
    • Примеры рабочих процессов
      • Дороги
        • Размещение осветительных столбов
      • Землеустройство
        • Размещение коммуникаций
      • Инженерные сети
        • Переименование колодцев
      • Железная дорога
        • Границы зазора
      • Топосъемка
        • Управление группами точек
    • Дополнительные разделы
      • Привязка объекта
      • Python и Civil 3D
    • Проигрыватель Dynamo
    • Полезные пакеты
    • Ресурсы
  • Бета-версия Dynamo в Forma
    • Настройка Dynamo Player в Forma
    • Добавление графов и предоставление к ним общего доступа в Dynamo Player
    • Запуск графов в Dynamo Player
    • Отличия вычислительной службы Dynamo от классического приложения Dynamo
  • Создание кода в Dynamo
    • Узлы Code Block и DesignScript
      • Что такое Code Block
      • Синтаксис DesignScript
      • Сокращение
      • Функции
    • Создание геометрии с помощью DesignScript
      • Основы работы с геометрией посредством DesignScript
      • Геометрические примитивы
      • Векторная математика
      • Кривые: интерполяционные и по управляющим точкам
      • Перенос, поворот и другие преобразования
      • Поверхности: интерполяционные, лофтированные, по управляющим точкам и поверхности вращения
      • Параметризация геометрических объектов
      • Пересечение и обрезка
      • Логические операции с геометрическими объектами
      • Генераторы точек Python
    • Python
      • Узлы Python
      • Python и Revit
      • Настройка собственного шаблона Python
    • Изменения языка
  • Практические советы
    • Методы создания графиков
    • Методы создания сценариев
    • Справочник по созданию сценариев
    • Управление структурой программы
    • Эффективная работа с большими наборами данных в Dynamo
  • Примеры рабочих процессов
    • Процессы для начала работы
      • Параметрическая ваза
      • Точки притяжения
    • Индекс понятий
  • Руководство для разработчиков
    • Сборка Dynamo на основе исходного кода
      • Сборка DynamoRevit на основе исходного кода
      • Управление зависимостями и их обновление в Dynamo
    • Разработка для Dynamo
      • Начало работы
      • Пример использования узлов Zero-Touch — узел сетки
      • Выполнение сценариев Python в узлах Zero-Touch (C#)
      • Дальнейшая работа с Zero-Touch
      • Расширенная настройка узлов Dynamo
      • Использование типов COM (взаимодействие) в пакетах Dynamo
      • Пример использования NodeModel — настраиваемый пользовательский интерфейс
      • Обновление пакетов и библиотек Dynamo для Dynamo 2.x
      • Обновление пакетов и библиотек Dynamo для Dynamo 3.x
      • Расширения
      • Определение пользовательской организации пакетов для Dynamo 2.0 или более поздней версии
      • Интерфейс командной строки Dynamo
      • Интеграция с Dynamo
      • Разработка для Dynamo for Revit
      • Публикация пакета
      • Создание пакета из Visual Studio
      • Расширения в виде пакетов
    • Запросы на слияние
    • Ожидания от тестирования
    • Примеры
  • Приложение
    • Вопросы и ответы
    • Визуальное программирование и Dynamo
    • Ресурсы
    • Примечания к выпуску
    • Полезные пакеты
    • Файлы примеров
    • Таблица интеграции с основной программой
    • PDF для скачивания
    • Сочетания клавиш Dynamo
Powered by GitBook
On this page
  • Входные значения по умолчанию
  • Возврат нескольких значений
  • Документация, подсказки и поиск
  • Объекты
  • Использование типов геометрии Dynamo
  • Удаление/использование операторов
  • Миграция
  • Универсальные типы
Edit on GitHub
Export as PDF
  1. Руководство для разработчиков
  2. Разработка для Dynamo

Дальнейшая работа с Zero-Touch

PreviousВыполнение сценариев Python в узлах Zero-Touch (C#)NextРасширенная настройка узлов Dynamo

Last updated 1 month ago

Понимая, как создать проект Zero-Touch, мы можем подробно рассмотреть особенности создания узла, изучив пример ZeroTouchEssentials на Dynamo Github.

Многие стандартные узлы Dynamo, по сути, являются узлами Zero-Touch, как и большинство узлов Math, Color и DateTime.

Для начала скачайте проект ZeroTouchEssentials на странице

В Visual Studio откройте файл решения ZeroTouchEssentials.sln и выполните сборку.

Файл ZeroTouchEssentials.cs содержит все методы, которые будут импортированы в Dynamo.

Откройте Dynamo и импортируйте ZeroTouchEssentials.dll, чтобы получить узлы, на которые мы будем ссылаться в следующих примерах.

Входные значения по умолчанию

  • Задайте для параметров метода значение по умолчанию: inputNumber = 2.0

namespace ZeroTouchEssentials
{
    public class ZeroTouchEssentials
    {
        // Set the method parameter to a default value
        public static double MultiplyByTwo(double inputNumber = 2.0) 
        {
            return inputNumber * 2.0;
        }
    }
}
  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>.

using System.Collections.Generic;
using Autodesk.DesignScript.Runtime;

namespace ZeroTouchEssentials
{
    public class ZeroTouchEssentials
    {
        [MultiReturn(new[] { "add", "mult" })]
        public static Dictionary<string, object> ReturnMultiExample(double a, double b)
        {
            return new Dictionary<string, object>

                { "add", (a + b) },
                { "mult", (a * b) }
            };
        }
    }
}

Узел, возвращающий несколько выходных данных.

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

Документация, подсказки и поиск

Рекомендуется прикреплять к узлам Dynamo документацию, описывающую функции узла, входные и выходные данные, теги поиска и т. д. Для этого используются теги XML-документации. XML-документация создается следующим образом.

  • Документацией считается любой текст комментария после значка «///» (три наклонные черты),

    • Например: /// Documentation text and XML goes here (Текст документации и XML размещается здесь)

  • После трех наклонных черт создайте теги XML над методами, которые Dynamo будет считывать при импорте DLL-файла.

    • Например: /// <summary>...</summary>

  • Включите XML-документацию в Visual Studio, выбрав Project > [Project] Properties > Build > Output и установив флажок Documentation file (Файл XML-документации).

  1. Visual Studio создаст XML-файл в указанной папке.

Типы тегов:

  • /// <summary>...</summary> обозначает основную документацию для узла, которая отображается в виде подсказки над узлом в строке поиска слева.

  • /// <param name="inputName">...</param> создает документацию для конкретных входных параметров.

  • /// <returns>...</returns> создает документацию для выходного параметра.

  • /// <returns name = "outputName">...</returns> создает документацию для нескольких выходных параметров.

  • /// <search>...</search> сопоставляет узел с результатами поиска на основе списка, разделенного запятыми. Например, если создать узел, который разделяет сетку, можно добавить такие теги, как mesh, subdivision и catmull-clark.

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

using Autodesk.DesignScript.Geometry;

namespace ZeroTouchEssentials
{
    public class ZeroTouchEssentials
    {
        /// <summary>
        /// This method demonstrates how to use a native geometry object from Dynamo
        /// in a custom method
        /// </summary>
        /// <param name="curve">Input Curve. This can be of any type deriving from Curve, such as NurbsCurve, Arc, Circle, etc</param>
        /// <returns>The twice the length of the Curve </returns>
        /// <search>example,curve</search>
        public static double DoubleLength(Curve curve)
        {
            return curve.Length * 2.0;
        }
    }
}

Обратите внимание на содержимое этого примера узла.

  1. Сводка узла.

  2. Описание входных данных.

  3. Описание выходных данных.

Практические советы по работе с описаниями узлов Dynamo

В описаниях узлов содержатся краткие описания функций и выходных данных узла. В Dynamo они отображаются в двух местах:

  • во всплывающей подсказке для узла;

  • в обозревателе документации.

Ниже представлены рекомендации, которые позволят обеспечить единообразие и сэкономить время при составлении или обновлении описаний узлов.

Обзор

Описание должно состоять из одного-двух предложений. Если требуется дополнительная информация, добавьте ее в раздел «Подробности» в обозревателе документации.

Используйте регистр по предложениям (первое слово предложения и любые имена собственные с заглавной буквы); без точки в конце.

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

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

Рекомендации

Можно
Нельзя

Начинайте описание с глагола в третьем лице.

  • Пример: Determines if one geometry object intersects with another

Не используйте глаголы во втором лице или существительные.

  • Пример: Determine if one geometry object intersects with another

Используйте Returns, Creates или другой описательный глагол вместо Gets.

  • Пример: Returns a Nurbs representation of a surface

Не используйте слова Get или Gets. Они менее специфичны и могут быть интерпретированы по-разному.

  • Пример: Gets a Nurbs representation of the surface

Когда речь идет о входных данных, используйте given или input либо другие термины вместо specified. По возможности опускайте слова given и input, чтобы упростить описание и уменьшить количество слов.

  • Пример: Deletes the given file

  • Пример: Projects a curve along the given projection direction onto given base geometry

Можно использовать слово specified, если оно не ссылается непосредственно на входные данные.

  • Пример: Writes text content to a file specified by the given path

Когда речь идет о входных данных, чтобы обеспечить единообразие, не используйте слово specified или любой другой термин, кроме given или input. Не смешивайте слова given и input в одном и том же описании, если только это не требуется для ясности.

  • Пример: Deletes the specified file

  • Пример: Projects an input curve along a given projection direction onto a specified base geometry

При первом упоминании входных данных используйте артикль a или an. Используйте the given или the input вместо a или an по мере необходимости для ясности.

  • Пример: Sweeps a curve along the path curve

Не используйте слово this, когда впервые ссылаетесь на входные данные.

  • Пример: Sweeps this curve along the path curve

При первом упоминании выходных данных или другого существительного, которое обозначает цель операции узла, используйте a или an. Используйте слово the только в сочетании с input или given.

  • Пример: Copies a file

  • Пример: Copies the given file

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

  • Пример: Copies the file

Пишите с заглавной буквы первое слово в предложении, имена собственные и другие существительные, которые обычно начинаются с прописной буквы.

  • Пример: Returns the intersection of two BoundingBoxes

Не используйте прописные буквы для общих геометрических объектов и понятий, если в этом нет необходимости.

  • Пример: Scales non-uniformly around the given Plane

Пишите слово Boolean с заглавной буквы. Пишите слова True и False с заглавной буквы, если речь идет о выводе логических значений.

  • Пример: Returns True if the two values are different

  • Пример: Converts a string to all uppercase or all lowercase characters based on a Boolean parameter

Не используйте нижний регистр для слова Boolean. Не пишите слова True и False со строчной буквы, если речь идет о выводе логических значений.

  • Пример: Returns true if the two values are different

  • Пример: Converts a string to all uppercase characters or all lowercase characters based on a boolean parameter

Предупреждения и ошибки узлов Dynamo

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

Объекты

В Dynamo отсутствует ключевое слово new, поэтому объекты создаются с использованием статических методов конструирования. Объекты создаются следующим образом.

  • Сделайте конструктор внутренним internal ZeroTouchEssentials(), если не требуется иное.

  • Постройте объект с помощью статического метода, например public static ZeroTouchEssentials ByTwoDoubles(a, b).

Примечание. В Dynamo используется префикс «By», указывающий на то, что статический метод является конструктором. Использовать этот префикс необязательно, но с ним ваша библиотека будет соответствовать общепринятому стилю Dynamo.

namespace ZeroTouchEssentials
{
    public class ZeroTouchEssentials
    {
        private double _a;
        private double _b;

        // Make the constructor internal
        internal ZeroTouchEssentials(double a, double b)
        {
            _a = a;
            _b = b;
        }

        // The static method that Dynamo will convert into a Create node
        public static ZeroTouchEssentials ByTwoDoubles(double a, double b)
        {
            return new ZeroTouchEssentials(a, b);
        }
    }
}

После импорта DLL-файла ZeroTouchEssentials в библиотеке появится узел ZeroTouchEssentials. Этот объект можно создать с помощью узла ByTwoDoubles.

Использование типов геометрии Dynamo

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

  • Вставьте ссылку на файл ProtoGeometry.dll в проект, добавив using Autodesk.DesignScript.Geometry; в верхней части файла C# и добавив пакет NuGet библиотеки ZeroTouchLibrary в проект.

  • Важно. Дополнительную информацию об управлении ресурсами геометрии, возврат которых не выполняется из функций, см. в приведенном ниже разделе Удаление/использование операторов.

Примечание. Геометрические объекты Dynamo используются так же, как и любые другие объекты, передаваемые функциям.

using Autodesk.DesignScript.Geometry;

namespace ZeroTouchEssentials
{
    public class ZeroTouchEssentials
    {
        // "Autodesk.DesignScript.Geometry.Curve" is specifying the type of geometry input, 
        // just as you would specify a double, string, or integer 
        public static double DoubleLength(Autodesk.DesignScript.Geometry.Curve curve)
        {
            return curve.Length * 2.0;
        }
    }
}

Узел, который получает длину кривой и удваивает ее.

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

Удаление/использование операторов

Если вы не используете Dynamo версии 2.5 или более поздней, управлять геометрическими ресурсами, которые не возвращены из функций, необходимо вручную. В Dynamo 2.5 и более поздних версий геометрические ресурсы обрабатываются системой, однако в сложных сценариях и для сокращения объема используемой памяти вы можете удалять геометрию вручную. Движок Dynamo обрабатывает все геометрические ресурсы, которые возвращаются из функций. Невозвращенные геометрические ресурсы можно обработать вручную следующими способами.

  • С помощью оператора using:

    using (Point p1 = Point.ByCoordinates(0, 0, 0))
    {
      using (Point p2 = Point.ByCoordinates(10, 10, 0))
      {
          return Line.ByStartPointEndPoint(p1, p2);
      }
    }
  • При выполнении вызовов Dispose вручную:

    Point p1 = Point.ByCoordinates(0, 0, 0);
    Point p2 = Point.ByCoordinates(10, 10, 0);
    Line l = Line.ByStartPointEndPoint(p1, p2);
    p1.Dispose();
    p2.Dispose();
    return l;

Миграция

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

  • Создайте файл .xml в той же папке, что и файл .dll, в следующем формате: ИмяФайлаDLL.Migrations.xml.

  • В диалоговом окне .xml создайте один элемент <migrations>...</migrations>.

  • Внутри элемента миграции создайте элементы <priorNameHint>...</priorNameHint> для каждого изменения имени.

  • При каждом изменении имени укажите <oldName>...</oldName> и <newName>...</newName>

  1. Щелкните правой кнопкой мыши и выберите Add > New Item (Добавить > Новый элемент).

  2. Выберите XML File (XML-файл).

  3. В нашем проекте мы присвоим файлу миграции имя ZeroTouchEssentials.Migrations.xml.

Этот код указывает Dynamo, что узлы с именем GetClosestPoint теперь называются ClosestPointTo.

<?xml version="1.0"?>
<migrations>
  <priorNameHint>
    <oldName>Autodesk.DesignScript.Geometry.Geometry.GetClosestPoint</oldName>
    <newName>Autodesk.DesignScript.Geometry.Geometry.ClosestPointTo</newName>
  </priorNameHint>
</migrations>

Универсальные типы

Zero-Touch в настоящее время не поддерживает использование универсальных типов. Их можно использовать, но не в коде, который импортируется напрямую, если тип не задан. Универсальные методы, свойства и классы, у которых нет типа, нельзя предоставить.

В примере ниже узел Zero-Touch типа T не будет импортирован. Если остальные компоненты библиотеки импортируются в Dynamo, возникнут исключения отсутствующих типов.

public class SomeGenericClass<T>
{
    public SomeGenericClass()
    {
        Console.WriteLine(typeof(T).ToString());
    }  
}

При использовании универсального типа с типом, заданным в этом примере, импорт в Dynamo будет выполнен.

public class SomeWrapper
{
    public object wrapped;
    public SomeWrapper(SomeGenericClass<double> someConstrainedType)
    {
        Console.WriteLine(this.wrapped.GetType().ToString());
    }
}

Примеры кода извлекаются из . XML-документация удалена для краткости. В каждом примере с помощью кода будет создан узел, приведенный на изображении над ним.

Dynamo поддерживает определение значений по умолчанию для входных портов в узле. Значения по умолчанию передаются в узел, если у портов нет соединений. Значения по умолчанию выражаются с помощью механизма указания дополнительных аргументов на C# в соответствии с материалами . По умолчанию задаются следующим образом.

См. этот пример кода в

См. пример кода в

Рекомендации по обеспечению согласованности и экономии времени при написании или обновлении предупреждений и сообщений об ошибках узлов см. на странице Wiki .

См. пример кода в

См. пример кода в

об использовании оператора using

Дополнительные сведения о новых функциях обеспечения стабильности, появившихся в Dynamo 2.5, см. в разделе

См. пример кода в файле

ZeroTouchEssentials.cs
Руководства по программированию на C#
ZeroTouchEssentials.cs
ZeroTouchEssentials.cs
Шаблон содержимого: предупреждения и ошибки узлов
ZeroTouchEssentials.cs
ZeroTouchEssentials.cs
Документация
Повышение стабильности геометрии в Dynamo
ProtoGeometry.Migrations.xml
https://github.com/DynamoDS/ZeroTouchEssentials
Узлы Zero-Touch
ZeroTouchEssentials в Visual Studio
Значение по умолчанию
Несколько выходных данных
Создание XML-файла
Описание узла
Узел ByTwoDoubles
Входные данные кривой
Файл миграции