# クリアランスのエンベロープ

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%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://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%2Fuploads%2Fgit-blob-222654e8840c6bbf40f05df443b418d04c4edbd7%2FRail_ClearanceEnvelope.dyn?alt=media>" %}

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

## 対処法

このグラフのロジックの概要を以下に示します。

> 1. 指定したコリドー基線から計画線を取得する
> 2. コリドー計画線に沿って目的の間隔で座標系を生成する
> 3. プロファイルの Block ジオメトリを座標系に変換する
> 4. プロファイル間でソリッドをロフトする
> 5. Civil 3Dでソリッドを作成する

以上です。

### コリドー データを取得する

最初の手順は、コリドー データを取得することです。コリドー モデルを名前で選択し、コリドー内の特定の基線を取得します。次に、基線内の計画線をそのポイント コードで取得します。

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%2Fuploads%2Fgit-blob-ac149803f2fec120b34fecefe697b2cb5598c462%2FRail_ClearanceEnvelope_GetCorridorData.png?alt=media" alt=""><figcaption><p>コリドー、基線、および計画線を選択する</p></figcaption></figure>

### 座標系を生成する

ここで、指定した開始測点と終了測点の間に、コリドー計画線に沿って**座標系**を生成します。これらの座標系は、車両プロファイルの Block ジオメトリを コリドーに位置合わせするために使用されます。

{% hint style="info" %}
座標系を初めて使用する場合は、「 [2-vectors](https://primer2.dynamobim.org/ja/5_essential_nodes_and_concepts/5-2_geometry-for-computational-design/2-vectors "mention") 」セクションを参照してください。
{% endhint %}

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%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/ja/5_essential_nodes_and_concepts/5-4_designing-with-lists/1-whats-a-list "mention") 」セクションを参照してください。
{% endhint %}

### Block ジオメトリを変換する

ここで、計画線に沿って車両プロファイルの配列を何らかの方法で作成する必要があります。これから行う作業では、**Geometry.Transform** ノードを使用して、車両プロファイルのブロック定義からジオメトリを変換します。これは視覚化が難しい概念なので、ノードを確認する前に、次のグラフィックスでこれから起こる動作を示します。

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%2Fuploads%2Fgit-blob-e303adc517b5bf2951a8d04ae1c2675b1842eb53%2FRail_ClearanceEnvelope_TransformAnimation.gif?alt=media" alt=""><figcaption><p>座標系間でのジオメトリの変換の視覚化。</p></figcaption></figure>

基本的に、*単一の* Block 定義から Dynamo ジオメトリを取得し、移動または回転しながら、計画線に沿って配列を作成します。いいですね。ノード シーケンスは次のようになります。

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

> 1. これにより、ドキュメントから Block 定義を取得します。
> 2. これらのノードは、Block 内のオブジェクトの Dynamo ジオメトリを取得します。
> 3. これらのノードは、基本的にジオメトリの *変換元* の座標系を定義します。
> 4. 最後に、このノードはジオメトリを変換する実際の作業を行います。
> 5. このノードの *最長* レーシングに注目してください。

Dynamo では、次のようになります。

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%2Fuploads%2Fgit-blob-28cd3b3dcb9a5f88df9b5bf620e61e6b087f89d9%2FRail_ClearanceEnvelope_Dynamo_Profiles.png?alt=media" alt=""><figcaption><p>変換後の車両プロファイルの Block ジオメトリ</p></figcaption></figure>

### ソリッドを生成する

とっておきの朗報です。大変な作業は終わりました。次に行う必要があるのは、プロファイル間にソリッドを生成することだけです。これは、**Solid.ByLoft** ノードを使用して簡単に行うことができます。

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

結果は次のようになります。これらは Dynamo ソリッドです。これらを Civil 3D で作成する必要があります。

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%2Fuploads%2Fgit-blob-28e91b1c436018bf6ecb7afe18ac32f11c78da6a%2FRail_ClearanceEnvelope_Dynamo_Solids.png?alt=media" alt=""><figcaption><p>ロフト後の Dynamo ソリッド</p></figcaption></figure>

### Civil 3D にソリッドを出力する

最後の手順は、生成されたソリッドをモデル空間に出力することです。見やすくするために、色付けもします。

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%2Fuploads%2Fgit-blob-bf5954f60f7c14543cee49ee5d1eefcd4b9648d0%2FRail_ClearanceEnvelope_SolidsToC3D.png?alt=media" alt=""><figcaption><p>ソリッドを Civil 3D に出力する</p></figcaption></figure>

### 結果

以下に、**Dynamo プレーヤ**を使用してグラフを実行する例を示します。

<figure><img src="https://4202566639-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJPSLCt5YLZNNPlPsMyh4%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/ja/dynamo-for-civil-3d/dynamo-player "mention") 」セクションを参照してください。
{% endhint %}

> :tada: ミッションが達成されました。

## アイデア

このグラフの機能を拡張する方法について、いくつかのアイデアを示します。

{% hint style="info" %}
各トラックに対して **異なる測点範囲** を個別に使用する機能を追加します。
{% endhint %}

{% hint style="info" %}
小さなセグメントに **ソリッドを分割** し、クラッシュを個別に解析できるようにします。
{% endhint %}

{% hint style="info" %}
エンベロープ ソリッドが **フィーチャと交差** するかを確認し、クラッシュするソリッドに色を付けます。
{% endhint %}
