【word】 应用ObjectARX实现CAD图形的自动分幅.doc_第1页
【word】 应用ObjectARX实现CAD图形的自动分幅.doc_第2页
【word】 应用ObjectARX实现CAD图形的自动分幅.doc_第3页
【word】 应用ObjectARX实现CAD图形的自动分幅.doc_第4页
【word】 应用ObjectARX实现CAD图形的自动分幅.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

应用objectarx实现cad图形的自动分幅应用objectarx实现cad图形的自动分幅郑睿博周荣福徐海林许保瑞江彬(中国矿业大学资源学院江苏徐州221008)科学论坛啊i摘要本文利用成熟,高效的autocad二次开发工具objectarx开发了一个窗口剪切程序,实现了cad图形的自动分幅.该工具在autocad中注册为外部函数命令,可直接在autocad中调用,提高了工作效率以及准确率.关键词分幅二次开发objectarxcad中图分类号:p209文献标识码:a文章编号:i009914x(2010)130l1i一011基本思路cad图形自动分幅功能的实现需要解决以下2个主要问题:a图形自动剪切功能的实现:b为完成剪切的图形加图框,存盘保存.图形自动剪切功能的实现是cad图形自动分幅程序的核心.被裁剪实体分为曲线实体,填充实体,文本,块等.因此,针对不同实体的特性,可以利用autocadobjectarx开发工具提供的不同的功能函数,对实体采取分别裁剪的方法.2程序的基本模块及实现21剪切曲线实体该部分分为求出剪切边界和被裁曲线实体的交点,交点排序和裁剪三步.如果被裁线段的起点在窗口外部,则需要删除线段的奇数段,相反则需要删除线段的偶数段.(1)窗口边界对开环实体进行裁剪开环实体主要指直线段和圆弧,下面给出它们和窗口边界的求交方法的部分代码:intcrossptsnum,n:/交点数adsnamewindowent,ent:/分别代表窗口边界实体和被裁线段实体acdbentitypwindowent,pent:/窗口边界实体和被裁线段实体指针aedbobjectidpwindowentid,pentid:aegepoint3darraypoints:/=2维点数组pointspwindowent=selectentity(pwindowentid,windowent,aedb:kforread):/将adsname数据类型转化为对象指针pent=selectentity(pentid,ent,acdb:kforread):pent一>intersectwith(fpwindowent,acdb:konbothoperands,points,0):/pent指向的实体和pwindowent指向的窗口边界实体进行求交crossptsnum=points.1ength():/计算交点的数量crossptsnum调用antocadobjectarx提供的实体求交函数intersectwith(),如果交点数为偶数(包括0),则说明起点必在窗口边界外,相反,起点在窗兀边界内.(2)窗口边界对封闭实体进行裁剪对开环实体来说,通过访问autocad实体的dxf码可获取该实体的起点和终点,然后通过射线法可判断端点在窗口内部还是外部,从而确定被裁线段被交点所分成的各小段的取舍.封闭图形却不存在此方便条件,但由于封闭图形可定义面域(region)所以可通过组合使用面域的三种布尔运算(union,ersect)来完成窗口边界对闭环实体的剪切和覆盖.22剪切填充实体在cad图形中,填充实体所占的比重较大,所以有必要对填充实体进行单独处理.对有多个边界的填充实体的剪切操作的基本步骤是:(1)首先将封闭的剪切边界曲线和被剪切的填充的外层边界实体分别生成面域,然后利用面域的布尔运算求此两面域的交集,此面域交集作为新填充实体的外层边界,重载函数appendloop()进行添加:(2)从外至内依次将各层内边界生成面域,分别求其与剪切边界生成的面域的交集,并依次用函数insertloopato将各面域交集添加为至新的填充实体,做为新填充的各内层边界:(3)按照原填充对象的填充属性(图案,样式,比例)对新填充实体进行填充:(4)最后删除原填充实体.2.3剪切文本对文本进行剪切没有任何意义,所以只根据其位嚣决定删除还是保留.对单行文本,不能准确求得文本范围4个角点的坐标,只能采用acdbextents类得到包围文本的长方形的最小点(长方形左下角的点)和最大点(长方形右上角的点),然后推得长方形的另外2个角点,当且仅当4个角点全部落在闭合剪切区域内时才将此文本保留,否则予以删除.24剪切块由于块对象作为一个包含多个实体对象的块表记录,有其特殊性,在不解块的情况下对某一个块中的各个实体对象进行剪切后,与其相同的所有的块的形状都会随之而改变.所以仅将与剪切边界曲线相交的块解块后进行剪切,而对与剪切边界曲线不相交的块对象,若在边界内部则保留,否则就删除.2.5为完成剪切的图形加图框objectarx支持多重数据库技术,即允许用户同时打开多个数据库进行编辑.利用了这一技术可以为剪切后的图形添加图框并将其存盘.下面是具体步骤:1.新建一个临时数据库对象.2.利用0bjectarx数据库类acdbdatabase的成员函数wblock0将剪切好的图形写盘.3.将新建数据库定义为autocad工作数据库(workingdatabase).4.为图形添加图框,坐标注记,图名等信息.5.存盘.下面为部分源代码:acdbdatabase*poutputdb.*pbasedb:acdbdatabase*pmapboundarydb=newacdbdatabase0:新建临时数据库pbasedb=acdbhostapplieationservices()一>workingdatabase0:保存当前数据库指针aedbobjectidarrayobjids:/此处构造剪切后图形选择集,然后将所有实体对象的id写入objids集合对象中/pbasedb)wblock(poutputdb,objlds,basept):acdbdatabase*pdb=acdbhostapplicationservices()一>workingdatabase0:acdbhostapplicationservices()一>setworkingdatabase(poutputdb):设置当前数据库下面函数完成添加图框,坐标注记等具体工作源代码从略mapboundary(poutputdb,pmapboundarydb,ptlb,nindex,nyear,nmonth,strmapname,drawingno,ncol,textid):acdbhostapplicationservices()一>setworkingdatabase(pdb):将工作数据库改为原数据库doutputdb一>saveas(strfilename):strfilename为存盘文件名deletepoutputdb:deletepmapb0undarydb结语cad图形的自动分幅技术可作为图形绘制的有力工具,尽管autocad中没有此项功能,但借助于autodesk公司提供的二次开发工具objec

温馨提示

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

评论

0/150

提交评论