【问题标题】:Importing Google Sketchup models in Mathematica在 Mathematica 中导入 Google Sketchup 模型
【发布时间】:2011-09-08 22:30:07
【问题描述】:

Google 的 Sketchup 是一款不错的简单 3D 对象建模器。此外,谷歌有一个巨大的warehouse of 3D objects,所以如果你在这方面不是特别有天赋,你实际上不需要自己做太多的建模。 Google 地球中的许多 3D 建筑都是用 Sketchup 制作的。在 Mathematica 中导入 Sketchup 的 SKP 文件的功能会非常好,但可惜现在还没有。

免费版 Sketchup 不会导出为 KMZ (Google Earth) 和 DAE (Collada) 格式以外的任何其他格式。虽然 MMA 可以读取 KMZ/KML 文件,但它不能读取包含 3D 对象的文件。 DAE 文件是压缩的 Collada 文件,这些文件可以通过 MMA 的 Import 读取为 XML。生成的 XML 树与 definition of Collada 一样相当复杂,并且获取对象的几何形状绝非易事(我设法从中强制转换模型的坐标集)。

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

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

【问题讨论】:

  • 来自designcad.com.au/Sketchup/export_models.pdf: This fundamental difference in storing model geometry places severe limitations on the model when it arrives in the CAD environment.
  • @belisarius 您的第一条评论:这对我来说不是问题。拥有一个非结构化的多边形列表对我的应用程序来说很好。您的第二条评论:看起来很有希望,我正在等待我的注册确认,以便我可以下载插件。如果可行,我建议您将其发布为获得信用的答案。
  • @Sjoerd 如果链接有效,请给自己写一个答案,因为我只进行了 Google 搜索。祝你好运!
  • @belisarius 我尝试了 OBJexporter,总的来说它工作正常,但是它将对单独纹理文件的引用插入到 mma 导入器无法处理的 .obj 文件中。因此,导入后,显示器会在粉红色框中显示 3D 模型,表示存在多个错误。不过 3D 几何图形似乎还可以。

标签: import wolfram-mathematica collada sketchup


【解决方案1】:

这可能不是您正在寻找的,但我维护了一个名为pycollada 的python 库。您可以使用它导出为 Mathematica 的格式。我还一直在开发一个名为 meshtool 的导入/导出/转换实用程序,您可以为其编写一个模块,将其导出为 Mathematica 的格式。

【讨论】:

  • OBJ 和 Three.js 在我的列表中,但现在它只支持 collada,导入和导出。
  • 谢谢!我不是很喜欢 Python,但也许精通 Mathematica 和 Python 的人可能会跳到这里来?
  • 嗨 Sjoerd,这是一种迟到的答案,但也许可以看看 Pythonika。我用它来将 Python 中的一些串行 IO 东西链接到 Mathematica(在我意识到 Mathematica 有一个串行 IO 包之前)。如果您需要详细信息,请给我发电子邮件,我会看看我能找到什么。
【解决方案2】:

这是成功将免费版 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]

【讨论】:

    【解决方案3】:

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

    1. Google repository下载SKP文件
    2. free version of Sketchup中打开它
    3. 从那里导出为 DAE
    4. 使用免费的 AutoDesk fbx 转换器将其转换为 FBX 格式(页面下方here
    5. 使用相同的程序,将刚刚创建的 FBX 文件转换为 DXF 或 OBJ
    6. 在 Mathematica 中导入。

    虽然您似乎失去了纹理,但结果非常好。下图显示了结果。左:原始 Sketchup 模型,中:通过 DXF 转换/导入,右:通过 OBJ 转换/导入。

    显然,您不想太频繁地这样做,对于我正在开发的特定应用程序,我想要一个不太精通计算机的用户也可以处理的解决方案。


    更新:

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

    【讨论】:

      【解决方案4】:

      答案取决于您到底想做什么。如果您只想查看可以导出为 .obj 文件的图像(镶嵌文件,而不是目标代码!)。

      试试这个例子:

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

      如果您真的想将其作为实体模型使用,您将遇到更困难的时期。实体模型具有相当复杂的数据结构来表示拓扑和几何。例如,您可能能够从模型中取出曲面,但您必须有一些拓扑结构才能说明曲面的哪一部分被面使用。

      【讨论】:

      • 问题是,正如我在问题中所述,将 Sketchup 的 SKP 文件转换为 mma 可以导入的文件。我知道它可以导入 .obj 的。我已经使用了,这不是问题。免费版 Sketchup 不导出到 obj。
      • @sjoerd-c-de-vries Sketchup 可以导出到 COLLADA (dae)。您可以将其导入blender,然后导出为 OBJ。这很痛苦,但它应该有效。
      • @jterrace 我知道 DAE 导出并在问题中提到了这一点。
      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2010-12-21
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多