Как в Revit программно обнаружить помехи?

Точнее, как я могу определить, пересекает ли Solid другой элемент? Я просмотрел Revit API и не смог найти никакой информации по этому поводу.


person learner    schedule 23.07.2010    source источник


Ответы (3)


загляните в API проекции лучей, вы можете выстрелить лучом в определенном направлении, и он вернет все элементы, с которыми он сталкивается, их расположение и т. д.

Я считаю, что метод FindReferencesByDirection - это метод, который делает это.

person RodH257    schedule 26.07.2010

В Revit 2012 используйте фильтр ElementIntersectsSolidFilter при фильтрации элементов. Вы предоставляете входное твердое тело, которое может быть получено из другого элемента или из геометрии, созданной вами программно.

person Zoinks    schedule 26.05.2011

если вы ищете пересекающиеся элементы, я буду использовать BoundingBoxIntersectsFilter, это быстрый фильтр с незначительным влиянием на производительность.

во-первых, получите ограничивающую геометрию

GeometryElement geoElem = wall.get_Geometry(_geoOpt) as GeometryElement;
BoundingBoxXYZ boundXYZ = geoElem.GetBoundingBox();

затем создайте контур и передайте его в BoundingBoxIntersectsFilter.

if (boundXYZ != null)
{
  outline = new Outline(boundXYZ.Min, boundXYZ.Max);
  boundingFilter = new BoundingBoxIntersectsFilter(outline);

  var filterElems = new FilteredElementCollector(elem.Document).WherePasses(boundingFilter).ToElementIds();
  foreach (var item in filterElems)
  {
     //retrieve intersected elements
  }
}
person Rick    schedule 21.05.2014