構造柱、梁、ブレース

構造柱、梁、ブレース

構造柱、梁、ブレース要素はすべて、FamilyInstance クラスによって表されます。これらは StructuralType プロパティによって区別されます。

コード領域 29-1: 柱、梁、ブレースを区別

public void GetStructuralType(FamilyInstance familyInstance)
{
    string message = "";
    switch (familyInstance.StructuralType)
    {
        case StructuralType.Beam:
            message = "FamilyInstance is a beam.";
            break;
        case StructuralType.Brace:
            message = "FamilyInstance is a brace.";
            break;
        case StructuralType.Column:
            message = "FamilyInstance is a column.";
            break;
        case StructuralType.Footing:
            message = "FamilyInstance is a footing.";
            break;
        default:
            message = "FamilyInstance is non-structural or unknown framing.";
            break;
    }

    TaskDialog.Show("Revit",message);
}

カテゴリを使用すれば、構造柱、梁、ブレースに対応する FamilySymbol オブジェクトをフィルタすることができます。構造梁とブレースのカテゴリは BuiltInCategory.OST_StructuralFraming です。構造柱のカテゴリは BuiltInCategory.OST_StructuralColumns です。

コード領域 29-2: BuiltInCategory.OST_StructuralFraming を使用

public void GetBeamAndColumnSymbols(Document document)
{
    FamilySymbolSet columnTypes = new FamilySymbolSet();
    FamilySymbolSet framingTypes = new FamilySymbolSet();
    FilteredElementCollector collector = new FilteredElementCollector(document);
    ICollection<Element> elements = collector.OfClass(typeof(Family)).ToElements();

    foreach(Element element in elements)
    {
        Family family = element as Family;
        Category category = family.FamilyCategory;
        if (null != category)
        {
            ISet<ElementId> familySymbolIds = family.GetFamilySymbolIds();
            if ((int)BuiltInCategory.OST_StructuralColumns == category.Id.IntegerValue)
            {
                foreach (ElementId id in familySymbolIds)
                {
                    FamilySymbol symbol = family.Document.GetElement(id) as FamilySymbol;
                    columnTypes.Insert(symbol);
                }
            }
            else if ((int)BuiltInCategory.OST_StructuralFraming == category.Id.IntegerValue)
            {
                foreach (ElementId id in familySymbolIds)
                {
                    FamilySymbol symbol = family.Document.GetElement(id) as FamilySymbol;
                    framingTypes.Insert(symbol);
                }
            }
        }
    }

    string message = "Column Types: ";
    FamilySymbolSetIterator fsItor = columnTypes.ForwardIterator();
    fsItor.Reset();
    while (fsItor.MoveNext())
    {
        FamilySymbol familySybmol = fsItor.Current as FamilySymbol;
        message += "\n" + familySybmol.Name;
    }

    TaskDialog.Show("Revit",message);
}

FamilyInstance.ExtensionUtility プロパティを使用して、梁のセットバックのプロパティを取得、設定できます。このプロパティが null を返す場合は、梁のセット バックを修正できません。

BeamSystem

BeamSystem を使用すると、Revit Structure の梁システムにフル アクセス、編集することができます。BeamSystemType、BeamType、Direction、Level など、すべてのプロパティを取得、設定できます。BeamSystem.Direction は、エッジの 1 線分に限定されません。これは、BeamSystem を使用して同じ平面上の任意の XYZ 座標に設定することができます。

注: Elevation プロパティを UI でまたは API によって変更した後で、StructuralBeam AnalyticalModel を変更できません。次の図では、BeamSystem の Elevation が 10 フィートに変更された後も、解析モデル線分が元の場所にあります。

図 156: BeamSystem の高さを変更