2014年7月26日土曜日

ダイナモ白熱教室(3)~エクセル

座標

Revitは座標を入力するという行為が全くありません。これはRevitの優れたユーザーインターフェイスのおかげなのですが、時には座標の値が必要になることもあります。今回はダイナモを使ってファミリの配置座標をエクセルに出力してみます。

エクセルのバージョン

ダイナモが対応しているエクセルは2013以降のバージョンです。まだ2010を使っている人も多いでしょうから、今回はCSVファイルに出力することにしましょう。

ファミリの座標

Revitで新規のプロジェクトを作成して、たとえば椅子のファミリを適当に並べます。これらの挿入点をダイナモで探ってみましょう。なお、Dynamoは今のところ2バイト文字に対応していないので、ファミリの名前をアルファベットに変更する必要があります。
椅子の座標を取得してみる

ファミリタイプの名前で選択する

ダイナモを起動します。前回は手動で要素を選択しましたが、今回はファミリのタイプ名で選択してみます。

(1)[Revit]-[Selection]-[All Element of Family Type]
(2)[Revit]-[Selection]-[FamilyTypes]
(3)図のように接続し、ファミリタイプを選択します。
ファミリタイプを選択(アルファベットしか対応していないので注意)

ファミリの座標を取得する

ファミリインスタンスの座標をリストとして取得します。

(1)[Revit]-[Element]-[Family Instance]-[Query]-[Location]
(2)図のように接続し、F5で実行します。
(3)左下の□をクリックし座標が取得できていることを確認します。
座標が取得されていることを確認

座標の値を数字だけのリストにする

取得されたのは座標の値ではなく、Pointのリストになっています。CSVに書き出したいのは座標の数字なので、ここからXYZの値を取り出しリスト化します。

(1)[Geometry]-[Point]-[Query]-[X]、[Y]、[Z]を追加
(2)[Core]-[List]-[Create]を追加し、index0の隣の[+]をクリックし、index1とindex2を追加
(3)[Core]-[View]-{Watch]を追加し、下の図のように接続
(4)[F5]で実行
Pointが数字のリストに変換された

リストの行と列を入れ替える

Watchノードを見てみると、現在取得できているのは

[0] X座標値0,X座標値1,X座標値2,.....
[1] Y座標値0,Y座標値1,Y座標値2,.....
[2] Z座標値0,Z座標値1,Z座標値2.....

のリストです。(リストの番号は0から始まります。).
これを

[0] X座標値0,Y座標値0,Z座標値0
[1] X座標値1,Y座標値1,Z座標値1
[2] X座標値2,Y座標値2,Z座標値2
...
となるように、行と列を入れ替えます。これはエクセルでもおなじみのTransposeを利用します。

(1) [Core]-[List]-[Action]-[Transpose]
(2) [Watch]を追加し、図のように接続、F5で実行します。

.
リストの行と列を入れ替え

CSVに出力

準備ができたので、これをCSVファイルに出力します。
(1) [Core]-[File]-[Actions]-[ExportToCSV]
(2) [Core]-[Input]-[File path]を追加し、[Browse]をクリックし、新規ファイル名を指定します。このとき拡張子CSVを付けることをお忘れなく。
(3) Watchを追加し、図のように接続
(4) F5で実行し、最後のWatchにTrueが表示されていたら出力成功です。
最後のWatchノードにTrueが表示されれば成功
指定したフォルダのCSVファイルをエクセルで開いてみてください。
座標の一覧を取得できた
今回はCSVファイルを使いましたが、エクセル2013以降をお持ちの場合は、
[Office]-[Excel]-[Write]
もお試しください。行やシート名を指定して出力が可能です。
エクセルに直接出力も可能
さて、次回はエクセルに取得した座標を使って、あらたにファミリを配置してみます。