最近一直在研究revit材质导出方面,采用了官方的CustomExport接口。
材质导出分为两种:着色和真实。
着色方面:
着色方面的颜色导出相对简单,使用onMaterial(MaterialNode node)中的node。

             public void OnMaterial(MaterialNode node){material = (this.CurrentDocument.GetElement(node.MaterialId) as Material);ExMaterial mxmaterial=new ExMaterial();mxMaterial.id = node.MaterialId.IntegerValue;mxMaterial.name = material.Name;Color color = node.Color;if (color.IsValid){mxMaterial.diffuse[0] = (double)color.Red / 255.0;mxMaterial.diffuse[1] = (double)color.Green / 255.0;mxMaterial.diffuse[2] = (double)color.Blue / 255.0;}else{#对于color.IsValid的一个补充获取颜色的值mxMaterial.diffuse[0] = (double)material.Color.Red / 255.0;mxMaterial.diffuse[1] = (double)material.Color.Green / 255.0;mxMaterial.diffuse[2] = (double)material.Color.Blue / 255.0;}mxMaterial.transparent=1.0-node.Transparency;}#过滤器的颜色var filterIds = view.GetFilters();foreach (var id in filterIds){var filter = doc.GetElement(id) as ParameterFilterElement;if (filter == null) continue;bool passed = true;if (filter.GetCategories().Contains(ele.Category.Id)){var rules = filter.GetRules();if (rules.Count > 0){foreach (var r in rules){if (!r.ElementPasses(ele)){passed = false;break;}}}if (passed){diffuses[0] = (double)view.GetFilterOverrides(id).ProjectionFillColor.Red / 255;diffuses[1] = (double)view.GetFilterOverrides(id).ProjectionFillColor.Green / 255;diffuses[2] = (double)view.GetFilterOverrides(id).ProjectionFillColor.Blue / 255;return filter;}}}

真实方面:
依旧是通过node,获取它的asset

第一种获取asset

            Asset asset = null;if (node.HasOverriddenAppearance){asset = node.GetAppearanceOverride();}else{asset = node.GetAppearance();}

但是不一定能获取到asset的值。测试得到asset.size<5,一般是取不到什么有效的值。
如果取到asset.size>0,可以尝试遍历asset的值。
方法可以参考这篇大神博客:https://blog.csdn.net/zouzouol/article/details/89329573

                //判断材质是否是玻璃类别   特殊情况string value  = (asset["UIDefinition"] as AssetPropertyString).Valueif (value.Contains("SolidGlass")){//使用玻璃类别的方法获取不同种类玻璃的颜色SolidGlass(asset, ref mxMaterial);//例子方法如下://AssetPropertyEnum assetProperty1 = asset["solidglass_transmittance"] as AssetPropertyEnum;//if(assetProperty1.Value==0)//{//白色玻璃//颜色的值为固定值,在文档中写死的。文档路径如下//C:\ProgramFiles (x86)\CommonFiles\Autodesk Shared\Materials\2018\assetlibrary_base.fbm\Mats//       mxMaterial.diffuse[0] = 0.858;//        mxMaterial.diffuse[1] = 0.893;//        mxMaterial.diffuse[2] = 0.879;// }}

第二种获取asset

从欧特克材质库取asset。这是对上面方法取到的asset,进行的一个补充获取,比较耗时。有一些情况下,asset的size包含数量很少,此时启用这种方法。

        private static Asset getAdskasset(Document doc, ElementId assetId){AssetSet assetSet = doc.Application.get_Assets(AssetType.Appearance);Asset asset = (doc.GetElement(assetId) as AppearanceAssetElement).GetRenderingAsset();if (asset.Size <= 1){AssetSetIterator assetSetIterator = assetSet.ForwardIterator();while (assetSetIterator.MoveNext()){Asset asset0 = assetSetIterator.Current as Asset;if (asset0 != null && asset0.Name == asset.Name){asset = asset0;break;}}}return asset;}

取出asset后,再使用上面的方法,遍历属性,查看所有的信息。再针对性的得到想要的信息,如颜色,类别等。方法同上。

注:不同的版本,获取的方式有一些区别,需要针对版本进行修改。

revit二次开发 材质相关相关推荐

  1. Revit二次开发入门相关安装和配置

    Revit二次开发入门相关安装和配置 最近一周,由于项目需要,需要做一个基于Revit的二次开发项目,也特意初步自学了Revit二次开发的相关知识.由于学习时间过短,了解到的只是皮毛,所有还希望大家能 ...

  2. 再谈Revit二次开发的可靠性和前景

    接到一个问题咨询如下信息. Revit本身的开发规范吗?Revit发展前景如何?听说了一些Revit的身世,老担心它本身的代码就不规整.严谨,程序不够稳定,在这个平台上开始大规模二次开发有很大风险.公 ...

  3. C# Revit二次开发基础/核心编程--- Application\Document\Transaction

    一.本节课程 C# Revit二次开发基础/核心编程--- Application\Document\Transaction 二.本节要讲解的知识点 Application\Document\Tran ...

  4. Revit二次开发_1.过滤器笔记篇

    Revit二次开发_1.过滤器笔记篇 前言 对象分类 过滤方法 前言 最近在用过滤器功能,先按照教程做了筛选墙,再自己做了筛选常规模型的功能,发现有点不一样,问题在于筛选这些Elements的时候没弄 ...

  5. revit二次开发之教学视频

    一.背景 刚入门revit二次开发的小伙伴,很多是零基础的工程人员,为了解决这个问题,博主做了revit二次开发的一系列教学视频(包括C#基础与revit二次开发两个模块),来帮助大家更好的入门. 二 ...

  6. Revit二次开发入门秘籍 01如何入门

    关于入门 我想在开始学习之前大家应该更需要知道如何入门,对比一下我们在学校的学习,我们需要书.老师-书上呢,是有所有的知识点,有重要的,有不重要的,而老师呢,会知道哪些是重点,也就是我们考试要考的,教 ...

  7. revit二次开发之数据库的使用

    一.背景 小伙伴们在revit二次开发时,可能会需要与数据库做交互,那么如何实现呢? 二.思路 笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了 地址:https://www.bilibili. ...

  8. revit二次开发--异形柱翻模

    最近写了一个revit二次开发的异形柱翻模的功能,柱子翻模网上有很多插件可以用,我用的比较多的是红瓦,其中异形柱的翻模对于图纸的要求较高,有很多不准确的地方.很多异形柱,整体翻模出来是错误的,翻出来之 ...

  9. Revit二次开发入门捷径_升维学习、降维打击

    问题 入门Revit二次开发有捷径吗? 答案 量子力学:有也没有.(皮一下:叠加态) 没有:目的地只有一个,路只有一条,学习没有捷径. 有:虽然路只有一条,但我们可以借助交通工具,缩短时间就是捷径. ...

最新文章

  1. 个性化排序的神经协同过滤
  2. JS模式:jq中简单的模式--》采摘自js设计(tomxu_version)
  3. Hadoop集群部署模型纵览1
  4. Puppeteer入门初探
  5. Cloudreve云网盘系统源码 支持本地储存
  6. Python自动运维系列:每天凌晨定时执行特定任务
  7. Asp.Net细节性问题技巧精萃
  8. 知乎引流实操:日吸200精准粉丝玩法分享
  9. python调用nmap扫描全端口_python nmap 扫描服务器端口
  10. 成都办理或者补办社保卡的秘籍
  11. JAVA 打印姓名、性别、年龄、住址
  12. mysql general bin区别_MySQL_Mysql常见问题集锦,1,utf8_bin跟utf8_general_ci的区别 - phpStudy...
  13. 戏精程序员凌晨三点半发周报,真的很做作!
  14. Tkinter编程应知应会(20)-主菜单
  15. Windows 10便笺更新 修复中文/日文输入问题
  16. linux下ntp对时设置
  17. 用matlab生成RGB三色的散点图
  18. html中的em等于多少像素,CSS中的em运用详解,1em等于多少像素?
  19. 沃丰科技AI浅谈|语音交互的三驾马车:ASR、NLP、TTS
  20. wep前端入门01_概念概述与HTML基础标签

热门文章

  1. 如何扎实的学好ABAP?我的个人经验
  2. OutLook Express关联QQ邮箱
  3. mpu9250磁力计校准 mpl库数据校准
  4. (二)使用npm搭建React项目
  5. 牛客练习赛66 E-骚区间
  6. Active X控件在IE上自动下载并注册
  7. B.FRIENDit壁虎忍者GC03电竞椅,坐的舒服才能心无旁骛!
  8. 人类特有本能:保护族群老弱病残
  9. 互联网在线学习系统需求分析
  10. 微信内置浏览器屏蔽网页链接怎么办,微信跳转外部浏览器的实现教程