ObjectARX编程(四) --------符号表简述


在上一节探讨数据库的时候已经了解到,符号表是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实体均属于这两个记录。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值