# 间隙包络

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

为间隙验证开发运动包络是轨道设计的重要部分。Dynamo 可用于为包络生成实体，而不是创建和管理复杂的道路子部件来执行该作业。

## 目标

> :dart: 使用车辆轮廓块来沿道路生成间隙包络三维实体。

## 关键概念

> * 使用道路要素线
> * 在坐标系之间转换几何图形
> * 通过放样创建实体
> * 使用连缀设置控制节点行为

## 版本兼容性

{% hint style="success" %}
此图形将在 **Civil 3D 2020** 及更高版本上运行。
{% endhint %}

## 数据集

首先下载下面的样例文件，然后打开 DWG 文件和 Dynamo 图形。

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

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

## 解决方案

下面概述了此图形中的逻辑。

> 1. 从指定的道路基准线获取要素线
> 2. 沿道路要素线以所需的间距生成坐标系
> 3. 将轮廓块几何图形转换为坐标系
> 4. 在轮廓之间放样实体
> 5. 在 Civil 3D 中创建实体

开始吧！

### 获取道路数据

我们的第一步是获取道路数据。我们将按名称选择道路模型、获取道路中的特定基准线，然后按点代码获取基准线中的要素线。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%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/zh-cn/5_essential_nodes_and_concepts/5-2_geometry-for-computational-design/2-vectors "mention") 部分。
{% endhint %}

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%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/zh-cn/5_essential_nodes_and_concepts/5-4_designing-with-lists/1-whats-a-list "mention") 部分。
{% endhint %}

### 转换块几何图形

现在，我们需要以某种方式创建沿要素线的车辆轮廓的阵列。我们将使用 **Geometry.Transform** 节点来基于车辆轮廓块定义转换几何图形。这是一个难以可视化的概念，因此在我们查看节点之前，这里有一张图显示了将要发生的情况。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-e303adc517b5bf2951a8d04ae1c2675b1842eb53%2FRail_ClearanceEnvelope_TransformAnimation.gif?alt=media" alt=""><figcaption><p>在坐标系之间转换几何图形的可视化。</p></figcaption></figure>

实际上，我们基于 *单个* 块定义获取 Dynamo 几何图形，然后移动/旋转该几何图形，同时沿要素线创建阵列。酷炫！节点序列如下所示。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%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://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-28cd3b3dcb9a5f88df9b5bf620e61e6b087f89d9%2FRail_ClearanceEnvelope_Dynamo_Profiles.png?alt=media" alt=""><figcaption><p>转换后的车辆轮廓块几何图形</p></figcaption></figure>

### 生成实体

好消息！艰苦的工作已完成。我们现在只需在轮廓之间生成实体。这可以通过 **Solid.ByLoft** 节点轻松完成。

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

结果如下所示。请记住，这些是 Dynamo 实体 - 我们仍需要在 Civil 3D 中创建它们。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-28e91b1c436018bf6ecb7afe18ac32f11c78da6a%2FRail_ClearanceEnvelope_Dynamo_Solids.png?alt=media" alt=""><figcaption><p>放样后的 Dynamo 实体</p></figcaption></figure>

### 将实体输出到 Civil 3D 中

我们的最后一步是将生成的实体输出到模型空间中。我们还会为这些实体赋予颜色，以使它们易于区分。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-bf5954f60f7c14543cee49ee5d1eefcd4b9648d0%2FRail_ClearanceEnvelope_SolidsToC3D.png?alt=media" alt=""><figcaption><p>将实体输出到 Civil 3D 中</p></figcaption></figure>

### 结果

以下是一个使用 **Dynamo 播放器**运行图形的示例。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%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/zh-cn/dynamo-for-civil-3d/dynamo-player "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/zh-cn/dynamo-for-civil-3d/sample-workflows/rail/clearance-envelope.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.
