[Dynamo] 排水管のモデリングを効率化する その2 :円オブジェクトのスイープ

Dynamo

こんにちは、ISDです。

前回は、排水管の中心線を3Dポリラインで作図して フィレットするところまで進めました。

では次に、排水管のソリッドを生成してみましょう。

Dynamoを用いて排水管のソリッドモデルを生成する

3Dポリラインをフィレットした後、排水管のソリッドモデルを作成する手順は、
1.3Dポリラインをフィレットした結果作成された円弧と線分を繋いでポリカーブを生成する。
2.円オブジェクトを生成する。
3.各ポリカーブに円オブジェクトをスイープする。

という流れになります。

今回は、前回の Dynamo のグラフに追加する形で進めていきます。

使用するノード(今回新しく使用するもの)

List.Join
指定した全てのリストを連結します。

List.Combine
指定した2つのリストの各要素にたいして、コンビネータとして指定したノードの処理を逐次行います。

PolyCurve.ByJoinedCurves
複数の連続したカーブを連結して、ポリカーブを生成します。

Circle.ByCenterPointRadius
中心点と半径を指定して、円を生成します。

Curve.PlaneAtParameter
カーブ上のパラメータの位置に平面を生成します。平面の法線方向がカーブの接線方向になるように位置合わせされます。パラメータはカーブの始点が 0、終点が1となります。

CoordinateSystem.ByPlane
指定した平面をもとに、座標系を生成します。

Geometry.Transform
指定した座標系をもとに、ジオメトリを変換します。

Curve.SweepAsSolid
パスとなるカーブに沿って、閉じたカーブをスイープしてソリッドを生成します。

Object.ByGeometry

Dynamo のジオメトリをもとに、AutoCAD上にオブジェクトを生成します。

ノードを上図のように配置します。
前半部分は、前回のものと同じです。
では、Dynamoの中身を順を追って見ていきましょう。

連続した円弧と線分からポリカーブを生成

3Dポリラインをフィレットした結果作成された円弧と線分を繋いでポリカーブを生成します。

List.Combine の入力は、 list0 に円弧のリスト、list1 に線分のリストを指定しています。
そして、List.Join をコンビネータとしてこの2つのリストを連結しています。
連結したリストを PolyCurve.ByJoinedCurves に流してやると、3Dポリラインごとに フィレットされたポリカーブが生成されます。

ポリカーブに円オブジェクトをスイープする

円オブジェクトを生成し、各ポリカーブにスイープします。

先ずは、Circle.ByCenterPointRadius で指定した半径で原点に円オブジェクトを生成しておきます。

Curve.PlaneAtParameter では、ポリカーブの指定したパラメータの位置で平面を生成します。
パラメータの値はデフォルトが0になっているので、この場合ポリカーブの始点の位置にポリカーブと直交した平面が生成され、CoordinateSystem.ByPlane で平面をもとに座標系を生成します。

続いて、Geometry.Transform で円オブジェクトを座標系をもとに変換することにより、ポリカーブの始点の位置に円オブジェクトが配置されます。

Curve.SweepAsSolid で、ポリカーブに円オブジェクトをスイープすると排水管のソリッドが生成されます。

Dynamo上で生成したソリッドをもとに、AutoCAD上にソリッドを生成

最後に、生成したソリッドのリストを Object.ByGeometry に渡して、AutoCAD (Civil 3D)のモデル空間上に排水管のソリッドオブジェクトを生成します。

これで、排水管のモデルが出来ました。

まとめ

一応、3Dポリラインのフィレットから、円をスイープしてソリッドオブジェクトの生成まで一発で行けるようになりました。

この Dynamoでは、管の径、フィレット半径は一律になってしまいますが、
発展形としては、オブジェクトのレイヤの情報をトリガーにして、管の径、フィレット半径を個別に設定するといったことも考えられますが、今回はここまでということで……

地下埋設物や、鉄筋のモデリングにも応用が利くと思うので、いろいろ試してみたいですね。

尚、Dynamo から生成したソリッドオブジェクトは、AutoCADでのスイープソリッドと違って、長さのジオメトリ情報を持っていないのでご注意ください。Dynamo上でプロパティセットを設定してポリカーブの長さ情報を持たせるとか、対処法はありますが……
ぶっちゃけ、Autolisp で複数パスの一括スイープコマンドは作ってあるので、ことは足りてしまうので……
まぁ、必要になったら考えるとします。


今回の Dynamo のファイルは、こちらからダウンロードできますのでよろしければどうぞ。

コメント

タイトルとURLをコピーしました