Revit二次开发 材质颜色相关

1.若对象未设置材质/颜色,Revit系统默认颜色为灰色(127,127,127)。如果需要更改,可以打开对象样式窗口并应用选择的材质和阴影颜色。

2.颜色优先级规则:过滤色 > 阶段颜色 > 材质颜色

过滤色是绑定视图的,不同视图过滤器规则不一样。

获取过滤色:

var filterIds = view.GetFilters();//获取所有过滤器
foreach (ElementId id in filterIds)
{ParameterFilterElement filter = m_Document.GetElement(id) as ParameterFilterElement;if (filter == null)continue;if (filter.IsValidObject){IList rules = filter.GetRules();//过滤器的规则foreach (FilterRule rule in rules){if (rule.IsValidObject){if (rule.ElementPasses(element)){isFind = true;//其中一个规则符合条件}else{//每个过滤器有多个规则,一个规则不满足就不成立isFind = false;break;}}}rules.Clear();
}
if(isFind)
{//获取过滤器应用于视图的图形覆盖。OverrideGraphicSettings ogs = view.GetFilterOverrides(id);Autodesk.Revit.DB.Color color = ogs.ProjectionFillColor;
}

获取材质颜色:

通过获取图元Geometry后,获取其Face的MaterialId

Autodesk.Revit.DB.Material element = m_Document.GetElement(materialId) as Autodesk.Revit.DB.Material;
var Color = element.Color

获取材质Id后找材质可以参考https://blog.csdn.net/beckhans/article/details/51556415

特殊情况:MEP水暖电管道情况,face获取材质Id为-1需要特殊方式获取。

譬如Pipe管道,Duct风管,Wire等继承MEPCurve,需要通过MEPSystem获取其材质。

 if (element is MEPCurve)
{var MEP = element as MEPCurve;var mep = MEP.MEPSystem;//管道系统var MepSystemType = m_Document.GetElement(mep.GetTypeId()) as MEPSystemType;id = MepSystemType.MaterialId;if(id.IntegerValue == -1){var conn = mep.ConnectorManager;//系统选择器if (null != conn){var owner = conn.Owner;if (owner == null)return id;var typeId = owner.GetTypeId();var type = m_Document.GetElement(typeId);if (type is MEPSystemType){id = (type as MEPSystemType).MaterialId;}}}
}                                                                  

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部