Импорт моделей Sketchup Google в Mathematica
Google Sketchup - это простой, простой 3D-объект-модельер. Кроме того, у Google есть огромный склад 3D-объектов, чтобы вам фактически не пришлось много моделировать себя, если вы не особенно одарены в эта зона. Многие из 3D-зданий в Google Earth сделаны с помощью Sketchup. Возможность импортировать файлы Sketchup SKP в Mathematica была бы очень приятной, но, увы, этого еще не сделано.
Бесплатная версия Sketchup не экспортируется в другие форматы, кроме форматов KMZ (Google Earth) и DAE (Collada). Хотя MMA может читать файлы KMZ/KML, он не читает те, которые содержат 3D-объекты. Файлы DAE застегивают файлы Collada, и они могут быть прочитаны как XML с помощью импорта MMA. Полученное дерево XML довольно сложное, как определение Collada, и получение в геометрии объекта далеко не тривиально (мне удалось принудить координатный набор модели из него).
Мой вопрос: как преобразовать файлы SKP в чистую структуру на основе многоугольника в Mathematica?
Я бы предпочел импортный конвертер, который предоставляет MMA с этой возможностью импорта, но другие маршруты тоже приветствуются. Я опубликую скорее косвенный метод, который я использую в качестве ответа завтра.
Ответы
Ответ 1
Вероятно, это не совсем то, что вы ищете, но я поддерживаю библиотеку python под названием pycollada. Вы можете использовать его для экспорта в формат Mathematica. Я также работал над утилитой import/export/convert под названием meshtool, которую вы могли бы написать для модуля, который будет экспортировать в формат Mathematica.
Ответ 2
Следующий маршрут, который я сейчас выполняю, включает в себя несколько шагов:
- Загрузите файл SKP из Google репозиторий
- Откройте его в бесплатную версию Sketchup
- Экспортируйте его там как DAE
- Преобразуйте его в формат FBX с помощью бесплатного конвертера fbx AutoDesk (в глубине страницы здесь)
- Используя ту же программу, конвертируйте FBX файл, только что созданный в DXF или OBJ
- Импорт в Mathematica.
Результаты довольно хорошие, хотя вы, кажется, теряете текстуры. На рисунках ниже показаны результаты. Слева: оригинальная модель Sketchup, середина: преобразование/импорт через DXF, справа: преобразование/импорт через OBJ.
![enter image description here]()
Очевидно, что вы не хотите делать это слишком часто, и для конкретного приложения, над которым я работаю, мне бы хотелось, чтобы с этим справились пользователи, которые не очень разбираются в компьютерах.
Обновление:
Начиная с версии 10.4 Mathematica имеет возможность импортировать и экспортировать файлы DAE: https://reference.wolfram.com/language/ref/format/DAE.html
Ответ 3
Вот код, который успешно импортировал очень простой файл .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
Ответ зависит от того, что вы хотите сделать точно. Если вы просто хотите увидеть изображение, которое вы могли бы экспортировать как .obj файл (файл тесселяции, а не код объекта!).
Попробуйте это, например:
bunny = Import["http://graphics.stanford.edu/~mdfisher/Data/Meshes/bunny.obj", "OBJ"]
Если вы действительно хотите работать с ним как с твердой моделью, у вас будет сложнее время. Твердые модели имеют довольно сложные структуры данных для представления топологии, а также геометрии. Например, вы могли бы получить поверхности из модели, но вам придется иметь некоторую топологию, чтобы сказать, какая часть поверхности используется лицом.