AutoCAD VBA 二次开发教程读者对象
本书适用于使用VBA和ActiveX技术对AutoCAD进行二次开发的工程技术人员。
如果对AutoCAD VBA开发毫无概念,建议首先阅读清华大学出版社出版的《AutoCAD VBA开发精彩实例教程》。
本书内容
本书的内容分为16章,另有一个附录,从各个方面向读者展示AutoCAD VBA开发的知识。
第1章深入分析了AutoCAD VBA开发中两个重要的知识点——宏和集合对象。宏是AutoCAD VBA开发中一个最基础但又非常重要的概念,而集合对象在开发过程中使用非常频繁,有必要在学习的开始阶段打下坚实的基础。
第2章包括文档操作、缩放视图、命名视图,以及和用户交互的操作。“文档操作”部分可以看作是集合对象使用的继续深入探讨,缩放视图使用ActiveX模型中提供的缩放方法模拟了AutoCAD自身的几种缩放功能,“和用户交互”一节提出了在GetPoint方法中使用关键字的解决方案。
第3章对选择集的使用进行了全面的剖析,为SendCommand提供了更广泛的应用,分析了直线、圆、圆弧和样条曲线向多段线的转化,提供了一些常用的多段线操作,提出制图法解决问题的新思路,编写了根据起点、终点和弧长创建圆弧的函数,最后又给出绘制放样展开图的方法。
第4章包含了两个有用的程序。按图层缩放提供了显示整个图层上所有实体的功能;使用ObjectDBX技术导入其他图形中的信息,相当于提供了一种后期“绑定”样板文件的手段。
第5章介绍了与文字使用有关的程序设计。创建文字样式能够获得当前计算机中可用的字体列表;文字按插入点自动对齐提供了对自定义数据类型的数组进行排序的一个思路;提取多行文字中的文字内容对AutoCAD中多行文字的格式代码进行了分析。使用ObjectDBX实现的批量文字替换,与上一个版本比较起来,修正了一些Bug,并且是在不打开文件的情况下完成操作的,速度有了明显的提高。
第6章介绍了标注和公差的使用。新的圆弧长度标注程序涉及到多行文字格式代码的使用;锁定标注文字的程序对于创建局部放大图形时非常有用,技术方面涉及到匿名块、尺寸标注对象的组成、GetSubEntity方法的使用等;列举所有的公差符号程序仍然涉及到多行文字的格式代码,从程序中还可以发现访问公差内容的方法。
第7章介绍了块和属性相关的程序设计,简单总结了简单块和属性块的使用,提供了将已经存在的实体添加到块定义中的方法,探讨了匿名块的使用。块和属性的结合使用非常灵活,自动标题栏和块属性生成表格两个程序演示了这种应用。实现“斜切”功能应该属于块应用的一个副产品,利用插入块参照时可以指定不同X、Y、Z坐标的特点,实现特殊的图形变换。
第8章介绍了AutoCAD事件处理的方法。利用几个典型的实例介绍了应用程序层事件(禁用命令)、文档层事件(双击事件和快捷菜单事件)和对象层事件(临时“反应器”)的处理方法,然后用一个序号球的实例模拟了永久“反应器”。
第9章处理在三维空间中的程序设计。在三维操作中,提供了在UCS中创建基本图元的方法,让编程人员也能享受UCS带来的便利。三点法创建UCS、在任意平面上创建图案填充、创建正多面体和创建偏心圆台都以数学知识为基础,解决几个在三维建模中应用的典型问题。
第10章讨论打印和布局的问题。本章仅提供了批量打印的程序。
第11章介绍了扩展数据、扩展字典、对象命名字典、SummaryInfo对象和绘图顺序等高级绘图组织技术。其中,扩展数据和扩展字典是标识实体的一种手段,SummaryInfo对象提供了访问图形特性的接口,绘图顺序则用于调整图形对象的显示层次。
第12章探讨了在VBA开发应用程序过程中可能会用到的几种技术和技巧。调试应用程序和应用程序的错误处理对于程序开发来说必不可少,这里用作者自身的经历来介绍其中的技巧;DwgThumbnail、Accont、Slide、MSScript是几个很有特色的组件,能够为VBA程序增加一些特殊的功能;创建和使用定时器一节直接用Windows API函数在类模块中自己创建定时器。
第13章将注意力集中在Excel、Word和AutoCAD的数据交换,以及在VBA使用Windows API实现特殊效果。VBA和Excel的数据交换似乎一直是一个热点问题,本章提供了Excel表格向AutoCAD的转换、使用Excel数据绘图、转换AutoCAD数据到Word和Excel中几个实例。在使用Windows API方面,提供了去掉对话框的关闭按钮和添加快捷菜单的实例。
第14章介绍在VBA中创建数据库应用程序的方法。由于ADO技术是比较理想的一种技术,因此本章着重介绍ADO和SQL语句结合开发数据库应用程序。此外,数据记录和AutoCAD实体的对应一节探讨了实现属性数据和地理数据的对应,这对于在AutoCAD上实现GIS的读者非常有用。
第15章提供发布VBA应用程序的各种技术,包括菜单宏的使用、在工具栏中使用自定义图标、基本图库的实现(动态修改菜单文件)、在命令行或菜单中执行VBA程序、实现VBA程序的先选择再操作、更改AutoCAD应用程序的图标和标题栏、使用InstallShield完全发布VBA应用程序。
第16章介绍了使用VB开发AutoCAD的一些知识(将VBA代码转换到VB中,VB窗体和AutoCAD的焦点切换,使用ActiveX DLL封装带有窗体的VB程序)、搜索某个文件夹中所有的文件和VBA IDE的编程,利用这些知识,完全有可能开发出功能更为强大的应用程序。
附录
本书的附录包含了AutoCAD 2005帮助文档中《ActiveX和VBA参考》(英文版)部分的内容,并且已经翻译为中文,供读者在学习过程中参考。
配套光盘
本书的配套光盘给出了除附录内容之外的所有源程序代码,以及在编程中可能用到的资源文件。
使用配套光盘,就可以直接将代码复制到读者本人的计算机中学习,而不必键入源程序代码。此外,读者可以自己写代码,将程序运行结果与光盘中程序执行结果相对照。
本书适用版本
本书所有程序都能够运行在AutoCAD 2005中文版和英文版平台上。
AutoCAD 2005 VBA中新增了一些对象和方法,但是在不使用这些新增功能的情况下,仍然可以在低版本的AutoCAD中运行这些程序。本书作者不保证所有的程序都能在AutoCAD 2004及其以下版本中使用(很明显的一个例子,创建表格对象的程序不能在AutoCAD 2004及其以下的版本中使用,因为那些版本中根本没有表格对象)。
关于明经通道
“明经通道”是国内著名的CAD技术网站(http://www.mjtd.com),它提供了大量的学习资料和CAD程序。网站论坛现有注册用户30000以上,每天都有很多高手在论坛中交流各种技术。
明经通道是免费的技术站点,欢迎各位读者来做客。请记住明经通道的服务宗旨:你的需要,我们创造。
本书的技术支持
可以通过以下三种方式获得关于书中问题的技术支持:
在明经通道论坛(http://www.mjtd.com/bbs)的“VBA和ActiveX技术”版块发帖。
发送邮件到作者的邮箱(统一发送到zf9568@263.net)。
在作者的个人网站“CAD大观园”论坛(http://www.cadhelp.net/bbs)的相关版块发帖。
关于本书作者
本书是集体劳动的结晶!下面是每一位作者所撰写的内容:
郑立楷(mccad)(明经通道站长,VBA和Visual LISP开发方面的专家):3.2、 3.3、 3.5、 3.9、 5.2、 5.3、 第6章、 7.7、 11.3、 15.4、 15.5。
王成煌(efan2000)(明经通道“VBA和ActiveX技术”板块版主):12.3~12.6、 13.1、 13.3、 13.4、 15.6。
卢择临(ahlzl)(明经通道贵宾,安徽省淮北工业学校教师):3.1、 3.10、 3.11、 7.6、第9章。
李倚伏(leeyeafu)(明经通道“数据库/EXCEL/ObjectDBX 编程技术”板块版主):14.1~14.4。
李昭鸿(lzh741206)(明经通道“VBA和ActiveX技术”板块版主):8.4、 16.1、 配套光盘中的“块内按点生成填充”程序。
张帆(zfbj)(明经通道“编程申请”板块版主,“CAD大观园”站长):第1章、 第2章、 3.4、 3.6、 3.7、 3.8、 第4章、 5.1、 5.4、 7.1~7.5、 8.1~8.3、 第10章、 11.1、 11.2、 11.4、 12.1、 12.2、 12.7、 13.2、 14.5、 15.1~15.3、 15.7、 16.2、 16.3、 附录,并负责全书统稿。
本书和《AutoCAD VBA开发精彩实例教程》
同《AutoCAD VBA开发精彩实例教程》一书相比较,这本书并不是内容的重复,而是一个提高,前者专注于基础和中级应用,本书则更多地介绍高级技巧,很多内容在帮助系统和市场上同类的图书中是找不到答案的。
致谢
本书能够顺利出版,绝对是集体劳动的成果,明经通道几位在VBA方面有造诣的版主和贵宾(有几位因为工作的忙碌没能参与这次的写作)都拿出自己擅长的程序,并亲自撰写文档,确保文档能够最好地反映出程序设计的思想。感谢几位合作者能够在工作忙碌的情况下抽时间高质量地完成写作任务,并且为我的统稿工作提供技术支持,没有你们的努力,这本书不可能有这么高的含金量。
在图书撰写过程中,明经通道的多位网友为本书的编写提出了宝贵的意见并提供了素材资料,例如wyj7485网友提供了创建定时器控件的原始素材,更多的网友不再一一列举,在此一并表示感谢,你们的支持是我们前进最重要的动力!
最后要感谢的是本书的读者,感谢您选购这本图书,这是对我们辛苦工作的最好的认可,希望这本书能对你有所帮助,祝读书愉快!
编者