このセクションでは、梁からソリッドと曲線を取得する方法を説明します。柱とブレース ジオメトリ データも同様の方法で取得できます。梁が結合されているか、独立しているかに従って、GeometryElement に含まれる目的のジオメトリは Solid または GeometryInstance となります。このコードでは両方の場合を取り扱います。
サンプル コードは次のようになります。
|
コード領域 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();
Autodesk.Revit.DB.SolidArray solids = new SolidArray();
//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 Autodesk.Revit.DB.SolidArray 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.Append(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()メソッドを使用します。