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

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

このウォークスルーでは、壁からジオメトリ データを取得する方法を説明します。次の情報を取り扱います。

注 インスタンスが考慮されないため、この例の要素からのジオメトリ データの取得は制限されます。たとえば、壁に含まれるスイープはサンプル コードでは使用できません。このウォークスルーの目的は、ジオメトリ データの取得方法の基本的な考え方の説明であり、すべての条件を取り扱うことではありません。要素からジオメトリ データを取得する方法の詳細は、「例: 梁からジオメトリ データを取得」を参照してください。

ジオメトリの作成オプション

壁のジオメトリ情報を取得するには、詳細なカスタマイズ オプションを持つ Geometry.Options オブジェクトを作成する必要があります。コードは次のとおりです。

コード領域 20-1: Geometry.Options を作成

Autodesk.Revit.DB.Options geomOption = application.Create.NewGeometryOptions();
if (null != geomOption)
{
        geomOption.ComputeReferences = true;
        geomOption.DetailLevel = Autodesk Autodesk.Revit.DB.DetailLevels.Fine;
        
        // Either the DetailLevel or the View can be set, but not both
        //geomOption.View = commandData.Application.ActiveUIDocument.Document.ActiveView;
        
        TaskDialog.Show("Revit", "Geometry Option created successfully.");
}
注: 詳細は、「Geometry.Options」を参照してください。

面とエッジを取得する

壁のジオメトリは、面とエッジで構成されるソリッドです。面とエッジを取得するには、次の手順を実行します。

  1. Wall クラスのジオメトリ プロパティを使用して Geometry.Element インスタンスを取得します。このインスタンスには、ソリッドや線分などのオブジェクト プロパティのすべてのジオメトリ オブジェクトが含まれます。
  2. 面とエッジ プロパティのすべてのジオメトリ面とエッジを含むジオメトリ ソリッド インスタンスを取得するには、オブジェクト プロパティを繰り返します。
  3. すべてのジオメトリ面を取得するには、面プロパティを繰り返します。
  4. すべてのジオメトリ エッジを取得するには、エッジ プロパティを繰り返します。

サンプル コードは次のとおりです。

コード領域 20-2: 面とエッジを取得

private void GetFacesAndEdges(Wall wall)
{
        String faceInfo = "";

        Autodesk.Revit.DB.Options opt = new Options();
        Autodesk.Revit.DB.GeometryElement geomElem = wall.get_Geometry(opt);
        foreach (GeometryObject geomObj in geomElem)
        {
                Solid geomSolid = geomObj as Solid;
                if (null != geomSolid)
                {
                        int faces = 0;
                        double totalArea = 0;
                        foreach (Face geomFace in geomSolid.Faces)
                        {
                                faces++;
                                faceInfo += "Face " + faces + " area: " + geomFace.Area.ToString() + "\n";
                                totalArea += geomFace.Area;
                        }
                        faceInfo += "Number of faces: " + faces + "\n";
                        faceInfo += "Total area: " + totalArea.ToString() + "\n";
                        foreach (Edge geomEdge in geomSolid.Edges)
                        {
                                // get wall's geometry edges
                        }
                }
        }
        TaskDialog.Show("Revit", faceInfo);
}