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

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值