Колонны в помещении

Автор Тема: Колонны в помещении  (Прочитано 6656 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Антон ОстанинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 107
  • Карма: 6
Колонны в помещении
« : 03-12-2015, 16:10:22 »
Добрый день, подскажите, пожалуйста, есть ли какой-нибудь удобный метод получения площади колонны в помещении?
Высота самой колонны может быть сколь угодной, поэтому наверное нужно ограничиваться перекрытием?

Отмечено как Решение Антон Останин 03-12-2015, 17:07:17

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Колонны в помещении
« Ответ #1 : 03-12-2015, 16:38:53 »
Возможно, Вам поможет SpatialElementGeometryCalculator.
Код - C# [Выбрать]
  1. SpatialElementGeometryCalculator calculator = new SpatialElementGeometryCalculator(doc);
  2. SpatialElementGeometryResults results = calculator.CalculateSpatialElementGeometry(room); // compute the room geometry
  3. Solid roomSolid = results.GetGeometry(); // get the solid representing the room's geometry
  4. foreach (Face face in roomSolid.Faces)
  5. {
  6.     double faceArea = face.Area;
  7.     IList<SpatialElementBoundarySubface> subfaceList = results.GetBoundaryFaceInfo(face); // get the sub-faces for the face of the room
  8.     foreach (SpatialElementBoundarySubface subface in subfaceList)
  9.     {
  10.         // здесь есть возможность получить subface.SpatialBoundaryElement - если это колонна, то взять subface.GetSubface().Area
  11.     }
  12. }

Оффлайн ADSK

  • Administrator
  • Сообщений: 0
  • Карма: 2
Re: Колонны в помещении
« Ответ #2 : 03-12-2015, 17:01:37 »
Антон Останин,
второй вариант, с использованием того же SpatialElementGeometryCalculator
Код - C# [Выбрать]
  1. SpatialElementGeometryCalculator calculator = new SpatialElementGeometryCalculator(doc);
  2. SpatialElementGeometryResults results = calculator.CalculateSpatialElementGeometry(room); // compute the room geometry
  3. Solid roomSolid = results.GetGeometry(); // get the solid representing the room's geometry
  4.  
  5. var column = ...
  6.  
  7. var columnSolid = column.get_Geometry(new Options()).OfType<GeometryObject>().FirstOrDefault() as Solid;
  8.  
  9. // находим пересечение геометрии помещения и колоны
  10. var result = BooleanOperationsUtils.ExecuteBooleanOperation(roomSolid, columnSolid, BooleanOperationsType.Intersect);
  11.  
  12. //узнаем площадь
  13. var area = result.SursaceArea;
  14.  
  15.  

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

Оффлайн Антон ОстанинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 107
  • Карма: 6
Re: Колонны в помещении
« Ответ #3 : 03-12-2015, 17:07:02 »
Спасибо огромное за помощь.
Первый вариант точно рабочий, по возможности проверю и второй!

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Колонны в помещении
« Ответ #4 : 03-12-2015, 17:20:28 »
Код - C# [Выбрать]
  1. roomSolid = results.GetGeometry();
этот solid будет с дыкой от колонны, и результат пересечения с solid-ом колонны будет пустой solid

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Колонны в помещении
« Ответ #5 : 03-12-2015, 17:55:10 »
этот solid будет с дыкой от колонны, и результат пересечения с solid-ом колонны будет пустой solid
Да, чет не учел этот момент