继上次在机电项目样板–批量新建过滤器中探究了通过Dynamo批量新建过滤器。但通过过滤器给机电管线赋予颜色存在两个问题。一是过滤器颜色仅作用于当前视图,切换到其他视图或新建视图管线颜色就会丢失。二是管线在脱离Revit软件在其他软件(如Navisworks、Fuzor、Enscape等)做应用时颜色也会丢失。所以通过滤器给机电管线添加颜色一般用于出图使用和给电缆桥架和线管添加颜色使用。而管道和风管添加颜色更常用的是通过管道系统材质来实现。
下面分别使用节点包和写代码两种形式来实现批量设置管道系统材质的功能。
(一)批量设置管道系统材质–节点包
先后使用了clockwork、orchid、MEPover节点包。
使用clockwork节点包中,在样板中已有的管道系统基础上复制出新的管道系统:
使用Ochid节点包通过名称新建材质,并先后设置使用外观渲染为否、设置截面填充图案颜色、设置表面填充图案颜色、设置着色颜色。需注意的是通过SetparameterByName设置着色颜色时需要将颜色的RGB值换算为十进制数值:
设置管道系统的材质参数:
使用MEPover设置管道系统线颜色:
在测试使用Mechanical System Graphic Override set LineColor设置管道系统线颜色时意外发现一个Dynamo的小Bug,节点包在输入端规定了输入的RGB值的数据类型为整形,这在逻辑上并没有什么问题,但以此方式运行之后生成的5个管道系统线颜色均为255,0,255,数据匹配方式并不正确。
而在不规定RGB输入值数据类型时,正是想要得到的数据一一对应的结果。
演示效果:
(二)批量设置管道系统材质–写代码
这种方式与上面的逻辑相同,只是将设置材质表面填充图案颜色、截面填充图案颜色、着色颜色调用API重写:
设置材质图形颜色:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
if isinstance(IN[0],list):
mat = UnwrapElement(IN[0])
else:
mat = [UnwrapElement(IN[0])]
if isinstance(IN[1],list):
col = IN[1]
else:
col = [IN[1]]
def ToRevitColor(DynamoColor):
return Color(DynamoColor[0],DynamoColor[1],DynamoColor[2])
mats = []
TransactionManager.Instance.EnsureInTransaction(doc)
for m,c in zip(mat,col):
m.CutPatternColor = ToRevitColor(c)
m.SurfacePatternColor = ToRevitColor(c)
m.UseRenderAppearanceForShading = False
m.Color = ToRevitColor(c)
mats.append(m)
TransactionManager.Instance.TransactionTaskDone()
OUT = mats
设置管道系统线颜色:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
if isinstance(IN[0],list):
sys = UnwrapElement(IN[0])
else:
sys = [UnwrapElement(IN[0])]
if isinstance(IN[1],list):
col = IN[1]
else:
col = [IN[1]]
def ToRevitColor(DynamoColor):
return Color(DynamoColor[0],DynamoColor[1],DynamoColor[2])
system = []
TransactionManager.Instance.EnsureInTransaction(doc)
for s,c in zip(sys,col):
s.LineColor = ToRevitColor(c)
system.append(s)
TransactionManager.Instance.TransactionTaskDone()
OUT = system
完整节点:
演示效果:
通过上面的方式可以设置着色模式下的颜色显示,但却有个遗留的尾巴:不能解决真实模式下的显示问题,查阅了一些相关资料仍没有很好的解决办法。希望有知道的小伙伴不吝赐教。
欢迎阅读,分享,交流,批评指正。
如转载请注明出处,否则追究法律责任(说说而已,全靠自觉)。
评论0