ADN Open CIS
Сообщество программистов Autodesk в СНГ

30/09/2015

Объединение геометрии стен и колонн

Я пытался найти в блоге пример использования объединения геометрии, но так и не смог. Собственно, вот он.

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

Очевидно, что мы не можем объединить все стены со всеми колоннами. Jeremy написал неплохой пример, который поможет найти пересекающиеся элементы, поэтому просто воспользуемся им.

Возьмем сначала все стены, затем для каждой стены получим все колонны, с которыми пересекается эта стена и объединим их эти два элемента с помощью метода JoinGeometry:

Код - C#: [Выделить]
  1. UIApplication uiapp = commandData.Application;
  2. UIDocument uidoc = uiapp.ActiveUIDocument;
  3. Application app = uiapp.Application;
  4. Document doc = uidoc.Document;
  5.  
  6. // найдем все стены на текущем виде
  7. FilteredElementCollector collWalls =
  8.   new FilteredElementCollector(doc, doc.ActiveView.Id);
  9. collWalls.OfClass(typeof(Wall));
  10.  
  11. foreach (Wall w in collWalls)
  12. {
  13.   // Найдем все колонны на текущем виде
  14.   FilteredElementCollector collColumnsOnThisWall =
  15.     new FilteredElementCollector(doc, doc.ActiveView.Id);
  16.   collColumnsOnThisWall.OfClass(typeof(FamilyInstance));
  17.   collColumnsOnThisWall.OfCategory(
  18.     BuiltInCategory.OST_StructuralColumns);
  19.  
  20.   // найдем колонны, которые пересекаются с текущей стеной
  21.   BoundingBoxXYZ bb = w.get_BoundingBox(doc.ActiveView);
  22.   Outline outline = new Outline(bb.Min, bb.Max);
  23.   BoundingBoxIntersectsFilter bbfilter =
  24.     new BoundingBoxIntersectsFilter(outline);
  25.   collColumnsOnThisWall.WherePasses(bbfilter);
  26.  
  27.   // в конце, объединим каждую колонну со стеной.
  28.   foreach (FamilyInstance column in collColumnsOnThisWall)
  29.   {
  30.     JoinGeometryUtils.JoinGeometry(doc, w, column);
  31.   }
  32. }

Источник: http://adndevblog.typepad.com/aec/2015/08/joingeometry-for-walls-and-columns.html

Автор перевода: Виктор Чекалин

Обсуждение: http://adn-cis.org/forum/index.php?topic=3065

Опубликовано 30.09.2015