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