Импорт моделей Google Sketchup в Mathematica - PullRequest
18 голосов
/ 06 июня 2011

Google Sketchup - это хороший, простой инструмент моделирования 3D-объектов. Кроме того, у Google есть огромный склад 3D-объектов , так что вам не нужно много заниматься моделированием, если вы не особенно одарены в этой области. Многие 3D-здания в Google Планета Земля созданы с помощью Sketchup. Возможность импортировать файлы Sketchup SKP в Mathematica была бы очень полезной, но, увы, пока этого не происходит.

Версия Sketchup free не экспортируется в другие форматы, кроме форматов KMZ (Google Earth) и DAE (Collada). Хотя MMA может читать файлы KMZ / KML, он не читает файлы, содержащие 3D-объекты. Файлы DAE - это сжатые файлы Collada, которые можно прочитать в формате XML с помощью функции импорта MMA. Результирующее дерево XML довольно сложное, как и определение Collada , и получение геометрии объекта далеко не тривиально (мне удалось вывести из него набор координат модели).

Мой вопрос: как преобразовать файлы SKP в чистую структуру на основе многоугольника в Mathematica?

Я бы предпочел конвертер импорта , который предоставляет MMA с этой возможностью импорта, но приветствуются и другие маршруты. Завтра я опубликую довольно косвенный метод, который я использую в качестве ответа.

Ответы [ 4 ]

4 голосов
/ 12 октября 2012

Вот код, который успешно импортировал очень простой файл .dae, созданный бесплатной версией SketchUp 8.0, в 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]
4 голосов
/ 06 июня 2011

Маршрут, которым я сейчас следую, включает в себя несколько шагов:

  1. Загрузите файл SKP из Google репозитория
  2. Откройте его в бесплатная версия Sketchup
  3. Экспортируйте его оттуда как DAE
  4. Преобразуйте его в формат FBX с помощью бесплатного конвертера AutoDesk fbx (в глубине страницы здесь )
  5. Используя ту же программу, конвертируйте только что созданный файл FBX в DXF или OBJ
  6. Импорт в Mathematica.

Результаты довольно хорошие, хотя вы, кажется,потерять текстуры.На рисунках ниже показаны результаты.Слева: исходная модель Sketchup, посередине: конвертация / импорт через DXF, справа: конвертация / импорт через OBJ.

enter image description here

Очевидно, что вы не хотите делать это слишком часто, и для конкретного приложения, над которым я работаю, я бы хотел найти решение, которое не требуется пользователям.Это очень хорошо понимает компьютер.


Обновление:

Начиная с версии 10.4 Mathematica имеет возможность импортировать и экспортировать файлы DAE: https://reference.wolfram.com/language/ref/format/DAE.html

4 голосов
/ 06 июня 2011

Вероятно, это не совсем то, что вы ищете, но я поддерживаю библиотеку Python под названием pycollada . Вы можете использовать его для экспорта в формат Mathematica. Я также работал над утилитой импорта / экспорта / конвертирования под названием meshtool , для которой вы могли бы написать модуль, который экспортировал бы в формат Mathematica.

2 голосов
/ 06 июня 2011

Ответ зависит от того, что именно вы хотите сделать.Если вы просто хотите увидеть изображение, вы можете экспортировать его в виде файла .obj (файл тесселяции, а не объектный код!).

Попробуйте, например:

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

Если вы действительно хотите работать с ней как с твердой моделью, у вас будет более трудное время.Твердые модели имеют довольно сложные структуры данных для представления как топологии, так и геометрии.Например, вы могли бы получить поверхности из модели, но вам потребуется некоторая топология, чтобы указать, какая часть поверхности используется гранью.

...