AutoCAD二次开发教程复习总结_第1页
AutoCAD二次开发教程复习总结_第2页
AutoCAD二次开发教程复习总结_第3页
AutoCAD二次开发教程复习总结_第4页
AutoCAD二次开发教程复习总结_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

CAD复习题及答案1、AutoLISP-AutoLISP是为二次开发AutoCAD而专门设计的编程诒言,它起源于LISP诺言,嵌入在AuMCAD的内部,是LI$P语言^OAutoCAD有机结合的产物,LISP是人工智能领域中广泛呆用的一种程序设计倍■AutoLISP^用了WCommonLISPg相近的语法和习惯为定,且有CommonLISP的特性,但又针jFtAutcCADlg加了许多功能,它既fiLlSPi*言人工智能的特性,又具^AutoCAD强大的图形编辑功能的特点。它可以ffiAutoLISP程序和AutoCAD的维图命令透明地培合起来,使设计和线图完全融为一怵,还可以宴现^AutoCAD图形数据库的直接访问和修改■利用AutoLISP语言可以进行客种工程分析计氮自动绘制宣杂的囹私还可以定义新的AutoCAD命令.驱动时话成控制菜礼^AutoCAD扩充具有一定智能化、卷敏化的功能,可以愤设计大员的主要精力用于产品的梅思和创新设计上.实现真亦底义I■的计算机蜻助设计2、VisualLISPVi利凯LISP(简称VLISP)是为加速AutoLISP程序开发而设计的强有力的工具°它提供了一个完整的集成开发环境(包括编译器'调试器及其他工具.它可以显著地提高自定义AutoCAD的效率)VisualLISP提供的主要工具有二文本编辑器,格式编排器.语法橙查器'源代码调试器、榆验和监视工具,文件编译器、T程管理系统/快捷相关帮助与自动匹配功能和智能化控制台等3、 VBAAutoCADVBA就是集成在AutoCAD中的VisualBasic开发环境,与VB的主要区别是VBA在与AutoCAD相同的进程空间中运行,提供『与AutoCAD关联的快捷的蝙程环境,程序设计直观快捷。它还提供了与其它可使用VBA应用程序集成的能力,可以为其它应用程序如WoE或Excel的自动化控制器“4、 ADS■当Autodesk^布基于OSJW操作系纯的AutoCADR10吐推出了T*全新的称却uitacao开度系藐用的编程怀境"随莉AutoCADR11的发布,AutoCAD的D05版本用户也可以使冲APSfu^AutoCADR1lZBUh太多数的应用程序都是用AutoLISP开王的,当出售开军的第三方应用程序射・丸法趣免用户读取牌的裁代码・ 的全名是AutoCADDevelopmentSystem,它是Au帕CAD的仁语言并澄系绿,ADS本质上是一蛆可以用CiS言蝙与Aut就AD应用程序的头文件和目标庠.它直接利用用户熟悉的各神流行的C语言采译器・稳应朋程序编译成可饷行的文件在AutoCAD坪境下运行.这种W以在也JtnCA。环境中直搜运行的可执行文件叫做ADS应用*序--<ADS程序实际上是由一组外部函故坦成,它们由AutoLlSR解群器来却赧调用.AD$??序本身并不能一直腰和RutoCA口谜行通讯・AMtoCAOIE供的口hj祁tARX中用含TADS南敢库,并称5、 ObjectARX0bjectARX是一伸券新的开抵AutMAD应用程序的工具,她以C+,为编程语言*采用先进的面向时象的蝙程原理,提供可与AutoCADS接史互的开发环境.能使用户方便快捷地开发出高效简洁的Atit。CAD应用程序。句wtARX提供2的个瓷3Q0Q参个成员函散0bjectARX还可以接需要加裁应用程序;使用ObjectARX进行应用开澄还可以在同一水平上与Windows系蚯集成,井与兑它Windows应用程序实现立互操作-不同的ACAD版本用不|过的开澄包吱开发坪境^ACAD200D-ACAD20B2:VC++6.Cr-ACADZQW'ACADSQafl;V3rNET2QQ2^AC^D?007-ACAD2^Q9;VS.NET20Q&,ACAD2010^aCAQ2011:VS.MET2DOS-ACAD2012- :VS.NET201D■ACAC2QQ?开始字可苫采用UHIQODE始码■点RX之间不熊连蚊傕赣,A.arxft翰rx,B^ri^KCdbx,BlJA.arx^'ii::ru5\■与AGAD已有功磁堆位T3.51ObjectARX-Acca$$.AutoCADdafabasfiInteractwithth*AutoCADeditorCreateus«rinterFaeesusingttie FckUHdab&HClasps[MFC}WmppoMIfrumuHipPedccumtntinterface(MDI]Createcustamcila^Ee^■日御4complexInberactwltitolhe<pc^gtainmin-genvjronments■ObjectARX类库枸成kObjectARK六大类库:(1>北独库:是为劫恋链接库的初始化、琏撞、远行时类的注册林识别提供盖姓堀的生(2)虹Ed库;用于注册本地命令及系境事件通她的美;(3)库;用于存放所有实体及其他类(4)AcGijg:用于治染AutoCAD宅怵的图形接口(5)幅盐库:用于曾通知伐数和几何实体通用库(6)ADSKX库:用于国蛭*uW!AD应用程序的哺言库6、.NET托管API-AutoCADNETAPI使用户可通过编程的方法利用程序集虱库显示的AutoCAD和图形女件的对象案操填它侑.通过显示的对象,它们可帔iT多不1“】的编程语言和环境访间。■在AutoCAD中实现旺TAPI的几大伏点:-更多的编程环境可以瑞程访问AutoCAD-在.NETAPItH理之前,7T发人员只能局限于使用ActiveX*自动操作和支持CC3M的语言.AutoLISPObjectARX的C++.-通过使用内用程序本地化的NETAPI或显示的ActivcX/COM库与其它windtiws1-应用暮序(例MlMbcroMftExcel和Word)It亭敕据比以前童方使得多。>-NET梅架是为位及64位皖作系统而设计,而*部只为3W恒样忤系统设计。・&AutcCACJ中玄现NETAPI的凡大优炯雄】:»相对于枝统珀程懦言.如C++..NETR^更帔的学习成本来访问高玺接口。a对蒙是AutoCAD.NETAPI的主盟构诰块。每一个显示的对聚均精煽代建一个AutoCAD沮件,它fl之间又曲了不同的程厅集利命名空间。AutoCADNETAPI有评务不同类刑的舛蒙匚例如::•点雄,玄字和样注兽图庵可蛰与星时家“・姓型勺怵注打式车村式谖苫部是对盘,•图房、坦合如块客里妈站构都是时愈.♦携图和摭口与图形超派律是对圈”■甚至尚1形、AutoCAD巧用料序本身也是利虢.7、ActiveXAutomation

术是OLE技本的诳一步扩展,其作用是SWindcws系线的统-管理b协调不同的应用程序.允许应用程片之间相互控制,相21调用.月前,Actiw&XAulommticin术是OLE技本的诳一步扩展,其作用是SWindcws系线的统-管理b协调不同的应用程序.允许应用程片之间相互控制,相21调用.月前,Actiw&XAulommticin技木已is在Int4(ner.Offict系列办妙较祥的开发中得到了广堂的应用、从AutoCADRU版开始,AuIgCAD引入了ActiveXAutomation技术.由于ActEX技术是一旃完全面向对兼的技术、所顷许多面向却蕃化蝙程的旧言和应用程序,河以通3ACtNiXijAdtoCADjffiffiiS,并操甄从AutoCADRU版开始,AuIgCAD引入了ActiveXAutomation技术.由于ActEX技术是一旃完全面向对兼的技术、所顷许多面向却蕃化蝙程的旧言和应用程序,河以通3ACtNiXijAdtoCADjffiffiiS,并操甄AutoCAD的许苏劫.Aetl^Xffi具备的绝大基SfcAuMCa□功能,俱以方注和风性的方式秘甘董在Art阪XjOf象中,只暖使用某种方式,使Acti伸X对缺得以,那也就叫以怯H1答抻面向时龈埠程的语宣有其中的方法、反性进行引用.从而遇到莉AuMCAD实现罩程的目的.8、VisualJava1、AutoCAD二次开发方式有哪些?各自优缺点?2、 AutoCAD中实现ObjectARX.NETAPI的有哪些优点?・在&诚心1中实观wrapi的几大悦点;"更多的号曜坍境司瞄程讪何森UtOCAP.在.NETAH咕迎之前,开发A髭W隘局限于ttJBActiveX"白动榻作咨更持CONI的博吉.AutoLISP'网QbjcetARX的C++..>通迎使申屁用程冲本地世的.NETAPI或显示:的ActiveX/COM专与其它windows'反用再斥[例如Micrcsort或rH和刊。r"丈享蚊据比以蔺堂方便群多。>.NET框架是为3颂及64值操作弟嫌而设计,而MBA只方W愤理件东毗谜计。•在AutoCAD中实现,NETAPI的几大愤点〔询:*相对于仕好和语言,C++b.NET具有更忸的学习成本来访闷高圾接口.*jf.lftSAutvC^C-NETAFI的主嚏物莅虬每一个阪柬的却t持柄福代表一个AutoCAD坦件,它门之间W组成了不伺的并却族和命名空I虱AutoCAD-METAPI有许第不同琵型的耐乳佩如:•直线.园蛆、文宇和林注署闱监洞陞昴是对单.•费牵与林洋样式字特式由面廓墨耐堆.■圉辰.坦台制嫌等蛆织培构部是对鱼一*担1群*1祝口等削彤姓示毋是时18..**至出电、AuWCMi旦用样序牢身也毋月SL .3、 AutoCAD.NETAPI的三个主要的DLL文件是?4AutoCAD.NETAPI的三个主要的口LL文件:>AcDbMgd.dth-^用国形文件中的对象时快用这个DLL*件'该动态库^L^ObjectDBX托管类>AcMgd.dl^-当使用AutoCAD应用程序时使用通个DLL文件,该动态隹包窖MtcCaO托管美K3T4当快用自定乂文件时使用这个DLL文件■DLL*件所在位直>C:\ObjectARX2012\irtcV.dll4、 简述ObjectARX.NETAPI所对应的VS.NET版本。.ACAD2Q00~ACAD2D02:VC++6.0-ACAD2004*ACAD2OQ6:VS.NET2002,ACAD2007*ACAD2D09:VSNET2005>ACAD2010*ACAD2011:VS.NET2008>ACAD2O12-ACAD2O14:VS.NET2010>ACAD2Q15* : VS.NET20125、 简述AutoCAD数据库的组成。AutoCAD数据库是用来管理当前图形中的图元实体和其他非几何信息的容器对象,一个AutoCAD数据库包含一套固定的符号表和命名的对象词典,每一个符号表包含一个特定符号

表记录类的实例,例如层表(AcDbLayerTable)中包含层表的记录,块表(AcDbBlockTable)中包含块表记录,所有的AutoCAD实体均包含于块表记录中。词典提供了一种通用容器来存储对象,它可以保存AcDbObject对象以及其它对象,也可以创建新的对象词典,将新的数据库元素加入其中。AutoCAD数据库的组成如图所示,从图中我们可以看出数据库主要由一下内容组成:1) 层表AcDbLayerTable和层表记录AcDbLayerTableRecord。2) 块表AcDbBlockTable和块表记录AcDbBlockTableRecord。AutoCAD中所有可见实体均存储在块表记录。块表中包含有两条特殊的记录*MODEL_SPACE(模型空间)和*PAPER_SPACE(图纸空间)。3) 其他符号表和符号表记录。4) 命名对象词典。缺省情况下当AutoCAD数据库被建立以后,词典中就包括了组词典以及MILINE样式词典。5) 符号表和命名对象词典都是存储数据库对象的容器,用于组织和管理数据库对象。AutoCAD数据库通常有9个固定类型的符号表,开发者不能向数据库中新增或者删除任何一种类型符号表,能实现的是向符号表中添加对应的符号表记录。6、Application对象是AutoCAD.NETAPI对象模型的根对象,它包括哪些部分?Application对象是层次结构的根,而且它提供对AutoCAD的主窗口的访问。集合名称功能BlockTableRjecord包含一个特定境内定义的所有图元BlockP>ible包含图形中的所有块NamedObjectsJiutionaiy包含图形中的所有字典DniiensionSlylel>ble包含圈形中的所有标注样式DocmueidCollec\on包含当前进程中打开的所有图形FilmDependencyColhcnon包含“文件依赖性''列表中的所有项Diehoi冲包含图形中的所有漏蛆Hvpeihtikt^lkctior.包含给定图无的所有超链接LayerTable包含图形中的所有图层Layc.r包含图形中的所有布局Lrielype'liible包含图形中的所有线型藐合名称功能MeiinBarColletlion包含AutoCAD中当前显示的所有菜单MenuGroupCollection代.含AutoCAD当前加我的折有U定义纪,自定义近煎示如我的Cl:Ix丈仁,它可以句空菜午、工具T布Ribbon选项PlotConlisuraIlouEXictianary句含囹托中的命■名扣口设宣RegisteredApplicMonTable包含图形中所有注册的互用近序TextSfy]eTable包含图抒中的折有支字样式UCSTable气含囹H中的折有用户平标幺(UCS)ViewTable可含•囹杉中的.折有祁.囹ViewporTab'e包含图形中的所有视117、 列出所有图形与非图形对象,他们有什么区别?图形对象,也称为图元,是组成图形的可见对象(例如直线、圆、光栅图像等):1) 添加图形对象到图形中是通过正确的块表记录引用,然后使用AppendEntity方法将一个新对象添加到图形中来完成的2) 要修改或查询这些对象,请从正确的块表记录获得对象引用,然后使用对象本身的方法或特性。每一个图形对象都拥有允许应用程序执行大部分AutoCAD编辑命令的方法,例如复制、删除、移动、镜像等这些对象还提供了一些方法,用来设置和检索对象的扩展数据(xdata),亮显和更新对象,以及从另外的图元设置属性。大多数图形对象具有诸如Layerld、Linetypeld、Color和Handle之类的典型特性。每个对象也具有一些特有的特性,例如Center、StartPoint、Radius和FitTolerance非图形对象是指属于图形的一部分但不可见的(提示性的)对象,例如Layers、Linetypes、DimStyles、TableStyle等1) 若要创建新的符号表记录,请使用表所有者的Add方法或使用SetAt方法添加一个字典到命令对象字典中2) 要修改或查询这些对象,请使用对象本身的方法或特性。每一个非图形对象都有用于特定目的的方法和特性,都有设置和检索扩展数据以及删除自己的方法8、 如何实现对AutoCAD数据库图形对象的访问?给出实例代码。大部分的集合和容器对象都是通过Document或Database对象访问的。Document和Database对象都包含一些相应的特性用来访问大多数可用集合的对象或对象ID。例如,以下代码定义一个变量,并将其设置为当前图形的LayersTable对象://GelHueCLinnciitdoaimcntandstartlIkTransactionManagerDatabaseacCinDb=usiii^(TraiisHctionacTransHHcCurDb-TraiEactifHNhlaitager.SlaitTrwiisKtiEiO)"Thisexamplereturnsthelayertableforthecurrent,dalabaseI^iyerTable-ftcLyiTbl;ncLyrTbl=acTiaiis.GELObjed(JicCiiLDb.LsiyeiTableId.OpcnModc.ForRcad)asLaycrTable;WDi叩典oftlieLmnsacLioi]9、AutoCAD中集合对象是指?列举出部分实例。-AutoCAD将大部分囹形或非图器对象地行蝙组,蛆成集合或客器对彖.■然集合包含了不同的数临类型,怛是可以便用相似的技术乖姓理它们“每T集合都提供了向H中添捕唬或从集合中中曲取项目的方法.大釜致集合是通过Add成方法滞加对象到集合中■大多数集合提供相似的方法和属性,使它们易于使用和学习>跖皿七特性用于获取集合中从等H始的对象个数Item函数从集合中返回一个对象■在AutoCAD.NETAPI中的集合成员的例于有:a图层符号表中的层表记录ACAD_LA¥OUT字典中的布局-DocurrcntCcIlection中的DocumentabJnck引用中的Attributes 鬓名雀-WTableRetwd包含一个精定块内定义的所有图元BlockTabic包含图密中的所有块MaincdObjcclsDictionary-包含囹寤中的所有字典DbiiejisioiiStyleTable包含图形中的所有标注样式DocumentCoUectio]!包含当前谜程中打开印所有图形FileDe-paidencyCollection包含-■文件修藏性r列卷中的所有项GroupDictionan-包含围形中的所有蝙纽HypeilbLkColleclioji包含给定图元前所有超链接LayeiTable包含图形中的航有囹掠LayoutDictiojiaiy包含图形中乾所有布局LinHtyp*Tfible包含图形中的而有践型集合名称J;范MenuBarCollection包含AutoCAD中当前显示的所有菜单MtrmGio叩Collzicm手恃,^HflCAD圣前加女工!占宥七W岌::il白定义史云不i.A质KCUIN立住,r可以包含景中.1具广上Ribtm选上卡算厂亡之义心用户暴面PlotConfigurationDicti&naiy。窝善:形中笆合名二L•:H丑RegisteredA|)pli«irionTable坂含:E她中,所有2.']■:片应用蓦*Tex!StyleTuhlc坂含空蚓中冷.所T7文宇癖丸UCSl^ible口含誉:形中⑵r山刘+E■•我:Lt”ViewTaWc仞含空蛇中的.所TT总里UiewportTable。含落*中芒.所为右110、 如何定义一个用户命令?CommandMethod所接受的属性包括哪些?命令和AutoLISP函数可以通过使用两个属性:CommandMethod和LispFunction就可以在AutoCAD.NETAPI中被定义使用CommandMethod属性定义一个命令,CommandMethod属性期待一个字符串值,它将当作被定义命令的全局名称。和全局命令名称一起,CommandMethod属性还能接受如下值:[CommandFlags]-定义命令的行为【GroupName】-命令组名称[LocalName】-本地化命令名称,通常用于特定语言[HelpTopicName]-当按F1键时应该显示的帮助主题名称[ContextMenuTypeFlags]-定义当命令被激活时相应的快捷菜单的状态[HelpFileName]-包含当命令激活并按F1键时将要显示其中帮助主题的帮助文件11、 如何通过代码调用AutoCAD内部命令?A、 使用SendStringToExecute方法可以直接将命令发送到AutoCAD命令行。SendStringToExecute方法将单个字符串发送到命令行。该字符串必须包含提供给所执行命令的参数,并依照该命令的提示顺序所要求的次序排列这些参数B、 使用SendStringToExecute执行命令是异步的,直到.NET命令结束,否则不会被调用。如果需要立即执行一个命令(同步),应该:使用COMAutomation库中的SendCommand方法,它可以利用.NETCOMInterop访问使用ObjectARX或.NETAPI定义命令,P/Invoke非托管的用于本地化的AutoCAD命令的acedCommand或acedCmd方法通过定义AutoLISP命令,P/Invoke非托管的acedInvoke方法12、 如何实现图形对象的旋转、平移、缩放?请给出具体实现。使用transformBy函数进行几何变换Entity.TransformBy(Matrix3dtransform)transformBy是Entity类的一个成员函数,该函数使用一个Matrix3d参数对实体进行相应的几何变换Matrix3d是一个四维矩阵,常用函数:Translation:生成一个移动对象的矩阵Rotation:生成旋转矩阵Scaling:生成比例缩放矩阵。Mirroring:生成镜像矩阵publicstaticvoidMove(Entityent,Point3dptStart,Point3dptEnd){ent.TransformBy(Matrix3d.Displacement(ptEnd-ptStart));}publicstaticvoidMirror(Entityent,Line3dline){ent.TransformBy(Matrix3d.Mirroring(line));}publicstaticvoidScale(Entityent,Point3dcenter,floatscaleAll){ent.TransformBy(Matrix3d.Scaling(scaleAll,center));}publicstaticvoidRotate(Entityent,Point3dcenter,doubleangle){//newVector3d(0,0,1)应该是用来标识基准平面的,这里指的是在*丫平面内旋转ent.TransformBy(Matrix3d.Rotation(angle,newVector3d(0,0,1),center));}13、 如何实现AutoCAD填充过程?创建填充必须遵循的步骤;(1)创建一个空的填充对象X5指定坑充对象所在的平面设后填充对象的美联性<4)指定填充图案孕<5)添加填充边界>(6)显示填充对象「(7)将Jt添加到税型空间-GO如果是美联性的境充将填充对象与边界馆定

构暗函数Hatch。设置关联性boolAssociative(set.gel:}v用口可以剧建美联的或非美联的图案职充。关擘的图案填充链接到它们的边界并且会在边界改变时肖动史新,而非关黑的图变M充则独立F它们的边界设置填充模式二SetHatchPaHern(HatchPaIternTypep^ttemType,firingpa湖e爆mwj*■PirDcnued:Artcatl.pat文忤中定又的围案名中诞行选择^UserD?nnfri:用当前线型定义直线图案Cnit«iil>cllud:MPAT而不是swLpar文件中遂择图案名/输入固案名爵时,名称必源对由图取斐罕指定附文件有蛇定义填充边界"创建图案填充时是美棒步骤,边界可以是直线、圆眼、同、=务段线、椭圆、杵条曲线和面域的任意坦舍ApptindLoop(HatchL0tiphatchLoop)AppendLoop(HatchLocpTypesJoopType,0bjectldCollectiondbObjlds)设置图案填充样式HatchstyleHatchStyi®{set;get;}14、如何创建用户菜单和用户工具条,请给出具体实现过程?菜单:[assembly:<.!ounmnniiidCIs(typeior(MyMeiiui.ridsCneohniiiidis))]ji^jnespmceMy^lemupublicclassMyMenuClsss:lEKtEnsinnAppliEiitiimi'oait■pxtMpniiExLFiiiisiiti[]iTi_CoiiIpxILMfeiiiji:.加载命名空间usingSystem;u&mgAutod^k.AutoCAD.Runtime;usingAnted加载命名空间usingSystem;u&mgAutod^k.AutoCAD.Runtime;usingAnted吨k.AutoCAD.Windows;定曳类L1自定义上下文菜单添加AddConWctMmu函数定文菜单添加RemQV-ftGonlextMenu函数移除菜单添加菜单操作函数实现Inltlaiim。fuTermlnaiteO函数工具条:定义全局变量,构造函数设计与自定义菜单的相同定义工具条及按钮把工具条加藏到工作空间保存用户自定义工兵闺

[CDmmandLIethodC'LDadRoad81)]publicvoldaddT口tallbai^QiTg】barnewKb=newTool心arC公路辿帆绘制工具七mMjenuGTDiip);new'rb.ToalbarOrient=ToollbarCiientfloating;dswTU-TddIbarVisible=ToolbarVisible.shcrwr;newTti-Desciiption"公路边枇结制";TDQllbarBiiitonitbBtn=newToolbarBmttonftiie^vTbrl);Ma^roGmiipoMncroGraiJip=newMacroGt'oiipC1"rnyMenuGroiipO!!,M.MermiGrcmpj;MemiMacraoMenifMncral=newMemAIacrat^facrDGroiiip^isMeniiMacrcOr,1,BSetFirst!,?"MeniiMacrcOl",MacroTjTpeAtiy);tbEtii-newToolibarButtonXnewTb,-1);oMenuLMacroljnacroiSmaJlIm^ige-C:\RoiadSet.begtns>et.BLIP11;oMenuLMacroljnacroXargelinage— C:'.RoadSet\begiii5et.BMF1';tbBtnJiame="fe始里程设置气tbBtD-MacroID1^olfelenuMacio1.ElementlD:foreacli(Workspacewkincs.WorLspaces){WorkspaceToolbarwkTb=newWosrksp就eToolbar(wrktnewTb);wk.WarkspaceToolbars.Add(wkTb);uskTb.Display=1;JsawCuiOc15、 有模态对话框和无模态对话框有什么区别?如何实现无模态对话框?模态对话框为不可切换焦点的对话框,一般用于静态的输入或输出数据或切换至AutoCAD拾取对象操作。模态窗体显示时,程序的焦点始终保持在模态窗体上,如果要切换到AutoCAD环境进行交互时需要EditorUserInteraction类来切换焦点到AutoCAD的命令行无模态对话框为活动焦点的对话框,程序焦点可以自由的从AutoCAD界面到窗体之间切换,用于用户与AutoCAD环境的即时交互操作过程:1) 引用命名空间Autodesk.AutoCAD.Windows2) 创建用户控件并添加相应控件3) 创建面板并加载用户自定义窗体4) 添加拖拽操作,从Autodesk.AutoCAD.Windows.DropTarget派生对象,并重载OnDrop5) 在自定义窗体中创建“拖拽创建”控件,假设命名为“lb_drp”6) 自定义用户窗体的构造函数中添加事件处理16、 列出ObjectARX.NETAPI可以创建AutoCAD数据库中的所有图形对象,并给出创建代码。17、 用户交互输入包括哪些?如何判断用户输入值的有效性?A、读入字符串class用户主互Editit:ed二AutodeAutoCADuApplication3eevices-Applicalloil-DiJciLLentHatisiger□IdiictLveDacujierrtuE±itor;flregioTi诙入字符串[Coruao-idllethad.(^Kead5trin^^)]publicvc-Ld£.9adStELTigG'lProinptStrinsOptionsplnputBlockNane=nevPrarMptStrineQptiotis :PcojiptResultjEesuL't=ed,5cdSinns(plriputBlockW-McJ:stringpBlackMaoriE-—pEtesu.lt.S"trin^Eiesult.Trira();B、读入Double型数据B、读入Double型数据读入型数据SreEion渎.X.dtmb22!封:据[CoiunandJIethadf'Eicaddoublc'1]pubLievoidReaddoub1b0PronptDuubLcDptioilspRaDp=newProniptDoubleOptions(*'n输入你的Doub1匕数据;');Pran.ptDoub1BResultpDouResult=ed.GstDaubLetpRaOp);doublepRadius=pDouResuit.Talus:} iendregicm。、读入Point#region读Xpoini[rQiijTiaridWethod(^ReadPDint")[publicvoidReaidPoint()PronjjtPoin-1:OptionspFtfOp=nevPranpiPaintOirtions(nAnSwAfi:r)ProiiptPoititResultpPoResult=&d.GetPoirrt(pPadp):if{pPdRbsu11-Status—Prompt51actus.OK)PointedpPt-pPofirsultrValue:elsereturn.D、拾取实体[□□iinaridJfe-thodCEtvtit愕}]publicvoidGetEntity()Databasedb=HostApplicationsetvices-VorkingDatabasB;PrcorptEntityOptLanspEntOp=nevPronp-tEntilOptions("):FronptEntityResulipErrtResult二eiGetEntityCpEntOp);if(pEntRe^nlt.Status--PronpiStatus.OK)ObjEdTdpEntld=pEn1Resuit.Objec!Id:using(Transactinntraris-dbBTransactiohnCana.ger.Sl^ElIransacliont])butityoEnt-.it~11:■?}irut:.'k7Oti:ct1pit-1d.OicuY.ode.^or^.c:ic.;risereluin;E、打开dwg文件[CanjiarLdMctliijdCDpendvg'j]publicvoidOpendwg()OpenFileDiaLoEpOpenFDia-newClpenFileDiaLogffdws^jniillu^dve^j^apenfile^jDpeuF11bDIs!og・OpenF11eDialagFLage:.DefaultIsFo1der);rOperiFDia-ShowDialogO:siringnajiB=pOpeTiFDis-Filensme;DocumentDoc=ADDlicaftion.DocumentJIanagerrItdiAd:iveDocimeTit:Editored=Doc.Editor;if(IFile-Ezists(nana))name-Ho^tApplicsftionScrviccs.Curren-t.FindFile(nairiejD0GaDaiabase5FindFileHint.DefauLiJ,usingQjalmb3SEdb-nevrDatabsse(ffaLse))iJti.ReadDweFile(najne,Fi1eS?iarerReadWrite?true,null).□sing(Transaciiant=Doc.Iransactioidllanager.St:artlransacti'3iL(JJ十.CorranitU;18、一个AutoCAD的图形数据库中可以包含多个块表BlockTable和BlockTableRecord吗?块表:包含模型空间、图纸空间和用户创建的块定义,块表记录中保存了图形数据库中的实体。生成一个实体对象的实质是向AutoCAD数据库的块表记录中增加一条记录。在ARX应用程序中,这个过程是通过ARX数据库操作函数来完成的。因此,BlockTable只能有一个,而BlockTableRecord可以有多个19、AutoCAD可以定义哪些类型的块?它们有何区别?存在什么地方?带属性块的属性指的是什么的属性?分别给出所有类型块定义及引用代码。带属性的块和不带属性的块,存在于当前图形数据库的块表里,属性指的是:使用AttributeDefinition类创建属性对象,它是从DBText类继承而来A、属性文字的插入点、高度、旋转角度、对齐方式和宽度。B、属性提示(Prompt)。C、属性的默认值。D、属性的模式,如不可见方式(Invisible)、常量方式(Constant)、验证方式(Verify)E、预置方式(Preset)。F、属性标签名(Tag)1)不带属性的块:A、块定义:I:...:-Il'-IlI:.,.,•广i时:],£消|publicmidAddHZMlmk'sit:3b:isedb=MostA[irlicatioriSenricisiSrWui^irieDatabase:Ob-jcrtldblkid://a31ft定岌usine[rf^isaction.tr:ari3=db.Tiansact ee,Stait7iansaction0)ElockTahlebt=transuG>?tObject(db.BLncklabl^IcUOpenltoiieBFoilTritslaz-BlDcklable-.TSib1■=:J:$C:Htd0[卜1三如=:_::吒,-;、买二::]F瑁吒域thI原闩blk.Oriein=nevPoint:id<0,0PD):Paint3dpCEtner=tie»jPoint3[l(0,0,0^;〃刖建外句的园 CircleC=tiffwCircleCPoint3(LOtieii%i?ectot3d.IAriSj328):z/eoinrf的囹形LintLL=IV9VLuw(iwvFeint3d(-]52-60*15E.60jU).iwvPoint3d(15E.60jL52u60»0).LinsL2=navLanMnmvPoint:id<-228,SO,-】田MO,0),newFint3d(22B,SO,T52M0,0)LitieL3=il«jLin*(iL«jPoint3d(-1E2.60.,-1E2.60,口、tierPoint3d(-L52-fiti,22B.5D?□>LintL4=nevLula(nevFeintJd(152i50j~152.60j0)tiwvPoint3d(15E.60j228u90..□).LineL&=ksvLinMnmvPoint:idCDP1523。EksvPointjdCD,戏&9H0:1):b1L:,.1-lripen.d£n.t11yILLJ.bit,AppendEtitity<L2:'.bllr.AnDehdEtrtitv(L3)blkid=bt.Add(blk);trans.AddNewlyCreatedDBObject(blk,true);trans.Commit();BlockTablebt=trans.GetObject(db.BlocklableldclassAutode-sk.AutoCAD.DatabaseServices.BIockTahi?ElockTableRec&rdblit=newElockTableRec&rdO:classAutodesk.AutoCAD.DatabaseService-&.BIockTabl&RecordB、使用BlockReference类定义快引用,using(Transactiontr=db.TransactionJIariaser.StartTransactionO)1 J/创建埃弓I用BlachTablebt=tr.CetObj©ct(,db.BlockTableldjOperJitode.ForRead)asBlo?kFab1cBiackTab1;Recordnode1Space=tr.Get0bjeat(bt[Blo^kTablcRccard.ModeISpac&]OpEriModos,ForWri^te.)asBlockTableRecoid;BlockReferencebr-newBlockReference(newP3d(D3孱0)3blkid),IWg1耳WC巴・Hpp已ncLEEITV中口;/厂|■亡决空;M:争加刊技表见牙:tr.AddNewlyCreatedDBObject(br3true);//]§袒事物濡加决拶S=到—据库tr.CoiruTiit();2)带属性的块A、定义publicvoidIddRefBlock(jDslah-as-edb=HostApplicationSetvices.VoikingDsisbsse;lining(Transactiontrms-=dbuTisnsactiordflanager.StartrtanssctiDnO)z1DdklablaKBCOEdbtr=nBVBlocklBblaEecard();ziDdklablabl二traris»GetObjeiTtfdb.BlDdklableliOperJIade-FDiVrite)asBlodklsble//浙建新的块■记毛strtngblknsM="三用点”;btr»ITajie二bLktisi由;btrBQrisiti=ne^Pairrt^dCO,0,0):PdirrtJdpCerrtci:=nevPaint3d(0?D,0):〃创51中心点DBPointpDEPt=newDBPaint(^Center):打创里回Ciccle-j^Zic—nexjCircleCjZZeirter,hewVectdt3^(Q,D,1)40.2E);〃们建三角也 ^ '''PalylmepLtl-newPolylrrbs(4)„pTtl.AddVefteiAt(fl?neuPoiat2d.(0j1)40?%0):pTtl.AddVefteiAt(]?neuPoiat2d.(Q.866.,~0-5]?%口);plt:i-AddVeete^At(2^iwurPoitit2d(-DuSfiEj,-0.0s%0);plt:i-AddVeete^At(3^iwurPoititSdtOj山0.,缶0),PoLylinepPl=neurPoLyliiw(2J,pPLuIddTertexit(0^neuPDint2d(CLPj,0,0$0?Dj,pPL.AddTertE:sAt(L,nw?zitit2d[2.!?,0?,0,0RD):而有就 7 PairrtJdrPDEitiEin-nwPoint3d(LCL2,0);AttributeDefinitionpAttDecf=newAttributeDefirdtion(pPDsitim.“坡头二“三用点宫七『输入三所点矿db.lE:3rtstyle);pAtrDefrHeichi=]:PaiirtJdDPcisi-tiDnZ=nevrPoiTYt3d(L-L2,0]:AttributeDefmitlop.pHYaue=nwAftributeDefiriftiran(pPositinnZ,"0,00'^"商程ifi','辅j入高程ifi"』db.Twctstylr]:pEOJBLie.Heig.lrtsL.刀♦定■的切点htr.Origin.二newPaini3*(fl,D.口];"将图R;买体凌加到块表记录■htc.AppendErrtity(pDEPt):B、块的引用:同上20、 试分析Autodesk.AutoCAD.DatabaseServices与Autodesk.AutoCAD.Geometry中的几何对象的区别、联系与作用?前者参见P98,后者参见P29221、 如何在当前文件中插入外部文件中的块?在当前AutoCAD数据库中导入其他文件中的块,但文件本身是不会被当作一个块导入实现过程:A、首先定义一个数据库对象来表示包含块的文件,该数据库对象会被加载到内存中但不会被显示在AutoCAD窗口中B、 调用Database类的ReadDwgFile函数将外部Dwg文件读入到新创建的数据库对象中C、 调用Database类的WblockCloneObjects函数将外部Dwg文件中的块对象复制到当前数据库中程序实现过程:1)创建R标数据库和源教据库DiK'nmenlColIvt'lmiridm-ALitodcAkuAuitDCAIXApplicfitionScrviEtSu.IppJication.Ilacijnicnt^llanagcr;Editn-ifd=dniPMdiAclii'eDocumeint,Editor;Ihiiuhii1*.!1=dlniA1dii.*^elLv<!Daeiimciii1,DuilAbniie;DuilubuhM:suurccDb=hlwDmUil以%)21(「』1强&Iruc);耳创建集合变五来有储块ID的列表ObjecddCoLIettionHocUds=n«wObjectldCollectionO;把源DWGi^A源数据库sourceDbsourccDb.R<lh(1DwgFile(soiirccFH(?NamcSystemrIO.lileShare.Read*tnie^

4)读取外部块Objectldusmj*(Irunsii-LlJon4)读取外部块Objectldusmj*(Irunsii-LlJonmvT=trn.SlurlIrrnismctiimO)JJ罹块无中检代每个映Ibrcach(Object]dbtrldiiabt)IJI^klLibleRccurdht「-(llluckIub[eRtLord}tnL(iet(»jcct(btrld,I)|i-Li]Mndt.l'm'RtuidH物I舛);ii只诺加有北埃和*1叮明In切U瞰是非和非"的块)if(:blr.liAiiiiiiiiiTiQiig&&ibfr.KLMVO'iiillihlDckTd^uAdkt(1bEr1(l)xhmm华gMM ■』i*-:更三n好r-nl;.、uulit. 计样敌场表『用登斌所勺用的资魏□没有作改变.不需要提交事务启T开块衣BhtkJ'^iljlLbt={blurkT4Lbk*>tj]j.Gc[Obje€(^uurrrbb.BhckTiibkld^OpenMudf.FurRi'ud,ml就Autodeskn4ut«CAD.DatabfiiSf:Servicc&Tinin喝心i,>n.Mtriage「tm祯UHcDLi.TEfL皤UitumAlkilii飘ir£5}克隆到目标数据库中村用WblDLkCloneObjeers把所有的块质源库拷员块到目的库的块表中。这只能实现导入块到指定的数据席中,但不是深度克隆,若对块参瞬。实行深度克晓的话,其所引用的块也会械克隆到指定的数据寐中sourceDbAVblockClonellibjettsiblockldls,dNtUh.RlockTMleldmapping^D叩的ateR财ordCionJn^+Replag.瑜网);22、如何在当前文件中插入其他DWG文件?在当前CAD图形文件中加载其他DWG文件其实质就是源数据库读取图形实体添加到当前的图形数据库中,基本过程如下:1) 创建目标数据库和源数据库2) 通过源数据库的ReadDwgFile方法读取外部DWG文件3) 使用Insert方法将外部DWG文件的源数据库合并到目标数据库中,那么外部文件在目标数据库的块表中就以新的块表记录存在ObjectIdInsert(stringblockName,Autodesk.AutoCAD.DatabaseServices.DatabasedataBase,boolpreserveSourceDatabase)ObjectIdidBTR=destDb.Insert(fname.Substring(n+1,fname.Length-n-5),sourceDb,false);4) 将新建块表记录加载到当前块表记录中5) 删除新建块表记录DBObjectdbObj=Trans.GetObject(idBTR,OpenMode.ForWrite);dbObj.Erase();23、AutoCAD有哪些选择集过滤规则类型?请列举部分实例代码。选择集过滤规则类型:A、 使用选择集过滤器定义选择集规则B、 在选择集过滤器中指定多个条件C、 添加复杂的过滤器列表条件D、 在选择器过滤器条件中使用通配符E、 过滤扩展数据实例:

实例:使用过滤器选择圆图形实体piunimnnd\Tflh«bLl(,!Fill 独publicvoidFintei^eleeiiOfliSelO{M换得当前丈档的拍辑舜EditfiiacDocEd=\ppli>c3tiQni.Dii>£iLiEiiejirMaiL3gci\M>dlA!eriY>cDocume]iit.EJ1rar^B创建一个TypedVraBue数蛆.用于定一义过建条件l>pc!dXSiluel|flcTypVfllAr=new1扩叩4\时睥[11;SW1'pV州AnJSHVsiluHmwJ'vpedV'uiJije((ihnDilCudt.SllMnhT'CIRCLErK0);0戒值过渡条件陪秘1用〔叫而而对蒙Sclwll加iFIH刊ac^lF(r=mew5fk<lluiiFI]1k'ttacT>[pVaiAr|;&要求在图形区域中选择州象PrtunptSLHiTlidnRcnuIiacSSPrcrnipt;oicSSPrampt=aff>MEjd.G£iSekrlloii(ft£5eLFtr]i;0如果提示状哀是OK,对Si就被选择了if位 wpi孺 ==PniiiipiSmin\POK)SLleclicHaStldcSScl=m£S^P「empt・、'Mu以印[疝Ei加胡hg,U"fDii仙唧”所选择对期个数:1,1+atSStt-CwiiBLToSkiliUgO);rlsr(辿叫顷或顶时州再心口询哗广所选择对软个故・');\实例/?获得当前文档的编辑器EditoracDvcEd=kpplicut*iin,DocuinentMaiui{ger«MdiActivcI>()cuniciit.Editor;H创建一个TyptdValiic 用于定义过寤条件Typed\'alm[|arTypVrulAr=newTypecR\klut[3|:3cTypVaIAr+SetVuIuc(newI>pedValue((int)DxTCihIcjCoftor}5),0);;ikT;|AnlAi\SftViiluv(ii顷Ty[]cdValuc((int)Dxf(»diJ>tnrt,"CIRCLE”),1);bcTypVralAr*SetValue{iicwTypcx)Valuc((int)fJxftuclt\I.ayerFsamc,"Uhb}t2)://赋值过滤条件给SeltL-tionFilterXl象SelectiimI'ilttiracSelFlr=newSelectiimIiltur^acrvpVrtlAr);1要求在图形区域中选择对象PromptSclecdonResultacSSPrumpt:acSSPrimipt=acDocEd.(ittSeledi<»n(3£SelFtr};n如果提示状恋是ok.对象就被遍椅fif(dtSSPmiripl.SUiu^==PrcjniplSlaius.OK)SplcclionSftjicSSeT=acSSProm|JLVflluo^ApplkatioH.ShQwAlertDialoKC,所选择对象个数:"十jkSSMCqunt,ToStri哗0);else{AppIkatifm.ShowAlertDialogC1所选择对象个数;(T);i实例1:选择半径大于或等于5.0的圆//创建一个TypedValue数组,用于定义过滤条件TypedValue[]acTypValAr=newTypedValue[3];acTypValAr.SetValue(newTypedValue((int)DxfCode.Start,"CIRCLE"),0);acTypValAr.SetValue(newTypedValue((int)DxfCode.Operator,">="),1);acTypValAr.SetValue(newTypedValue(40,5),2);//赋值过滤条件给SelectionFilter对象SelectionFilteracSelFtr=newSelectionFilter(acTypValAr);//要求在图形区域中选择对象PromptSelectionResultacSSPrompt;acSSPrompt=acDocEd.GetSelection(acSelFtr);实例2:选择Text或Mtext对象〃创建一个TypedValue数组,用于定义过滤条件TypedValue[]acTypValAr=newTypedValue[4];acTypValAr.SetValue(newTypedValue((int)DxfCode.Operator,"<or"),0);acTypValAr.SetValue(newTypedValue((int)DxfCode.Start,"TEXT"),1);acTypValAr.SetValue(newTypedValue((int)DxfCode.Start,"MTEXT"),2);acTypValAr.SetValue(newTypedValue((int)DxfCode.Operator,"or>"),3);〃赋值过滤条件给SelectionFilter对象SelectionFilteracSelFtr=newSelectionFilter(acTypValAr);〃要求在图形区域中选择对象PromptSelectionResultacSSPrompt;acSSPrompt=acDocEd.GetSelection(acSelFtr);实例:选择所有文字字符串中出现“The”的多行文字H创建一个Typed\?31ne数组.用于定义过滤条件acTypVaLV=u倾TypeiB'silucP];ucTypVn14r.SetVhlunen1ypedValiK((int)D\1CudcfSt3rL'fMTEXT1T),Q);■cTypVuLAr.SetVuluI%pedVhIuc((int)]>xfCiidc.Text, 1);H赋值过滤条件给SelectinnFilfer对象SekctinnFiltPiracSelFtr=newSellectioaiFilitej_(acTypVailAr):甘要求在图形区域中选择对象IfcrnniptSelcctinnResuItacSSPrompt;HcSSPnrmpt=acDoeE(LGe4S«lectk>nUc$eiFtr);实例:查找出包含通过“MY_APP”应用程序添加的外部数据的圆/.■'获一当前文档的编辑器EditoracDdcEcI=Appiicalioo^DocigimenfManS£Cr+MdiActiveDoemmentBdilor-〃创建一个T/p<?dViihw数那用于定义过滤条件Ty|jedV^luc[|acTypValAr=newTtptdValu<i."[2|;ucTypVaIAr.SetVmlue(newfypud\silue((iiat)DxFCude.Start4,lCirctell)sB);acTypVaIAr-SetVfllu^niewfypcdXalue((int)DxfCudc.ExtendedDwtaRegAppName9ffM¥APP'I);f/陌值过沌条件^StlKtinnFiltcr肘象Stkctioii acSelFtr■newSekcrioiiIiltci(ac1ypVaiAr):H要求在图形区域中逸择对彖PourkiptSelcLLiuiiRu^ulI ;ueSSProinpl=atDocEd.GelSdt^eliuiri(acSelFt24、在AutoCAD中如何给一条道路添加扩展属性数据XData?请给出具体实现。1)扩展数据需要一个唯一的应用程序名,可以通过acdbRegApp()进行注册,名字最长可达31个字符2)由于每个数据库对象可以附加多个应用程序的数据,所以在结果缓冲区链表中,应用程序名是每段扩展数据的第一个数据,其后的结果缓冲数据都归此应用程序名所有具体实现:publicstringappName="Road";[CommandMethod("setXData")]publicvoidsetXData(){〃选择实体PromptEntityOptionspEntityOptions=newPromptEntityOptions("\n请选择道路");PromptEntityResultpEntityResult=pEd.GetEntity(pEntityOptions);if(pEntityResult.Status==PromptStatus.OK){ObjectIdpEntId=pEntityResult.ObjectId;using( pTrans=m_db.TransactionManager.StartTransaction()){EntitypRoadEnt=(Entity)pTrans.GetObject(pEntId,OpenMode.ForWrite);TypedValue[]vals=newTypedValue[]{//注册应用程序newTypedValue(Convert.ToInt16(DxfCode.ExtendedDataRegAppName),appName),newTypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),"中央路”),newTypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),"沥青路面"),newTypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),"2000"),newTypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),"双向")};〃创建缓存ResultBufferpResBuff=newResultBuffer(vals);〃设置扩展数据pRoadEnt.XData=pResBuff;pTrans.Commit();}[CommandMethod("ReadXData")]publicvoidReadXData(){〃选择实体PromptEntityOptionspEntityOptions=newPromptEntityOptions("\a请选择道路");PromptEntityResultpEntityResult=pEd.GetEntity(pEntityOptions);if(pEntityResult.Status==PromptStatus.OK){ObjectIdpEntId=pEntityResult.ObjectId;using( pTrans=m_db.TransactionManager.StartTransaction()){EntitypRoadEnt=(Entity)pTrans.GetObject(pEntId,OpenMode.ForRead);if(pRoadEnt.XData==null)return;//得到实体扩展数据缓存ResultBufferpResBuff=pRoadEnt.XData;//转换成!^部¥涮。£数组TypedValue[]getvals=pResBuff.AsArray();stringpRoadName=getvals[1].Value.ToString();stringpRoadMtia=getvals[2].Value.ToString();stringpRoadYear=get

温馨提示

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

评论

0/150

提交评论