リストの作成
前回は「モデル線分上を移動する1点」を作成しました。今回は線分を一定間隔で分割した点のリストを作成し、複数本の木を配置してみましょう。前回のファイルをRevit(rvtファイル)→ダイナモ(dynファイル)の順番で開いてください。ダイナモのファイルとRevitのファイルには関係性が生じており、異なるファイルを開くとダイナモのコマンドラインにエラーが表示されます。
Try02 - 線分上に等間隔で木を植える
曲線を等間隔に分割した点を作成する
前回のダイナモの「Curve.PointAtDistance」ノードをみると、[distance]のインプットは[Double Slider]から単一の値のみがインプットされています。作成された点を確認するには[Curve.PointAtDistance]ノードの右下にある小さな□をクリックします。スライダから21.275のみがdistanceにインプットされるので作成される座標も一つだけとなる |
ここに点のリストを作成するにはdistanceに複数の値をインプットします。一定間隔の数字のリストを作成するにはNumber RangeまたはNumber Sequenceを使います。
(1)[Core]-[List]-[Create]-[Number Range]
(2)[Double Slider]のアウトプットをNumber RangeのStepにつなぎかえます。
(3)[Number Range]の[seq]を[Curve.PointAtDistance]の[distance]につなぎます。
Number Rangeを追加 |
(1)[Core]-[Input]-[Number]
(2)NumberのアウトプットをNumber Rangeのstartに接続
Numberをstartに接続 |
Number Range のendには曲線の長さをインプットします。曲線の長さを調べるノードがあります。
(1)[Geometry]-[Curve]-[Query]-[Length]
(2)[Element.Geometry]のvar[]と[Length]のdoubleと[Number Range]のendを接続します。
線の長さが最大値として設定されれた。 |
実行~その1
F5キーを押して実行してみます。残念ながらエラーがでてただしく作動しません。なぜでしょうか?黄色くなっているところがエラー |
(1)[Core]-[View]-[Watch]
(2)Number RangeノードのseqとWatchをつないでF5で再度実行します。
Watchに作成されたリストが表示される。 |
[0] 0, 9.654, 19.309, 28.963, 38.617
[1] (今回はない)
Number Rangeから入れ子のリストがdistanceへ入っていたので受け入れられない値としてエラーが発生していました。
入れ子のリストは受け付けない |
エラーを修正
この2次元リストを単純な1次元リストに変更します。(1)[Builtin Function]-[Flatten]
(2)さらにWatchを追加し、下の図のように接続、F5キーをおして実行します。
リストの変化に注目! |
リストとリストの掛け合わせ
確認のため、もうひとつWatchを追加して、Curve.PointAtDistanceの出力を見てみましょう。点がひとつしかない!? |
distanceには確かにリストがインプットされていますが、出力された点は一つです。
Curve.PointAtDistanceの右下の小さなマーク「|」に注目してください。ここにマウスカーソルをもっていくと...
となっています。つまり二つのリストの同じ番号同志を掛け合わせた処理を行うということを示しています。
現在、curveにもdistanceにもリストがインプットされています。curveのほうもWatchで確認してみます。
curveとdistanceの第一要素だけが処理されている |
(1)[Curve.PointAtDistance]ノードを右クリック
(2)[Laceing]-[Longest]または[Cross Product]
(3)F5で実行
最初の設定ではShortestが選択されていたため、一番短いcurveのリストが要素数1なのでひとつだけ処理されましたが、Longestにすると長いほうのdistanceのリストの数に合わせて処理されます。
複数の処理が実行された。 |
リストの操作はDynamoにおいて非常に重要なテクニックですのでしっかり理解しましょう。
次回はファミリの座標を取得して、エクセルに出力します。