NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
昨天,我提到了新的自定义导出器框架,可以直接访问 Revit 的查看和渲染图形管道。
这为我们早在 2010 年就讨论过的相关领域带来了新的可能性:如何获取纹理数据 UV 坐标。 当时,Revit API 不提供此信息,基于 Revit FBX 导出的变通方法略有帮助。
令人高兴的是,自定义导出器框架更开放了一点。 让我们看看那个和其他最近的小问题:
- 获取贴图UV坐标
- 纹理位图访问
- 在 BIM 中计算和标记阴影区域
- 嵌套族检测谓词
- IFC查看器
1、获取纹理 UV 坐标
在有关获取纹理 UV 坐标的论坛主题中再次提出了这个问题:
问题:我编写了一个渲染场景的 Revit 插件,并计算每个顶点的 UV 坐标。 不幸的是,在许多情况下 UV 贴图是错误的——即使是平面贴图。 所以我的问题是,我怎样才能得到正确的紫外线?
Arnošt Löbel 的回答:确实,常规的 Revit 几何 API 不提供准确的 UV 纹理贴图数据。
但是,可以通过 Revit 2014 中的 ExportContext(也称为可视化 API)从 CustomExporter 检索正确的 UV。 上下文的 OnPolymesh 回调接收具有每个网格 UV 的 PolymeshTopology 对象。
CustomExporter 应该用于大多数(如果不是全部)导出和呈现外部应用程序。
回应:我实施了建议的解决方案并且可以确认它工作得非常好。 谢谢你! 我唯一的批评是它仍然不允许在 OnMaterial 方法中获取指定给材质的纹理贴图。 我还注意到 ArchVision RPC(剪切几何)道具不会发送到 ExportContext。 但仍然向前迈出了一大步。
Arnošt 的回答:感谢你取得进展并就此进行报告。 :-) 看来 Custom Exporter 是适合您使用的工具。 我对纹理和 RPC 感到抱歉。 然而,我们有相当严格的版权义务,我们不允许以我们的任何导出格式导出 RPC 数据,包括自定义导出。 至于纹理,虽然没有如此严格的限制,但整个材质组件——在技术上——不是 Revit 代码的一部分,而且它的内部 API 不允许我们获取纹理路径,至少不容易(据我所知) . 希望材料组件不断改进,使我们能够在 Revit API 的未来版本中扩展自定义导出器的功能。
2、纹理位图访问
从上面这一项可以看出,贴图UV坐标是有的,位图是没有的。
作为解决方法,为昨天发布的 Collada 提供自定义导出器的 Artur Brzegowy 建议改为获取纹理内存数据:
一种可能是动态创建一个简单的平面,在其上分配给定的材质,然后使用 document.ExportImage 或其他方法制作纹理的屏幕快照。
Rudolf Honke 也对访问纹理位图感兴趣,并最初建议:
我们显然正在寻找像这样的完整纹理位图:
MaterialNode 提供了一个名为 ThumbnailFile 的属性,如果文件包含材质的缩略图,则返回路径。 这大概不是有用的小预览,而不是像上面那样的全尺寸图像。
我们还可以从材质浏览器中获取纹理预览图像:
不幸的是,这里的预览图像不仅显示纹理,还显示其他对象。
基于Artur的想法,我向Rudolf建议:
- 创建一个新的临时项目
- 创建一个大立方体
- 为其分配所需的材料
- 创建一个屏幕快照
鲁道夫报告:我试过了,很高兴地说它有效。
不过,我对线宽有一个小问题:
我要求 TL,细线,因为这样可以更好地裁剪图像。 细线在标准显示中显示得很好。
但是,导出的图像装饰有粗边框。
当然,无论如何我都可以获得所需的位图。
但是,正因为如此,直接抓取屏幕图像可能比通过 Document.ExportImage 方法传递它更好。 这将提供真正的“所见即所得”。
这是结果的部分裁剪屏幕快照 - 原始示例图像包含 86 种不同的纹理:
3、在 BIM 中计算和标记阴影区域
在一个完全不同的主题上,假设我们在 Revit 建筑模型中有一个带高烟囱的屋顶,并启用太阳设置以显示阴影。
问题:我们如何以编程方式找出屋顶上的哪个区域处于阴影之下?
答案:将烟囱和屋顶都投影到阳光方向的平面上,然后计算重叠。
回应:那会准确吗? 是否有直接获取阴影区域的API?
答:是的,当然是准确的。 不,没有直接的 API 支持。
你可以使用挤压分析器来确定投影到平面上的阴影区域。 将屋顶本身也投影到同一平面上。 然后在平面上使用二维布尔运算来确定重叠。
在一天中的不同时间将这些结果从飞机投影回屋顶将使您能够根据需要显示阴影的轮廓。
4、嵌套族检测谓词
这是另一个不相关的主题,这次更接近内核 Revit API:
问题:如何测试一个族是否嵌套在另一个族中,它是否有族嵌套在自己内部,如果有,是哪些族?
回答:如果一个族A 嵌套在族 B 中,并且该族是“共享”的,那么你还可以在任何包含族B 的项目中看到族 A 的元素和类型。
它的一种典型用途是用于家具,例如 一个 Table and Chairs 族可能包含一个可以独立放置的椅子族。
如果族未共享,这是更典型的情况,那么你需要打开家庭的文档以查看其中包含的成员。 这可以通过 EditFamily 方法在内存中实现。
你可以打开族B,读取其数据库中的族元素; A 将显示为 Family 元素。 此外,在 B 的数据库中应该有一个或多个 A 的族符号和一个或多个 A 的族实例。
因此,只需运行适当的过滤元素收集器即可快速、轻松、高效地回答问题。
以下是之前与此相关的一些讨论:
- 嵌套实例几何
- 嵌套族
- 嵌套族实例
- 嵌套族实用方法
- 嵌套照明设备实例
5、IFC查看器
最后,关于另一个不相关的话题,这里有一些IFC的新闻和建议可能会派上用场:
Navisworks 仅支持 IFC,不支持 ifcXML 和 ifcZip。 当前支持的版本是 IFC2X3 及更低版本,尚未支持 IFC4(IFC 规范)。
IFC 不支持纹理。 颜色支持也不完整,尽管 Navisworks 2014 SP1 显着改善了这种情况。
至于 IFC 查看器,Solibri 模型查看器似乎相当不错。
原文链接:Texture Bitmap and UV Coordinates
BimAnt翻译整理,转载请标明出处