お世話になります。
REVITからある部材をDynamo上で抽出して、赤色着色することを試みています。
例題ではfilterbyboolmaskで取り出した梁部材を「OverrideGraphicSettings.ByProperties」→「Element.OverrideInView」で赤に着色ということを試しましたが、複数の各ビューごとにDynamoを実行する必要があります。
複数のビューをまとめて赤に着色することを目指しており、英語版DynamoForumで類似のPythonを作成しましたが、「SetProjectionFillColor」の属性不具合の警告メッセージが出て当該ビューも着色できません。
【Pythonの内容】
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import OverrideGraphicSettings, Color
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
elements = UnwrapElement(IN[0])
views = UnwrapElement(IN[1])
line_pattern = UnwrapElement(IN[2])
fill_pattern = UnwrapElement(IN[3])
color_input = IN[4]
color_l= color_input.split(" ")
color = Color(int(color_l[0]),int(color_l[1]),int(color_l[2]))
TransactionManager.Instance.EnsureInTransaction(doc)
for i in elements:
for view in views:
ogs = OverrideGraphicSettings()
ogs.SetProjectionFillColor(color)
ogs.SetProjectionFillPatternId(fill_pattern.Id)
###ogs.SetProjectionLineColor(color)
#ogs.SetProjectionFillColor(color)
#ogs.SetProjectionFillPatternId(fill_pattern.Id)
#ogs.SetCutFillPatternId(fill_pattern.Id)
###ogs.SetCutLineColor(color)
#ogs.SetCutFillColor(color)
###ogs.SetHalftone(False)
#ogs.SetProjectionLinePatternId(line_pattern.Id)
#ogs.SetCutLinePatternId(line_pattern.Id)
ogs.SetSurfaceTransparency(IN[5])
view.SetElementOverrides(i.Id, ogs)
TransactionManager.Instance.TransactionTaskDone()
Pythonについてご教示いただくか、複数のビューをまとめて赤に着色する他の方法のアドバイスをお願いできれば幸いです。
以上、宜しくお願い致します。
解決済! 解決策の投稿を見る。
回答者: AITS-miura. 解決策の投稿を見る。
Pythonの内容について、APIが古いものを使用しているため、
おそらく思ったような結果にはならないと思います。
こちらで改良してみました。スクリプト内にコメントを少しつけています
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import OverrideGraphicSettings, Color
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
elements = UnwrapElement(IN[0])
views = UnwrapElement(IN[1])
line_pattern = UnwrapElement(IN[2])
fill_pattern = UnwrapElement(IN[3])
color_input = IN[4]
#表示非表示の設定(Bool)
visible = IN[5]
#色の設定はそのままstring型でスペースで分けるように設定されています。
color_l= color_input.split(" ")
color = Color(int(color_l[0]),int(color_l[1]),int(color_l[2]))
#グラフィックの設定です。OverrideGraphicSettingsのMembersが古いものになっていたので修正しています
ogs = OverrideGraphicSettings()
ogs.SetSurfaceForegroundPatternColor(color)
ogs.SetSurfaceForegroundPatternId(fill_pattern.Id)
ogs.SetSurfaceForegroundPatternVisible(visible) #追加設定
ogs.SetSurfaceTransparency(IN[6])
TransactionManager.Instance.EnsureInTransaction(doc)
for i in elements:
for v in views:
v.SetElementOverrides(i.Id, ogs)
TransactionManager.Instance.TransactionTaskDone()
OUT = views
よろしくお願いいたします
お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。