ソリッドと面の作成

ソリッドと面の作成

ソリッドと面は、他のユーティリティへの入力として使用される場合があります。Revit API は、このようなジオメトリを最初から作成する、または他の入力から作成させるために使用できるいくつかのルーチンを提供しています。

変換されたジオメトリ

メソッド

  • GeometryElement.GetTransformed()

は、適用された変換を使用して、入力ジオメトリ要素のコピーを返します。このジオメトリはコピーであるため、そのメンバーは、他の Revit 要素に対して入力参照として使用できませんが、ジオメトリ解析および抽出として使用することができます。

ジオメトリ作成ユーティリティ

GeometryCreationUtilities クラスは、基本的なソリッド形状が構築できるユーティリティ クラスです。

  • 押し出し
  • 回転
  • スイープ
  • ブレンド
  • スイープ ブレンド

結果として得られるジオメトリは、任意の要素の一部としてドキュメントに追加されません。ただし、作成されたソリッドは、次のような API 関数への入力として使用することができます。

  • Analysis Visualization Framework のメソッド(SpatialFieldManager.AddSpatialFieldPrimitive())に対する入力面として – これを使用することで、ドキュメントの他の要素に関連する作成した形状を視覚化できます。
  • 交点で 3D 要素を検索するための入力ソリッドとして
  • ブーリアン演算への 1 つまたは複数の入力として
  • ジオメトリ計算の一部として(Face.Project()、Face.Intersect()、または他の Face、Solid、Edge ジオメトリ メソッドなどを使用)

次の例では、GeometryCreationUtilities クラスを使用して、位置と高さに基づいた円柱形状を作成します。これは、この壁の終点の近くに他の壁を見つけるために、壁終端の周囲の体積を作成するためなどに使用できます。

コード領域: 円柱状のソリッドの作成

// Build cylinder centered at wall end point, extending 3' in diameter
CurveLoop cylinderLoop = new CurveLoop();
XYZ arcCenter = new XYZ(endPoint.X, endPoint.Y, elevation);
Application application = wall.Document.Application;
Arc firstArc = Arc.Create(arcCenter, 1.5, 0, Math.PI, XYZ.BasisX, XYZ.BasisY);
Arc secondArc = Arc.Create(arcCenter, 1.5, Math.PI, 2 * Math.PI, XYZ.BasisX, XYZ.BasisY);

cylinderLoop.Append(firstArc);
cylinderLoop.Append(secondArc);

List<CurveLoop> singleLoop = new List<CurveLoop>();
singleLoop.Add(cylinderLoop);

Solid proximityCylinder = GeometryCreationUtilities.CreateExtrusionGeometry(singleLoop, XYZ.BasisZ, height);

ブール演算

BooleanOperationsUtils クラスは、一対のソリッド ジオメトリ オブジェクトを組み合わせるためのメソッドを提供します。

ExecuteBooleanOperation()メソッドは、入力ソリッドのコピーを取り、結果として新しいソリッドを作成します。最初の引数は任意のソリッドになり、Revit 要素から直接取得、または GeometryCreationUtils などの別の演算から作成します。

メソッド ExecuteBooleanOperationModifyingOriginalSolid()は、最初の入力ソリッドでブール演算を直接実行します。最初の入力は Revit 要素から直接取得されていないソリッドである必要があります。プロパティ GeometryObject.IsElementGeometry は、ソリッドがこのメソッドの入力として適切であるかどうかを確認できます。

両方のメソッドのオプションには、演算タイプである Union、Difference、または Intersect が含まれます。次の例では、2 つのソリッドの交点を取得し、体積を検索する方法を示します。

コード領域: ソリッドの交点のボリューム

private void ComputeIntersectionVolume(Solid solidA, Solid solidB)

{

    Solid intersection = BooleanOperationsUtils.ExecuteBooleanOperation(solidA, solidB, BooleanOperationsType.Intersect);

    double volumeOfIntersection = intersection.Volume;

}