在做ObjectArx开发时,常会用到自定义实体。
在某些场景需要用到自定义实体存储业务数据,当业务数据比较大时(超过1M),对实体进行写操作会影响运行效率。此时就需要考虑其他方法。对于云产品而言首选数据库,本文讨论的是单机版。
CAD为每个实体提供了扩展词典,参照以下三个方法:
Acad::ErrorStatus createExtensionDictionary();
AcDbObjectId extensionDictionary() const;
Acad::ErrorStatus releaseExtensionDictionary();
大致流程如下:
- 编写自定义对象(继承AcDbObject),存储业务数据。根据数据量大小,可以拆分成多个自定义对象
- 自定义对象提供GetGuid方法,作为词典的key,用于存储
- 新建实体时,通过createExtensionDictionary,将自定义对象存入AcDbDictionary中
- 提供Get方法获取数据
- 修改数据,通过extensionDictionary,获取对应的数据对象,进行修改。
注意事项:
由于扩展数据不是实体的数据,所以在进行修改时要调用扩展对象的assertWriteEnabled,否则撤销还原会出错