Three.js: Импортер IFC для threejs

Созданный на 24 сент. 2016  ·  62Комментарии  ·  Источник: mrdoob/three.js

Я написал импортер ifc 2x3 для threejs. Это очень экспериментально, но большинство объектов будут отображаться.

Это то, что можно включить в раздачу? Я надеюсь, что кто-то доработает его и в конечном итоге добавит поддержку ifc4.

Пример импортированного ifc:
ifc-imported

Самый полезный комментарий

Голосую за пиара 😊. THREE.IFCLoader будет отличным вкладом!

Все 62 Комментарий

забыл упомянуть, что это зависит от ThreeCSG

Никогда не слышал о таком формате. Где его обычно используют?

Насколько я понимаю, он используется в основном в строительном бизнесе, моделировании зданий. Поддерживается Autocad, Revit, Tekla и Solibri, чтобы упомянуть некоторые.

Я вижу, я вижу!
Зачем нужен ThreeCSG?

Например; объект стены (выдавленная форма в threejs) может иметь проем. И самым простым решением, которое я нашел, было использование ThreeCSG. Также используется в других случаях, например IfcBooleanResult.

Ссылка на спецификацию IfcOpeningElement:
http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ifcproductextension/lexical/ifcopeningelement.htm

вы можете ссылаться на
http://www.ifcquery.com

@mrdoob , IFC означает Industry Foundation Classes и предназначен для использования в качестве стандартного формата обмена для проектов Building Information Model / Management (BIM). Пакеты программного обеспечения, обычно связанные с этим, - это Revit , ArchiCAD , VisualARQ и многие другие. В то время как я обобщаю, программное обеспечение BIM предоставляет стандартные типы объектов, такие как стены, перекрытия, крыши, лестницы, окна и т. Д., Все в соответствии с определением семейства / стиля, где оператор определяет параметры объекта. Поэтому, если у меня есть стена со слоем CMU, гипсокартона и плитки, я могу определить толщину всех слоев. Я что-то меняю, я меняю определение семьи / стиля, и все автоматически обновляется! Реальность не такая уж и волшебная! Это спорный формат, поскольку каждый поставщик программного обеспечения может свободно экспериментировать с определением того, что может представлять собой стена при импорте / экспорте http://buildingsmart.org/compliance/certified-software/.
Это отличный формат для поддержки, и я благодарю @kdilayer за его настройку. @ johnney88 этот зритель использует threejs?

Да, Viewer использует Threejs.
Сохраненный файл ifcquery.min.js написан Three.js, но он закодирован.

Я могу подтвердить, что ifc используется в ConSci. Я на самом деле использовал приложение-конвертер ifc для преобразования файлов моей компании в .objs с файлами .mtl, и они очень хорошо читаются. Так что устранение посредника было бы действительно полезно, поскольку наши клиенты все равно загружают файлы ifc.

@rhairston Приложение-конвертер ifc? Оно может конвертировать файл ifc в файл obj, чтобы Threejs мог его хорошо загрузить.
Я прав?

вот приложение конвертера ifc?

Спасибо всем за участие!

@kdilayer было бы здорово, если бы пиар был. Пожалуйста, включите и ThreeCSG 😊

Есть ли здесь прогресс? В настоящее время мы конвертируем IFC в DAE для использования с three.js, и были бы рады, если бы three.js поддерживала IFC напрямую.

Привет, kdilayer,

Мне очень интересно взглянуть и продолжить.

Всем привет,

Я тоже это видел https://www.npmjs.com/package/ifc-convert
Благодаря этому вы можете конвертировать IFC в DAE, OBJ, STP и IGS.

@kdilayer Есть прогресс?

@kdilayer Есть ли здесь прогресс? Если файл three.js поддерживает формат IFC напрямую, это сэкономит много денег.

Ни у кого нет новостей?

Я настроил редактор для поддержки файлов ifc.
Прилагаю несколько скриншотов. Я работал над этим довольно давно ... в настоящее время я не видел никаких файлов IFC 2x3, которые он не может отобразить ... самый большой файл, который я пробовал, составляет 180 МБ ...
Потрясающий.
screen shot 2017-11-15 at 19 19 31
screen shot 2017-11-15 at 19 19 20
screen shot 2017-11-15 at 19 19 08
screen shot 2017-11-15 at 19 18 45

Привет, классная работа!
Можно ли получить к нему доступ непосредственно из основной ветки или измененный код для поддержки IFC находится где-то еще?

Йер! Потрясающе! Как мы можем получить доступ к этому коду загрузчика, пожалуйста? : o

Голосую за пиара 😊. THREE.IFCLoader будет отличным вкладом!

Нам бы тоже понравилась эта функция, пока я конвертирую файлы IFC в obj с помощью https://github.com/IfcOpenShell/IfcOpenShell , но некоторые более сложные геометрии все еще не анализируются, поэтому иногда это объект, а не 100 % полный.

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

Удачи !, Спасибо за обновление.

Привет, @kdilayer , не могли бы мы получить доступ к вашему приложению?

Мне интересно увидеть разницу в размерах файлов между форматами .ifc и three.js.

Спасибо!

@Foosballfan Я думаю, что формат IFC не интересен для размера, так как он очень подробный. Это просто формат обмена для архитектурного программного обеспечения, такого как AutoDesk.
Это стандарт BIM. (попросите погуглить этот известный в этой профессии термин)

@ jean-noelp Спасибо за ответ.

У меня есть файл ifc для здания размером 34 МБ, и я пытаюсь отобразить эти данные в Интернете с минимально возможным размером загрузки.

С Unity WebGL я могу уменьшить его примерно до 11 МБ, но хотел бы посмотреть, возможно ли это с более чистым WebGL с использованием Three.js. Надеюсь, я смогу добиться еще меньшего размера загрузки.

Был ли у вас подобный опыт?

@Foosballfan, чтобы уменьшить размер файла, я бы попробовал следующие шаги:

  1. конвертировать в OBJ
  2. пройти через obj-simpleify
  3. сжать OBJ с помощью Draco
  4. загрузить с помощью THREE.DRACOLoader

Если файл не может быть преобразован в OBJ или другой формат, то, вероятно, вы мало что можете сделать, кроме упрощения модели или использования gzip ... «чистый WebGL с использованием three.js» - это способ визуализации файла, но вы все равно должны использовать тот или иной формат, чтобы файл был загружен первым.

@donmccurdy Выглядит отлично, спасибо!

Я попробую и посмотрю, что получится.

Изначально я отказался от obj, так как тот, который я сделал, занимает 220 МБ из файла размером 34 МБ.

Закрытие проблемы, поскольку @kdilayer явно не желает делиться своей реализацией. Я добавил IFCLoader как задачу в список желаний загрузчика в # 5524.

Пока нет IFCLoader , попробуйте преобразовать файлы IFC в другие форматы, например OBJ . Похоже, это преобразование может выполнить следующий инструмент: http://ifcopenshell.org/ifcobj.html

Также см. Https://github.com/IfcOpenShell/IfcOpenShell

@Foosballfan : IFC - самый эффективный способ сжатия геометрии. Проблема в том, что процедурный подход, необходимый для его визуализации, на самом деле несовместим с треугольниками. IFC размером 34 МБ можно легко извлечь в потоки треугольников размером 4 ГБ. IFC описывает колено с четырьмя вершинами, но для его визуализации потребуются сотни треугольников. Один взгляд на визуализацию OP, и я могу сказать, что ложки нет. Конечно, он может делать прямые и одноосные тороидальные формы. Но спецификация IFC включает определения поверхностей, протягиваемых двумя шлицами Безье. Итак, это 8 трехмерных вершин, определяющих практически бесконечное множество треугольников. Архитекторам нравится этот инструмент, но даже визуализация его 2D-представления на компьютере проблематична, поскольку формула не допускает подхода f(x) = y .
Ознакомьтесь с официальной спецификацией IFC: http://www.buildingsmart-tech.org/ifc/IFC4/final/html/schema/ifcgeometryresource/lexical/ifcbsplinesurface.htm

@kdilayer вы все еще активны на github? вы бы хотели поделиться своей реализацией? : ok_hand: Спасибо!

Подход, который я выбрал, заключался в использовании BimServer для потоковой передачи двоичных данных IFC с последующим их построением в ThreeJS. Размер загрузки через веб-сокет удовлетворительный, и я полностью контролирую модель в Three.

В качестве отправной точки вы можете взглянуть на то, как работает BimViewer.

есть ответы?

@ Жоао-b4 А что?

о возможном загрузчике IFC

А, думаю, дело за @kdilayer ...

Я считаю, что у @kdilayer ничего не будет, так как с момента публикации прошло 3 года, а на его профиле нет ни ответа, ни активности.
Я не понимаю, как работает создание загрузчика, и у меня есть немного знаний в библиотеке, я работаю с ней некоторое время назад, у меня были бы некоторые ссылки для создания загрузчика, я могу получить достаточно информации и знаний в будущее.

Я обрисовал здесь базовую основу THREE.IFCLoader . Самая трудная часть при написании загрузчика - это понять соответствующий 3D-формат. Только после этого вы можете проанализировать формат и преобразовать данные геометрии и / или материала в сущности three.js (например, THREE.BufferGeometry ). Рекомендую изучить более-менее простой загрузчик типа THREE.PLYLoader , чтобы разобраться в этом процессе. И, конечно же, стандарт IFC (https://www.iso.org/standard/51622.html)

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

Это было 1,5 года назад, так что моя память заржавела, но я считаю, что нашим решением было использовать сервер BIM для доставки геометрии с сервера, а затем использовать Three во внешнем интерфейсе для обработки рендеринга.

Потребовалось немного повозиться, но в итоге сработало.

IfcConvert - это IfcConverter для Node.js. Он конвертирует из .ifc в .dae, .obj, .stp и .igs. Я еще не пробовал, но если он работает, как описано, думаю, нам больше не понадобится загрузчик .ifc в Three.js, верно?
.ifc содержит гораздо больше информации, чем просто 3D-модель, но, что касается Three.js, следует импортировать только 3D-модель.
Для экспортера это было бы иначе, так как можно было бы экспортировать свою собственную библиотеку BIM в файл .ifc вместе с фактической экспортированной 3D-моделью.
Имеет ли это смысл ?

По-прежнему может быть интересно напрямую загрузить IFC в браузер без необходимости в отдельном инструменте преобразования. Однако упомянутый инструмент node.js - это просто оболочка вокруг IfcOpenShell . Так что он не делает чего-то действительно нового ...

Я думаю, что рабочий процесс импорта через IfcConverter может быть хорошим!

Напротив, экспорт ifc не имеет для меня никакого смысла, потому что вы теряете все соответствующие данные ifc (архитектурные компоненты, заинтересованные стороны BIM ...) в средстве просмотра lambda Three.js, если только не создаете редактор Ifc с Three.js .

@ Mugen87 Ну, основная добавленная стоимость - это пакет Node, насколько мне известно, IfcOpenShell - это онлайн-инструмент CLI.

@ jean-noelp Вы правы. Я имел в виду не экспорт «главного файла .ifc», а скорее «библиотечный файл .ifc», который участники BIM могли импортировать в своем собственном «главном файле .ifc». Например, вы производитель гаражных ворот, используйте Three.js для планирования установки для ваших клиентов (например, архитекторов) и экспорта библиотеки BIM, содержащей ваши объекты BIM (обычно гаражные ворота). Вы понимаете, о чем я? Но в любом случае не было бы возможности встроить этот экспортер в Three.js, поскольку каждый конкретный вариант использования слишком специфичен (я думаю).

Я нахожу ИНСТРУМЕНТ, IFC можно решить,
Это платно ,
Но синтаксический анализ структуры IFC бесплатен и имеет открытый исходный код.
http://www.apstex.com/

Привет, новостей от @kdilayer нет, верно? он никогда не выпускал исходный код?

?

------------------ Исходное сообщение ------------------
От: «Даниэль Рамос» < [email protected]>;
Срок поставки: 28 мая 2020 г. (четверг) 22:08
Кому: "mrdoob / three.js"[email protected]>;
Копия: « Оставь ловушку » < [email protected]>;
Тема: Re: [mrdoob / three.js] Импортер IFC для threejs (# 9764)

Привет, нет никаких новостей от @kdilayer, верно? Он никогда не выпускал исходный код?

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub или откажитесь от подписки.

есть новости об этом?

Привет! Несколько дней назад я начал реализовывать парсер IFC в JS с идеей применить его к Three.js. Это личный проект, которым я занимаюсь в свободное время, поэтому я не знаю, сколько времени он займет. Тем не менее, я видел эту ветку сегодня и подумал, что она может вас заинтересовать. Вы можете найти это здесь .

@agviegas с нетерпением жду того, что вы с ним сделаете! PR может быть действительно приветствуем

Верно! @agviegas, мы можем привлечь больше людей, если вы сделаете с ним пиар 😍

К сожалению, мне не удалось опубликовать свою работу над ifcimporter, но я могу помочь @agviegas

@mrdoob Звучит здорово. Я все еще работаю над основными функциями парсера; он уже может загружать все элементы пространственной структуры, и я скоро начну строить геометрию. Я полагаю, что код также нужно адаптировать к этому, прежде чем делать PR. Есть ли ссылки для проверки, чтобы подготовить код для PR? Мы можем сделать это, когда захотите. Любая помощь по этому поводу будет приветствоваться.

С другой стороны, формат IFC очень легко реализовать, хотя он может немного пугать из-за жесткости официальной документации. Я считаю, что знаю формат IFC относительно хорошо, поэтому, если кто-то заинтересован в участии, мы, конечно, сможем подготовить его раньше. 🙂

Captura

Я полагаю, что код также нужно адаптировать к этому, прежде чем делать PR.

Да, он должен использовать тот же интерфейс, что и другие загрузчики. Возможно, сейчас MD2Loader - это более простой справочник.

Не беспокойтесь о том, чтобы все было идеально для пиара. Вы можете отправить то, что у вас есть, в качестве черновика, и мы поможем убедиться, что код соответствует остальным.

После нескольких проблем с форматом уже есть результаты. Я реализовал первую версию парсера, а также некоторые геометрические объекты (включая выдавливания и повторения). Еще многое предстоит сделать, но пока я доволен результатами. На изображении ниже показан небольшой IFC, созданный Revit, который без проблем работает в Chrome. С каждым геометрическим экземпляром связана проанализированная информация IFC (на самом деле, в сцене ниже каждый экземпляр имеет материал в зависимости от его категории / ifcclass), поэтому создание фильтров с использованием значений свойств (Psets и Qsets) не должно быть трудным для архивирования с этого момента. . Любые идеи и предложения приветствуются. 🙂

20201124_screenshot

@agviegas Отлично!

@agviegas Очень хорошо сделано!

Что касается идей по управлению недвижимостью. Как вы их сейчас храните? Так же, как userData на сетках или геометрии, я полагаю?

Большинство наших клиентов используют для моделирования такие программы, как HiCad или ArchiCAD, и хранят ТОННУ информации, которая очень важна для строителей (тепловая плотность, сопротивление ветру, измерения, вес и т. Д.).

Еще мне очень любопытна скорость разбора / загрузки. Модели, с которыми я тестировал свою реализацию, занимают около 5 секунд для анализа, но для создания геометрии процесс преобразования в модель DAE занимает около 2 минут. (Я конвертирую его на стороне сервера из-за нехватки времени и опыта с моей стороны: sweat_smile:, поэтому я так рад, что этот загрузчик работает «изначально»)

@haroldiedema Я еще не реализовал наборы свойств, но текущая структура данных состоит из объекта JS, где ключи - это экспресс-идентификаторы, а значения - это проанализированные объекты, загруженные в память. Каждое свойство, которое было явным идентификатором, заменяется ссылкой на объект с этим идентификатором. В текущей реализации каждый экземпляр _IfcProduct_ с одним или несколькими геометрическими представлениями имеет дополнительное свойство, называемое _Geometry_, которое представляет собой массив ссылок на геометрию сцены. Например, каждый _IfcWallStandardCase_ имеет свойство _Geometry_ со ссылкой на _Path_ (a Line ) a к _Body_ (a Mesh ).

Вероятно, каждый геометрический экземпляр Three.js будет иметь свойство, содержащее экспресс-идентификатор, поэтому найти объект ifc, загруженный в память (и связанную с ним информацию), будет легко (например, при нажатии на сетки в сцене).

Что касается свойств, определяемых пользователем, будет один или несколько _IfcRelDefinesByProperties_ (или другой объект косвенной связи), чтобы связать все вместе. Возможно, каждый экземпляр IfcProduct может иметь атрибут _hasPropertySets_, который будет содержать массив связанных проанализированных наборов свойств (я видел этот шаблон в других библиотеках IFC, и это то, что я делаю с другими косвенными отношениями, такими как _IfcRelAggregates_). Меня не беспокоит количество объектов недвижимости, поскольку они будут структурированы в соответствии с IFC, но давайте посмотрим, как все пойдет, когда я туда доберусь. 😅

Я делаю все на стороне клиента, и в настоящее время синтаксический анализ занимает менее секунды, а геометрическая генерация последней сцены отображается около 4 секунд. Я знаю, что с файлами большего размера это время увеличится; тем не менее, я надеюсь, что смогу оптимизировать систему, когда охвату больше объектов IFC и смогу загружать IFC из реальных проектов. 🙂 Я буду расширять документ _CONTRIBUTING_ на случай, если кто-то захочет вникнуть в это.

@agviegas , звучит потрясающе!

Я пробовал клонировать основную ветвь вашего репо для тестирования некоторых моделей наших клиентов, но, к сожалению, каждая из них выдает ошибку в консоли о том, что _ExpressId не определен (не все модели на 100% согласованы, когда дело доходит до ссылок на записи. что действительно существует). Я думаю, что некоторые программы САПР плохо очищают ссылки на удаленные свойства.

Я мог бы поделиться с вами некоторыми из этих моделей, но мы сделаем это в частном порядке. Вы можете связаться со мной по адресу [email protected], если вас интересуют еще несколько тестовых примеров моделей, экспортированных с помощью ArchiCAD или HiCAD.

@haroldiedema Я еще не реализовал наборы свойств, но текущая структура данных состоит из объекта JS, где ключи - это экспресс-идентификаторы, а значения - это проанализированные объекты, загруженные в память. Каждое свойство, которое было явным идентификатором, заменяется ссылкой на объект с этим идентификатором. В текущей реализации каждый экземпляр _IfcProduct_ с одним или несколькими геометрическими представлениями имеет дополнительное свойство, называемое _Geometry_, которое представляет собой массив ссылок на геометрию сцены. Например, каждый _IfcWallStandardCase_ имеет свойство _Geometry_ со ссылкой на _Path_ (a Line ) a к _Body_ (a Mesh ).

Вероятно, каждый геометрический экземпляр Three.js будет иметь свойство, содержащее экспресс-идентификатор, поэтому найти объект ifc, загруженный в память (и связанную с ним информацию), будет легко (например, при нажатии на сетки в сцене).

Что касается свойств, определяемых пользователем, будет один или несколько _IfcRelDefinesByProperties_ (или другой объект косвенной связи), чтобы связать все вместе. Возможно, каждый экземпляр IfcProduct может иметь атрибут _hasPropertySets_, который будет содержать массив связанных проанализированных наборов свойств (я видел этот шаблон в других библиотеках IFC, и это то, что я делаю с другими косвенными отношениями, такими как _IfcRelAggregates_). Меня не беспокоит количество объектов недвижимости, поскольку они будут структурированы в соответствии с IFC, но давайте посмотрим, как все пойдет, когда я туда доберусь. 😅

Я делаю все на стороне клиента, и в настоящее время синтаксический анализ занимает менее секунды, а геометрическая генерация последней сцены отображается около 4 секунд. Я знаю, что с файлами большего размера это время увеличится; тем не менее, я надеюсь, что смогу оптимизировать систему, когда охвату больше объектов IFC и смогу загружать IFC из реальных проектов. 🙂 Я буду расширять документ _CONTRIBUTING_ на случай, если кто-то захочет вникнуть в это.

Парсить User Defined IFC Property Sets очень просто. У меня есть репо, которое делает это. Мой парсер не такой сложный, как ваш.

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

В любом случае, пока очень хорошая работа! 👍

Обновление: я развернул приложение на страницах Github, чтобы упростить пользовательское тестирование в процессе разработки. Это включает в себя адаптивную навигацию для мобильных устройств и планшетов. Кроме того, здесь вы можете найти альтернативное развертывание, которое загружает модель IFC при запуске; логика очистки сцены и добавления нескольких IFC еще не реализована, но, по крайней мере, вы можете увидеть, как выглядит навигация. Анализ выполняется клиентом, поэтому время загрузки зависит от используемого устройства. Мой ноутбук делает это примерно за 5 секунд, в то время как моему Moto G5 Plus требуется около 50 секунд для этой сцены. Есть еще классы, которые нужно реализовать перед загрузкой полного проекта, но не стесняйтесь присылать мне любые IFC, чтобы добавить их в файлы тестирования.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

boyravikumar picture boyravikumar  ·  3Комментарии

akshaysrin picture akshaysrin  ·  3Комментарии

seep picture seep  ·  3Комментарии

fuzihaofzh picture fuzihaofzh  ·  3Комментарии

yqrashawn picture yqrashawn  ·  3Комментарии