# Границы зазора

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-08eb8cd428425a923af595cea18442b7936ffbdf%2FRail_ClearanceEnvelope_Player.gif?alt=media" alt=""><figcaption></figcaption></figure>

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

## Цель

> :dart: Использование блока профиля транспортного средства для создания 3D-тел, определяющих границы зазора, вдоль коридора.

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

> * Работа с характерными линиями коридора
> * Преобразование геометрии при переходе между системами координат
> * Создание тел путем лофтинга
> * Управление поведением узла с помощью параметров переплетения.

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

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

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

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

{% file src="<https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-222654e8840c6bbf40f05df443b418d04c4edbd7%2FRail_ClearanceEnvelope.dyn?alt=media>" %}

{% file src="<https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-555200ae7db1ec786f8084e35bd0a17f3fbdc8dc%2FRail_ClearanceEnvelope.dwg?alt=media>" %}

## Решение

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

> 1. Получение характерных линий из заданной базовой линии коридора.
> 2. Создание систем координат вдоль характерной линии коридора с требуемым интервалом.
> 3. Преобразование геометрии блока профиля в соответствии с системой координат.
> 4. Лофтинг тела между профилями.
> 5. Создание тел в Civil 3D.

Приступим!

### Получение данных коридора

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

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-ac149803f2fec120b34fecefe697b2cb5598c462%2FRail_ClearanceEnvelope_GetCorridorData.png?alt=media" alt=""><figcaption><p>Выбор коридора, базовой линии и характерной линии</p></figcaption></figure>

### Создание систем координат

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

{% hint style="info" %}
Если вы еще не знакомы с системами координат, см. раздел [2-vectors](https://primer2.dynamobim.org/ru/5_essential_nodes_and_concepts/5-2_geometry-for-computational-design/2-vectors "mention").
{% endhint %}

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-f005dd000c839530bb8e664b761d858a45c2ebe9%2FRail_ClearanceEnvelope_CreateCoordinateSystems.png?alt=media" alt=""><figcaption><p>Получение систем координат, расположенных вдоль характерных линий коридора</p></figcaption></figure>

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

{% hint style="info" %}
Если вы еще не знакомы с переплетением узлов, см. раздел [1-whats-a-list](https://primer2.dynamobim.org/ru/5_essential_nodes_and_concepts/5-4_designing-with-lists/1-whats-a-list "mention").
{% endhint %}

### Преобразование геометрии блока

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

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-e303adc517b5bf2951a8d04ae1c2675b1842eb53%2FRail_ClearanceEnvelope_TransformAnimation.gif?alt=media" alt=""><figcaption><p>Визуализация преобразования геометрии при переходе между системами координат.</p></figcaption></figure>

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

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

> 1. Здесь выполняется получение определения блока из документа.
> 2. Эти узлы извлекают геометрию Dynamo для объектов в блоке.
> 3. Эти узлы, по сути, определяют *исходную* систему координат, в которой геометрия находится до преобразования.
> 4. Наконец, в этом узле выполняется собственно преобразование геометрии.
> 5. Обратите внимание на *длинное* переплетение в этом узле.

Вот что мы получаем в Dynamo.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-28cd3b3dcb9a5f88df9b5bf620e61e6b087f89d9%2FRail_ClearanceEnvelope_Dynamo_Profiles.png?alt=media" alt=""><figcaption><p>Геометрия блока профиля транспортного средства после преобразования</p></figcaption></figure>

### Создание тел

У нас для вас хорошая новость. Самое сложное позади! Все, что осталось сделать, — создать тела между профилями. Это можно легко сделать с помощью узла **Solid.ByLoft**.

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

Результат можно посмотреть здесь. Помните, что это тела Dynamo, а значит, их все еще нужно создать в Civil 3D.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-28e91b1c436018bf6ecb7afe18ac32f11c78da6a%2FRail_ClearanceEnvelope_Dynamo_Solids.png?alt=media" alt=""><figcaption><p>Тела Dynamo после лофтинга</p></figcaption></figure>

### Вывод тел в Civil 3D

Последний шаг — вывод сгенерированных тел в пространство модели. Кроме того, мы присвоим им цвет, чтобы сделать их более заметными.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-bf5954f60f7c14543cee49ee5d1eefcd4b9648d0%2FRail_ClearanceEnvelope_SolidsToC3D.png?alt=media" alt=""><figcaption><p>Вывод тел в Civil 3D</p></figcaption></figure>

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

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

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-08eb8cd428425a923af595cea18442b7936ffbdf%2FRail_ClearanceEnvelope_Player.gif?alt=media" alt=""><figcaption><p>Запуск графика с помощью проигрывателя Dynamo и просмотр результатов в Civil 3D</p></figcaption></figure>

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

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

## Идеи

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

{% hint style="info" %}
Добавление возможности использования **разных диапазонов пикетов** отдельно для каждого пути.
{% endhint %}

{% hint style="info" %}
**Разбивка тел** на более мелкие сегменты, которые можно проанализировать отдельно на предмет конфликтов.
{% endhint %}

{% hint style="info" %}
Проверка того, **не пересекаются ли тела границы с элементами**, и выделение цветом тех, которые пересекаются.
{% endhint %}
