Экспорт в IFC

Автор Тема: Экспорт в IFC  (Прочитано 688 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlxdАвтор темы

  • ADN Club
  • Сообщений: 48
  • Карма: 1
Экспорт в IFC
« : 14-09-2018, 13:39:56 »
Мне нужно передать модель из Revit в Navisworks Manage определенным образом. Не так, как по-умолчанию, по уровням 0.000, +3.000, +6.000 и т.д., а иначе. Поискал варианты решения, остановился на том, что можно попробовать экспортировать модель из Revit в формате IFC, а уже потом IFC открыть в Navisworks.

Порылся в Интернете. Нашел вот такие ссылки:
https://github.com/whztt07/RevitIFC
https://github.com/whztt07/RevitCustomIFCexporter

Особенно заинтересовала первая. Судя по всему, этот проект использовался для экспорта из rvt в ifc до 2015 версии Revit включительно. Позже перекочевал в Revit.
Порывшись в API Revit обнаружил классы IFC*.
Пытаюсь с их помощью создать файл ifc с хотя бы одним примитивом или какой-другой информацией. Написал следующий код:

Код - C# [Выбрать]
  1.                 IFCFileModelOptions ifcModelOptions = new IFCFileModelOptions();
  2.                 ifcModelOptions.SchemaFile = "C:\\Program Files\\Autodesk\\Revit 2018\\EDM\\IFC2X3_TC1.exp";
  3.                 ifcModelOptions.SchemaName = "IFC2x3";
  4.  
  5.                 IFCFile ifcFile = IFCFile.Create(ifcModelOptions);
  6.  
  7.                 using (IFCTransaction transaction = new IFCTransaction(ifcFile))
  8.                 {
  9.                     string name = IFCEntityType.IfcOrganization.ToString();//cnt = 0
  10.                     IFCAnyHandle hnd = ifcFile.CreateInstance(name);
  11.                     hnd.SetAttribute("Name", IFCData.CreateString("Roga&Copyta"));
  12.                     hnd.SetAttribute("Description", IFCData.CreateString("Some information"));
  13.  
  14.                     int cnt = ifcFile.GetInstanceCount(name, true);//cnt = 1
  15.                     transaction.Commit();
  16.                 }
  17.  
  18.                 IFCFileWriteOptions ifcWriteOptions = new IFCFileWriteOptions();
  19.                 ifcWriteOptions.FileFormat = IFCFileFormat.Ifc;
  20.                 ifcWriteOptions.FileName = "D:\\Export.ifc";
  21.                 ifcFile.Write(ifcWriteOptions);
  22.  

После выполнения кода получаю два файла: Export.ifc и Export.ifc.log.

Export.ifc
ISO-10303-21;
HEADER;

/******************************************************************************************
* STEP Physical File produced by: The EXPRESS Data Manager Version 5.02.0100.07 : 28 Aug 2013
* Module:                         EDMstepFileFactory/EDMstandAlone
* Creation date:                  Fri Sep 14 15:10:12 2018
* Host:                           WS2163-5
* Database:                       C:\Users\Shchetinin_AN\AppData\Local\Temp\{D460C585-697B-45D8-905C-75E88FB2833A}\ifc
* Database version:               5507
* Database creation date:         Fri Sep 14 15:09:04 2018
* Schema:                         IFC2X3
* Model:                          DataRepository.ifc
* Model creation date:            Fri Sep 14 15:09:04 2018
* Header model:                   DataRepository.ifc_HeaderModel
* Header model creation date:     Fri Sep 14 15:09:04 2018
* EDMuser:                        sdai-user
* EDMgroup:                       sdai-group
* License ID and type:            5605 : Permanent license. Expiry date:
* EDMstepFileFactory options:     020000
******************************************************************************************/

Export.ifc.log
/******************************************************************************************
* WriteStepFile diagnostics.
* Date:                           Fri Sep 14 15:10:12 2018
* Produced by:                    The EXPRESS Data Manager Version 5.02.0100.07 : 28 Aug 2013
* Module:                         EDMstepFileFactory/EDMstandAlone
* Host:                           WS2163-5
* Database:                       C:\Users\Shchetinin_AN\AppData\Local\Temp\{D460C585-697B-45D8-905C-75E88FB2833A}\ifc
* Database version:               5507
* Database creation date:         Fri Sep 14 15:09:04 2018
* Model:                          DataRepository.ifc
* Model creation date:            Fri Sep 14 15:09:04 2018
* Header model:                   DataRepository.ifc_HeaderModel
* Header model creation date:     Fri Sep 14 15:09:04 2018
* Step file:                      Export.ifc
* EDMuser:                        sdai-user
* EDMgroup:                       sdai-group
* License ID and type:            5605 : Permanent license. Expiry date:
* EDMstepFileFactory options:     020000
******************************************************************************************/


------------------------------------------------------------------------------------------------
Operation terminated with error: Illegal STEP header model.

Errors...........: 0
Warnings.........: 0
------------------------------------------------------------------------------------------------

Во-первых, в Export.ifc нет ничего похожего на то, что я пытался записать в коде.
Во-вторых, упоминается какая-то ошибка: Illegal STEP header model. Не понимаю, имеет ли она какое-то значение?

Подскажите, что я делаю не так, что в ifc файл ничего не записывается?
В принципе, посредством Revit API возможно заполнить ifc файл так, как мне нужно, или придется обратиться к проекту https://github.com/whztt07/RevitIFC?
Может быть у кого-нибудь имеется пример создания ifc файла средствами Revit API?

Заранее спасибо!

Оффлайн Александр Игнатович

  • Administrator
  • ****
  • Сообщений: 253
  • Карма: 64
  • Skype: alexandr.ignatovich.itc
Re: Экспорт в IFC
« Ответ #1 : 14-09-2018, 13:50:53 »
Добрый день!

Посмотрите метод Document.Export:
Код - C# [Выбрать]
  1. public bool Export(
  2.         string folder,
  3.         string name,
  4.         IFCExportOptions options
  5. )

Оффлайн AlxdАвтор темы

  • ADN Club
  • Сообщений: 48
  • Карма: 1
Re: Экспорт в IFC
« Ответ #2 : 14-09-2018, 14:09:15 »
Как я понял, метод Export экспортирует в любом формате, в частности, формате IFC сохраняет структуры экспорта по уровням.
Единственное интересное свойство в IFCExportOptions - FamilyMappingFile. Но непонятно, что за файл ему передавать. Был бы пример... :)

Интересно, что код:
Код - C# [Выбрать]
  1.                 using (Transaction tr = new Transaction(doc))
  2.                 {
  3.                     tr.Start("Export doc");
  4.                     try
  5.                     {
  6.                         IFCExportOptions o = new IFCExportOptions();
  7.                         bool ret = doc.Export("D:\\temp\\", "ExportDoc.ifc", o);
  8.                         tr.Commit();
  9.                     }
  10.                     catch (Exception ex)
  11.                     {
  12.                         tr.RollBack();
  13.                     }
  14.  
  15.                 }
  16.  

ничего не делает. Возвращает в ret значение true, но файл ExportDoc.ifc не появляется в D:\temp.
« Последнее редактирование: 14-09-2018, 14:44:03 от Alxd »

Оффлайн Александр Игнатович

  • Administrator
  • ****
  • Сообщений: 253
  • Карма: 64
  • Skype: alexandr.ignatovich.itc
Re: Экспорт в IFC
« Ответ #3 : 14-09-2018, 14:54:16 »
Вообще говоря, попробовал Ваш код на примере архитектурного проекта от Autodesk, всё отработало на ура.

FamilyMappingFile, это, похоже то, что в интерфейсе вызывается через Файл -> Экспорт -> Параметры (Задание параметров для эспорта САПР и IFC) -> Параметры IFC, там можно редактировать и сохранять\загружать в файлы

Оффлайн AlxdАвтор темы

  • ADN Club
  • Сообщений: 48
  • Карма: 1
Re: Экспорт в IFC
« Ответ #4 : 14-09-2018, 15:01:56 »
Вы хотите сказать, что с помощью ifcFile.Write(); вы получили заполненный IFC файл???
Какая версия Revit у вас?

Оффлайн Александр Игнатович

  • Administrator
  • ****
  • Сообщений: 253
  • Карма: 64
  • Skype: alexandr.ignatovich.itc
Re: Экспорт в IFC
« Ответ #5 : 14-09-2018, 15:17:10 »
Нет, прекрасно отработал doc.Export, проверил в 2019.1 и 2018.3

Оффлайн lex

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Re: Экспорт в IFC
« Ответ #6 : 18-09-2018, 17:50:40 »
Как я понял, метод Export экспортирует в любом формате, в частности, формате IFC сохраняет структуры экспорта по уровням.
Единственное интересное свойство в IFCExportOptions - FamilyMappingFile. Но непонятно, что за файл ему передавать. Был бы пример...

Насколько я понимаю метод export не решение проблемы создания кастомной структуры, поскольку FamilyMappingFile это просто сопоставление категорий и подкатегорий Revit с классоми IFC.
. Файл можно создать: Файл - экспорт - параметры ifc

Настроек иерархии дерева я не увидел.
Похоже нужно ковырять https://github.com/whztt07/RevitIFC

Оффлайн AlxdАвтор темы

  • ADN Club
  • Сообщений: 48
  • Карма: 1
Re: Экспорт в IFC
« Ответ #7 : 19-09-2018, 06:41:09 »
Да, похоже вы правы.
Нашел ещё вот такой проект: https://github.com/Autodesk/revit-ifc

Оффлайн trir

  • ADN Club
  • ***
  • Сообщений: 222
  • Карма: 24
Re: Экспорт в IFC
« Ответ #8 : 19-09-2018, 07:37:57 »
они так и не исправили ту ошибку
ну так вот мой патч