タイトルの通りですが、3次元的に複雑な形状のプロジェクトにおいて断面で切った時にどのような断面になっているかを把握するために、2次元の断面を要望されることが多々あり、超高層のプロジェクトになると例えば10m毎に切ったとしても50断面作成しないといけないような場面に遭遇します。断面を輪切りにし、dwg形式等で手渡すこともありますが、もらった人が出力するところまでを考慮するとPDFにするところまで自動化したほうが、その後の出力時の手間が省けそうです。そのような場合の今とり得る対応方法を考えてみました。
1. Grasshopperで断面を作成したい形状を読み取る。
2. Grasshopperで一定間隔で断面を切断し、その結果をRhinocerosにBakeする。断面毎に別レイヤーにしておく(→コード1)。
3. Rhinocerosで出力用のレイアウトを一つ用意しておく。
4. Rhinocerosで下記のようなスクリプトを書く(→コード2)。やっていることは各断面ごとにレイヤーをON, OFFして、出力先のプリンター(PDF Creatorを予め指定)に送り、特定のフォルダに自動保存するというもの。
5. 1断面1ファイルのPDFを結合して一つのPDFにする。
コード1
import scriptcontext as sc
import Rhino.DocObjects as rd
import Rhinosc.doc = Rhino.RhinoDoc.ActiveDoc
cnt = Curve.BranchCount
for i in range(cnt):
attr = rd.ObjectAttributes()
layerTable = sc.doc.Layers
layerIndex = layerTable.FindByFullPath(layerName, True)
attr.LayerIndex = layerIndex
print(Text.Branch(i)[0])
tmp = Text.Branch(i)[0]
sc.doc.Objects.AddText(tmp, Plane, 5.0 , "Arial", False, False, attr)
for crv in Curve.Branch(i):
sc.doc.Objects.AddCurve(crv,attr)sc.doc = ghdoc
コード2
# -*- coding: utf-8 -*-import rhinoscriptsyntax as rs
import osrs.EnableRedraw(False)
# 'gh'子レイヤーの数を数える
cnt = rs.LayerChildCount("gh")for i in range(cnt): # 切断面の数だけループ
rs.CurrentDetail("batchprint") # 現在のdetailを"batchprint"という名前のdetailに移動
rs.LayerVisible("level"+str(i), True) # i番目の切断面のレイヤーをONにするcmd = "-Print G"
rs.Command(cmd) # Rhinocerosのプリントコマンドを実行rs.LayerVisible("test"+str(i), False) # i番目の切断面のレイヤーをOFFにする
rs.EnableRedraw()
コメントをするにはログインしてください。