Import 在Mathematica中导入Google Sketchup模型

Import 在Mathematica中导入Google Sketchup模型,import,wolfram-mathematica,collada,sketchup,Import,Wolfram Mathematica,Collada,Sketchup,谷歌的Sketchup是一款漂亮、简单的3D对象建模工具。此外,谷歌有着巨大的优势,如果你在这方面不是特别有天赋的话,你实际上不需要自己做很多建模工作。谷歌地球上的许多3D建筑都是用Sketchup制作的。在Mathematica中导入Sketchup的SKP文件的功能将非常好,但遗憾的是,它还没有做到这一点 Sketchup的免费版本不会导出到KMZ(谷歌地球)和DAE(Collada)格式以外的任何其他格式。虽然MMA可以读取KMZ/KML文件,但它不读取包含3D对象的文件。DAE文件是压缩

谷歌的Sketchup是一款漂亮、简单的3D对象建模工具。此外,谷歌有着巨大的优势,如果你在这方面不是特别有天赋的话,你实际上不需要自己做很多建模工作。谷歌地球上的许多3D建筑都是用Sketchup制作的。在Mathematica中导入Sketchup的SKP文件的功能将非常好,但遗憾的是,它还没有做到这一点

Sketchup的免费版本不会导出到KMZ(谷歌地球)和DAE(Collada)格式以外的任何其他格式。虽然MMA可以读取KMZ/KML文件,但它不读取包含3D对象的文件。DAE文件是压缩的Collada文件,这些文件可以通过MMA的导入读取为XML。生成的XML树和对象的几何体一样非常复杂,获取对象的几何体绝非易事(我设法从中强制获取模型的坐标集)

我的问题是:如何在Mathematica中转换干净的基于多边形的结构中的SKP文件


我更喜欢一个提供MMA这种导入功能的路线,但也欢迎其他路线。明天我将发布我目前使用的相当间接的方法作为答案。

这可能不是您想要的,但我维护了一个名为的python库。您可以使用它导出为Mathematica的格式。我还一直在开发一个名为import/export/convert的实用程序,你可以为它编写一个导出为Mathematica格式的模块。

答案取决于你想做什么。如果只想查看图像,可以将其导出为.obj文件(细分文件,而不是对象代码!)

请尝试以下示例:

bunny = Import["http://graphics.stanford.edu/~mdfisher/Data/Meshes/bunny.obj", "OBJ"]

如果你真的想把它作为一个实体模型来使用,你将会有一个更困难的时期。实体模型具有相当复杂的数据结构来表示拓扑和几何图形。例如,您可能能够从模型中获取曲面,但您必须有一些拓扑结构来说明曲面的哪一部分由面使用。

我当前遵循的路线包括许多步骤:

  • 从中下载SKP文件
  • 把它打开
  • 将其作为DAE从那里导出
  • 使用免费的AutoDesk FBX converter(深入页面)将其转换为FBX格式
  • 使用相同的程序,将刚刚创建的FBX文件转换为DXF或OBJ
  • 在Mathematica中导入
  • 结果非常好,尽管你似乎失去了纹理。下图显示了结果。左:原始Sketchup模型,中:通过DXF转换/导入,右:通过OBJ转换/导入

    显然,您不希望经常这样做,对于我正在开发的特定应用程序,我希望有一个解决方案,不太懂计算机的用户也可以处理


    更新:
    从版本10.4起,Mathematica能够导入和导出DAE文件:

    以下代码成功地将免费版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]
    

    OBJ和Three.js在我的列表中,但现在它只支持collada,包括导入和导出。谢谢!我对Python不是很感兴趣,但也许会有一个精通数学和Python的人跳到这里来?嗨,Sjoerd,这是一个比较晚的答案,但也许可以看看Pythonika。不久前,我用它将Python中的一些串行IO内容链接到Mathematica(在我意识到Mathematica有一个串行IO包之前)。如果您需要详细信息,请给我发一封电子邮件,我会看看我能找到什么。问题是,正如我在问题中所说的,将Sketchup的SKP文件转换为mma可以导入的文件。我知道它可以导入。我已经用过了,这不是问题所在。Sketchup的免费版本不能导出到obj。@sjoerd-c-de-vries Sketchup可以导出到COLLADA(dae)。您可以将其导入,然后作为OBJ导出。这是一种痛苦,但是它应该可以工作。@jterrace我知道DAE导出,并在问题中提到了这一点。From:
    存储模型几何体的这一基本差异在模型到达CAD环境时对模型造成了严重的限制。
    @Sjoerd您是否检查过这一点:@belisarius您的第一条评论:这对我来说不是一个真正的问题。对于我的应用程序来说,拥有一个非结构化的多边形列表很好。您的第二条评论:看起来很有希望,我正在等待注册确认,以便下载插件。如果有效,我建议你将此作为一个答案发布,以获得信用。@Sjoerd如果链接有效,请给自己写一个答案,因为我只做了谷歌搜索。祝你好运@belisarius我尝试了OBJexporter,总体来说它工作正常,但它将单独纹理文件的引用插入到.obj文件中,mma导入器无法处理该文件。因此,导入后,显示屏将在粉红色框中显示三维模型,表示存在多个错误。不过,3D几何图形似乎还可以。