第 1 部分,共 2 部分:使用几何体剖切回调

此前,我们在博客中演示了自定义剖切几何体和裁剪几何体输出行为的能力。OdGiSectionGeometryOutput 和 OdGiCuttedGeometryOutput 接口包含控制剖切和裁剪几何体输出行为的基本功能。这些功能仅限于更改几何体属性,例如颜色、透明度、材质等。如果此基本功能不足,客户端应用程序可以覆盖这些类中的任何几何体输出方法并实现其自己的几何体输出逻辑。

在实体矢量化期间,可以使用 OdGiGeometry::pushModelTransform 方法将几何体剖切与裁剪一起设置。但通常几何体剖切是根据整个视口使用 OdGsView::setViewport3dClipping 方法设置的,因此此裁剪应用于图形场景中的所有对象。这是一个简单的解决方案,但如果图形场景包含应具有除输出剖切或裁剪几何体之外的行为的对象,该怎么办?根据场景中的每个对象设置具有各种输出几何体行为的单独裁剪边界并不是一个非常快速的解决方案。为了简化处理具有不同剖切或裁剪几何体行为的对象,有一个特殊的回调方法可以为图形场景中的每个可剖切对象调用。

OdGiClippedGeometryOutput 接口
virtual void OdGiClippedGeometryOutput::setupDrawableProcessing();

可以为 OdGiSectionGeometryOutput 和 OdGiCuttedGeometryOutput 类覆盖此方法,以设置每个对象的正确几何体输出设置。如果您出于某种原因已经使用自己的继承类,这是一种简单的方法。但是 OdGiClippedGeometryOutput 接口提供了一种更简单的方法来处理回调,而无需覆盖 setupDrawableProcessing() 方法。

OdGiClippedGeometryOutputCallback 接口类包含一个必须由继承类覆盖的单一方法:

virtual bool clippedGeometryOutputCallbackProc(OdGiClippedGeometryOutput &pGeomOutput, const OdGiConveyorContext &pDrawContext) = 0;

在此方法中,客户端代码可以从 pDrawContext 调用数据以检查当前可绘制对象,并将必要的设置应用于 pGeomOutput。返回 true 以处理剖切或裁剪几何体输出,或返回 false 以禁用输出几何体处理。

OdGiConveyorContext 类的以下方法有助于分析可绘制对象:

  • const OdGiDrawable* currentDrawable() const — 获取当前正在矢量化的可绘制对象。
  • const OdGiPathNode* currentGiPath() const — 获取直到当前可绘制对象的整个可绘制对象路径(如果几何体行为不仅取决于当前可绘制对象,还取决于其父可绘制对象,则此方法很有用)。
  • const OdGiViewport* giViewport() const — 返回当前视口设置,如果几何体输出行为取决于观察方向等,则此方法可能很有用。

最后,可以使用 setGeometryProcessingCallback(OdGiClippedGeometryOutputCallback *pCallback) 方法将具有回调实现的构造类设置为您的 OdGiSectionGeometryOutput 或 OdGiCuttedGeometryOutput 类。之后,OdGiClippedGeometryOutput::setupDrawableProcessing() 方法的默认实现会为您调用 setGeometryProcessingCallback() 方法。

请关注博客上的本系列下一篇文章,其中将详细介绍使用几何体剖切回调的示例。

今天就开始行动

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

免费试用