欢迎来到我的博客
Civil 3D开发与应用,欢迎加入QQ群:484124761
AutoCAD开发,欢迎加入QQ群:193522571

了解AutoCAD对象层次结构 —— 2 ——文档

再次想象另外一个场景:启动AutoCAD程序后,您新建了两个.dwg文件,也就是说创建了两个文档(Document)对象。将窗口进行层叠,您看到的窗口应该与下图类似:

 

 

图 4‑3

如何访问这些文档呢?还是让我们通过简单的代码来了解一下吧:

利用向导创建项目,在MyCommands类中添加以下代码,之后编译、加载并运行命令。

01 [CommandMethod("MyGroup", "ListDocs", CommandFlags.Modal)]

02 public void ListDocs()

03 {

04     DocumentCollection docs = Application.DocumentManager;               //获取文档集合

05     Document doc = docs.MdiActiveDocument;                   //获取活动文档

06     Editor ed = doc.Editor;                                              //获取编辑器

07     ed.WriteMessage("\n文档数量:\t{0}", docs.Count);                    //输出文档数量

08     ed.WriteMessage("\n活动文档为:\t{0}", doc.Name);         //输出活动文档名称

09     IEnumerator enumerator = docs.GetEnumerator();             //枚举器

10     while (enumerator.MoveNext())                                  //遍历每个文档

11     {

12         doc = enumerator.Current as Document;

13         ed.WriteMessage("\n文档名称:\t{0}", doc.Name);    //输出每个文档名称

14     }

15 }

上一小节中所说的文档管理员(DocumentManager)类型为DocumentCollection,也就是一个Document集合。代码第4行首先获取这个文档集合。接下来获取活动文档,我们要通过活动文档的编辑器(或者说命令行)中输出一些信息。代码第9-14行,遍历每个文档,并将其名称输出。

本书中各种操作基本都是针对活动文档的,因此经常使用MdiActiveDocument属性(代码第5行)来获取活动文档,这种用法在本书中出现的概率极高。

如果您对如何遍历集合尚不清楚,可以再次查看3.6 节中相关内容。

当我们运行上述代码后,按F2键,打开文本窗口,应该可以看到类似下图结果。如果您创建更多文档,显示的信息行数应该有所不同。注意下图文本窗口标题中的Drawing.dwg,如果您切换活动文档,该名称是会随着改变的,注意这个问题,有助于理解本节后续的内容。

 

 

图 4‑4

在获取指定的文档后,我们就可以访问文档中的各种对象,问题又来了,文档中又包含哪些对象呢?我们可以通过下图来进行了解。

 

 

图 4‑5

上图中列出来文档所包含的7中对象,其中的Database(数据库)、Editor(编辑器)已经出现在前面的代码中,另外一个对象Transaction Manager(事务管理员),这3种对象在本书中出现次数是最多的,其余4种对象很少涉及。

Database:存储数据的仓库,我们画的每一条线、圆弧、文本等组成图纸的各种元素,以及其他看不到的元素(例如图层)都存储在这里,具体内容将在下一小节详述。

Editor:人机交互的场所,数据的输入、信息的输出都可以在这里进行。编辑器是文档的一个组成部分,而不是直接隶属于应用程序。现在您可以启动应用程序,打开一个文档,我们可以看到编辑器(命令行);如果关闭文档,只有开始页面的状态,我们将无法看到编辑器,按下F2也无法打开文本窗口。

Transaction Manager:事务管理员当然是来管理各项事务的。问题出在什么是事务?事务是个比较抽象的概念,对于初学者来说是个难点,将在后续的小节中详述。

我们再来回顾一下本小节的内容。一个AutoCAD应用程序可以打开多个.dwg文件,每个.dwg文件也就是一个文档,这些文档由DocumentManager来统一管理;可以通过MdiActiveDocument来访问活动文档;每个文档都由数据库、编辑器、事务管理员等对象组成。

posted @ 2017-05-27 08:58  david96007  阅读(1489)  评论(0编辑  收藏  举报