AcGi概览
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 的类层次结构如下: 基类封装了 和 的通用功能。基类封装了 和 的通用功能。如果需要,这些基类允许您编写可以处理这两种情况的更通用的代码。AcGiCommonDrawAcGiViewportDrawAcGiWorldDrawAcGiGeometryAcGiViewportGeometryAcGiWorldGeometry 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-3-5 18:04
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.