Получение координат стены из файла IF C с XBIM - PullRequest
0 голосов
/ 10 января 2020

Мне нужно получить список вершин объекта IfcWall, используя XBIM. Код, который мне нужен, должен выглядеть примерно так:

using (model)
{
    List<ItemSet<IfcCartesianPoints>> loppsList = new List<ItemSet<IfcCartesianPoints>>();
    var walls = model.Instances.OfType<IfcWall>();

    foreach (var wall in walls)
    {
        loppsList.Add(wall. ... .Points);
    }
}

Но я понятия не имею, как найти правильный путь.

Я попробовал решение, предложенное здесь: IF C навигация по объектам для получения координат стены

foreach (var wall in walls)
{
    var line = wall.Representation.Representations[0].Items[0];
    var _line  = line as IfcPolyline;
    loppsList.Add(_line.Points);
}

Но я не получил правильные данные - возможно, я просто заблудился на пути атрибутов. Пожалуйста, помогите перемещаться по атрибутам IfcWall.

1 Ответ

0 голосов
/ 12 января 2020

Хорошо, если кто-то в будущем столкнется с тем же вопросом, полный путь будет таким:

wall.Representation.Representations []. Items []. Outer []. CfsFaces []. Bounds []. Bound.Polygon []

//this is how i print the x coordinates of all points
using (model)
        {

            var walls = model.Instances.OfType<IIfcWall>();

            foreach (var wall in walls)
            {
                var loop = wall.Representation.Representations[1].Items[0];

                if (loop is IfcFacetedBrep)
                {

                    var _loop = loop as IfcFacetedBrep;
                    foreach (var face in _loop.Outer.CfsFaces)
                    {
                        foreach (var bound in face.Bounds)
                        {
                            var _b = bound.Bound as IIfcPolyLoop;
                            foreach (var point in _b.Polygon)
                            {
                                Debug.WriteLine(point.ToString());
                            }
                        }
                    }
                }
            }
        }

Но:

  1. Элемент представления [] должен быть IfcFacetedBrep (если это IfcBooleanClippingResult, то я понятия не имею, что делать)

  2. Неизвестны индексы представлений [], Items [] и других массивов

  3. Стены могут быть как IfcWall (IF C 4 ), так как IIfcWall (IF C 2x3) и навигация по этим объектам различны

Не используйте IF C.

...