Подтвердить что ты не робот

Импорт моделей 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 с этой возможностью импорта, но другие маршруты тоже приветствуются. Я опубликую скорее косвенный метод, который я использую в качестве ответа завтра.

4b9b3361

Ответ 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"]

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