こんにちは、ISDです。
前回は、Dynamo を使って簡易的なボックスカルバートをモデリングをやってみました。
前回のものは、直角に横断しているボックスカルバートでしたが、今回は斜角の付いたボックスカルバートをモデリングに対応してみようと思います。
今回も、LOD100~200程度の簡易的なものになります。
Dynamoを用いて斜角ボックスカルバートをモデリングする
今回は、前回作成したボックスカルバートをモデリングする Dynamo を、斜角ボックスカルバート用に改修していきます。
前回の Dynamo に対して、改修するポイントは以下の通り。
・中心線のデータから、斜角の方向を取得
・斜角の大きさに応じて断面を拡大
・中心線の情報をもとに断面を配置
使用するノード(今回新しく使用するもの)
PolyCurve.Curves
ポリカーブから、Curveのリストを取得します。
List.FirstItem
リストの先頭の項目を取得します。
List.LastItem
リストの最後の項目を取得します。
Vector.AngleAboutAxis
回転軸を指定した上で、2つのベクトルの間の角を返します。
Math.Cos
指定した角度の余弦を返します。
CoordinateSystem.Rotate
指定された平面の基準点と法線を中心として、座標系を回転します。
Geometry.Scale
基準点を中心に、XYZ軸に対して不均等に拡大します。
ノードを上図のように配置します。
青くグループ化されている個所が、今回改修した個所です。
では、Dynamoの中身を順を追って見ていきましょう。
中心線のデータから、斜角の角度を取得
今回の中心線のデータは、下図の通り3点で構成された ポリライン もしくは 3Dポリラインとします。
P1,P2を結ぶL1 がボックスカルバートの中心線、P2,P3を結ぶL2でウイングの向きを表すようにします。
中心線の取得
今回は、AutoCAD(Civil 3D)から渡されるオブジェクトは3点で構成されるポリラインになるので、 PolyCurve.Curves のノードでジオメトリのポリカーブからカーブのリストを取得します。
次に、List.FirstItem のノードでカーブのリストから最初の項目を中心線のカーブ(L1)として取得します。
斜角を示す線の2D化および角度の取得
中心線となる L1 と L2 の折れ角 θ を求めます。
このとき、ポリラインに縦断勾配がついていると、折れ角 θ の値が変わってきてしまうので、L1,L2 をXY平面上に投影してから、折れ角 θ を求めることとします。
List.LastItem で、L2 として各ポリカーブの最後の項目を取得します。
続いて、Curve.PullOntoPlane で L2 のジオメトリを XY平面に投影します。
Curve.TangentAtParameter で、L2 の接線方向をベクトルとして取得します。
Vector.AngleAboutAxis で、L1 と L2 の接線方向のベクトル間の角度 θ を取得します。
最後に、取得した角度から 90° を引きます。
ここで最終的に得られた角度が、断面を配置する際に断面を回転させる角度となります。
断面配置位置における断面の回転
断面を配置する際に回転する角度が出せたので、断面の位置合わせに用いる座標系を回転させます。
各断面を配置するパートで、最後に CoordinateSystem.Rotate で位置合わせ用の座標系を回転させます。
ウイング部についても同様に座標系を回転させます。
斜角の大きさに応じて断面を拡大する
断面を中心線に対して斜めに配置するので、斜角の大きさに応じて断面をY軸方向に拡大する必要があります。
解説は省略しますが、 cos(θ-90°)の逆数をとると拡大率が出せます。
この値で、配置する際に断面をY軸方向に拡大します。
断面を配置してLOFTするパートで、断面を座標変換する前に Geometry.Scale で断面のジオメトリをY軸方向に拡大します。
また、断面を拡大するのは、座標変換をする前でないといけません。座標変換した後に拡大すると、多分、断面があらぬ位置に飛んで行ってしまうことでしょう。
ウィング部においても同様に断面をY軸方向に拡大します。
配置した断面をLOFTでつなぎ、AutoCAD(Civil 3D)のモデル空間にソリッドオブジェクトを生成します。
まとめ
これで、Dynamo を用いて 簡易的な斜角ボックスカルバートをモデリングすることが出来ました。
斜角の角度は、AutoCAD(Civil 3D)上で作図したポリラインで設定できるので、各ボックスカルバートごとに反映されます。
Dynamoに複数の中心線を渡せば、複数のボックスカルバートのモデルを一括で生成することが可能です。
しかし、一度の処理では内幅や内高などのパラメータの値は全て同じになってしまうので、パラメータの異なるモデルを生成したい場合は、その都度 Dynamo を起動して下さい。
今回の Dynamo のファイルは、こちらからダウンロードできますのでよろしければどうぞ。
コメント