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

ADN Club => Revit API => Тема начата: user32 от 20-03-2019, 16:47:44

Название: Получение геометрии у трубопроводных фиттингов
Отправлено: user32 от 20-03-2019, 16:47:44
Добрый день.
Данным методом я получаю площадь поверхности у фиттингов воздуховодов. Тут он работает корректно и все показывает, но когда пытаюсь применить его к трубопроводным фиттингам, то он возвращает 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.  
Название: Re: Получение геометрии у трубопроводных фиттингов
Отправлено: Александр Игнатович от 20-03-2019, 16:58:54
Ну во-первых, геометрию стоит получать рекурсивным алгоритмом, в общем случае внутри GeometryInstance-а могут быть вложенные GeometryInstance.

Ну а во-вторых, Вы получаете первый попавшийся Solid, в геометрии семейств, порой, попадаются какие-то фиктивные solid-ы с нулевым объемом и без поверхностей. Вероятно, он в Вашем случае первым попался. Рекомендую скачать RevitLookup и посмотреть, что происходит
Название: Re: Получение геометрии у трубопроводных фиттингов
Отправлено: user32 от 20-03-2019, 17:42:42
Ага, вроде понял, попробую.
Спасибо