BimRv SDKでは、TopographySurface要素は、任意の境界を持つことができる点の集合に基づいて、実際の地形サーフェスを表します。
TopographySurface要素はOdBmSiteSurfaceクラスによって表されます。サーフェス点のセットは他のサーフェスデータに影響を与え、複数のメソッドによって管理されるため、サーフェスデータの整合性を維持するために、BimRv APIはヘルパークラスOdBmSiteSurfaceHelperを提供します。
地形サーフェスの作成
他の要素と同様に、OdBmSiteSurface::CreateObject()メソッドを呼び出すことで地形サーフェスを作成できます。
サーフェスデータへのアクセスと編集
前述のとおり、データ整合性の要件により、OdBmSiteSurfaceは取得メソッドのみを提供します。サーフェスデータへの変更は、OdBmSiteSurfaceHelperクラスを使用して行う必要があります。ヘルパークラスは、自身のデータを操作し、関連する地形サーフェスに変更を適用するために使用できます。
取得メソッド (OdBmSiteSurfaceクラスと同様):
- bool arePointsEditable(); — 地形サーフェスの点が個別に編集可能な場合はtrueを返します。
- bool containsPoint(const OdGePoint3d& point); — 指定された点が地形サーフェスに存在する場合はtrueを返し、それ以外の場合はfalseを返します。
- OdGePoint3dArray findPoints(const OdGeExtents3d& boundingBox); — 入力されたバウンディングボックス内にある地形サーフェスの点のみを返します。
- OdGePoint3dArray getBoundaryPoints(); — 地形サーフェスの境界上にある点を返します。
- OdGePoint3dArray getInteriorPoints(); — 境界点ではない地形サーフェスの点を返します。
- OdGePoint3dArray getPoints(); — この地形サーフェスを定義する点を返します。
サーフェス点とファセットの設定
点とファセットで作成された地形サーフェスは変更できません。点のみで作成されたサーフェスは編集可能であり、これらのサーフェスの点を追加、削除、操作できます。
地形サーフェスは、OdBmSiteSurfaceHalper::setSurfaceメソッドを使用して設定できます。このメソッドを使用すると、点に基づいて、点または点とファセットによってサーフェスを設定できます。
- OdResult setSurface(const OdGePoint3dArray& points, OdArray
& facets); — 点とファセットから新しい地形サーフェス要素を作成します。ファセットで作成されたサーフェスは編集できません。 - OdResult setSurface(const OdGePoint3dArray& points); — 点から新しい地形サーフェス要素を作成します。このサーフェスの点は編集可能です。
サーフェス点の変更
地形サーフェスの点は、これらのメソッドを使用して変更できます。
- OdResult addPoints(const OdGePoint3dArray& points); — 地形サーフェスに点を追加します。地形サーフェスに同じXY位置の点が既に含まれている場合、eInvalidInputを返します。それ以外の場合はeOkを返します。入力配列が空の場合、eInvalidInputを返します。
- OdResult deletePoints(const OdGePoint3dArray& points); — XYが一致する点が削除されます。地形サーフェスに存在しない点は無視されます。ただし、入力されたすべての点が存在しない場合はeInvalidInputを返します。入力配列が空の場合、eInvalidInputを返します。
- OdResult changePointElevation(const OdGePoint3d& point, double elevValue); — 点の標高値を変更します。入力点が地形サーフェスに存在しない場合、またはelevValueの絶対値が30000フィートを超える場合、eInvalidInputを返します。地形サーフェスの点が編集できない場合、eNotApplicableを返します。
- OdResult changePointsElevation(const OdGePoint3dArray& points, double elevValue); — 複数の点の標高値を変更します。入力されたすべての点が地形サーフェスに存在しない場合、またはelevValueの絶対値が30000フィートを超える場合、eInvalidInputを返します。地形サーフェスの点が編集できない場合、eNotApplicableを返します。
- OdResult movePoint(const OdGePoint3d& moved, const OdGePoint3d& target); — 地形サーフェス内の点を新しい位置に移動します。移動する点が地形サーフェスに存在しない場合、またはターゲットと同じXYを持つ別の点が存在する場合、eInvalidInputを返します。地形サーフェスの点が編集できない場合、eNotApplicableを返します。
- OdResult movePoints(const OdGePoint3dArray& moved, const OdGeVector3d& dir); — 地形サーフェス内の複数の点を新しい位置に移動します。移動するすべての点が地形サーフェスに存在しない場合、またはターゲット点のいずれかと同じXYを持つ別の点が存在する場合、eInvalidInputを返します。地形サーフェスの点が編集できない場合、eNotApplicableを返します。
変更を適用する
ヘルパーが作成された地形サーフェスに変更を適用するには、次のメソッドを使用します。
- void applyToSurface(); — 地形サーフェスにデータを適用します。
このシリーズの次の記事では、地形サーフェスの作成と変更のコード例を示します。