# Библиотека узлов

Ранее мы упомянули, что **узлы** являются основными компоновочными блоками графика Dynamo. Узлы хранятся в **библиотеке**, где они сгруппированы по логическим признакам. В Dynamo for Civil 3D в библиотеке есть две категории (или **полки**), содержащие специальные узлы для работы с объектами AutoCAD и Civil 3D, такими как трассы, профили, коридоры, вхождения блоков и т. д. Прочие разделы библиотеки содержат универсальные узлы, одинаковые во всех версиях Dynamo (например, в Dynamo для Revit, Dynamo Sandbox и т. д.).

{% hint style="info" %}
Подробные сведения об организации узлов в корневой библиотеке Dynamo см. в разделе [2-library](https://primer2.dynamobim.org/ru/3_user_interface/2-library "mention") .
{% endhint %}

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-ff791daea0717d628eede152b8a68b4df0a7fc57%2Fc3d-node-library.png?alt=media" alt="" width="563"><figcaption><p>Библиотека узлов в Dynamo for Civil 3D</p></figcaption></figure>

> 1. Специальные узлы для работы с объектами AutoCAD и Civil 3D
> 2. Узлы общего назначения
> 3. Узлы из **пакетов** сторонних разработчиков, которые можно установить отдельно

{% hint style="warning" %}
График Dynamo, в котором используются узлы из разделов AutoCAD и Civil 3D библиотеки, будет работать только в Dynamo for Civil 3D. Если открыть такой график Dynamo for Civil 3D в другой версии программы (например, в Dynamo для Revit), эти узлы будут помечены предупреждением и не будут запускаться.
{% endhint %}

{% hint style="info" %}
**Зачем нужны отдельные полки для AutoCAD и Civil 3D**

Такой подход позволяет отделить узлы для собственных объектов AutoCAD (линии, полилинии, вхождения блоков и т. д.) от узлов для объектов Civil 3D (трассы, коридоры, поверхности и т. д.). С технической точки зрения, AutoCAD и Civil 3D — это два разных инструмента. AutoCAD — это базовое приложение, а Civil 3D — приложение, созданное на его основе.
{% endhint %}

## Иерархия узлов

Для работы с узлами AutoCAD и Civil 3D важно иметь четкое представление об иерархии объектов на каждой полке. Помните таксономические ранги, которые проходят на уроках биологии? Согласно им, все организмы в природе делятся на царства, типы, классы, порядки, семейства, рода и виды. Объекты AutoCAD и Civil 3D классифицируются аналогичным образом. Рассмотрим несколько примеров.

### Объекты Civil

Рассмотрим в качестве примера трассу.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-d18d297475ba472567a5f1f44fd516e0e0f90cb1%2Fc3d-node-library-alignment.png?alt=media" alt=""><figcaption></figcaption></figure>

Допустим, требуется изменить имя трассы. Для этого добавим к имеющемуся графику узел **CivilObject.SetName**.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-a71b70e066dfd2a1f6c3a1924af3fed4b89b17bf%2Fc3d-node-library-alignment-set-name%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

Поначалу все это может показаться довольно сложным. Что это за **CivilObject** и почему в библиотеке нет узла **Alignment.SetName**? Все дело в стремлении к *возможности многократного использования* и *простоте*. Если подумать, процесс изменения имени объекта Civil 3D всегда одинаков, будь то трасса, коридор, профиль или любой другой объект. Поэтому, вместо того чтобы создавать несколько узлов (например, **Alignment.SetName, Corridor.SetName, Profile.SetName** и т. д.), по сути выполняющих одну и ту же работу, все эти функции были заложены в один узел. В нашем случае это узел **CivilObject.SetName**.

Кроме того, к этому вопросу можно подойти со стороны *связей* между объектами. И трасса, и коридор являются типами **объектов Civil**, так же как и картофель, и морковь являются типами овощей. Узлы Civil.Object можно применять к объектам любого типа, точно так же как одну и ту же овощечистку можно применять и для очистки картофеля, и для очистки моркови. Представьте, какой хаос царил бы на кухне, если бы для чистки каждого вида овощей или фруктов использовался отдельный инструмент. В этом смысле библиотека узлов Dynamo похожа на кухню.

### Объекты

Идем дальше. Предположим, требуется изменить слой трассы. Для этого нам понадобится узел **Object.SetLayer**.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-a1115d4ab758fe7d6e7e9f83474c53d5af67c91e%2Fc3d-node-library-alignment-set-layer.png?alt=media" alt=""><figcaption></figcaption></figure>

Почему он называется не **CivilObject.SetLayer**? Причина все та же: принципы простоты и возможности повторного использования, которые мы обсуждали ранее. Свойство *layer* есть у любого объекта AutoCAD, который можно нарисовать или вставить, например у линии, полилинии, текста, вхождения блока и т. д. Такие объекты Civil 3D, как трассы и коридоры, относятся к той же категории, поэтому любой узел, который применяется к категории **Object**, можно также использовать с любым **объектом Civil**.
