在 BimRv SDK 中使用地形表面(第 1 部分,共 3 部分)

在 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(); — 将数据应用于地形表面。

本系列的下一篇文章将展示创建和修改地形表面的代码示例。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用