Точнее, как я могу определить, пересекает ли Solid другой элемент? Я просмотрел Revit API и не смог найти никакой информации по этому поводу.
Как в Revit программно обнаружить помехи?
Ответы (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