探秘AutoCAD中的实体关联


创建一个圆AcDbCircle和直线AcDbLine,创建一个圆半径与直线长度的关联。通过ARXDBG分析如下:

AcDbCircle,句柄293,同时添加一个指向依赖AcDbAssocDependency的反应器,句柄29C
AcDbLine,句柄294,同时添加一个指向依赖AcDbAssocDependency的反应器,句柄29B
AcDbAssocActionBody,句柄295,这里很有意思,显示的是AcMgAssocActionBody,意思是托管里继承的动作块,同时两个组码1分别保存了库名、类名,(1 . "ztcad.Cad.Controllers.AssocController+MyActionBody") 
(1 . "D:\\ztcad\\bin\\sys19x64\\ztcad.Cad.dll"))
AcDbAssocAction,句柄296,同时添加一个指向网络AcDbAssocNetwork的反应器,句柄298,添加一个指向动作块AcDbAssocActionBody的反应器,句柄295,添加两个指向依赖AcDbAssocDependency的引用,句柄29B、29C
AcDbDictionary,句柄297,同时添加一个指向模型空间的反应器,句柄1CE,添加一个指向网络AcDbAssocNetwork的引用,句柄298
AcDbAssocNetwork,句柄298,同时添加一个指向词典的反应器,句柄297,添加一个指向动作AcDbAssocAction的引用,句柄296
AcDbDictionary,句柄299,同时添加一个指向词典的反应器,句柄C,添加一个指向网络AcDbAssocNetwork的引用,句柄29A
AcDbAssocNetwork,句柄29A,同时添加一个指向词典的反应器,句柄299,添加一个指向网络AcDbAssocNetwork的引用,句柄298
AcDbAssocDependency,句柄29B,同时添加一个指向动作的反应器,句柄296,添加一个指向直线的反应器,句柄294
AcDbAssocDependency,句柄29C,同时添加一个指向动作的反应器,句柄296,添加一个指向圆的反应器,句柄293 

如图:

 我们通过继承ActionBody,最终实现了关联的结构。