Revit二次开发 材质颜色相关

本文详细介绍了在Revit中如何配置对象的颜色和材质,包括默认颜色设定、颜色优先级规则,以及如何通过编程获取过滤色、材质颜色和特殊情况下MEP系统的材质。对于Revit开发者和高级用户,掌握这些技巧将有助于更精细地控制模型的视觉呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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;
             }
        }
     }
}                                                                  
                                                                                                                                                                                                           

 

Revit二次开发中添加项目参数通常涉及到对Revit API(应用程序编程接口)的应用。在Autodesk Revit中,参数用于存储和管理模型的相关信息,如尺寸、颜色材质等。如果你想通过二次开发扩展项目的参数,你可以按照以下步骤操作: 1. **创建参数**: 使用`DB_Parameter`类,可以创建自定义的类型(如整数、字符串、双精度浮点数等)的新参数,并通过`AddNewParameter`方法添加到指定族、类别或者整个项目。 ```csharp Document doc = _doc; ElementId typeId = new ElementId(BuiltInParameter.ELEM_TYPE_ID); BuiltInParameter paramType = BuiltInParameter.TEXT; doc.ParameterSet.AddNewParameter(typeId, paramName, paramType, UnitsType Feet, true); ``` 2. **设置默认值**: 可以在创建参数时设定初始值,也可以后续动态设置。 3. **关联到元素**: 参数可以应用到特定族实例(通过`Element.GetParameters()`获取),或者是作为全局参数影响整个项目。 4. **用户界面**: 如果需要在Revit用户界面显示或编辑这些参数,可以使用UIElementWrapper和ParameterElement来定制属性窗口的行为。 5. **事件处理**: 可以监听参数更改事件,以便在参数值变化时执行相应的逻辑。 **相关问题--:** 1. 如何将自定义参数绑定到特定族实例? 2. 如何在Revit中读取或修改用户自定义参数的值? 3. 二次开发过程中如何保证参数的持久性和数据一致性?
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值