• openDDLについて
  • サイトポリシー
  • ご利用前にお読みください
  • EN
  • SIGN IN:
  • SIGN IN:
建物形状の断面を自動的に作成する方法について
by Bunji Izumi Sep 18, 2015

タイトルの通りですが、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 Rhino

sc.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 os

rs.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()

RhinocerosのLayoutの設定
capt001

PDF Creatorの設定
capt002


コメントをするにはログインしてください。

2727 0
Tags
#Grasshopper #Rhinoceros
License
cc_by_sa
GNU GPL

CONTACT ©2025 NIKKEN SEKKEI LTD.