# Размещение коммуникаций

<figure><img src="/files/BeQCBsBpFkFOZj2Bj9rs" alt=""><figcaption></figcaption></figure>

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

## Цель

> :dart: Размещение вхождений блоков водомера на заданном смещении от линии участка и нанесение линии для каждого подключения перпендикулярно к распределительной магистрали.

## Основные этапы

> * Использование узла **Select Object** для ввода данных пользователем
> * Работа с системами координат
> * Использование геометрических операций, таких как **Geometry.DistanceTo** и **Geometry.ClosestPointTo**
> * Создание вхождений блоков
> * Управление параметрами привязки объектов

## Совместимость версий

{% hint style="success" %}
Этот график будет работать в \*\*Civil 3D 2020\*\* и более поздних версиях.
{% endhint %}

## Набор данных

Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.

{% file src="/files/sKkgVfDnoG4O8bAYdeCG" %}

{% file src="/files/MGuhWoMoTbKdZNG0ObVq" %}

## Решение

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

> 1. Получение геометрии кривой для распределительной магистрали.
> 2. Получение геометрии кривой для выбранной пользователем линии участка (при необходимости с обращением ее направления).
> 3. Создание точек вставки для счетчиков
> 4. Получение точек на распределительной магистрали, ближайших к местоположениям счетчиков
> 5. Создание вхождений блоков и линий в пространстве модели

Приступим!

### Получение геометрии распределительной магистрали

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

{% hint style="info" %}
Если вы еще не знакомы с кривыми Dynamo, см. раздел \[4-curves.md]\(../../../5\\\_essential\\\_nodes\\\_and\\\_concepts/5-2\\\_geometry-for-computational-design/4-curves.md "mention").
{% endhint %}

<figure><img src="/files/6WLQu6PUqOR30EyeU3iJ" alt=""><figcaption><p>Объединение объектов из Civil 3D в одну сложную кривую</p></figcaption></figure>

### Получение геометрии линии участка

Теперь необходимо перенести геометрию выбранной линии участка в Dynamo, чтобы с ней можно было работать. Для этого нам понадобится узел **Select Object**, с помощью которого пользователь график может выбрать определенный объект в Civil 3D.

Нам также необходимо решить одну потенциальную проблему. Линия участка имеет начальную и конечную точки, а это значит, что у нее есть направление. Чтобы график давал последовательные результаты, все линии участка должны иметь одинаковое направление. Это условие можно задать непосредственно в логике графика, что сделает наш график более стабильным.

<figure><img src="/files/DxjnYCnnIHmzvDaiAs8a" alt=""><figcaption><p>Выбор линии участка и проверка ее направления</p></figcaption></figure>

> 1. Получаем начальную и конечную точки линии участка.
> 2. Измеряем расстояние от каждой точки до распределительной магистрали, а затем определяем, какое расстояние больше.
> 3. Нужно, чтобы начальная точка линии находилась ближе к распределительной магистрали. Если это не так, требуется обратить направление линии участка. Если все правильно, то мы просто возвращаем исходную линию участка.

### Создание точек вставки

Теперь нужно решить, где будут размещены счетчики. Обычно их расположение определяется местными органами власти, поэтому мы просто укажем входные значения, которые можно изменить в соответствии с теми или иными условиями. В качестве основы для создания точек используем **систему координат**, расположенную вдоль линии участка. Это позволит с легкостью определить смещения относительно линии участка независимо от ее ориентации.

{% hint style="info" %}
Если вы еще не знакомы с системами координат, см. раздел \[2-vectors.md]\(../../../5\\\_essential\\\_nodes\\\_and\\\_concepts/5-2\\\_geometry-for-computational-design/2-vectors.md "mention").
{% endhint %}

<figure><img src="/files/tT6NuFb5l6PIyvjbNvcD" alt=""><figcaption><p>Создание точек вставки для счетчиков</p></figcaption></figure>

### Получение точек подключения

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

<figure><img src="/files/sQjgACsyBjZzBm3uQvEj" alt="" width="339"><figcaption><p>Получение точек на перпендикулярах к распределительной магистрали</p></figcaption></figure>

> 1. Сложная кривая распределительной магистрали.
> 2. Точки вставки счетчиков.

### Создание объектов

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

<figure><img src="/files/TV7NJGyzhKUSGMssJz5f" alt=""><figcaption></figcaption></figure>

### Результат

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

<figure><img src="/files/BeQCBsBpFkFOZj2Bj9rs" alt=""><figcaption><p>Регулировка входных параметров в Dynamo и немедленное отображение результатов в Civil 3D</p></figcaption></figure>

### Бонус: включение функции последовательного размещения

Вы могли заметить, что после размещения объектов для одной линии участка эти объекты «перемещаются» при выборе другой линии участка.

<figure><img src="/files/z5j9vFrUGovPZJJnQjhi" alt=""><figcaption><p>Поведение при включенной привязке объекта</p></figcaption></figure>

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

<figure><img src="/files/8shY5Oe15rbuHL8h66ia" alt=""><figcaption><p>Параметры привязки объекта Dynamo</p></figcaption></figure>

{% hint style="info" %}
Дополнительные сведения см. в разделе \[object-binding.md]\(../../advanced-topics/object-binding.md "mention").
{% endhint %}

Изменив этот параметр, мы заставляем программу Dynamo «забывать» объекты, создаваемые при каждом запуске графика. Ниже приведен пример запуска графика с отключенной привязкой объектов в **проигрывателе Dynamo**.

<figure><img src="/files/rhlmMHJ9erWuPgbbWS0H" alt=""><figcaption><p>Запуск графика с помощью проигрывателя Dynamo и просмотр результатов в Civil 3D</p></figcaption></figure>

{% hint style="info" %}
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел \[dynamo-player.md]\(../../dynamo-player.md "mention").
{% endhint %}

> :tada: Миссия выполнена!

## Идеи

Вот несколько вариантов того, как можно расширить возможности этого графика.

{% hint style="info" %}
Размещение \*\*нескольких подключений к коммуникациям\*\* одновременно вместо выбора каждой линии участка по отдельности.
{% endhint %}

{% hint style="info" %}
Изменение входных данных, чтобы вместо водопроводных счетчиков были размещены \*\*прочистные люки канализации\*\*.
{% endhint %}

{% hint style="info" %}
\*\*Добавление переключателя\*\*, позволяющего разместить подключение к коммуникациям на конкретной стороне линии участка, а не на обеих ее сторонах.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/ru/dynamo-for-civil-3d/sample-workflows/land/service-placement.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
