CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

实现自定义行为

2022-12-31 15:57| 发布者: admin| 查看: 1220| 评论: 0|来自: AutoCAD

自定义行为是通过从 AcDbAssocActionBody 类派生具体类并重写必要的方法来实现的。要重写的方法都具有“重写”后缀。不打算重写不带此后缀的方法。必须始终重写的唯一方法是 evaluateOverride() 方法。为每个用作“伪构造函数”的新自定义操作主体类实现 createInstance() 静态方法也是一个好习惯。它应创建自定义操作正文及其父操作的实例,正确设置它们,并将它们添加到数据库和关联网络中。

每次应用程序代码创建操作(拥有自定义操作正文)并将其添加到数据库和关联网络时,建议通过调用 AcDbAssocManager::evaluateTopLevelNetwork() 显式评估顶级网络。评估顶级网络将评估新添加的操作,并且操作将更新它控制的对象(操作具有写入依赖关系的对象)的内容。这样,受控对象将与操作同步。当稍后添加一些其他操作并且这些操作依赖于相同的对象时,这些对象的内容将是它应该的样子。如果不评估新添加的操作,受控对象的内容可能不是预期的内容,并且根据这些对象添加新操作可能会产生意外的结果。

当客户端代码更改操作正文的属性值时,建议调用 AcDbAssocActionBody::setStatus(kChangedDirectAssocStatus),以确保使用新属性值评估拥有操作正文的操作。大多数更改操作正文属性的现有方法会自动设置操作状态,因此通常不需要此显式调用。但是,对于新添加的自定义操作正文方法,此调用是必需的。否则,操作将不知道需要对其进行评估。

表示自定义操作正文数据

自定义操作正文可以以他们认为合适的任何形式保留其数据。但是,AcDbAssocParamBasedActionBody 类以统一且透明的方式表示自定义操作正文类的数据。从此类派生的自定义操作主体可以以派生自 AcDbAssocActionParam 类的操作参数的形式保留其数据。操作参数负责以各种形式表示数据,并在操作正文请求时向操作正文提供当前值。自定义操作正文不需要负责管理其数据和处理序列化或克隆等操作,因为它是由 AcDbAssocParamBasedActionBody 类自动完成的。

AcDbAssocParamBasedActionBody 类还保留数值属性(称为值操作参数),这些属性可以是常量,也可以由引用变量的表达式定义。如果值为常量,则直接保留在值操作参数中。如果它由表达式定义,则会自动创建一个 AcDbAssocVariable(匿名或具有显式名称)来保留表达式。

AcDbAssocParamBasedActionBody 类负责管理这些数值和表达式,包括管理自动创建的 AcDbAssocVariables。自定义操作正文代码不需要执行此操作,只需使用值操作参数来保留其数值属性。

只需键入值操作参数。如果该值表示角度,则角度以弧度为单位。AcDbAssocVariables 以度为单位保存角度。当值操作参数从其关联变量获取角度时,它会将其从度数转换为弧度。如果该值表示距离,则自定义操作正文可能会考虑在某些情况下对其进行缩放,例如缩放操作控制的实体时。

操作参数

操作参数类提供了用于表示自定义操作正文数据的常规高级机制。例如,当操作主体需要保留对实体的边子实体(例如线图元、折线段、实体或曲面的边,或者通常对提供 AcGeCurve3d 几何图形的实体的任何子实体)的引用时,它会从负责保留数据的 AcDbAssocEdgeActionParam 类创建一个对象。每当动作体代码需要当前 AcGeCurve3d 几何图形时,它都会询问 AcDbAssocEdgeActionParam 类,并向客户端代码提供当前几何图形。AcDbAssocEdgeActionParam 类负责以各种方式保存数据,例如通过引用数据库中的 AcDbEntity、引用 AcDbEntity 的边缘子实体或直接保持恒定的 AcGeCurve3d。数据的这种内部表示形式对于自定义操作正文代码是完全透明的。自定义代码无需担心数据的保存方式或从何处获取数据。

关联框架提供了一组预定义的操作参数:

  • AcDbAssocFaceActionParam 保留对实体的人脸子实体的引用,或直接保留人脸几何图形。
  • AcDbAssocEdgeActionParam 保留对实体的边缘子实体的引用,或直接保留 AcGeCurve3d 几何图形。
  • AcDbAssocVertexActionParam 保留对实体的顶点子实体的引用,或直接保留 AcGePoint3d。
  • AcDbAssocPathActionParam 保留一系列 AcDbAssocEdgeActionParams,表示由多个段组成的复合曲线。

应用程序可以通过对其他操作参数进行分组来创建复合操作参数,并使它们由 AcDbAssocCompoundActionParam 对象拥有,或者从基本 AcDbAssocActionParam 类派生自己的操作参数类。


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 12:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部