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

Создание проекта Visual Studio
Visual Studio — это многофункциональная среда разработки, в которой можно создавать проекты, добавлять ссылки, создавать файлы .dll и выполнять отладку. При создании нового проекта Visual Studio также создается решение, структура для организации проектов. В одном решении можно создать несколько проектов, которые будут собраны вместе. Чтобы создать узел ZeroTouch, необходимо запустить новый проект Visual Studio, в котором будет создана библиотека классов C# и собран файл .dll.


Окно New Project (Создать проект) в Visual Studio
Для начала откройте Visual Studio и создайте новый проект:
File > New > Project(Файл > Создать > Проект).
Выберите шаблон проекта
Class Library(Библиотека классов).
Присвойте проекту имя (мы назвали проект MyCustomNode).
Задайте путь к файлу проекта. В нашем примере мы оставим расположение по умолчанию
Нажмите
Ok.
Visual Studio автоматически создаст и откроет файл C#. Мы должны присвоить ему соответствующее имя, настроить рабочее пространство и заменить код по умолчанию на этот метод умножения.
 namespace MyCustomNode
 {
     public class SampleFunctions
     {
         public static double MultiplyByTwo(double inputNumber)
         {
             return inputNumber * 2.0;
         }
     }
 }
Откройте обозреватель решений и окна вывода в меню
View(Вид).
Переименуйте файл
Class1.csвSampleFunctions.csв обозревателе решений справа.
Добавьте приведенный выше код для функции умножения. Позднее мы рассмотрим, как Dynamo читает классы C#.
Обозреватель решений предоставляет доступ ко всем компонентам проекта.
Окно вывода понадобится позже, чтобы проверить, успешно ли выполнена сборка.
Следующий шаг — собрать проект. Но сначала необходимо кое-что проверить. Убедитесь, что в качестве целевой платформы выбрано Any CPU или x64, а флажок Prefer 32-bit (Предпочтительно 32-разрядная) в свойствах проекта снят.

Откройте свойства проекта, выбрав
Project > "ProjectName" Properties(Проект > Свойства имя_проекта).
Выберите страницу
Build(Сборка).
Выберите
Any CPUилиx64в раскрывающемся меню.
Убедитесь, что флажок
Prefer 32-bit(Предпочтительно 32-разрядная) снят.
Теперь можно собрать проект, чтобы создать файл .dll. Для этого выберите Build Solution (Собрать решение) в меню Build (Сборка) или нажмите клавиши CTRL+SHIFT+B.

Выберите
Build > Build Solution(Сборка > Собрать решение).
Чтобы определить, успешно ли собран проект, проверьте окно вывода.
Если проект собран успешно, в папке проекта bin появится файл .dll с именем MyCustomNode. В нашем примере мы оставили путь к файлу проекта, как указано в Visual Studio по умолчанию: c:\users\username\documents\visual studio 2015\Projects. Давайте рассмотрим структуру файлов проекта.

Папка
binсодержит файл.dll, собранный в Visual Studio.
Файл проекта Visual Studio.
Файл класса.
Поскольку в конфигурации решения задано значение
Debug(Отладка),.dllбудет создан вbin\Debug.
Теперь можно открыть Dynamo и импортировать .dll. С помощью функции добавления перейдите к папке проекта bin и выберите файл .dll, который требуется открыть.

Нажмите кнопку Add (Добавить) для импорта
.dll.
Перейдите к папке проекта. Наш проект находится в папке файла Visual Studio по умолчанию:
C:\Users\username\Documents\Visual Studio 2015\Projects\MyCustomNode.
Выберите
MyCustomNode.dllдля импорта.
Нажмите
Open(Открыть), чтобы загрузить.dll.
Если категория была создана в библиотеке с именем MyCustomNode, то DLL-файл импортирован успешно. Однако Dynamo создал два узла, а мы хотели, чтобы узел был один. В следующем разделе вы узнаете, почему так происходит и как Dynamo считывает DLL-файл.

MyCustomNode в библиотеке Dynamo. Категория «Библиотека» определяется именем
.dll.
SampleFunctions.MultiplyByTwo в рабочей области.
Способы чтения классов и методов в Dynamo
Когда Dynamo загружает DLL-файл, он предоставляет все открытые статические методы в виде узлов. Конструкторы, методы и свойства преобразуются в узлы Create, Action и Query соответственно. В нашем примере умножения метод MultiplyByTwo() становится узлом Action в Dynamo. Это связано с тем, что узел назван в соответствии с методом и классом.

Входным данным присваивается имя
inputNumberна основе имени параметра метода.
По умолчанию выходным данным присваивается имя
double, так как это возвращаемый тип данных.
Узел называется
SampleFunctions.MultiplyByTwo, так как содержит имена классов и методов.
В приведенном выше примере был создан дополнительный узел SampleFunctions Create: мы явно не предоставили конструктор, поэтому он был создан автоматически. Этого можно избежать, создав пустой частный конструктор в классе SampleFunctions.
namespace MyCustomNode
{
    public class SampleFunctions
    {
        //The empty private constructor.
        //This will be not imported into Dynamo.
        private SampleFunctions() { }
        //The public multiplication method. 
        //This will be imported into Dynamo.
        public static double MultiplyByTwo(double inputNumber)
        {
            return inputNumber * 2.0;
        }
    }
}
Dynamo импортировал метод в качестве узла Create.
Добавление ссылок на пакеты Dynamo NuGet
Узел умножения очень простой и не требует ссылок на Dynamo. Если необходимо получить доступ к функциям Dynamo, например для создания геометрии, используйте пакеты Dynamo NuGet.
- ZeroTouchLibrary — пакет для создания библиотек автоматических узлов для Dynamo, который содержит следующие библиотеки: DynamoUnits.dll, ProtoGeometry.dll 
- WpfUILibrary — пакет для сборки библиотек узлов Dynamo с пользовательским интерфейсом в WPF, который содержит следующие библиотеки: DynamoCoreWpf.dll, CoreNodeModels.dll, CoreNodeModelWpf.dll 
- DynamoServices — библиотека DynamoServices для Dynamo 
- Core — инфраструктура модульного и системного тестирования для Dynamo, которая содержит следующие библиотеки: DSIronPython.dll, DynamoApplications.dll, DynamoCore.dll, DynamoInstallDetective.dll, DynamoShapeManager.dll, DynamoUtilities.dll, ProtoCore.dll, VMDataBridge.dll 
- Tests — инфраструктура модульного и системного тестирования для Dynamo, которая содержит следующие библиотеки: DynamoCoreTests.dll, SystemTestServices.dll, TestServices.dll 
- DynamoCoreNodes — пакет для сборки базовых узлов Dynamo, содержащий следующие библиотеки: Analysis.dll, GeometryColor.dll, DSCoreNodes.dll 
Чтобы ссылаться на эти пакеты в проекте Visual Studio, скачайте пакет из NuGet по ссылкам выше и вручную укажите ссылки на DLL-файлы или используйте диспетчер пакетов NuGet в Visual Studio. Сначала мы рассмотрим, как их установить с помощью NuGet в Visual Studio.

Откройте диспетчер пакетов NuGet, выбрав
Tools > NuGet Package Manager > Manage NuGet Packages for Solution...(Инструменты > Диспетчер пакетов NuGet > Управлять пакетами NuGet для решения).
Это диспетчер пакетов NuGet. В этом окне мы видим установленные для проекта пакеты и можем искать другие пакеты. Если выпущена новая версия пакета DynamoServices, можно обновить пакеты в этом разделе или вернуться к более ранней версии.

Нажмите кнопку обзора и найдите DynamoVisualProgramming, чтобы открыть пакеты Dynamo.
Пакеты Dynamo. Нажмите на один из пакетов, чтобы просмотреть его текущую версию и описание содержимого.
Выберите нужную версию пакета и нажмите кнопку Install (Установить). Пакет будет установлен для проекта, в котором вы работаете. Так как используется последняя стабильная версия Dynamo 1.3, выберите соответствующую версию пакета.
Чтобы вручную добавить пакет, загруженный из обозревателя, откройте диспетчер ссылок в обозревателе решений и перейдите к нужному пакету.

Щелкните правой кнопкой мыши
References(Ссылки) и выберитеAdd Reference(Добавить ссылку).
Нажмите
Browse(Обзор), чтобы перейти к папке пакета.
Итак, мы настроили Visual Studio и добавили .dll в Dynamo. Теперь у нас есть надежная основа для дальнейшей работы. И это только начало. Далее вы узнаете, как создать пользовательский узел.
Last updated