Секция конструкции
Следующий пример по созданию секции конструкции был реализован Andrzej Trelinski из команды разработчиков Revit, за что ему большое спасибо.
В примере демонстрируется, как можно программно создать секцию конструкции для балки. Интересной особенностью, является то, что метод FamilySymbol.HasStructuralSection, не смотря на свое название (имеет секцию конструкции – прим. переводчика), возвращает ИСТИНА, в том случае, если типоразмер лишь может содержать в себе секцию конструкции.
Наконец, важным является то, что через API можно создать только StructuralSectionPipeStandard и StructuralSectionRoundHSS элементы секции конструкции.
Ниже приведен пример кода по созданию:
- [Transaction(TransactionMode.Manual)]
 - public class Command : IExternalCommand
 - {
 - public Result Execute(
 - ExternalCommandData commandData,
 - ref string message,
 - ElementSet elements)
 - {
 - UIApplication uiApp = commandData.Application;
 - Application app = uiApp.Application;
 - UIDocument uiDoc = uiApp.ActiveUIDocument;
 - Document doc = uiDoc.Document;
 - var collector = new FilteredElementCollector(doc);
 - collector.OfCategory(BuiltInCategory.OST_StructuralFraming);
 - if (uiDoc.Selection.GetElementIds().Count < 1)
 - {
 - TaskDialog.Show("Предупреждение", "Не выбраны подходящие элементы!" +
 - " Выберите элемент категории Каркас несущий, например, балку");
 - return Result.Cancelled;
 - }
 - using (Transaction tran = new Transaction(doc,
 - "Добавление секции конструкции"))
 - {
 - tran.Start();
 - foreach (ElementId id in uiDoc.Selection.GetElementIds())
 - {
 - Element elem = doc.GetElement(id);
 - if (!(elem is FamilyInstance))
 - {
 - TaskDialog.Show("Предупреждение", string.Format(
 - "Элемент с ID='{0}' не является экземпляром семейства. " +
 - "Только экземпляры семейства могут иметь секцию конструкции",
 - elem.Id.IntegerValue));
 - return Result.Cancelled;
 - }
 - FamilyInstance famInst = elem as FamilyInstance;
 - // Метод HasStructuralSection() проверяет
 - // может ли элемент иметь секцию конструкции или нет
 - if (!famInst.Symbol.Family.HasStructuralSection())
 - {
 - TaskDialog.Show("Предупреждение", string.Format(
 - "Элемент с ID='{0}' Не может содержать в себе секцию конструкции. " +
 - "Выберите элемент другого семейства",
 - elem.Id.IntegerValue));
 - return Result.Cancelled;
 - }
 - {
 - // создаем новую секцию конструкции
 - double diameter = 5.25;
 - double sectionArea = 3.14159265358979 * diameter * diameter;
 - double perimeter = 3.14159265358979 * diameter;
 - double centroidHorizontal = 2.5;
 - double centroidVertical = 1.5;
 - double principalAxesAngle = 1.57;
 - double elasticModulusStrongAxis = 10e7;
 - double elasticModulusWeakAxis = 9e7;
 - double momentOfInertiaStrongAxis = 100;
 - double momentOfInertiaWeakAxis = 80;
 - double nominalWeight = 1023;
 - double plasticModulusStrongAxis = 120;
 - double plasticModulusWeakAxis = 55;
 - double shearAreaStrongAxis = 1;
 - double shearAreaWeakAxis = 2;
 - double torsionalModulus = 10;
 - double torsionalMomentOfInertia = 15;
 - double warpingConstant = 5;
 - double wallDesignThickness = 1.2;
 - double wallNominalThickness = 1.1978;
 - StructuralSectionPipeStandard SSPipeStandard =
 - new StructuralSectionPipeStandard(
 - diameter, centroidHorizontal,
 - centroidVertical, principalAxesAngle,
 - wallNominalThickness, wallDesignThickness,
 - sectionArea, perimeter, nominalWeight,
 - momentOfInertiaStrongAxis,
 - momentOfInertiaWeakAxis, elasticModulusStrongAxis,
 - elasticModulusWeakAxis, plasticModulusStrongAxis,
 - plasticModulusWeakAxis, torsionalMomentOfInertia,
 - torsionalModulus, warpingConstant,
 - shearAreaStrongAxis, shearAreaWeakAxis);
 - famInst.Symbol.SetStructuralSection(SSPipeStandard);
 - }
 - }
 - if (tran.Commit() != TransactionStatus.Committed)
 - {
 - TaskDialog.Show("Ошибка", "Ошибка при подтверждении транзакции");
 - return Result.Failed;
 - }
 - }
 - return Result.Succeeded;
 - }
 
Источник: 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