Перейти к содержимому

Тестирование получения полигональных сеток для строительных файлов в формате IFC

Исходные данные

Исходный файл

IFC file размером 206.1 Мб

При открытии создаётся
Файл базы данных 212 Мб, т.к. файл больше 50 мб и он будет обрабатываться используя модель базы данных, если бы файл был меньше использовалась бы память.

При открытии происходит только парсин всех сущностей IFC модели, графической информации пока нет.

Для получение графической информации используется модуль Xbim Geometry, выполняется метод Create Context
Во время выполнения метода CPU 99% ОЗУ 400-500 Мб, используется графическое ядро OpenCASECADE.
Файл БД увеличивается до 245 Мб

Полигональные сетки создаются в бинарном формате (XbimGeometryType.PolyhedronBinary) в формате PLY

geomRead.ShapeGeometries

Нужен метод аналоничный методу

SaveAsWexBim(BinaryWriter binaryStream, IEnumerable products = null)

Из метода:

 // binaryStream.Write(geometry.ShapeData);
                         var ms = new MemoryStream(((IXbimShapeGeometryData) geometry).ShapeData);
                         var br = new BinaryReader(ms);
                         var tr = br.ReadShapeTriangulation();

tr.Write(binaryStream);

только сохраняющий полигональные сетки

Проверял на простых моделях, модель из 4-х стен,
var lookup = geomRead.ShapeGeometries; // содержит 4 полигональные сетки

geometry.ShapeData создержит данные в формате PLY (в бинарном виде), но не содержит заголовок PLY файла

После этого сохраняем файл с полигональными сетками:
global_model_v2.wexbim
28 мб

Вывод:

Полигональные сетки не занимают много памяти сами по себе, память потребляет сам модуль визуализации.

Метаданные к полигональным сеткам

wexbim файл не содержит GUID объекта, но каждая форма (Shape) содержит уникальную метку IfcProductLabel («ExternalId»: «229» в json-файле).

Для получения метаданных в json используется модуль COBieLiteUK из проекта XbimExchange

Тест получения метаданных:

using (var m = IfcStore.Open("d:\\Temp\\global_model_v11.ifc")
{               
   var facilities = new List<Facility>();
   var ifcToCoBieLiteUkExchanger = new IfcToCOBieLiteUkExchanger(m, facilities);
   facilities = ifcToCoBieLiteUkExchanger.Convert();

   var facilityType = facilities.FirstOrDefault();
   if(facilityType!=null)
   {
      //write the cobie data in json format
      facilityType.WriteJson("d:\\Temp\\global_model_v11.json", true);
   }       
}

Обработка 200 Мб IFC меньше минуты, json файл 45 Мб.

Ответ разработчиков по поводу метаданных:
«It is our own schema called COBieLiteUK and is implemented in XbimExchange where you can also find a code for conversions. However, converting complete model into single JSON semantic file is not viable for large models. Resulting files tend to be too large for web publishing.»

Запись в бинарный формат полигональной модели (в формате PLY)

Класс XbimShapeTriangulation

Метод

public void Write(BinaryWriter bw)
        {
            bw.Write((byte)_version); //stream format version
            bw.Write((Int32)_vertices.Count);
            bw.Write((Int32)_faces.Sum(face => face.TriangleCount));
            foreach (var v in _vertices)
            {
                bw.Write((float)v.X);
                bw.Write((float)v.Y);
                bw.Write((float)v.Z);
            }
 
            bw.Write((Int32)_faces.Count);
            foreach (var xbimFaceTriangulation in _faces)
            {
 
                if (xbimFaceTriangulation.IsPlanar)
                {
                    bw.Write((Int32) xbimFaceTriangulation.TriangleCount);
                    xbimFaceTriangulation.Normals[0].Write(bw);
                    xbimFaceTriangulation.WriteIndices(bw, _vertices.Count);
                }
                else
                {
                    bw.Write((Int32)(-xbimFaceTriangulation.TriangleCount));
                    xbimFaceTriangulation.WriteIndicesAndNormals(bw, _vertices.Count);
                }
            }
        }

Сравнение визуализаторов

КритерийHelix-toolkit
https://github.com/helix-toolkit/helix-toolkit
Eyeshot Ultimate 9.0 (http://www.devdept.com/)
ЦенаБесплатныйплатный
Работа с матрицами преобразованийЕстьЕсть
Библиотека, которая используется для
рендеринга
DirectXDirectX
Скорость работы (субъективно) на графической станции
House_1.ifc (5 Мб)
высокаяУльтра высока
ноутбукСредняя
Скорость работы
rac_basic_sample_project.ifc (26 Мб)
графическая станция
ВысокоУльтра высока
ноутбукСредняя
Big.ifc (200 Мб)Очень низкаяНизкая
ноутбукОчень низкая
Размер памяти для модели
Big.ifc
1,8 Gb2,5 Gb
Документация (субъективно)8 из 105 из 10

Reference

  1. The PLY File Format http://www.cc.gatech.edu/projects/large_models/ply.html
  2. https://en.wikipedia.org/wiki/PLY_(file_format)
  3. https://people.sc.fsu.edu/~jburkardt/data/ply/ply.html — примеры PLY файлов
  4. PLY — Polygon File Format — Also known as the Stanford Triangle Format http://paulbourke.net/dataformats/ply/
  5. Greg Turk, The PLY Polygon File Format http://www.dcs.ed.ac.uk/teaching/cs4/www/graphics/Web/ply.html
  6. Описание OBJ файла http://www.martinreddy.net/gfx/3d/OBJ.spec

Данная статья содержит материалы моих исследования от 17.10.2016 года

Добавить комментарий