Revit Python Shell ~基本編~
1. Transaction
Revit Python Shellを使ってRevitのデータを変更する場合にはTransactionを使用する必要があります。
使い方を早速見ていきましょう!!
1.1 DB.Transaction
Transactionでは基本的に.Start()
から.Commit()
までで実行されます。
今回はコメントにテストと入れてみましょう!!
>>> t = DB.Transaction(doc, "Set Comments")
>>> t.Start()
Autodesk.Revit.DB.TransactionStatus.Started
>>> comment_param = wall.LookupParameter('コメント')
>>> comment_param.Set('テスト')
True
>>> t.Commit()
Autodesk.Revit.DB.TransactionStatus.Committed
>>>
以下のようになっていれば成功です。
Transactionは引数にRevitのDocumentを取ります。現在編集しているプロジェクトを指定するためここではdoc
を使います。(わからない人は入門編で確認してみてください)
また、実行した変更の名前を設定してあげます。これはUndo(元に戻す)の横にある一覧表示から確認することができます。
1.2 db.Transaction
rpwのTransactionは非常に簡単です。また、Pythonで書いているからこそ使うことのできるwith
を使うことができます。
これによりTransactionの中身をインデントだけでコントロールできるようになります。
>>> with db.Transaction('Set Comments'):
... db.Element(wall).parameters['Comments'].value = 'テスト'
ここまでくれば基本はできていると思います。
まだまだ奥は深いですので、ぜひ色々と試してみてください!!
2. Type Parameter
プロパティ画面に出てくるインスタンスパラメータと違って、タイプパラメータは Symbol
クラスからアクセスする必要があります。
例えばタイプコメントのパラメータにアクセスするために、Wall
オブジェクトからアクセスしようとすると下記のようなエラーが表示されます。
>>> w = db.Element(wall)
>>> w.parameters['Type Comments'].value
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "[path to rpw]\revitpythonwrapper\rpw\db\parameter.py", line 70, in __getitem__
rpw.exceptions.RpwParameterNotFound: parameter not found [element:849032]:[param_name:Type Comments]
これはタイプコメントが存在しないと言っています。つまりアクセスの仕方が異なるのです。
Revit Lookupで確認してみましょう!!図の左側がインスタンスパラメータで右側がタイプパラメータになります。今回の Type Comments
は右側にあるのがわかると思います。
Wall
クラスではなく。WallType
クラスからアクセスする必要があるため、今回のようなエラーが起こってしまったのです。
コードを修正する前に値が含まれているもので確認をするため、パラメータを Keynote
に変更して試してみましょう!!
>>> wall.get_symbol().parameters['Keynote'].value
'F10'
これで取得することができました。
Discussion