土木工程CAD技术基础-第4章-AutoCAD应用技术_第1页
土木工程CAD技术基础-第4章-AutoCAD应用技术_第2页
土木工程CAD技术基础-第4章-AutoCAD应用技术_第3页
土木工程CAD技术基础-第4章-AutoCAD应用技术_第4页
土木工程CAD技术基础-第4章-AutoCAD应用技术_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第4章 AutoCAD应用技术4.1 AutoCAD概述4.2 AutoCAD的基本概念4.3 Windows应用程序设计入门4.4 AutoCAD的二次开发技术24.1 AutoCAD概述4.1.1 AutoCAD的发展20世纪80年代美国Autodesk公司开发专门用于设计工作的计算机绘图软件经历了多次升级目前的最新版本是AutoCAD 2009以往主要版本:1.0 2.0 9.0 12 13 14 2000 2007 2008已经广泛地应用于多行业:建筑、机械、电子、服装等行业中34.1.2 AutoCAD的主要功能1. 提供交互式绘图环境A. 二维图形的建立、编辑功能 包括:线、圆、

2、弧、矩形等基本图形 块、外部参照等复合图形 文本、尺寸等标注图形B. 三维图形的建立、编辑及渲染功能2. 提供二次开发环境4中银大厦外墙挂板施工管理信息系统(清华、中建建筑承包)567894.1.3 AutoCAD的二次开发环境主要有3种:1. Visual LISPAutoLISP是AutoCAD最早的二次开发工具来自Common LISP从AutoCAD的内部运行Visual LISP是用来加速AutoLISP程序开发的工具软件,嵌于2000以后版本中是一个集成开发环境(IDE)102. VBA即:Visual Basic for Application programming envir

3、onment 利用AutoCAD ActiveX(AutoCAD组件)从AutoCAD内部或外部程序化地(交互式地)进行绘图操作 2000以上AutoCAD本身具有VBA开发环境 键入VBAIDE即可进入113. ObjectARX来自ARX: AutoCAD Runtime eXtension programming environment是一个面向对象的二次开发环境使用C+语言进行编程 利用AutoCAD提供的程序库(包括类库) 可以定义新类,或向已有类添加操作 从AutoCAD的内部运行 AutoCAD的最强有力的二次开发工具学习ObjectARX所需的知识1. AutoCAD的基本知识

4、和使用经验 主要是 AutoCAD的基本概念、基本命令和操作 方法,有一些使用经验2. C+的知识 面向对象程序设计的概念 C+语法 Microsoft Visual C+的使用方法下节讲述已补课12134.2 AutoCAD的基本概念14 共介绍9组基本概念1. 模型空间和图纸空间 (Model Space and Paper Space)图纸空间为规划打印布局而设置在图纸空间中只能编辑图纸空间中的对象模型空间和图纸空间之间可以切换2. 世界坐标系(WCS)和用户坐标系(UCS)默认为WCS,可切换为UCS点的坐标输入方法: 直角坐标、极坐标、球面坐标、柱面坐标153. 绘图界限表明用户的工

5、作区域和图纸边界4. 图层(Layer)用来组织不同类型的图形信息5. 命令使用系统功能的工具可从命令区输入执行,也可通过选菜单执行6. 栅格、捕捉和正交模式绘图的辅助功能167. AutoCAD数据库和对象在AutoCAD中,图被存储在AutoCAD数据库中AutoCAD数据库是一系列对象的集合包括两类: 实体 容器对象(可分为:符号表和字典两类)8. 实体(Entity)实体是一个有图形表示的数据库对象e.g. line, circle, arc, text, solid179. 符号表和字典(Symbol Table and Dictionary) 二者本质上具有相同功能:包含一些数据库

6、对 象,每个对象用一个键(字符串)来查找 符号表:数目固定,共9个 每个只包含特定类型的对象 字典:默认情况下包含两个字典 组字典和MLINE形式字典 可创建任意数量的对象并将其添加到字典中184.3 Windows应用程序设计入门见另附的ppt文件194.4 AutoCAD的二次开发技术4.4.1 ObjectARX基础ObjectARX提供了可供C+调用的程序库,用以:开发基于AutoCAD的应用程序扩展AutoCAD类及其成员函数创建与AutoCAD中的命令完全类似的命令ObjectARX应用程序是一个与AutoCAD共享内存空间的DLL(动态连接库) 是在AutoCAD中运行的可执行文

7、件(*.arx)20动态连接库的概念一般以.dll文件的形式存在,在应用程序运行时,操作系统才加载和连接该函数库多个应用程序可共享一个函数库 MS-DOS使用静态连接:把函数库连接并包含在执行程序中Windows应用程序既可采用动态连接库,也可采用静态连接214.4.2 ObjectARX应用程序开发环境包括以下4项1. Windows操作系统 建议使用Windows XP平台2. AutoCAD 2008;3. Microsoft Visual C+ 8.0 即Visual Studio .NET 2005 作为集成开发环境,用于ObjectARX应用程序的 编辑、编译、连接和调试224.

8、ObjectARX SDK for AutoCAD 2008 (最新为2009) 包含了ObjectARX程序库以及相关文档 程序库 体现为.h文件和.lib文件 包含了函数库和类库 相关文档包含了丰富的内容 编程时可以多参考:英文 可以到网络学堂本课程的“参考资料”中下载 或从Autodesk公司的网站上下载2324ObjectARX类和函数分类1. AcRX用于绑定应用程序及运行时类的注册和识别2. AcEd用于注册内部命令和系统事件通知3. AcDb用于表示AutoCAD数据库4. AcGi用于渲染AutoCAD实体5. AcGe用于线性代数和几何对象的处理25前缀所需的程序库AcRxa

9、cad.lib, rxapi.lib, acrx17.libAcEdacad.lib, rxapi.lib, acedapi.lib, acrx17.libAcDbacad.lib, rxapi.lib, acdb17.lib, acrx17.libAcGiacad.lib, rxapi.lib, acdb17.lib, acrx17.libAcGeacad.lib, rxapi.lib, acge17.lib, acrs17.lib应用程序所需的ObjectARX程序库26演示1:看ObjectARX Documentation的内容1. ObjectARX Developers Guide

10、用于掌握ObjectARX的概念(教材)2. ObjectARX Reference用于查找有关内容(手册)只有英文资料大家学习专业英语的好机会:若有困难,请大家指出274.4.3 ObjectARX应用程序框架通过一个简单的例程序来说明firstARX:由.cpp和.def文件组成用来显示一个对话框28/ firstARX.cpp程序清单程序清单# include # include void initApp(); void unloadApp(); void firstARX();void initApp()acedRegCmds-addCommand(LfirstARX_Commands

11、, /命令组名命令组名LfirstARX, /全局命令名全局命令名L第一次第一次, /本地本地/翻译命令名,翻译命令名,ACRX_CMD_TRANSPARENT,/命令模式命令模式firstARX/被调用的函数被调用的函数);void unloadApp()acedRegCmds-removeGroup(LfirstARX_Commands); 1/329 void firstARX() ads_alert(L这是我的第一个这是我的第一个ARX应用程序应用程序!); extern C AcRx: AppRetCodeacrxEntryPoint(AcRx:AppMsgCode msg, voi

12、d* pkt) switch (msg) /msg是是AutoCAD传递给应用程序的消息传递给应用程序的消息case AcRx:kInitAppMsg:/解锁应用程序,才能被卸载解锁应用程序,才能被卸载acrxDynamicLinker-unlockApplication(pkt);acrxRegisterAppMDIAware(pkt);initApp(); break;case AcRx:kUnloadAppMsg:unloadApp(); break;default:break;return AcRx:kRetOK;2/330/ firstARX.def程序清单程序清单/ 用于输出用于输

13、出acrxEntryPoint()函数,使函数,使AutoCAD能够访问它能够访问它 LIBRARY firstARX EXPORTS acrxEntryPoint PRIVATE acrxGetApiVersion PRIVATE3/331程序说明:两个重要的函数1. acrxEntryPoint程序的入口点,等价于C语言程序的main()函数,用来与AutoCAD进行通讯,响应系统发来的各种消息,并装入和执行外部函数。当应用程序被加载,系统发出消息kInitAppMsg2. firstARX被装入和执行的外部函数,真正执行显示对话框任务32演示2:在VC+中的实现步骤分为以下10步 1.

14、在VC+中新建Win32项目,项目名称为test 2. 在应用程序向导中,应用程序类型设为DLL 3. 在项目中,添加新项为C+文件,名为firstARX 4. 将相应文件内容拷贝到该文件中 5. 在项目中,添加新项为DEF文件,名为firstARX 6. 将相应文件内容拷贝到该文件中 7. 进行项目属性设置33 A. C/C+(编辑器)设置 常规:附加包含目录 代码生成:运行时库:多线程DLL B. 链接器设置 常规:输出文件:后缀arx 附加库目录 输入:附加依赖项: rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib34 8. 生成解

15、决方案 9. 在AutoCAD的工具菜单下,加载应用程序 10. 在命令行中输入命令 执行应用程序 11. 卸载应用程序3536思考哪里体现出面向对象? 若想增加一个命令,需要做什么?374.4.4 利用向导进行应用程序设计向导: ObjectARX AppWizard用以生成ObjectARX应用程序的框架其中还包含了一些编程工具即:ObjectARX AddIn利用它,可以使程序设计高效地进行为此需要在VC+中安装ObjectARX AppWizard3 ObjectARX AppWizard的安装分为3步1. 关闭VC+;2. 运行ObjectARX安装目录下 utils

16、ObjARXWiz子目录中的 ArxWizards.msi文件3. 根据提示一步一步地完成安装39AddIn40 ObjectARX AppWizard的使用 演示3:使用ObjectARX AppWizard建立应用程序分为以下5步1. 在VC+中新建ObjectARX项目,名称为test 选项全部采用缺省2. 查看自动生成的源程序 a. 自动生成了那些文件? b. acrxEntryPoint函数在那里?413. 利用AddIn中的ObjectARX Command添加1条命 令,名为firstARX A. 看生成什么相应的代码 B. 加入代码4. 生成解决方案5. 加载应用

17、程序4 ObjectARX AddIn的使用包含如下功能ObjectARX CommandsObjectARX Class ExplorerCode GalleryCode FinderLiveUpdateARX HelpAddIn ConfigurationAbout ARXAddInViz743e.g. ObjectARX Class Explorer使用该工具将打开一个目录树对话框在其中选择条目,点击右键可执行各种功能44e.g. ARX Help将光标放在源程序的一个ObjectARX函数名或类名,再单击该按钮,就可以得到相应的帮助注意 第一次使用该工具时,需要指定帮助

18、文件所在位置,ObjectARX帮助文件为:ObjectARX安装目录docsarxref.hlp454.4.5 典型ObjectARX应用程序功能实现作为绘图软件,需要实现1. 用户界面输入参数,得到反馈- 人机交互2. 操作AutoCAD数据库只有AutoCAD数据库中的内容才得到显示,才可利用系统提供的功能进行操作4 用户界面实现输入参数,得到反馈典型的AutoCAD命令利用命令窗口ObjectARX提供了一系列函数用于获取整数、实数、字符串、实体等参见下表及其后的典型程序段47序号函数名用于1acedGetInt 获取一个整数值2acedGetReal 获取一个实数值3

19、acedGetString 获取一个字符串4acedGetAngle 获取一个角度值5acedGetKword 获取一个关键字6acedInitGet 对acedGetXXXX函数进行初始化 7acedGetFileD 从文件对话框中选取一个文件8acedGetPoint 拾取一个点9acedEntSel 拾取一个单一实体10acedNEntSel 拾取一个单一的嵌套实体11acutSSGet 拾取多个实体12acutPrintf 在AutoCAD的文本区显示信息ObjectARX的主要输入和反馈函数48static void AsdkStep02_myInput(void) int stat

20、, iValue ; double rValue ; TCHAR kWord 133 ; acedInitGet (RSG_NONEG | RSG_NOZERO, L) ; if ( acedGetInt (LnEnter an integer value: , &iValue) != RTNORM ) return ; rValue =12.0 ; acedInitGet (RSG_NOZERO, LPI A B C) ; stat =acedGetReal (LnEnter a real value PI/A/B/C : , &rValue) ; switch (stat)

21、 case RTCAN: / 用户取消用户取消 return ; case RTKWORD: / 用户输入一个关键字用户输入一个关键字 if ( acedGetInput (kWord) != RTNORM ) return ;1/249 if ( ! _tcscmp(LPI, kWord) ) rValue =3.14 ; else if ( ! _tcscmp(LA, kWord) ) rValue =10 ; else if ( ! _tcscmp(LB, kWord) ) rValue =11 ; else if ( ! _tcscmp(LC, kWord) ) rValue =12

22、; break ; case RTNONE: / 用户未输入内容用户未输入内容 acutPrintf (LnTake default rValue %lf, rValue) ; break ; case RTNORM: / 用户输入一个有效值用户输入一个有效值 break ; default: return ; acutPrintf (LnInteger : %d, iValue) ; acutPrintf (LnReal : %lf, rValue) ;2/250典型的应用程序演示4:ObjectARX 2008 Tutorial中的Step 2操作步骤1. 看Tutorial的内容2. 在

23、AutoCAD中运行已生成的应用程序3. 在VC+中生成相应的应用程序 a. 利用ObjectARX AppWizard生成程序框架 b. 加入命令myinput和myselect c. 实现这两个命令51思考哪里体现出面向对象?5 AutoCAD数据库的操作AutoCAD数据库的组成AutoCAD数据库是一系列对象的集合 对象可分为两大类实体:e.g. 点、线、圆容器对象 符号表:包含9个,e.g. 块表(Block Table) 命名对象字典:可包含多个子字典53AutoCAD数据库的基本操作规则1. 对象(实体)被创建后,需要添加到适当的 容器对象中;2. 其中,实体须添

24、加到块表记录对象中, 后者须再添加到块表对象中;3. 符号表记录对象(块表记录对象是其中的一 种)须添加到适当的符号表对象中; 4. 其他对象须被加入到命名对象字典中,或被 其他对象所拥有的对象中54AutoCAD数据库图层表块表命名对象字典实体实体实体实体对象对象对象对象其他符号表记录其他符号表记录其他符号表记录其他符号表记录块表记录块表记录块表记录块表记录图层表记录图层表记录图层表记录图层表记录符号表AutoCAD数据库结构事例符号表符号表其他符号表55在AutoCAD中对象的识别在AutoCAD中可以同时加载多个数据库对象的识别方法1. 在特定的AutoCAD数据库中 对象用句柄(han

25、dle)来识别2. 在AutoCAD进程中 当数据库被打开时,对象用ID来识别 获得ID即获得对象的指针,即可对其操作56获取对象ID的方法1. 将创建的对象添加到AutoCAD数据库时 AutoCAD数据库会返回2. 使用AutoCAD数据库提供的函数3. 使用一些类成员函数 主要是符号表和字典对应的类4. 使用迭代器(iterator)遍历对象列表5. 通过选择集进行查询57来看几个例程序1. 创建直线实体2. 创建图层3. 改变实体的颜色4. 多线实体的创建5. 多线实体顶点的遍历6. 添加一个组58AcDbObjectId createLine() AcGePoint3d startP

26、t(4.0, 2.0, 0.0); AcGePoint3d endPt(10.0, 7.0, 0.0); AcDbLine *pLine = new AcDbLine(startPt, endPt); AcDbBlockTable *pBlockTable; acdbHostApplicationServices()-workingDatabase() -getSymbolTable(pBlockTable, AcDb:kForRead); AcDbBlockTableRecord *pBlockTableRecord; pBlockTable-getAt(ACDB_MODEL_SPACE,

27、pBlockTableRecord, AcDb:kForWrite); pBlockTable-close(); AcDbObjectId lineId; pBlockTableRecord- appendAcDbEntity(lineId, pLine); pBlockTableRecord-close(); pLine-close(); /注意注意:使用完任何使用完任何ObjectARX对象,必须关闭对象,必须关闭 return lineId;1. 直线实体的创建59直线AutoCAD数据库块表图纸空间模型空间(块表记录)在AutoCAD数据库中加入实体示意圆弧60思考哪里体现出面向对象?

28、这里创建的直线段和VC+中创建的有何不同?61void createNewLayer() AcDbLayerTable *pLayerTable; acdbHostApplicationServices()-workingDatabase() -getSymbolTable(pLayerTable, AcDb:kForWrite); AcDbLayerTableRecord *pLayerTableRecord = new AcDbLayerTableRecord(); pLayerTableRecord-setName(LASDK_MYLAYER); / 若未明确规定,图层的属性将采用默认值

29、若未明确规定,图层的属性将采用默认值 pLayerTable-add(pLayerTableRecord); pLayerTable-close(); pLayerTableRecord-close();2. 图层的创建62Acad:ErrorStatuschangeColor(AcDbObjectId entId, Adesk:UInt16 newColor) AcDbEntity *pEntity; acdbOpenObject(pEntity, entId, AcDb:kForWrite); pEntity-setColorIndex(newColor); pEntity-close()

30、; return Acad:eOk;3. 改变实体的颜色63void createPolyline() / 为多线设置为多线设置4个定点位置个定点位置 AcGePoint3dArray ptArr; ptArr.setLogicalLength(4); for (int i = 0; i setColorIndex(3); 4. 多线实体的创建1/264 AcDbBlockTable *pBlockTable; acdbHostApplicationServices()-workingDatabase() -getSymbolTable(pBlockTable, AcDb:kForRead);

31、 AcDbBlockTableRecord *pBlockTableRecord; pBlockTable-getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb:kForWrite); pBlockTable-close(); AcDbObjectId plineObjId; pBlockTableRecord-appendAcDbEntity(plineObjId, pNewPline); pBlockTableRecord-close(); / 设置该多线的图层设置该多线的图层. pNewPline-setLayer(L0); pNewPline-

32、close(); 2/265void iterate(AcDbObjectId plineId) AcDb2dPolyline *pPline; acdbOpenObject(pPline, plineId, AcDb:kForRead); AcDbObjectIterator *pVertIter= pPline-vertexIterator(); pPline-close(); / 设置必要的变量设置必要的变量 AcDb2dVertex *pVertex; AcGePoint3d location; AcDbObjectId vertexObjId; for (int vertexNumber = 0; !pVertIter-done(); vertexNumber+, pVertIter -step() vertexObjId = pVertIter-objectId(); 5. 多线实体顶点的遍历1/266 acdbOpenObject(pVertex, verte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论