在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]

我目前遵循的路线涉及多个步骤:

  • 从Google存储库下载SKP文件
  • 在免费版的Sketchup中打开它
  • 从DAE导出
  • 使用免费的AutoDesk fbx转换器将其转换为FBX格式(在此处深入该页面)
  • 使用相同的程序,将刚刚创建的FBX文件转换为DXF或OBJ
  • 在Mathematica中导入。
  • 结果非常好,虽然你似乎失去了纹理。 下图显示了结果。 左:原始Sketchup模型,中:通过DXF转换/导入,右:通过OBJ转换/导入。

    在这里输入图像描述

    很明显,你不想经常这样做,对于我正在研究的特定应用程序,我想要一个解决方案,那些不是非常精通计算机的用户也可以处理。


    更新:

    从版本10.4开始,Mathematica能够导入和导出DAE文件:https://reference.wolfram.com/language/ref/format/DAE.html

    链接地址: http://www.djcxy.com/p/35555.html

    上一篇: Importing Google Sketchup models in Mathematica

    下一篇: Saving plot annotations