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<FilterRule> 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;
}
}
}
}