構造フレームのカットバックをDynamoで実行
Revit Peelerで構造フレームのカットバックについての説明がありました。
フレームの端部が接合された状態でないとカットバックの設定ができないことがわかりました。フレームの端部が接合された状態かそうでないかは
構造フレームのインスタンスパラメータをBuildIn Parameter Checkerでチェックするとわかります。
「結合のステータス」は、パラメータとしては保存されていますが、パラメータ自体を直接書き換えることができないread-onlyとして保存されています。
read-writeとなっているパラメータは直接書き換えることができるのですが、パラメータを書き換えるだけでは不具合の出るものはread-onlyとなっており、書き換えるためのメソッドが用意されていると思われます。
Dynamo Forumで記事を検索してみると以下のようなものを発見できました。
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
#Unwrapping Dynamoelement to Revit element.
beams = UnwrapElement(IN[0])
#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
for beam in beams:
StructuralFramingUtils.DisallowJoinAtEnd(beam,0)
StructuralFramingUtils.DisallowJoinAtEnd(beam,1)
TransactionManager.Instance.TransactionTaskDone()
OUT = 0
上記のコードをDynamo内のPythonで実行させます。Python Scriptノードを配置して右クリックから編集を行います。
もともとあったコードは全て削除して、先程のコードをコピーして貼り付けます。
Python Scriptとモデルを選択するノードをつなぎます。
実行が完了したあとに、パラメータを見てみると、結合が無効になっていることが確認できます。
Pythonの中身を軽く紹介します。
今回のキーは、DisallowJoinAtEnd Methodが発見できたかどうかでした。
Autodesk.Revit.DB.Structure.StructuralFramingUtils Class
に含まれています。このクラスには他にも、始点終点の入れ替えができるかなどのメソッドが含まれています。
必要な引数については、メソッドを詳しく見てみると、
FamilyInstanceと端点の番号が必要であることがわかります。
UnwrapしたElementをFamilyInstanceとして利用しています。
また、DynamoからRevitのデータを書き換えているので、トランザクション処理をしています。トランザクションは利用者の視点でみると、Ctrl+Vで戻ることができるように状態を保存する処理です。コードを描く人から見ると、エラーのある処理は中断してもとに戻す。という処理になります。開始と終了を宣言する必要があります。
今回に記事では非結合にする処理をしていますが、結合にする場合には、
StructuralFramingUtils.DisallowJoinAtEnd(beam,0)
StructuralFramingUtils.DisallowJoinAtEnd(beam,1)
を書き換えて、
StructuralFramingUtils.AllowJoinAtEnd(beam,0)
StructuralFramingUtils.AllowJoinAtEnd(beam,1)
とすることで結合処理にすることができます。
この記事が気に入ったらサポートをしてみませんか?