例: 梁からジオメトリ データを取得する

例: 梁からジオメトリ データを取得

このセクションでは、梁からソリッドと曲線を取得する方法を説明します。柱とブレース ジオメトリ データも同様の方法で取得できます。梁が結合されているか、独立しているかに従って、GeometryElement に含まれる目的のジオメトリは Solid または GeometryInstance となります。このコードでは両方の場合を取り扱います。

注: 梁とブレース駆動曲線を取得する際に LocationCurve が使用できる場合は、FamilyInstance Location プロパティを呼び出します。

サンプル コードは次のようになります。

コード領域 20-10: 梁からソリッドと曲線を取得

public void GetCurvesFromABeam(Autodesk.Revit.DB.FamilyInstance beam,
                                Autodesk.Revit.DB.Options options)
{
    Autodesk.Revit.DB.GeometryElement geomElem = beam.get_Geometry(options);

    Autodesk.Revit.DB.CurveArray curves = new CurveArray();
    System.Collections.Generic.List<Autodesk.Revit.DB.Solid> solids = new System.Collections.Generic.List<Autodesk.Revit.DB.Solid>(); 

    //Find all solids and insert them into solid array
    AddCurvesAndSolids(geomElem, ref curves, ref solids);
}

private void AddCurvesAndSolids(Autodesk.Revit.DB.GeometryElement geomElem,
                                ref Autodesk.Revit.DB.CurveArray curves,
                                ref System.Collections.Generic.List<Autodesk.Revit.DB.Solid> solids)
{
    foreach (Autodesk.Revit.DB.GeometryObject geomObj in geomElem)
    {
        Autodesk.Revit.DB.Curve curve = geomObj as Autodesk.Revit.DB.Curve;
        if (null != curve)
        {
            curves.Append(curve);
            continue;
        }
        Autodesk.Revit.DB.Solid solid = geomObj as Autodesk.Revit.DB.Solid;
        if (null != solid)
        {
            solids.Add(solid);
            continue;
        }
        //If this GeometryObject is Instance, call AddCurvesAndSolids
        Autodesk.Revit.DB.GeometryInstance geomInst = geomObj as Autodesk.Revit.DB.GeometryInstance;
        if (null != geomInst)
        {
            Autodesk.Revit.DB.GeometryElement transformedGeomElem
                = geomInst.GetInstanceGeometry(geomInst.Transform);
            AddCurvesAndSolids(transformedGeomElem, ref curves, ref solids);
        }
    }
}

上記の例では、FamilyInstance.Geometry プロパティを使用して、梁の実際のジオメトリにアクセスします。結合、切断、コピー、拡張、他の事後処理によって修正する前にファミリ インスタンスの元のジオメトリを取得するには、FamilyInstance.GetOriginalGeometry()メソッドを使用します。

注: Geometry.Options タイプ オブジェクトの取得方法の詳細は、「Geometry.Options」を参照してください。