🕌

Revit Python Shell ~基本編~

2020/12/24に公開

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