一、符号表
1.1 继承关系
- 九大符号表(最重要的是块表AcDbViewTable)
注意:符号表不可删除
- 符号表记录(对应各自符号表)
注意:块表记录可以删除添加
- 符号表迭代器(用于遍历符号表中的记录)
- 符号表操作流程:
- 添加表记录:获取表==> 新建表记录并添加进表==>关闭表==> 将对象添加进表记录==> 关闭表记录
- 修改表记录:获取表==> 通过表(getAt函数)获取表记录==>关闭表==> 遍历(getAt函数)表记录查找==> 修改目标表记录==>关闭表记录
- 删除表记录:获取表==> 通过表(getAt函数)获取表记录==>关闭表==> 遍历(getAt函数)表记录查找==> 删除目标表记录==>关闭表记录
- 查找表记录:获取表==> 通过表(getAt函数)获取表记录==>关闭表==> 遍历(getAt函数)表记录查找并返回=>关闭表记录
二、符号表常用函数
- 符号表类常用函数(AcDbSymbolTable基类方法)
// getAt方法:传入表记录名指针entryName、接收返回表记录指针pRec、 // 打开方式、是否查询已标记为删除的记录 Acad::ErrorStatus getAt (const ACHAR* entryName, AcDbSymbolTableRecord*& pRec, AcDb::OpenMode openMode = AcDb::kForRead, bool openErasedRec = false) const { return this->openAt(entryName, pRec, openMode, openErasedRec); } // getIdAt方法:传入表记录名指针entryName、接收返回数据库对象id recordId、 // 是否查询已标记为删除的记录 ACDBCORE2D_PORT Acad::ErrorStatus getIdAt(const ACHAR* entryName, AcDbObjectId& recordId, bool getErasedRecord = false) const; // getAt方法:传入表记录名指针entryName、接收返回数据库对象id recordId、 // 是否查询已标记为删除的记录 Acad::ErrorStatus getAt (const ACHAR* entryName, AcDbObjectId& recordId, bool getErasedRecord = false) const { return this->getIdAt(entryName, recordId, getErasedRecord); } // 判断表中 记录名称集合中 是否有传入 name指向的 字符串 同名的 字符串 bool has(const ACHAR* name) const { AcDbObjectId id; this->assertReadEnabled(); return this->getIdAt(name, id) == Acad::eOk; }
三、cad表监视器
3.1 效果图
3.2 制作方法
- 进入目录:
C:\objectarx2020\samples\database\ARXDBG
- 打开解决方案:ArxDbg.sln
- 编译:选择release、x64,注意结合1.3.3节调试,
- 加载:在ARXDBG\x64文件夹下找生成的arx文件,在cad中加载
3.3 遇到问题
- 问题:fatal error C1083: 无法打开包括文件: “afxwin.h“
- 原因:没有安装MFC组件
- 修复:
- 步骤一:
- 步骤二:右侧勾选用于x86和x64的Visual C++ MFC
- 步骤一:
- 问题:fatal error C1083: 无法打开包括文件: “new.h”
- 原因:需要包含操作系统的库和头文件
- 修复:
- 步骤一:在项目上右键选属性,修改C++目录
- 步骤二:头文件目录:C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
- 步骤三:库目录:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
注意:10.0.17763.0可能每个电脑不一样,找类似的目录即可