AcGi 库定义了一组接口,对象可以通过这些接口将自身呈现到底层图形系统。本节讨论 AcGi 在 AutoCAD 环境中的工作方式。但是,对于实现 AcGi 接口的其他系统,它的工作方式类似。 AcGi 库使实体能够查询有关再生过程的信息,并使用几何类详细说明一组基元。对 AcGi 的访问发生在基类的以下三个成员函数中:AcGiDrawable ACDB_PORT ADESK_SEALED_VIRTUAL Adesk::Boolean worldDraw( AcGiWorldDraw * wd); ACDB_PORT ADESK_SEALED_VIRTUAL void viewportDraw( AcGiViewportDraw * vd); ACDB_PORT ADESK_SEALED_VIRTUAL Adesk::UInt32 setAttributes( AcGiDrawableTraits * traits); AcDbEntity从中继承这些函数。AcGiDrawable 这些函数中的每一个,worldDraw(),viewportDraw()和setAttributes(),分别有一个非密封的对应项,subWorldDraw,subViewportDraw和subSetAttributes()。 virtual Adesk::Boolean subWorldDraw( AcGiWorldDraw * wd) = 0; virtual void subViewportDraw( AcGiViewportDraw * vd) = 0; virtual Adesk::UInt32 subSetAttributes( AcGiDrawableTraits * traits) = 0; AutoCAD 在密封版本上实现以提供基本的通用功能,然后调用非密封版本以获取子类型特定的功能。通常,在实现自定义实体时,您将重写这些非密封函数并提供自己的实现。 当AutoCAD需要重新生成图形以显示图元时,它将按以下方式调用密封函数: AcGiDrawable *pDrawable; pDrawable->setAttributes(pDt); if (!pDrawable->worldDraw(pWd)) { for each viewport pDrawable->viewportDraw(pVd); } 对于自定义图元,如果已覆盖非密封函数,AutoCAD 将传入相应的 AcGi 对象。这使 AutoCAD 能够像显示内置图元一样显示自定义图元。 subSetAttributes() 函数初始化实体的属性,例如颜色、图层和线型。该函数构建实体图形表示的一部分,该部分可以独立于任何特定的模型空间视图或图纸空间视口上下文进行指定。然后,该函数构建实体图形的视图相关部分。如果实体的任何图形依赖于视图,则必须返回并且必须实现。相反,如果实体没有依赖于视图的图形,则必须返回并且自定义实体不实现。subWorldDraw()subViewportDraw()suWorldDraw()kFalsesuViewportDraw()subWorldDraw()kTruesubViewportDraw() 下图显示了重新生成具有两个视口的 AutoCAD 图形的顺序。在此示例中,图形包含两个块,即块 1 和块 2。块 1 被分解为它的组成部分,一条线和一个圆。块 2 由自定义实体组成。自定义图元被细分以显示生成绘图时调用函数的顺序: 对象提供了一个公共上下文,可以在再生过程的所有部分访问该上下文。它提供有关再生当前状态的信息。例如,您可以在再生过程中随时从对象获取当前数据库。AcGiContextAcGiContext AcGi 的类层次结构如下所示: 基类封装了 and 的通用功能。基类封装了 and 的通用功能。如果需要,这些基类允许您编写可以处理这两种情况的更通用的代码。AcGiCommonDrawAcGiViewportDrawAcGiWorldDrawAcGiGeometryAcGiViewportGeometryAcGiWorldGeometry |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )
GMT+8, 2024-5-19 13:11
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.