В Revit как сделать обнаружение помех программно? - PullRequest
0 голосов
/ 23 июля 2010

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

Ответы [ 3 ]

0 голосов
/ 26 мая 2011

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

0 голосов
/ 21 мая 2014

если вы ищете пересекающиеся элементы, я буду использовать 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
  }
}
0 голосов
/ 26 июля 2010

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

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

...