在Mathematica中导入Google Sketchup模型
Google的Sketchup是一个不错的简单的3D对象建模器。 此外,谷歌拥有巨大的三维物体仓库,因此如果您在这方面没有特别的天赋,您实际上不需要自己做很多建模。 Google地球中的许多3D建筑都是使用Sketchup制作的。 在Mathematica中导入Sketchup的SKP文件的能力会非常好,但是,它现在还没有这样做。
免费版SketchUp不会导出为除KMZ(Google地球)和DAE(Collada)格式以外的任何其他格式。 虽然MMA可以读取KMZ / KML文件,但它不会读取包含3D对象的文件。 DAE文件是压缩的Collada文件,可以通过MMA的导入将它们读取为XML。 生成的XML树相当复杂,Collada的定义也非常复杂,并且获取对象的几何体远非微不足道(我设法从它强制模型的坐标集)。
我的问题是:如何转换Mathematica中基于干净多边形的结构中的SKP文件?
我更喜欢一个提供MMA这种导入功能的进口转炉,但也欢迎其他的路线。 我将发布我目前用作明确答案的相当间接的方法。
这可能不是你正在寻找的东西,但我维护一个名为pycollada的python库。 你可以用它来导出为Mathematica的格式。 我也一直在研究一个名为meshtool的导入/导出/转换实用程序,您可以编写一个模块以导出为Mathematica的格式。
这是成功将免费版本的SketchUp 8.0生成的.dae文件导入到Mathematica 8中的代码。此代码未检测到或对变换起作用,它仅查看坐标和三角形,因此不要期望太多。
data = Import[SystemDialogInput["FileOpen"], "XML"];
points = Map[( Partition[ReadList[StringToStream[#[[1]] ], Number],
3]) &, (Map[Part[#, 3] &, (Partition[
Cases[data, XMLElement["float_array", _, _], Infinity],
2][[All, 1]])] ) ];
triangles = Map[Partition[1 + ReadList[StringToStream[#[[1]]], Number],3] &,
Map[Part[#, 3, 2, 3]&,
Cases[data, XMLElement["triangles", _, _], Infinity]]];
Graphics3D[Map[GraphicsComplex[#[[1]], Polygon[#[[2]]]] &,
Transpose[{points, triangles}]], Boxed -> False]
我目前遵循的路线涉及多个步骤:
结果非常好,虽然你似乎失去了纹理。 下图显示了结果。 左:原始Sketchup模型,中:通过DXF转换/导入,右:通过OBJ转换/导入。
很明显,你不想经常这样做,对于我正在研究的特定应用程序,我想要一个解决方案,那些不是非常精通计算机的用户也可以处理。
更新:
从版本10.4开始,Mathematica能够导入和导出DAE文件:https://reference.wolfram.com/language/ref/format/DAE.html
链接地址: http://www.djcxy.com/p/35555.html