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

22/07/2014

Секция конструкции

Следующий пример по созданию секции конструкции был реализован Andrzej Trelinski из команды разработчиков Revit, за что ему большое спасибо.

В примере демонстрируется, как можно программно создать секцию конструкции для балки. Интересной особенностью, является то, что метод FamilySymbol.HasStructuralSection, не смотря на свое название (имеет секцию конструкции – прим. переводчика), возвращает ИСТИНА, в том случае, если типоразмер лишь может содержать в себе секцию конструкции.

Наконец, важным является то, что через API можно создать только StructuralSectionPipeStandard и StructuralSectionRoundHSS элементы секции конструкции.

Ниже приведен пример кода по созданию:

Код - C#: [Выделить]
  1.     [Transaction(TransactionMode.Manual)]
  2.     public class Command : IExternalCommand
  3.     {
  4.         public Result Execute(
  5.           ExternalCommandData commandData,
  6.           ref string message,
  7.           ElementSet elements)
  8.         {
  9.             UIApplication uiApp = commandData.Application;
  10.             Application app = uiApp.Application;
  11.             UIDocument uiDoc = uiApp.ActiveUIDocument;
  12.             Document doc = uiDoc.Document;
  13.  
  14.             var collector = new FilteredElementCollector(doc);
  15.             collector.OfCategory(BuiltInCategory.OST_StructuralFraming);
  16.  
  17.             if (uiDoc.Selection.GetElementIds().Count < 1)
  18.             {
  19.                 TaskDialog.Show("Предупреждение", "Не выбраны подходящие элементы!" +
  20.                   " Выберите элемент категории Каркас несущий, например, балку");
  21.                 return Result.Cancelled;
  22.             }
  23.  
  24.             using (Transaction tran = new Transaction(doc,
  25.               "Добавление секции конструкции"))
  26.             {
  27.                 tran.Start();
  28.  
  29.  
  30.                 foreach (ElementId id in uiDoc.Selection.GetElementIds())
  31.                 {
  32.                     Element elem = doc.GetElement(id);
  33.                     if (!(elem is FamilyInstance))
  34.                     {
  35.                         TaskDialog.Show("Предупреждение", string.Format(
  36.                           "Элемент с ID='{0}' не является экземпляром семейства. " +
  37.                           "Только экземпляры семейства могут иметь секцию конструкции",
  38.                           elem.Id.IntegerValue));
  39.                         return Result.Cancelled;
  40.                     }
  41.  
  42.                     FamilyInstance famInst = elem as FamilyInstance;
  43.  
  44.                     // Метод HasStructuralSection() проверяет
  45.                     // может ли элемент иметь секцию конструкции или нет
  46.                     if (!famInst.Symbol.Family.HasStructuralSection())
  47.                     {
  48.                         TaskDialog.Show("Предупреждение", string.Format(
  49.                           "Элемент с ID='{0}' Не может содержать в себе секцию конструкции. " +
  50.                           "Выберите элемент другого семейства",
  51.                           elem.Id.IntegerValue));
  52.                         return Result.Cancelled;
  53.                     }
  54.  
  55.                     {
  56.                         // создаем новую секцию конструкции
  57.                         double diameter = 5.25;
  58.                         double sectionArea = 3.14159265358979 * diameter * diameter;
  59.                         double perimeter = 3.14159265358979 * diameter;
  60.                         double centroidHorizontal = 2.5;
  61.                         double centroidVertical = 1.5;
  62.                         double principalAxesAngle = 1.57;
  63.                         double elasticModulusStrongAxis = 10e7;
  64.                         double elasticModulusWeakAxis = 9e7;
  65.                         double momentOfInertiaStrongAxis = 100;
  66.                         double momentOfInertiaWeakAxis = 80;
  67.                         double nominalWeight = 1023;
  68.                         double plasticModulusStrongAxis = 120;
  69.                         double plasticModulusWeakAxis = 55;
  70.                         double shearAreaStrongAxis = 1;
  71.                         double shearAreaWeakAxis = 2;
  72.                         double torsionalModulus = 10;
  73.                         double torsionalMomentOfInertia = 15;
  74.                         double warpingConstant = 5;
  75.                         double wallDesignThickness = 1.2;
  76.                         double wallNominalThickness = 1.1978;
  77.  
  78.                         StructuralSectionPipeStandard SSPipeStandard =
  79.                           new StructuralSectionPipeStandard(
  80.                             diameter, centroidHorizontal,
  81.                             centroidVertical, principalAxesAngle,
  82.                             wallNominalThickness, wallDesignThickness,
  83.                             sectionArea, perimeter, nominalWeight,
  84.                             momentOfInertiaStrongAxis,
  85.                             momentOfInertiaWeakAxis, elasticModulusStrongAxis,
  86.                             elasticModulusWeakAxis, plasticModulusStrongAxis,
  87.                             plasticModulusWeakAxis, torsionalMomentOfInertia,
  88.                             torsionalModulus, warpingConstant,
  89.                             shearAreaStrongAxis, shearAreaWeakAxis);
  90.                         famInst.Symbol.SetStructuralSection(SSPipeStandard);
  91.                     }
  92.                 }
  93.  
  94.                 if (tran.Commit() != TransactionStatus.Committed)
  95.                 {
  96.                     TaskDialog.Show("Ошибка", "Ошибка при подтверждении транзакции");
  97.                     return Result.Failed;
  98.                 }
  99.             }
  100.  
  101.             return Result.Succeeded;
  102.         }

 

Источник: http://adndevblog.typepad.com/aec/2014/07/structural-section.html

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

Опубликовано 22.07.2014
Отредактировано 23.07.2014 в 11:03:01