土木工程CAD技术基础AutoCAD应用技术.pptx
会计学1土木工程土木工程CAD技术基础技术基础AutoCAD应用技应用技术术24.1 AutoCAD概述概述4.1.1 AutoCAD的发展2020世纪世纪8080年代美国年代美国AutodeskAutodesk公司开发公司开发专门用于设计工作的计算机绘图软专门用于设计工作的计算机绘图软件件经历了多次升级经历了多次升级目前的最新版本是目前的最新版本是AutoCAD 2009AutoCAD 2009以往主要版本:以往主要版本:1.0 2.0 9.0 12 13 14 1.0 2.0 9.0 12 13 14 2000 2000 2007 2008 2007 2008已经广泛地应用于多行业:已经广泛地应用于多行业:建筑、机械、电子、服装等行业建筑、机械、电子、服装等行业中中第1页/共73页34.1.2 AutoCAD的主要功能1.1.提供交互式绘图环境提供交互式绘图环境A.A.二维图形的建立、编辑功能二维图形的建立、编辑功能 包括:线、圆、弧、矩形等基本图形包括:线、圆、弧、矩形等基本图形 块、外部参照等复合图形块、外部参照等复合图形 文本、尺寸等标注图形文本、尺寸等标注图形B.B.三维图形的建立、编辑及渲染功能三维图形的建立、编辑及渲染功能2.2.提供二次开发环境提供二次开发环境第2页/共73页4中银大厦外墙挂板施工管理信息系统(清华、中建建筑承包)第3页/共73页5第4页/共73页6第5页/共73页7第6页/共73页8第7页/共73页94.1.3 AutoCAD的二次开发环境主要有主要有3 3种种:1.1.Visual LISPVisual LISPAutoLISPAutoLISP是是AutoCADAutoCAD最早的二次开发工具最早的二次开发工具来自来自Common LISPCommon LISP从从AutoCADAutoCAD的内部运行的内部运行Visual LISPVisual LISP是用来加速是用来加速AutoLISPAutoLISP程程序开发的工具软件,嵌于序开发的工具软件,嵌于20002000以以后版本中后版本中是一个集成开发环境(是一个集成开发环境(IDEIDE)第8页/共73页102.2.VBAVBA即:即:Visual Basic for Application programming Visual Basic for Application programming environment environment 利用利用AutoCAD ActiveXAutoCAD ActiveX(AutoCADAutoCAD组件)组件)从从AutoCADAutoCAD内部或外部内部或外部程序化地(程序化地(交互式地)进行绘图操作交互式地)进行绘图操作 20002000以上以上AutoCADAutoCAD本身具有本身具有VBAVBA开发环境开发环境 键入键入VBAIDEVBAIDE即可进入即可进入第9页/共73页113.3.ObjectARXObjectARX来自来自ARXARX:AutoCAD Runtime eXtension AutoCAD Runtime eXtension programming programming environment environment是一个是一个面向对象面向对象的二次开发环境的二次开发环境使用使用C+C+语言进行编程语言进行编程 利用利用AutoCADAutoCAD提供的程序库提供的程序库(包括类库)(包括类库)可以定义新类,或向已有类添可以定义新类,或向已有类添加操作加操作 从从AutoCADAutoCAD的内部运行的内部运行 AutoCADAutoCAD的最强有力的二次开发的最强有力的二次开发工具工具第10页/共73页学习学习ObjectARXObjectARX所需的知识所需的知识1.1.AutoCAD AutoCAD的基本知识和使用经验的基本知识和使用经验 主要是主要是 AutoCADAutoCAD的基本概念、基本命令和操作的基本概念、基本命令和操作 方法,有一些使用经验方法,有一些使用经验2.2.C+C+的知识的知识 面向对象程序设计的概念面向对象程序设计的概念 C+C+语法语法 Microsoft Visual C+Microsoft Visual C+的使用方法的使用方法下节讲述已补课12第11页/共73页134.2 AutoCAD的基本概念的基本概念第12页/共73页14 共介绍共介绍9 9组基本概念组基本概念1.1.模型空间模型空间和和图纸空间图纸空间 (Model Model Space and Paper SpaceSpace and Paper Space)图纸空间为规划打印布局而设置图纸空间为规划打印布局而设置在图纸空间中只能编辑图纸空间在图纸空间中只能编辑图纸空间中的对象中的对象模型空间和图纸空间之间可以切模型空间和图纸空间之间可以切换换2.2.世界坐标系世界坐标系(WCSWCS)和)和用户坐标用户坐标系系(UCSUCS)默认为默认为WCSWCS,可切换为,可切换为UCSUCS点的坐标输入方法:点的坐标输入方法:直角坐标、极坐标、球面坐标、直角坐标、极坐标、球面坐标、柱面坐标柱面坐标第13页/共73页153.3.绘图界限绘图界限表明用户的工作区域和图纸边界表明用户的工作区域和图纸边界4.4.图层(图层(LayerLayer)用来组织不同类型的图形信息用来组织不同类型的图形信息5.5.命令命令使用系统功能的工具使用系统功能的工具可从命令区输入执行,也可通过可从命令区输入执行,也可通过选菜单执行选菜单执行6.6.栅格栅格、捕捉捕捉和和正交模式正交模式绘图的辅助功能绘图的辅助功能第14页/共73页167.7.AutoCADAutoCAD数据库数据库和和对象对象在在AutoCADAutoCAD中,图被存储在中,图被存储在AutoCADAutoCAD数据库中数据库中AutoCADAutoCAD数据库是一系列对象的数据库是一系列对象的集合集合包括两类:包括两类:实体实体 容器对象(可分为:符号表和容器对象(可分为:符号表和字典两类)字典两类)8.8.实体(实体(EntityEntity)实体是一个有图形表示的数据库实体是一个有图形表示的数据库对象对象e.g.line,circle,arc,text,solide.g.line,circle,arc,text,solid第15页/共73页179.9.符号表符号表和和字典(字典(Symbol Table and Symbol Table and DictionaryDictionary)二者本质上具有相同功能:包含二者本质上具有相同功能:包含一些数据库对一些数据库对 象,每个对象用一个键(字符串)象,每个对象用一个键(字符串)来查找来查找 符号表符号表:数目固定,共:数目固定,共9 9个个 每个只包含特定类型的对象每个只包含特定类型的对象 字典字典:默认情况下包含两个字典:默认情况下包含两个字典 组字典和组字典和MLINEMLINE形式字典形式字典 可创建任意数量的对象并将其可创建任意数量的对象并将其添加到字典中添加到字典中第16页/共73页184.3 Windows应用程序设计入门应用程序设计入门见另附的见另附的pptppt文件文件第17页/共73页194.4 AutoCAD的二次开发技术的二次开发技术4.4.1 ObjectARX基础ObjectARXObjectARX提供了可供提供了可供C+C+调用的程序库,用以:调用的程序库,用以:开发基于开发基于AutoCADAutoCAD的应用程序的应用程序扩展扩展AutoCADAutoCAD类及其成员函数类及其成员函数创建与创建与AutoCADAutoCAD中的命令完全类中的命令完全类似的命令似的命令ObjectARXObjectARX应用程序是一个与应用程序是一个与AutoCADAutoCAD共享内存共享内存空间的空间的DLLDLL(动态连接库)(动态连接库)是是在在AutoCADAutoCAD中运行中运行的可执行文的可执行文件(件(*.arx.arx)第18页/共73页20动态连接库的概念动态连接库的概念一般以一般以.dll.dll文件的形式存在文件的形式存在,在应用程序运行时,在应用程序运行时,操作系统才加载和连接该函数库操作系统才加载和连接该函数库多个应用程序可共享一个函数库多个应用程序可共享一个函数库 MS-DOSMS-DOS使用静态连接:把函数库连接并包含在使用静态连接:把函数库连接并包含在执行程序中执行程序中WindowsWindows应用程序既可采用动态连接库,也可采应用程序既可采用动态连接库,也可采用静态连接用静态连接第19页/共73页214.4.2 ObjectARX应用程序开发环境包括以下包括以下4 4项项1.1.WindowsWindows操作系统操作系统 建议使用建议使用Windows XPWindows XP平台平台2.2.AutoCAD 2008AutoCAD 2008;3.3.Microsoft Visual C+8.0Microsoft Visual C+8.0 即即Visual Studio.NET 2005Visual Studio.NET 2005 作为集成开发环境,用于作为集成开发环境,用于ObjectARXObjectARX应用程序的应用程序的 编辑、编译、连接和调试编辑、编译、连接和调试第20页/共73页224.4.ObjectARX SDK for AutoCAD 2008ObjectARX SDK for AutoCAD 2008 (最新为(最新为20092009)包含了包含了ObjectARXObjectARX程序库以及相关文档程序库以及相关文档 程序库程序库 体现为体现为.h.h文件和文件和.lib.lib文件文件 包含了包含了函数库函数库和和类库类库 相关文档相关文档包含了丰富的内容包含了丰富的内容 编程时可以多参考:英文编程时可以多参考:英文 可以到网络学堂本课程的可以到网络学堂本课程的“参考资料参考资料”中下载中下载 或从或从AutodeskAutodesk公司的网站上下载公司的网站上下载第21页/共73页23第22页/共73页24ObjectARXObjectARX类和函数分类类和函数分类1.1.AcRXAcRX用于绑定应用程序及运行时类的注册和识别用于绑定应用程序及运行时类的注册和识别2.2.AcEdAcEd用于注册内部命令和系统事件通知用于注册内部命令和系统事件通知3.3.AcDbAcDb用于表示用于表示AutoCADAutoCAD数据库数据库4.4.AcGiAcGi用于渲染用于渲染AutoCADAutoCAD实体实体5.5.AcGeAcGe用于线性代数和几何对象的处理用于线性代数和几何对象的处理第23页/共73页25前缀所需的程序库AcRxacad.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程序库第24页/共73页26演示演示1 1:看:看ObjectARX DocumentationObjectARX Documentation的内容的内容1.1.ObjectARX Developers Guide ObjectARX Developers Guide用于掌握用于掌握ObjectARXObjectARX的概念(教材)的概念(教材)2.2.ObjectARX Reference ObjectARX Reference用于查找有关内容(手册)用于查找有关内容(手册)只有英文资料只有英文资料大家学习专业英语的好机会:大家学习专业英语的好机会:若有困难,请大家指出若有困难,请大家指出第25页/共73页274.4.3 ObjectARX应用程序框架通过一个简单的例程序来说明通过一个简单的例程序来说明firstARXfirstARX:由:由.cpp.cpp和和.def.def文件组成文件组成用来显示一个对话框用来显示一个对话框第26页/共73页28/firstARX.cpp/firstARX.cpp程序清单程序清单程序清单程序清单#include#include#include#includevoidinitApp();voidinitApp();voidunloadApp();voidunloadApp();voidfirstARX();voidfirstARX();voidinitApp()voidinitApp()acedRegCmds-acedRegCmds-addCommandaddCommand(LfirstARX_Commands,LfirstARX_Commands,/命令组名命令组名命令组名命令组名LfirstARX,LfirstARX,/全局全局全局全局命令名命令名命令名命令名LL第一次第一次第一次第一次,/本地本地本地本地/翻译命令名,翻译命令名,翻译命令名,翻译命令名,ACRX_CMD_TRANSPARENT,ACRX_CMD_TRANSPARENT,/命令模式命令模式命令模式命令模式firstARXfirstARX/被调用的函数被调用的函数被调用的函数被调用的函数););voidunloadApp()voidunloadApp()acedRegCmds-removeGroup(LfirstARX_Commands);acedRegCmds-removeGroup(LfirstARX_Commands);1/3第27页/共73页29voidvoidfirstARXfirstARX()()ads_alert(Lads_alert(L这是我的第一个这是我的第一个这是我的第一个这是我的第一个ARXARX应用程序应用程序应用程序应用程序!);!);externCexternCAcRx:AppRetCodeAcRx:AppRetCodeacrxEntryPointacrxEntryPoint(AcRx:AppMsgCodemsg,void*pkt)(AcRx:AppMsgCodemsg,void*pkt)switchswitch(msg)(msg)/msg/msg是是是是AutoCADAutoCAD传递给应用程序的消息传递给应用程序的消息传递给应用程序的消息传递给应用程序的消息casecaseAcRx:kInitAppMsg:AcRx:kInitAppMsg:/解锁应用程序,才能被卸载解锁应用程序,才能被卸载解锁应用程序,才能被卸载解锁应用程序,才能被卸载acrxDynamicLinker-unlockApplication(pkt);acrxDynamicLinker-unlockApplication(pkt);acrxRegisterAppMDIAware(pkt);acrxRegisterAppMDIAware(pkt);initAppinitApp();break;();break;casecaseAcRx:kUnloadAppMsg:AcRx:kUnloadAppMsg:unloadAppunloadApp();break;();break;default:default:break;break;returnAcRx:kRetOK;returnAcRx:kRetOK;2/3第28页/共73页30/firstARX.def/firstARX.def程序清单程序清单程序清单程序清单/用于输出用于输出用于输出用于输出acrxEntryPoint()acrxEntryPoint()函数,使函数,使函数,使函数,使AutoCADAutoCAD能够访问它能够访问它能够访问它能够访问它LIBRARYfirstARXLIBRARYfirstARX EXPORTSEXPORTSacrxEntryPointacrxEntryPointPRIVATEPRIVATEacrxGetApiVersionacrxGetApiVersionPRIVATEPRIVATE3/3第29页/共73页31程序说明:两个重要的函数程序说明:两个重要的函数1.1.acrxEntryPointacrxEntryPoint程序的入口点,等价于程序的入口点,等价于C C语言程序的语言程序的main()main()函数,用来与函数,用来与AutoCADAutoCAD进行通讯,响应系统发来的各种消息,并装入和执行外部函数。进行通讯,响应系统发来的各种消息,并装入和执行外部函数。当应用程序被加载,系统发出消息当应用程序被加载,系统发出消息kInitAppMsgkInitAppMsg2.2.firstARXfirstARX被装入和执行的外部函数,真正执行显示对话框任务被装入和执行的外部函数,真正执行显示对话框任务第30页/共73页32演示演示2 2:在:在VC+VC+中的实现步骤中的实现步骤分为以下分为以下1010步步 1.1.在在VC+VC+中新建中新建Win32Win32项目,项目名称为项目,项目名称为testtest 2.2.在应用程序向导中,应用程序类型设为在应用程序向导中,应用程序类型设为DLLDLL 3.3.在项目中,添加新项为在项目中,添加新项为C+C+文件,名为文件,名为firstARXfirstARX 4.4.将相应文件内容拷贝到该文件中将相应文件内容拷贝到该文件中 5.5.在项目中,添加新项为在项目中,添加新项为DEFDEF文件,名为文件,名为firstARXfirstARX 6.6.将相应文件内容拷贝到该文件中将相应文件内容拷贝到该文件中 7.7.进行项目属性设置进行项目属性设置第31页/共73页33 A.A.C/C+C/C+(编辑器)设置(编辑器)设置 常规:附加常规:附加包含目录包含目录 代码生成:运行时库:多线程代码生成:运行时库:多线程DLLDLL B.B.链接器设置链接器设置 常规:输出文件:后缀常规:输出文件:后缀arxarx 附加附加库目录库目录 输入:附加输入:附加依赖项依赖项:rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib第32页/共73页34 8.8.生成解决方案生成解决方案 9.9.在在AutoCADAutoCAD的工具菜单下,加载应用程序的工具菜单下,加载应用程序 10.10.在命令行中输入命令在命令行中输入命令 执行应用程序执行应用程序 11.11.卸载应用程序卸载应用程序第33页/共73页35第34页/共73页36思考哪里体现出面向对象?哪里体现出面向对象?若想增加一个命令,需要做什么?若想增加一个命令,需要做什么?第35页/共73页374.4.4 利用向导进行应用程序设计向导:向导:ObjectARX AppWizardObjectARX AppWizard用以生成用以生成ObjectARXObjectARX应用程序的框架应用程序的框架其中还包含了一些编程工具其中还包含了一些编程工具即:即:ObjectARX AddInObjectARX AddIn利用它,可以使程序设计高效地进行利用它,可以使程序设计高效地进行为此需要在为此需要在VC+VC+中安装中安装ObjectARX AppWizardObjectARX AppWizard第36页/共73页384.4.4.1 ObjectARX AppWizard的安装分为分为3 3步步1.1.关闭关闭VC+VC+;2.2.运行运行ObjectARXObjectARX安装目录下安装目录下 utilsObjARXWizutilsObjARXWiz子目录中的子目录中的 ArxWizards.msiArxWizards.msi文件文件3.3.根据提示一步一步地完成安装根据提示一步一步地完成安装第37页/共73页39AddIn第38页/共73页404.4.4.2 ObjectARX AppWizard的使用 演示演示3 3:使用:使用ObjectARX AppWizardObjectARX AppWizard建立应用程序建立应用程序分为以下分为以下5 5步步1.1.在在VC+VC+中新建中新建ObjectARXObjectARX项目,名称为项目,名称为testtest 选项全部采用缺省选项全部采用缺省2.2.查看自动生成的源程序查看自动生成的源程序 a.a.自动生成了那些文件?自动生成了那些文件?b.b.acrxEntryPointacrxEntryPoint函数在那里函数在那里?第39页/共73页413.3.利用利用AddInAddIn中的中的ObjectARX CommandObjectARX Command添加添加1 1条命条命 令,名为令,名为firstARXfirstARX A.A.看生成什么相应的代码看生成什么相应的代码 B.B.加入代码加入代码4.4.生成解决方案生成解决方案5.5.加载应用程序加载应用程序第40页/共73页424.4.4.3 ObjectARX AddIn的使用包含如下功能ObjectARXCommandsObjectARXClassExplorerCodeGalleryCodeFinderLiveUpdateARXHelpAddInConfigurationAboutARXAddInViz7第41页/共73页43e.g.ObjectARX Class Explorere.g.ObjectARX Class Explorer使用该工具将打开一个目录树对话框使用该工具将打开一个目录树对话框在其中选择条目,点击右键在其中选择条目,点击右键可执行各种功能可执行各种功能第42页/共73页44e.g.ARX Helpe.g.ARX Help将光标放在源程序的一个将光标放在源程序的一个ObjectARXObjectARX函数名或类名,再单击该按钮,函数名或类名,再单击该按钮,就可以得到相应的帮助就可以得到相应的帮助注意注意 第一次使用该工具时,需要指定帮助文件所在位置,第一次使用该工具时,需要指定帮助文件所在位置,ObjectARXObjectARX帮助文件为:帮助文件为:ObjectARXObjectARX安装目录安装目录docsarxref.hlpdocsarxref.hlp第43页/共73页454.4.5 典型ObjectARX应用程序功能实现作为绘图软件,需要实现作为绘图软件,需要实现1.1.用户界面用户界面输入参数,得到反馈输入参数,得到反馈-人机交互人机交互2.2.操作操作AutoCADAutoCAD数据库数据库只有只有AutoCADAutoCAD数据库中的内容才得到显示,数据库中的内容才得到显示,才可利用系统提供的功能进行操作才可利用系统提供的功能进行操作第44页/共73页464.4.5.1 用户界面实现输入输入参数,得到反馈参数,得到反馈典型的典型的AutoCADAutoCAD命令利用命令利用命令窗口命令窗口ObjectARXObjectARX提供了一系列函数提供了一系列函数用于用于获取获取整数、实数、字符串、实体等整数、实数、字符串、实体等参见下表及其后的典型程序段参见下表及其后的典型程序段第45页/共73页47序号函数名用于1acedGetInt获取一个整数值2acedGetReal获取一个实数值3acedGetString获取一个字符串4acedGetAngle获取一个角度值5acedGetKword获取一个关键字6acedInitGet对acedGetXXXX函数进行初始化7acedGetFileD从文件对话框中选取一个文件8acedGetPoint拾取一个点9acedEntSel拾取一个单一实体10acedNEntSel拾取一个单一的嵌套实体11acutSSGet拾取多个实体12acutPrintf 在AutoCAD的文本区显示信息ObjectARX的主要输入和反馈函数第46页/共73页48staticvoidstaticvoidAsdkStep02_myInputAsdkStep02_myInput(void)(void)intstat,iValue;intstat,iValue;doublerValue;doublerValue;TCHARkWord133;TCHARkWord133;acedInitGetacedInitGet(RSG_NONEG|RSG_NOZERO,L);(RSG_NONEG|RSG_NOZERO,L);if(if(acedGetIntacedGetInt(LnEnteranintegervalue:,&iValue)!=RTNORM(LnEnteranintegervalue:,&iValue)!=RTNORM)return;return;rValue=12.0;rValue=12.0;acedInitGetacedInitGet(RSG_NOZERO,LPIABC);(RSG_NOZERO,LPIABC);stat=stat=acedGetRealacedGetReal(LnEnterarealvaluePI/A/B/C:,(LnEnterarealvaluePI/A/B/C:,&rValue);&rValue);switch(stat)switch(stat)caseRTCAN:/caseRTCAN:/用户取消用户取消用户取消用户取消return;return;caseRTKWORD:/caseRTKWORD:/用户输入一个关键字用户输入一个关键字用户输入一个关键字用户输入一个关键字if(acedGetInput(kWord)!=RTNORM)if(acedGetInput(kWord)!=RTNORM)return;return;1/2第47页/共73页49if(!_tcscmp(LPI,kWord)if(!_tcscmp(LPI,kWord)rValue=3.14;rValue=3.14;elseif(!_tcscmp(LA,kWord)elseif(!_tcscmp(LA,kWord)rValue=10;rValue=10;elseif(!_tcscmp(LB,kWord)elseif(!_tcscmp(LB,kWord)rValue=11;rValue=11;elseif(!_tcscmp(LC,kWord)elseif(!_tcscmp(LC,kWord)rValue=12;rValue=12;break;break;caseRTNONE:/caseRTNONE:/用户未输入内容用户未输入内容用户未输入内容用户未输入内容acutPrintf(LnTakedefaultrValue%lf,rValue);acutPrintf(LnTakedefaultrValue%lf,rValue);break;break;caseRTNORM:/caseRTNORM:/用户输入一个有效值用户输入一个有效值用户输入一个有效值用户输入一个有效值break;break;default:return;default:return;acutPrintfacutPrintf(LnInteger:%d,iValue);(LnInteger:%d,iValue);acutPrintfacutPrintf(LnReal:%lf,rValue);(LnReal:%lf,rValue);2/2第48页/共73页50典型的应用程序典型的应用程序演示演示4 4:ObjectARX 2008 TutorialObjectARX 2008 Tutorial中的中的Step 2Step 2操作步骤操作步骤1 1.看看TutorialTutorial的内容的内容2 2.在在AutoCADAutoCAD中运行已生成的应用程序中运行已生成的应用程序3 3.在在VC+VC+中生成相应的应用程序中生成相应的应用程序 a.a.利用利用ObjectARX AppWizardObjectARX AppWizard生成程序框架生成程序框架 b.b.加入命令加入命令myinputmyinput和和myselectmyselect c.c.实现这两个命令实现这两个命令第49页/共73页51思考哪里体现出面向对象?哪里体现出面向对象?第50页/共73页524.4.5.2 AutoCAD数据库的操作AutoCADAutoCAD数据库的组成数据库的组成AutoCADAutoCAD数据库是一系列对象的集合数据库是一系列对象的集合 对象可分为两大类对象可分为两大类实体实体:e.g.e.g.点、线、圆点、线、圆容器对象容器对象 符号表:包含符号表:包含9 9个,个,e.g.e.g.块表(块表(Block TableBlock Table)命名对象字典:可包含多个子字典命名对象字典:可包含多个子字典第51页/共73页53AutoCADAutoCAD数据库的基本操作规则数据库的基本操作规则1.1.对象(实体)被创建后,需要添加到适当的对象(实体)被创建后,需要添加到适当的 容器对象中;容器对象中;2.2.其中,实体须添加到其中,实体须添加到块表记录对象块表记录对象中,中,后者须再添加到后者须再添加到块表对象块表对象中;中;3.3.符号表记录对象符号表记录对象(块表记录对象是其中的一(块表记录对象是其中的一 种)须添加到适当的种)须添加到适当的符号表对象符号表对象中;中;4.4.其他对象须被加入到其他对象须被加入到命名对象字典命名对象字典中,或被中,或被 其他对象所拥有的对象中其他对象所拥有的对象中第52页/共73页54AutoCAD数据库图层表块表命名对象字典实体实体实体实体对象对象对象对象其他符号表记录其他符号表记录其他符号表记录其他符号表记录块表记录块表记录块表记录块表记录图层表记录图层表记录图层表记录图层表记录符号表AutoCAD数据库结构事例符号表符号表其他符号表第53页/共73页55在在AutoCADAutoCAD中对象的识别中对象的识别在在AutoCADAutoCAD中可以同时加载多个数据库中可以同时加载多个数据库对象的识别方法对象的识别方法1.1.在特定的在特定的AutoCADAutoCAD数据库中数据库中 对象用句柄(对象用句柄(handlehandle)来识别)来识别2.2.在在AutoCADAutoCAD进程中进程中 当数据库被打开时当数据库被打开时,对象用,对象用IDID来识别来识别 获得获得IDID即获得对象的指针,即可对其操作即获得对象的指针,即可对其操作第54页/共73页56获取对象获取对象IDID的方法的方法1.1.将创建的对象添加到将创建的对象添加到AutoCADAutoCAD数据库时数据库时 AutoCADAutoCAD数据库会返回数据库会返回2.2.使用使用AutoCADAutoCAD数据库提供的函数数据库提供的函数3.3.使用一些类成员函数使用一些类成员函数 主要是符号表和字典对应的类主要是符号表和字典对应的类4.4.使用使用迭代器迭代器(iteratoriterator)遍历对象列表)遍历对象列表5.5.通过通过选择集选择集进行查询进行查询第55页/共73页57来看几个例程序来看几个例程序1.1.创建直线实体创建直线实体2.2.创建图层创建图层3.3.改变实体的颜色改变实体的颜色4.4.多线实体的创建多线实体的创建5.5.多线实体顶点的遍历多线实体顶点的遍历6.6.添加一个组添加一个组第56页/共73页58AcDbObjectIdAcDbObjectIdcreateLinecreateLine()()AcGePoint3dstartPt(4.0,2.0,0.0);AcGePoint3dstartPt(4.0,2.0,0.0);AcGePoint3dendPt(10.0,7.0,0.0);AcGePoint3dendPt(10.0,7.0,0.0);AcDbLine*AcDbLine*pLinepLine=new=newAcDbLineAcDbLine(startPt,endPt);(startPt,endPt);AcDbBlockTable*pBlockTable;AcDbBlockTable*pBlockTable;acdbHostApplicationServices()-workingDatabase()acdbHostApplicationServices()-workingDatabase()-getSymbolTablegetSymbolTable(pBlockTable,AcDb:kForRead);(pBlockTable,AcDb:kForRead);AcDbBlockTableRecord*pBlockTableRecord;AcDbBlockTableRecord*pBlockTableRecord;pBlockTable-pBlockTable-getAtgetAt(ACDB_MODEL_SPACE,(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb:kForWrite);pBlockTableRecord,AcDb:kForWrite);pBlockTable-close();pBlockTable-close();AcDbObjectIdlineId;AcDbObjectIdlineId;pBlockTableRecord-pBlockTableRecord-appendAcDbEntityappendAcDbEntity(lineId,(lineId,pLinepLine););pBlockTableRecord-close();pBlockTableRecord-close();pLine-close();/pLine-close();/注意注意注意注意:使用完任何使用完任何使用完任何使用完任何ObjectARXObjectARX对象,必须关闭对象,必须关闭对象,必须关闭对象,必须关闭 returnlineId;returnlineId;1.直线实体的创建第57页/共73页59直线AutoCAD数据库块表图纸空间模型空间(块表记录)在AutoCAD数据库中加入实体示意圆弧第58页/共73页60思考哪里体现出面向对象?哪里体现出面向对象?这里创建的直线段和这里创建的直线段和VC+VC+中创建的有何不同?中创建的有何不同?第59页/共73页61voidvoidcreateNewLayercreateNewLayer()()AcDbLayerTable*pLayerTable;AcDbLayerTable*pLayerTable;acdbHostApplicationServices()-workingDatabase()acdbHostApplicationServices()-workingDatabase()-getSymbolTablegetSymbolTable(pLayerTable,AcDb:kForWrite);(pLayerTable,AcDb:kForWrite);AcDbLayerTableRecord*AcDbLayerTableRecord*pLayerTableRecordpLayerTableRecord=new=newAcDbLayerTableRecord();AcDbLayerTableRecord();pLayerTableRecordpLayerTableRecord-setNamesetName(LASDK_MYLAYER);(LASDK_MYLAYER);/若未明确规定,图层的属性将采用默认值若未明确规定,图层的属性将采用默认值若未明确规定,图层的属性将采用默认值若未明确规定,图层的属性将采用默认值pLayerTable-pLayerTable-addadd(pLayerTa