代表协会
派生自 AcDbAssocDependency 类的对象用于表示连接信息。每个依赖项表示操作依赖于对象属性的信息。依赖关系由操作拥有,并作为持久反应器附加到依赖对象。 操作可以筛选出依赖项属性中不相关的更改,并仅通知相关更改。例如,如果操作对曲线图元的起点位置感兴趣,并且曲线图元发生更改,因此曲线的终点发生变化,但起点保持不变,则依赖关系可以忽略来自曲线图元的通知。 依赖项使用 AcDbAssocDependency::isRelevantChange() 谓词来决定是否将对象更改视为相关。默认情况下,依赖项将此谓词委托给 AcDbAssocAction::isRelevantDependencyChange(),以便拥有依赖项的操作可以决定操作要考虑相关的对象更改以及要忽略哪些对象更改例如。 依赖项可以是只读、只写或读写,具体取决于拥有依赖项的操作是否使用对象的属性但不修改它,更改对象的属性但不使用它,或两者兼而有之。 只读依赖关系的一个示例是 AcDbAssocVariable 中的算术表达式引用其他变量,因此依赖于其他变量的值。该变量使用引用变量的值,但不修改它们。 仅写依赖关系的一个示例是,当实体拉伸操作从拉伸配置文件和拉伸向量设置 AcDb3dSolid 实体的内容时。此操作不使用 AcDb3dSolid 实体的先前内容,它仅设置其新内容。 读取写入依赖关系的一个示例是,当 AcDbAssoc2dConstraintGroup 操作依赖于约束曲线实体时。它使用这些曲线图元的初始坐标,然后更新它们以满足约束条件。 在同一对象的所有依赖项之间建立顺序。此顺序非常重要,它指定了依赖于同一对象的操作的顺序。例如,有动作 A1 和 A2;A1 对对象具有只写或读写依赖关系 D1,A2 对同一对象具有依赖关系 D2;此外,按照既定顺序,D1 位于 D2 之前。在这种情况下,必须首先计算 A1,修改对象的属性;只有在该操作可以之后才能评估 A2。 AcDbAssocDependency::setOrder() 方法应用于指定对象的依赖项顺序。订单值越低,订单中的依赖关系就越高。当依赖项附加到对象时,通过调用 attachToObject() 方法,它会根据设置的顺序值进行排序。如果存在多个具有相同顺序值的依赖项,则根据依赖项附加到对象的顺序对依赖项进行额外排序。 AcDbAssocDependency 还可能依赖于嵌套路径上另一个对象中的对象。例如,它可能依赖于 AcDbBlockReference 引用的 AcDbBlockTableRecord 中的曲线实体。这种依赖关系被置于顶级对象的依赖关系顺序中,在本例中为 AcDbBlockReference,但它也作为持久反应器附加到路径上的所有实体,在本例中附加到曲线实体。AcDbCompoundObjectId 类型的对象用于标识通过路径访问的实体。 应用程序还可以通过派生自 AcDbAssocDependencyBody 基类来派生自己的专用依赖项类;AcDbAssocDependency 成为硬所有者。因此,可以更好地处理无法加载自定义应用程序的情况。在这种情况下,AcDbAssocDependency 对象仍然存在且正常运行,并且有关哪些操作依赖于哪些对象的连接信息仍然可用,并且尽管 AcDbAssocDependencyBody 对象确实成为代理,但只有自定义功能不可用。这类似于 AcDbAssocAction 和 AcDbAssocActionBody 对象之间的关系。 专用依赖类可以直接使用基 AcDbAssocDependency 类。但是,有一些派生的依赖项类允许建立对对象特定属性的依赖关系,并筛选与依赖项无关的对象更改。 a) AcDbAssocValueDependency 对提供简单命名值(如双精度、整数、点或字符串)的对象建立依赖关系。这些对象通过公开 AcDbAssocValueProviderPE 协议扩展来显示其命名属性。AcDbAssocValueDependency 的明显客户端是 AcDbAssocVariable 操作,该操作可能包含引用其他变量的表达式,或者通常包含公开 AcDbAssocValueProviderPE 协议扩展的任何对象。然后,AcDbAssocVariable 拥有这些对象的 AcDbAssocValueDependencies。 b) AcDbAssocGeomDependency 建立对几何实体的拓扑子实体(面、边、顶点)的依赖关系。实体通过公开 AcDbAssocPersSubentIdPE 协议扩展来显示其子实体。AcDbAssocGeomDependency 的明显客户端是 AcDbAssoc2dConstraintGroup 操作,该操作约束 AutoCAD 图元的子图元(如直线、圆弧、圆和多段线),或者通常限制公开 AcDbAssocPersSubentIdPE 协议扩展的任何对象。 父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 12:42
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.