派生自 AcDbAssocDependency 类的对象用于表示连接信息。每个依赖项表示操作依赖于对象属性的信息。依赖项由操作拥有,并作为持久性反应器附加到依赖项对象。 操作可以筛选出依赖项属性中不相关的更改,并仅通知相关更改。例如,如果某个操作对曲线图元的起点位置感兴趣,并且曲线图元发生更改,使得曲线的终点发生变化,但起点保持不变,则依赖关系可以忽略来自曲线图元的通知。 依赖关系使用 AcDbAssocDependency::isRelevantChange() 谓词来决定对象更改是否被视为相关。默认情况下,依赖项将此谓词委托给 AcDbAssocAction::isRelevantDependencyChange(),以便拥有依赖项的操作可以决定操作想要认为相关的对象更改以及它想要忽略的对象更改例如。 依赖项可以是只读、只写或读写,具体取决于拥有依赖项的操作是使用对象的属性但不修改对象,还是更改对象的属性但不使用它,还是两者兼而有之。 只读依赖项的一个示例是,当 AcDbAssocVariable 中的算术表达式引用其他变量并因此依赖于其他变量的值时。该变量使用引用变量的值,但不修改它们。 仅写依赖项的一个示例是,当实体拉伸操作从拉伸配置文件和拉伸矢量设置 AcDb3dSolid 实体的内容时。此操作不使用 AcDb3dSolid 实体的先前内容,它仅设置其新内容。 读写依赖关系的一个示例是依赖于约束曲线实体的 AcDbAssoc2dConstraintGroup 操作。它使用这些曲线图元的初始坐标,然后更新它们以满足约束。 在同一对象上的所有依赖项之间建立顺序。此顺序非常重要,它指定依赖于同一对象的操作的顺序。例如,有操作 A1 和 A2;A1 在对象上具有仅写或读写依赖项 D1,A2 对同一对象具有依赖项 D2;此外,按照既定顺序,D1 排在 D2 之前。在这种情况下,必须首先评估 A1,修改对象的属性;只有在该操作可以后,才能评估 A2。 AcDbAssocDependency::setOrder() 方法应该用于指定对象上依赖项的顺序。订单值越低,订单中的依赖关系就越高。当依赖项附加到对象时,通过调用 attachToObject() 方法,根据设置的顺序值对其进行排序。如果有多个具有相同顺序值的依赖项,则依赖项将根据它们附加到对象的顺序对依赖项进行额外排序。 AcDbAssocDependency 还可能依赖于嵌套路径中另一个对象中的对象。例如,它可能依赖于 AcDbBlockTableRecord 中由 AcDbBlockReference 引用的曲线实体。这种依赖关系被置于顶级对象(在本例中为 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, 2025-1-8 19:11
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.