# Переименование колодцев

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

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

## Цель

> :dart: Переименование колодцев трубопроводной сети в порядке, соответствующем пикетажу трассы.

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

> * Работа с ограничивающими рамками
> * Фильтрация данных с помощью узла **List.FilterByBoolMask**
> * Сортировка данных с помощью узла **List.SortByKey**
> * Создание и изменение текстовых строк

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

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

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

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

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

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

## Решение

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

> 1. Выбор колодцев по слою.
> 2. Получение местоположений колодцев.
> 3. Фильтрация колодцев по смещению с последующей сортировкой по пикетам.
> 4. Создание новых имен.
> 5. Переименование колодцев.

Приступим!

### Выбор колодцев

Сначала необходимо выбрать все колодцы, с которыми мы планируем работать. Для этого просто выберем все объекты на определенном слое. Это означает, что мы сможем выбрать колодцы из разных трубопроводных сетей (при условии, что они находятся на одном слое).

<figure><img src="/files/NWKE9Z8x4c1ruJzVH183" alt=""><figcaption><p>Выбор колодцев на заданном слое</p></figcaption></figure>

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

### Получение местоположений колодцев

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

<figure><img src="/files/MQYGY4LudwcLbBfkT5J6" alt=""><figcaption><p>Использование ограничивающих рамок для получения приближенной точки вставки каждого колодца</p></figcaption></figure>

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

<div><figure><img src="/files/xg8yPtdMLIVMCHrkiQbA" alt="" width="268"><figcaption></figcaption></figure> <figure><img src="/files/w8JmmfiT7uFUZoOL5cUD" alt="" width="306"><figcaption></figcaption></figure></div>

### Фильтрация и сортировка

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

<figure><img src="/files/6ZGhosiV3CawyBW304RR" alt="" width="555"><figcaption></figcaption></figure>

> 1. Выбранная трасса.
> 2. Колодцы, которые требуется переименовать.
> 3. Колодцы, которые следует игнорировать.

Нужно отфильтровать список колодцев, чтобы проигнорировать те из них, чье смещение от трассы превышает определенное значение. Для этого лучше всего подойдет узел **List.FilterByBoolMask**. Отфильтровав список колодцев, используем узел **List.SortByKey** для их сортировки по значениям пикетов.

{% hint style="info" %}
Если вы еще не знакомы со списками, см. раздел [Работа со списками](/ru/5_essential_nodes_and_concepts/5-4_designing-with-lists/2-working-with-lists.md).
{% endhint %}

<figure><img src="/files/pJ4Ma6UfPSMCGFlOHtle" alt=""><figcaption><p>Фильтрация и сортировка колодцев</p></figcaption></figure>

> 1. Проверка значения смещения колодца относительно порогового значения.
> 2. Замена всех нулевых значений на *false*.
> 3. Фильтрация списка колодцев и пикетов.
> 4. Сортировка колодцев по пикетам.

### Создание новых имен

Последний шаг — создание новых имен для колодцев. Мы используем следующий формат: `<alignment name>-STRC-<number>`. Здесь есть несколько дополнительных узлов, которые при необходимости добавляют дополнительные нули (например, 01 вместо 1).

<figure><img src="/files/cpY714Sqolcy3OvbJwme" alt=""><figcaption><p>Создание новых имен колодцев</p></figcaption></figure>

### Переименование колодцев

Наконец, мы может переименовать колодцы.

<figure><img src="/files/DIZjc0260Kagq2bsZr40" alt="" width="289"><figcaption><p>Задание имен колодцев</p></figcaption></figure>

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

Ниже приведен пример запуска графика с помощью **проигрывателя Dynamo**.

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

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

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

### Бонус: визуализация в Dynamo

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

<figure><img src="/files/XR4lcLzcMuCnRi4wcKe6" alt=""><figcaption><p>Визуализация геометрии колодцев и характерных линий коридора</p></figcaption></figure>

Теперь мы можем наглядно увидеть, как работает процесс фильтрации колодцев по смещениям.

<figure><img src="/files/nrmL8aKk0iqM7QST13tG" alt=""><figcaption><p>Корректировка порогового значения смещения трассы и визуализация соответствующих колодцев в Dynamo</p></figcaption></figure>

## Идеи

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

{% 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/utilities/rename-structures.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.
