autocad中非图形特征的存取方法及应用

上传人:wm****3 文档编号:43195570 上传时间:2018-06-04 格式:DOC 页数:12 大小:17.78KB
返回 下载 相关 举报
autocad中非图形特征的存取方法及应用_第1页
第1页 / 共12页
autocad中非图形特征的存取方法及应用_第2页
第2页 / 共12页
autocad中非图形特征的存取方法及应用_第3页
第3页 / 共12页
autocad中非图形特征的存取方法及应用_第4页
第4页 / 共12页
autocad中非图形特征的存取方法及应用_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《autocad中非图形特征的存取方法及应用》由会员分享,可在线阅读,更多相关《autocad中非图形特征的存取方法及应用(12页珍藏版)》请在金锄头文库上搜索。

1、AutoCADAutoCAD 中非图形特征的存取方法及应用中非图形特征的存取方法及应用AutoCAD 中非图形特征的存取方法及应用 Http:/ 2003-3-18 0:28:38 狂沙工作室 一、引言 在进行产品设计时,很多时候只是设计出了产品的几何特征和属性,在图纸中很少涉及到其它非图形特征属性,如零件的材料、生产数量、拓扑关系等。这些非图形特征往往通过标注来实现,但在图纸本身的数据库中并没有保存这些有用的非图形特征信息。随着计算机技术的发展,尤其是网络和数据库的发展和成熟,图纸数据库中若不包含必要的非图形特征信息,就很难实现零件之间的关联及信息的相互利用,很难充分实现信息的共享。 Aut

2、oCAD 2000 以其强大的功能及对二次开发的支持和开放性,成为众多设计人员采用的工作平台和二次开发平台。它不仅能存储所生成图形的几何信息和其它相关信息,而且还允许用户建立自己的“非图形特征信息” ,以便在图形文件中提供必要的较完整的产品数据,实现零件信息的自动统计,不同零部件的关联设计,自动提取所需零件及图纸的相关特征参数等,为后续开发和生产提供保障。 二、 非图形特征的存储和提取方法 在 AutoCAD 中,图形是指存储在数据库中的对象的集合。基本的数据库对象包括实体、符号表和字典。实体是一种指定类型的数据库对象,它在 AutoCAD 中有图形表示,如直线、圆、曲线和文字等;符号表和字典

3、是用来存储数据库对象的容器对象。ObjectARX 使用户的应用程序能够访问这些数据库对象,另外,用户也可以为指定的应用程序创建新的数据库对象。 在通常的设计中,图纸中只包含了各种图形实体及实体的基本属性,如线型、图层和可见性等,一般都不包括基本属性以外的非图形特征属性,如实体的材料、加工方法等。我们可以利用扩展数据(Xdata)和扩展记录对象(Xrecord)来存储其非图形特征参数,为关联设计和CAPP 等提供必要的信息。 1.扩展实体数据(Xdata) ObjectARX、Visual Lisp 等应用程序都可以创建扩展实体数据(Xdata),扩展实体数据可以附在任何对象上,AutoCAD

4、 只负责维护这些信息,但并不使用这些信息。一个实体的扩展数据由应用程序所建立,跟随在该实体的正常定义数据之后,包含一个或多个 1001 组。每一组均以一个互不相同的应用程序名开头,扩展数据的组码在 1000 至 1071 之间,不同组码对应不同类型的信息。可用以下方法为指定对象附加扩展实体数据,获取指定对象的扩展实体数据。 (1)为指定对象附加扩展实体数据 Acad:ErrorStatus AcDbObject:setXData(const resbuf* xdata); 其中,xdata 为结果缓冲区链表,包含要添加的信息。 (2)获取指定对象的扩展实体数据 Acad:ErrorStatus

5、 AcDbObject:XData(const char* regappName); 其中,regappName 欲获取信息所属的应用程序名。 2.扩展实体词典和扩展实体记录 词典用以存储用户自己定义的各类符号表及其他大量数据。扩展实体记录就是一个 Resbuf 链表。该链表是一个数据组的列表,链表中每一节点都包含一个 DXF 组码及相关数据。扩展实体记录的 DXF 组码的范围是 1369,其中的数据没有任何限制,可以被任何其它对象所拥有。我们可以通过以下方法来实现对非图形特征信息的存储和提取。 (1)创建词典对象 Acad:ErrorStatus createExtensionDiction

6、ary(); (2)添加对象到扩展数据词典 Acad:ErrorStatus; setAt(char* Key,AcDbObject* obj,AcDbObjectId 其中,Key 为加入到词典的新对象的索引关键字; obj 为加入到词典的新对象指针; retobjId 为加入到词典的新对象 Id。 (3)检索指定关键字的扩展数据词典记录 Acad:ErrorStatus getAt(const char* entryName,AcDbObject* 其中,entryName 为指定检索的关键字; entryObj 为返回的检索到的对象指针; mode 为对象打开的方式。 (4)添加数据到扩

7、展数据记录 Acad:ErrorStatusAcDbXrecord:setFromRb Chain(resbuf 其中,pRb 为包含特征信息的结果缓冲区链表。 (5)获取扩展实体记录的内容 Acad:ErrorStatusAcDbXrecord:rbChain(resbuf*ppRb,AcDbDatabase*pAuxDb=NULL); 其中,ppRb 为结果缓冲区结构指针。 三、非图形特征存储提取方法的应用 以上介绍了通过扩展实体数据和扩展实体记录对象来存储和提取非图形特征的方法。下面通过 3 个实例来介绍其应用。 1.利用扩展实体数据保存和提取实体非图形特征 在工厂电气布线中,需要对电缆

8、设定代号、名称、产地等非几何特征,以便于对电缆等材料进行自动统计等后续工作。 (1)为电缆实体设定非图形特征 char appName40;/应用程序名 char daihao40;/电缆代号 char mingcheng40;/电缆名称 ads_real length;/电缆长度 struct resbuf *pRb,*pTemp; /通过对话框等方式对 daihao,mingcheng,length 赋初值 strcpy(appName,“diqibuxian”); acdbRegApp(appName);/以 appName 登记图形中一个应用程序名 pRb = acutNewRb(Ac

9、Db:kDxfRegAppName);/分配结果缓冲器 pTemp = pRb; pTemp-resval.rstring= (char*)malloc(strlen(appName)+1); strcpy(pTemp-resval.rstring, appName);/将数据存入结果缓冲器链表 pTemp-rbnext=acutNewRb(AcDb:kDxfXdAsciiString); pTemp=pTemp-rbnext; pTemp-resval.rstring= (char*)malloc(strlen(daihao)+1); strcpy(pTemp-resval.rstring,

10、 daihao); /将代号存入结果缓冲器链表 pTemp-rbnext=acutNewRb(AcDb:kDxfxdLong); pTemp=pTemp-rbnext; pTemp-resval.rreal=length; AcdbObject *pObj;/通过一定的方式获取需要添加数据的对象 pObj-SetXData(pRb);/为对象添加扩展实体数据 pObj-close(); acutRelRb(pRb); (2)获取指定对象的扩展实体数据 AcDbObject* pObj; char appName40;/应用程序名 char daihao40;/电缆代号 char mingche

11、ng40;/电缆名称 ads_real length;/电缆长度 struct resbuf *pRb; strcpy(appName,“dianqibuxian”); pRb=pObj-xData(appName);/获取应用名 appName 指定的扩展数据 if(pRb!=NULL) int n=0; for(;pRb!=NULL;pRb=pRb-rbnext) if(pRb-restype=1000) n+; if(n=1) strcpy(daihao,pRb-resval.rstring);/得到电缆代号 if(n=2) strcpy(mingcheng,pRb-resval.rst

12、ring);/得到电缆名称 if(pRb-restype=1040) length=pRb-resval.rreal; acutRelRb(pRb); 2.利用扩展记录对象实现关联设计 在参数化设计过程中,零件甲中的某些参数与零件乙的设计有关联。我们设计零件乙时就需要从零件甲的图纸数据库中获取所需的参数,实现关联设计。 (1) 在零件甲的图纸空间中保存关联参数 ads_real bl,fl;/零件甲与零件乙相关联的参数 AcDbDictionary *pNamedobj, *pDict; acdbHostApplicationServices()-workingDatabase() -getN

13、amedObjectsDictionary(pNamedobj, AcDb:kForWrite); /获取当前数据库中的命名对象字典 pNamedobj-setAt(“Guanliansheji“, pDict, DictId); pNamedobj-close(); AcDbXrecord *pXrec = new AcDbXrecord; AcDbObjectId xrecObjId; pDict-setAt(“XREC1“, pXrec, xrecObjId); pDict-close(); struct resbuf *pHead; pHead = acutBuildList(AcDb

14、:kDxfReal, bl,AcDb:kDxfReal,fl,0); /设置包含参数 bl,fl 的结果缓冲器链表 pXrec-setFromRbChain(*pHead);/给扩展记录对象附加信息 acutRelRb(pHead); pXrec-close(); (2) 在设计零件乙的过程中,从零件甲的图形文件中获取所需的相关参数 AcDbDatabase* pDb = new AcDbDatabase(false, true); pDb-readDwgFile(fname);/fname 为零件甲的图形文件名 AcDbDictionary *pNamedobj; pDb-getNamedO

15、bjectsDictionary(pNamedobj, AcDb:kForRead); AcDbDictionary *pDict; pNamedobj-getAt(“Guanliansheji“, (AcDbObject*/获取名为 Guanliansheji 的数据词典 pNamedobj-close(); AcDbXrecord *pXrec; pDict-getAt(“XREC1“, (AcDbObject* /获取关键字为 XREC1 的扩展记录对象 pDict-close(); struct resbuf *pRbList; pXrec-rbChain(/获取包含特征信息的结果缓冲

16、器链表 pXrec-close(); bl=pRbList-resval.rreal;/获取关联参数 bl pRbList=pRbList-rbnext; fl=pRbList-resval.rreal; /获取关联参数 fl acutRelRb(pRbList); 3. 其他应用 前面介绍了如何利用扩展实体数据和扩展记录对象来存储和提取非图形特征,除此以外,还有更多的应用。例如,在 CAPP 中自动提取零件的一些特征参数供工艺设计用,可减少重复的工作,提高整个设计过程的效率。 四、结束语 本文介绍了在 AutoCAD 中通过二次开发程序来实现非图形特征信息的存储和提取,这些方法可以大大提高图纸数据库中的信息含量,从而为后续的产品设计和开发工作提供基础,大大提高设计效率。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号