在上一节探讨数据库的时候已经了解到,符号表是AutoCAD中一种容器,保存了对应的符号表记录,用来实现AutoCAD中的某种对象:
符号表名 | 符号表功能 |
AcDbViewTable (视图表) | 适用于 AcDbViewTableRecord 类,表示在数据库中存储的视图。 视图与CAD的"VIEW"命令相关联 |
AcDbViewportTable (视口表) | 适用于 AcDbViewportTableRecord 类,表示在CAD中当前系统变 量TILEMODE的值为1时的视口设置。视口配置由CAD的 VPORTS 命令创建。不要和 MVIEW 命令混淆,当系统变量 TILEMODE 的 值为0是,该命令创建视口实体。 |
AcDbLinetypeTable (线性表) | 适用于 AcDbLinetypeTableRecord 类,表示图形数据库中的线性。 |
AcDbLayerTable (层表) | 适用于 AcDbLayerTableRecord类,表示图层。 |
AcDbTextStyleTable (文字样式表) | 适用于 AcDbTextStyleTable 类,表示文字样式。 |
AcDbUCSTable (用户坐标系表) | 适用于 AcDbUCSTableRecord 类,表示图形数据库中的存储的用户 坐标系。 |
AcDbRegAppTable (应用程序名注册表) | 适用于 AcDbRegAppTableRecord 类,表示为图形数据库中对象的扩 展实体数据而注册的应用程序名。 |
AcDbDimStyleTable (尺寸标注样式表) | 适用于 AcDbDimStyleTableRecord 类,表示图形数据库中的尺寸标注 样式。 |
AcDbBlockTable (块表) | 适用于 AcDbDimStyleTableRecord 类,表示图形数据库中定义的块。 此表含有两个非常重要的记录:模型空间和图纸空间。所有的实体(可 见对象)均防御块表AcDbBlockTable中。 |
每一个符号表都有一个相应的符号表记录,用来存储符号表中的记录的实体。
AcDbBlockTable AcDbBlockTableRecord (块表)
AcDbDimStyleTable AcDbDimStyleTableRecord (尺寸样式表)
AcDbLayerTable AcDbLayerTableRecord (层表)
AcDbLinetypeTable AcDbLinetypeTableRecord (线型表)
AcDbRegAppTable AcDbRegAppTableRecord (程序注册表)
AcDbTextStyleTable AcDbTextStyleTableRecord (文字样式表)
AcDbUCSTable AcDbUCSTableRecord (用户坐标表)
AcDbViewportTable AcDbViewportTableRecord (视口表)
AcDbViewTable AcDbViewTableRecord (视图表)
从数据库获取的各种符号表的方法大同小异,处理可以使用getSymbolTable函数,还可以根据符号表的具体类型调用相应的函数,如获得块表可以使用 getBlockTable函数,获取层表可以调用 getLayerTable函数。
Acad::ErrorStatus getSymbolTable(AcDbXXXTable*& pTable,AcDb::OpenMode mode);
Acad::ErrorStatus getXXXTable(AcDbXXXTable*& pTable,AcDb::OpenMode mode);
注: XXX表示你想要获取的具体的表, mode 是表的打开方式,读或者写。
所有的符号表都继承自AcDbSymbolTable类, 该类包含如下函数
add: 想记录符号表中添加一条新的记录,各种符号表实现的形式略不一样。
Acad::ErrorStatus AcDbXXXTable::add(AcDbXXXTableRecord* pRecord); //项XXX表添加一条记录
Acad::ErrorStatus AcDbXXXTable::add(AcDbObjectID& objectID,AcDbXXXTableRecord* pRecord);
getAt: 获取符号表中特定名称的记录的指针或ID。
Acad::ErrorStatus AcDbXXXTable::getAt(const char* pEntityName,AcDb::OpenMode mode,
AcDbXXXTableRecord*& precord,Adesk::BooleanOpenErasedRecord=Adesk::kFalse);
Acad::ErrorStatus AcDbXXXTable::getAt(const char* pEntityName,AcDbObjectId& recorded,
AcDbXXXTableRecord*& precord,Adesk::Boolean openErasedRecord=Adesk::kFalse);
has: 判断符号表中是否包含特定的记录。
Acad::ErrorStatus AcDbXXXTable::has(const char* pEntityName)const;
newIterator: 创建一个符号表遍历器,访问符号表中所有的记录。
Acad::ErrorStatus AcDbXXXTable::newIterator(AcDbXXXIterator*& pIterator,
Adesk::Boolean atBeginning=Adesk::kTrue,Adesk::Boolean skipErased = Adesk::kTrue)const;
块表中包含有两天特殊的记录:*MODEL_SPACE(模型空间)和*PAPER_SPACE(图纸空间)。所有的AutoCAD实体均属于这两个记录。