Revit SDK 介绍:AppearanceAssetEditing

该博客展示了如何使用RevitAPI修改材质的外观颜色。通过创建AppearanceAssetEditScope,找到对应的颜色属性并设置新的颜色值。代码示例中包含了一个bug,涉及颜色的增减操作,并提供了修复建议。
摘要由CSDN通过智能技术生成

前言

这个例子是修改材质中的外观部分。对于材质的内容可以参考其它博客:
Revit API: Material 材质
Revit API: 材质- 参考官方文档(一)
Revit API: 材质- 参考官方文档(二)
Revit API: 材质- 参考官方文档(三)

内容

这是例子运行起来的效果,但不是所有材质可以被正常的设定。
在这里插入图片描述
被修改的参数如下,需要先把染色这个复选框勾上。
在这里插入图片描述
具体逻辑非常简单,在 EditMaterialTintColorProperty 这个方法里面。
简化的逻辑:

  1. 创建一个 AppearanceAssetEditScope
  2. 开始这个 EditScope,获得 Asset
  3. 通过名称 common_Tint_color 获得对应的颜色属性
  4. 设定属性
  5. 结束 AppearanceAssetEditScope
internal void EditMaterialTintColorProperty(bool lighter)
{
   using (AppearanceAssetEditScope editScope = new AppearanceAssetEditScope(m_document))
   {
      Asset editableAsset = editScope.Start(m_currentAppearanceAssetElementId);
      AssetPropertyDoubleArray4d metalColorProp = editableAsset.FindByName("common_Tint_color") as AssetPropertyDoubleArray4d;
      Color newColor = new Color(red, green, blue);
      metalColorProp.SetValueAsColor(newColor);
      editScope.Commit(true);
   }
}

源码中的代码(有bug,需要自行修复):

internal void EditMaterialTintColorProperty(bool lighter)
{
   using (AppearanceAssetEditScope editScope = new AppearanceAssetEditScope(m_document))
   {
      Asset editableAsset = editScope.Start(m_currentAppearanceAssetElementId);
      AssetPropertyDoubleArray4d metalColorProp = editableAsset.FindByName("common_Tint_color") as AssetPropertyDoubleArray4d;
      Color color = metalColorProp.GetValueAsColor();
      byte red = color.Red;
      byte green = color.Green;
      byte blue = color.Blue;

      // Increment factor  (value related to 255)
      int factor = 25;
      if (lighter)
      {
         red = (byte)LimitValue(red + factor);
         green = (byte)LimitValue(green + factor);
         blue = (byte)LimitValue(blue + factor);
      }
      else
      {
         red = (byte)LimitValue(red - factor);
         green = (byte)LimitValue(green - factor);
         blue = (byte)LimitValue(blue - factor);
      }

      Color newColor = new Color(red, green, blue);
      if (metalColorProp.IsValidValue(newColor))
         metalColorProp.SetValueAsColor(newColor);
      editScope.Commit(true);
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值