C#之CAD二次开发
# 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二次开发相关推荐
- cad二次开发程序的绿色安装
此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...
- intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题
CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...
- CAD 二次开发 图层操作(1)创建图层
CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...
- CAD 二次开发 图层操作(3)取得指定图层下的所有对象id
对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作.下面的方法,即可实现获取指定图层名称下的所有实体ID. 输入参数为图层名称: 返回值为:对象主键集合 ...
- 关于objectArx /CAD二次开发中“属性块”操作
关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...
- c# cad二次开发 ribbon界面 给CAD加个菜单栏
c# cad二次开发 ribbon界面 给CAD加个菜单栏 using System; using System.Collections.Generic; using System.Text; usi ...
- CAD二次开发:用C#在AutoCAD中插入栅格图像
CAD二次开发:用C#在AutoCAD中插入栅格图像 using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationService ...
- CAD二次开发资料汇总
欢迎加入建筑信息化开发交流群,获取开发资料 群号:711844216 一.背景 对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找 ...
- C#之CAD二次开发 (11) 文本对象
# 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...
- cad二次开发——自动运行dll,加载菜单(收集)
1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...
最新文章
- 例题5-8 Unixls命令(Unix ls,UVa400)
- [BZOJ4557][JLOI2016]侦查守卫
- sqlite3 表里插入系统时间(时间戳)
- excel中python是什么意思_python在excel中的应用是什么
- 音视频技术开发周刊 94期
- Asp.Net 章节验证控件章节测试题
- Angular NgModule 中的 declarations 和 exports定义
- 晴天php下载,x.php · 一步晴天/smart - Gitee.com
- 修改TFS与本地源代码映射路径
- Leangoo到底好在哪里?
- 无界面和应用图标的应用程序
- scala中内部函数的使用
- 纯js实现类似淘宝星级评分功能
- Unity导出exe时遇到的两个问题
- [观点]国难当头,为什么赵王还要杀掉李牧?因为人性最爱反噬没格局的人
- 服务器ubuntu系统调节亮度,ubuntu 设置显示器的亮度
- 用java实现编译器之代码实现Thompson构造:在简单NFA的基础上构造更复杂的NFA
- NVIDIA Jetson TK1学习与开发(四):一些细节问题
- python接入excel_在abaqus中使用python连接excel
- 电子学会图形化scratch编程等级考试二级真题答案解析(选择题)2020-9A卷