# 0. 引言

前面记录了一堆东西,涉及到AutoCAD .NET中的各种对象,感觉如果不整理一些还是挺乱的,善于总结是好习惯!

在CAD中其实里面的所有的内容都可以看成是对象,不然C#这种面向对象的语言也不会在这里如鱼得水。

其实每一个CAD文件(DWG或者是DXF)都对应了一个数据库(Database),之前也了解了,如果需要对CAD文件进行操作,先得声明一个数据库对象,也就是是数据库本身也就是一个对象

Database db = HostApplicationServices.WorkingDatabase;

这样才能拿到这个数据库中的的各种组成部分,包括点、多段线、文字、图层、颜色、线型,这些都是对象,总结下来一句话:“一切皆对象”,即使是CAD图形本身和AutoCAD引用程序本身都是一个对象。

对象真多!能不能给自己也new一个~~

# 1. AutoCAD .NET 中的对象层级结构

这个东东其实前面已经提过好几遍了,就是没有单独整理一下,这些底层的东西最好是搞清楚,不然后面脑袋里会乱成浆糊

总结而言,这个Application对象就是AutoCAD .NET API的根对象,我们通过这个根对象来访问CAD主窗口和打开图形文件,并访问图形文件中的各个对象。当然,上面只列出了AutoCAD .NET API中的部分对象。

# 2. Application对象层级结构

Application对象下面的属性就是上图所示,图稍微有点长,看不懂没关系,了解大致框架

DocumentManger属性用于返回DocumentCollection对象,以便提供访问当前打开AutoCAD图形的功能,并允许你打开、保存、创建图形文件。MainWindow属性则允许访问引用程序的名称、主窗口大小、位置以及可见性等。其它的属性提供了访问应用程序特有的数据功能,如信息中心InfoCenter、主窗口、状态栏等。

# 3. Document对象层级结构

Document对象是DocumentCollection对象的一部分,本质上就是一个CAD图形,提供了访问与Document对象想相关联的Database对象的功能。

Doucument对象和Database对象一同提供了对编辑器(Editor)、事务管理器(TransactionManger)对象、图形窗口以及图形状态栏的访问。

Editor对象也就是之前我们用来和CAD窗口交互的那个东东,它提供了获取拥护输入的功能,你的输入形式可以是一个点或者说键入的一个字串和数值。

而事务管理器对象(TransactionManger)则用来管理多个数据库对象,事务可以嵌套。这就是我们之前要在数据库操作的时候,每次都要打开事务处理,最后提交事务处理的缘故。

# 4.Database 对象层级结构

Database对象包含AutoCAD所有的图形对象和大部分的非图形对象,其中就包含实体对象、符号表、命名字典等

这里的实体对象就是之前我们涉及的那些:直线、圆、文字、填充、多段线等

符号表和字典对象则提供对非图形对象的访问,例如:块、图层、线型、布局等。

在CAD中每一个图形都包含九个固定的符号表,不能往数据库中添加新的符号表。

每种符号表智能存储特定类型的对象,如块表存储块表记录。

而字典则是一种通用的容器,可存储任何类型的对象。

# 5.图形对象和非图形对象

这个我们之前文章一直涉及,这里也在此提及,毕竟CAD里面图形就是很基本也很重要的一个东东。

图形对象也就是图元,之前列举的那一堆,多段线、文字、各种图形。

非图形对象则是属于图形中的一部分不可见的对象,如图层(Layers)、线型(Linetypes)、标注样式(DimStyles)、表样式(TableStyle)。

就总结到这,有时候其实我们其实不是很关注这些基本内容,一上来就是代码,就是实现目的,怎么来的可能不是很清楚,未免有点本末倒置。

代码的最终目的是效率提升没错,但也别忽略基本的东西。

C#之CAD二次开发相关推荐

  1. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

  2. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题

    CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...

  3. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

  4. CAD 二次开发 图层操作(3)取得指定图层下的所有对象id

    对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作.下面的方法,即可实现获取指定图层名称下的所有实体ID. 输入参数为图层名称: 返回值为:对象主键集合 ...

  5. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  6. c# cad二次开发 ribbon界面 给CAD加个菜单栏

    c# cad二次开发 ribbon界面 给CAD加个菜单栏 using System; using System.Collections.Generic; using System.Text; usi ...

  7. CAD二次开发:用C#在AutoCAD中插入栅格图像

    CAD二次开发:用C#在AutoCAD中插入栅格图像 using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationService ...

  8. CAD二次开发资料汇总

    欢迎加入建筑信息化开发交流群,获取开发资料 群号:711844216 一.背景 对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找 ...

  9. C#之CAD二次开发 (11) 文本对象

    # 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...

  10. cad二次开发——自动运行dll,加载菜单(收集)

    1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...

最新文章

  1. 例题5-8 Unixls命令(Unix ls,UVa400)
  2. [BZOJ4557][JLOI2016]侦查守卫
  3. sqlite3 表里插入系统时间(时间戳)
  4. excel中python是什么意思_python在excel中的应用是什么
  5. 音视频技术开发周刊 94期
  6. Asp.Net 章节验证控件章节测试题
  7. Angular NgModule 中的 declarations 和 exports定义
  8. 晴天php下载,x.php · 一步晴天/smart - Gitee.com
  9. 修改TFS与本地源代码映射路径
  10. Leangoo到底好在哪里?
  11. 无界面和应用图标的应用程序
  12. scala中内部函数的使用
  13. 纯js实现类似淘宝星级评分功能
  14. Unity导出exe时遇到的两个问题
  15. [观点]国难当头,为什么赵王还要杀掉李牧?因为人性最爱反噬没格局的人
  16. 服务器ubuntu系统调节亮度,ubuntu 设置显示器的亮度
  17. 用java实现编译器之代码实现Thompson构造:在简单NFA的基础上构造更复杂的NFA
  18. NVIDIA Jetson TK1学习与开发(四):一些细节问题
  19. python接入excel_在abaqus中使用python连接excel
  20. 电子学会图形化scratch编程等级考试二级真题答案解析(选择题)2020-9A卷

热门文章

  1. 2023年湖北中级工程师在哪里评审?秋禾火
  2. php mysql摄影网_图片分享网站
  3. syst3md矿机病毒及解决办法
  4. 2021-2027全球与中国飞机交流座椅内电源市场现状及未来发展趋势
  5. Jittor(计图)深度学习框架安装
  6. Thymeleaf教程(10分钟入门)
  7. 人工智能的过去与未来——萌芽
  8. MySQL的事务实现原理
  9. 关于联想拯救者 安装Ubuntu18.04单系统时遇到坑的通用解决方法
  10. LeetCode6Z字形转换