这几天都是学习一些AutoCAD和ObjectARX的理论知识,主要目的是和它们混个脸熟,了解它们的过去和现在,学习它们的组织结构,为以后做需求打好基础。
AutoCAD数据库用来存储组成AutoCAD图的对象和实体。基本的数据库对象是实体、符号表和词典。实体是在AutoCAD图内部表示图的一种特殊数据库对象,线、圆、弧、文本、实心体、区域、复合线和椭圆都是实体,用户可以在屏幕上看见实体并能对其进行操作。符号表和词典是用于存储数据库对象的容器。层表(AcDbLayerTable)是符号表之一,它包含层表记录,块表(AcDbBlockTable)也是一个符号表,包含块表记录。所有AutoCAD实体都属于块表记录。词典为存储对象提供了比符号表更加普通的容器。
在AutoCAD中创建的对象被添加到数据库对应的容器对象中,实体被添加到块表的记录中,符号表记录被添加相应的符号表中,所有其他对象被添加到命名对象词典中,或添加到其他对象拥有的对象(拥有其他对象的对象最终属于命名对象词典)中,或添加到扩充词典中。
数据库中包含一套(九个)符号表和一个命名对象词典,表包括块表、层表和线型表。块表最初包含三个记录,一个记录叫做*MODEL_SPACE, 两个图纸空间记录叫作*PAPER_SPACE和*PAPER_SPACE0。这些块表记录表示模型空间和两个预先确定的图纸空间布局。层表最初包含一个0层记录。线型表最初包含CONTINUOUS线型。命名对象词典是当数据库被创建后,命名对象词典就已经包含四个数据库词典:GROUP(组)词典、MLINE类型词典、布局词典和绘图式样名词典,在MLINE类型词典内,总有STANDARD类型。
根据上面的图,在AutoCAD中创建线,并将其添加到模型空间块表记录中需要以下几步:
1、 建立线对象(new AcDbLine)。
2、 通过acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBT)返回当前图中块表对象指针。
3、 然后通过得到的块表以写模式打开模型空间块表记录,同时把块表对象关闭(不用就马上关闭)。
4、 通过块表记录的appendAcDbEntity把新建立的线实体追加到记录中去,同时返回新添加线的实体ID。
5、 关闭块记录和线对象。
同理,Circle也是这样操作的。
今天主要了解AutoCAD中怎么创建实体对象,以及AutoCAD是怎样存放的。由于时间原因,创建层和添加组就不说了,都比较类似的。