Получение геометрии у трубопроводных фиттингов

Автор Тема: Получение геометрии у трубопроводных фиттингов  (Прочитано 3002 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Добрый день.
Данным методом я получаю площадь поверхности у фиттингов воздуховодов. Тут он работает корректно и все показывает, но когда пытаюсь применить его к трубопроводным фиттингам, то он возвращает 0 и я никак не могу понять почему. Как можно получить площадь поверхности у фиттингов труб?
Код - C# [Выбрать]
  1.        
  2. private double GetAreaSurfaceDuctFitting(Element element)
  3.         {
  4.             double hh = 0.0;
  5.             Options opt = new Options();
  6.             GeometryElement gE = element.get_Geometry(opt);
  7.             foreach (GeometryObject gO in gE)
  8.             {
  9.                 GeometryInstance gI = gO as GeometryInstance;
  10.                 if (gI != null)
  11.                 {
  12.                     var area = gI.SymbolGeometry
  13.                         .OfType<Solid>()
  14.                         .Select(s => s)
  15.                         .Where(s => true)
  16.                         .Select(s => s.SurfaceArea)
  17.                         .FirstOrDefault();
  18.                     hh = area;
  19.                 }
  20.             }
  21.             return hh;
  22.         }
  23.  

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Ну во-первых, геометрию стоит получать рекурсивным алгоритмом, в общем случае внутри GeometryInstance-а могут быть вложенные GeometryInstance.

Ну а во-вторых, Вы получаете первый попавшийся Solid, в геометрии семейств, порой, попадаются какие-то фиктивные solid-ы с нулевым объемом и без поверхностей. Вероятно, он в Вашем случае первым попался. Рекомендую скачать RevitLookup и посмотреть, что происходит

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Ага, вроде понял, попробую.
Спасибо