Шаблоны триангуляции в формате файла .ifc с использованием координат и индексов

Я разместил это на другом форуме из-за математического характера проблемы: сообщение на форуме

У меня есть файл .ifc, в котором экспортированные необработанные данные описывают стену в плоскости xy с помощью набора координат и их соответствующих индексов в соответствии с объяснением ссылки:

Пояснение

У меня есть txt, где данные разделены на координаты в пространстве xyz, а затем индексы и некоторые другие данные.

Я надеялся, что кто-нибудь поможет мне понять, как связать индексы с соответствующими координатами. Есть 164 пары координат и 324 пары индексов, поэтому для меня не имеет смысла, что каждый индекс относится только к 1 паре координат.

Цель состоит в том, чтобы установить взаимосвязь между индексами и координатами, чтобы этот тип данных мог выводить толщину стенки, которая в данном случае равна «10». Я думал, что (согласно приведенной выше ссылке), взяв первый описанный треугольник, он должен описать край стены в 3D и, следовательно, дать нам одну из его сторон как самый короткий сегмент в стене, который является толщиной.

Я получил ответ в упомянутом сообщении на форуме, что мне следует "... развернуть каждую координату с точки зрения X, Y и Z [вместо троек (X, Y, Z)), а затем использовать каждый индекс утроить, чтобы получить фактическую координату для отдельной координаты вместо одной тройки. Так, например, у вас есть X [], Y [] и Z [], и у вас есть индекс (a, b, c), тогда вы найдете X [a] , Y [b] и Z [c] не Point (a, b, c) ... "

Я не совсем понял это объяснение и был бы признателен за любую помощь или дополнительные объяснения для достижения моей цели.

Спасибо


person Yafim Simanovsky    schedule 16.04.2018    source источник
comment
Если я не знаю, что внутри этих чисел есть стена, как я могу это сказать? Требуется дополнительная информация. Например, трехмерный просмотр данных и выбор мышью желаемого треугольника / ребра / и т. Д. Или проанализируйте нормали и их изменение между соседними треугольниками.   -  person Ripi2    schedule 18.04.2018
comment
Я знаю, что это стена, потому что экспортировал данные. Моя цель именно такая - найти толщину стенки без какой-либо дополнительной информации, кроме предоставленных данных. Данные должны полностью описывать трехмерную геометрию стены.   -  person Yafim Simanovsky    schedule 19.04.2018


Ответы (2)


Начнем с кординат (IfcCartesianPointList3D): каждая из них является триплетом, в результате чего получается точка с координатами (x, y, z).

Затем IfcTriangulatedFaceSet использует индексы для построения треугольников. Имеет 2 режима индексации: прямое и косвенное через PnIndex. Режим индексации определяется наличием массива для PnIndex (номер атрибута 5). Обратите внимание, что я называю эти варианты прямым и косвенным - в документации IFC они так не упоминаются.

Прямая индексация

PnIndex не установлен. Давайте посмотрим на пример (простой и сконструированный):

#100=IFCCARTESIANPOINTLIST(((0,0,0),(1,0,0),(1,1,0),(0,1,0)));
#101=IFCTRIANGULATEDFACESET(
    /*reference to the points*/         #100,
    /*no normals*/                      $,
    /*no indication if closed or open*/ $,
    /*coordinate indices*/              ((1,2,3),(1,3,4)),
    /*no PnIndex*/                      ());

Это описывает квадрат, лежащий в плоскости x-y. Каждая запись в атрибуте CoordIndex является триплетом, дающим отсчитываемый от единицы индекс для точки в IfcCartesianPointList. Это означает, что есть два треугольника, построенных из следующих точек:

  1. (0,0,0) (1,0,0) (1,1,0)
  2. (0,0,0) (1,1,0) (0,1,0)

Косвенное индексирование

Давайте продолжим предыдущий пример:

#100=IFCCARTESIANPOINTLIST(((0,0,0),(1,0,0),(1,1,0),(0,1,0)));
#101=IFCTRIANGULATEDFACESET(
    /*reference to the points*/         #100,
    /*no normals*/                      $,
    /*no indication if closed or open*/ $,
    /*coordinate indices*/              ((1,2,3),(1,3,4)),
    /*PnIndex*/                         (2,3,4,1));

На этот раз установлен PnIndex. Это добавляет уровень косвенного доступа к точкам. Тройные числа от точки CoordIndex до PnIndex (на основе 1). Значение, найденное в PnIndex, затем используется для доступа к IfcCartesianPointList.

Итак, для первого треугольника у нас есть: (1,2,3) в CoordIndex. Они указывают на 2, 3 и 4 в PnIndex. Результатом являются следующие точки из списка точек: (1,0,0) (1,1,0) (0,1,0)

Повторяя процедуру для второго треугольника (1,3,4), мы получаем значения 2, 4, 1 из PnIndex и следующие точки: (1,0,0) (0,1,0) (0,0,0)

Это снова квадрат, но на этот раз с другой триангуляцией.

Теперь, если вы хотите узнать толщину вашей стены, вам нужно будет вычислить размеры на основе полученной геометрии. Если ваша стена выровнена по осям системы координат, это легко (найдите разницу между наименьшим и наибольшим X, Y и Z). Если это не так, вам может потребоваться преобразовать точки или продолжить расчеты 3D-экстентов (на этом мои знания заканчиваются).

person Loebl    schedule 17.05.2018

person    schedule
comment
да, все правильно, но это не имеет ничего общего с целями, которые я описал в своем сообщении, или с конкретными проблемами, с которыми я столкнулся. - person Yafim Simanovsky; 18.04.2018
comment
Этот ответ является объяснением объяснения, которое вам было дано на форуме. - person Ripi2; 18.04.2018
comment
Извините, может быть, вы можете попытаться объяснить это более подробно в полном ответе? - person Yafim Simanovsky; 19.04.2018