Dynamo の多くの優れた使用事例の 1 つは、コリドー モデルに沿って個別のオブジェクトを動的に配置することです。多くの場合、オブジェクトはコリドーに沿って挿入されたアセンブリとは独立した位置に配置する必要があります。これは、手動で行うにはきわめて面倒な作業です。コリドーの水平ジオメトリまたは垂直ジオメトリが変更されると、大量の再作業が必要になります。
外部ファイル(この場合は Excel)からデータを読み込む
ディクショナリ内のデータを編成する
座標系を使用して位置/尺度/回転をコントロールする
ブロック参照を配置する
Dynamo でジオメトリを視覚化する
このグラフは Civil 3D 2020 以降で実行できます。
まず、以下のサンプル ファイルをダウンロードし、DWG ファイルと Dynamo グラフを開きます。
Excel ファイルを Dynamo グラフと同じフォルダに保存することをお勧めします。
このグラフのロジックの概要を以下に示します。
Excel ファイルを読み込み、データを Dynamo に読み込む
指定したコリドー基線から計画線を取得する
目的の測点でコリドー計画線に沿って座標系を生成する
座標系を使用してモデル空間にブロック参照を配置する
以上です。
このサンプル グラフでは、Excel ファイルを使用して、Dynamo が照明柱のブロック参照を配置するために使用するデータを保存します。表は次のようになります。
Dynamo を使用して外部ファイル(Excelファイルなど)からデータを読み込む方法は、特にデータを他のチーム メンバーと共有する必要がある場合に最適です。
Excel データは、次ように Dynamo に読み込まれます。
データが得られたら、列(Corridor、Baseline、PointCode など)で分割して、グラフの残りの部分で使用できるようにする必要があります。これを行う一般的な方法は、List.GetItemAtIndex ノードを使用して、必要な列のインデックス番号を指定することです。たとえば、[Corridor] 列はインデックス 0、[Baseline] 列はインデックス 1、などです。
問題なさそうですね?しかし、このアプローチには潜在的な問題があります。Excel ファイルの列の順序が将来変更されたらどうなるでしょうか?あるいは、2 つの列の間に新しい列が追加されたら?その場合は、グラフが正しく機能しなくなり、更新が必要になります。Excel の列ヘッダーを キー として、残りのデータを 値 として使用して、データをディクショナリに入れることで、グラフを将来も使用できるように保証します。
ディクショナリを初めて使用する場合は、「Dynamo のディクショナリ」セクションを参照してください。
これにより、Excel で列の順序を柔軟に変更できるため、グラフの柔軟性が向上します。列ヘッダーが同じであるかぎり、キー(列ヘッダー)を使用してディクショナリからデータを取得できます。これを次に実行します。
これで Excel データが読み込まれ、準備ができたので、このデータを使用して、コリドー モデルに関する情報を Civil 3D から取得しましょう。
コリドー モデルを名前で選択します。
コリドー内の特定の基線を取得します。
基線内の計画線をポイント コードにより取得します。
ここで、Excel ファイルで指定した測点値でコリドー計画線に沿って座標系を生成します。これらの座標系は、照明柱のブロック参照の位置、回転、および尺度を定義するために使用されます。
座標系を初めて使用する場合は、「ベクトル、平面、座標系」 セクションを参照してください。
基線のどちら側に座標系があるかに応じて座標系を回転するために、ここでコード ブロックを使用します。これは複数のノードのシーケンスを使用して実現できますが、これは単に書き出すほうが簡単である良い例です。
コード ブロックを初めて使用する場合は、「コード ブロックと DesignScript」 セクションを参照してください。
あと少しです。ブロック参照を実際に配置するために必要なすべての情報が揃いました。まず、Excel ファイルの BlockName 列を使用して必要なブロック定義を取得します。
ここから、最後の手順としてブロック参照を作成します。
グラフを実行すると、コリドーに沿ってモデル空間に新しいブロック参照が表示されます。これが素晴らしいところで、グラフの実行モードが[自動]に設定されている状態で Excel ファイルを編集すると、ブロック参照が自動的に更新されます。
グラフの実行モードの詳細については、「ユーザ インタフェース」 セクションを参照してください。
以下に、Dynamo プレーヤを使用してグラフを実行する例を示します。
Dynamo プレーヤを初めて使用する場合は、「Dynamo プレーヤ」セクションを参照してください。
コンテキストを提供するために、Dynamo でコリドー ジオメトリを視覚化すると便利です。この特定のモデルでは、モデル空間で既に抽出されたコリドーのソリッドが存在するため、Dynamo に取り込んでみましょう。
しかし、他にも検討する必要があることがあります。ソリッドは比較的重いジオメトリ タイプであるため、この操作によってグラフの速度が低下します。ソリッドを表示するかどうかを、簡単に 選択 できる方法があれば便利です。解決策は非常に単純で、 Corridor.GetSolids ノードの接続を解除するだけですが、これによってすべての下流ノードに警告が生成されてしまう点が少々面倒です。この状況では、ScopeIf ノードが役に立ちます。
Object.Geometry ノードの下部にグレーのバーがあることに注目してください。これは、ノードのプレビューがオフになり(ノードを右クリックしてアクセス可能)、GeometryColor.ByGeometryColor が、背景プレビューでの表示優先順位に関して他のジオメトリとの「競合」を回避できることを意味します。
ScopeIf ノードを使用すると、基本的にノードのブランチ全体を選択的に実行できます。test 入力が false の場合、ScopeIf ノードに接続されたすべてのノードは実行されません。
Dynamo の背景プレビューの結果は次のとおりです。
このグラフの機能を拡張する方法について、いくつかのアイデアを示します。
Excel ファイルに 回転 列を追加し、それを使用して座標系の回転を駆動します。
必要に応じて照明柱がコリドー計画線から外れるようにするため、Excel ファイルに 水平オフセットまたは垂直オフセット を追加します。
Excel ファイルで測点値を使用する代わりに、開始測点と標準間隔を使用して、Dynamo で直接 測点値を生成します。
Excel ファイルで指定した測点値でコリドーに沿って照明柱のブロック参照を配置します。
ミッションが達成されました。