贺鹏HEPeng曰孙变富SUNBian-fu
(华北地质勘查局519大队,保定071051)
(519TeamofTianjinNorthChinaGeologicalExplorationBureau,Baoding071051,China)
摘要:本文对AutoCAD中扩展图元数据(XDATA)的数据格式进行了详细分析,介绍了扩展图元数据在AutoCAD中添加、访问和使用的方法,讨论了扩展数据在地籍测量中的具体应用,对从事地籍测量工作的技术人员有一定的借鉴作用。Abstract:Inthispaper,theAutoCADextendedentitydata(XDATA)dataformatisanalyzedindetail.Themethodtoadd,visitanduseXDATAinAutoCADisintroduced.Thespecificapplicationofextendeddataincadastralsurveyingisdiscussed,whichprovidesreferenceforcadastralsurveyingworkers.
关键词:图元;扩展数据;地籍测量
Keywords:graphicsprimitive;extendeddata;cadastralsurvey
中图分类号院P209文献标识码院A文章编号院1006-4311(2014)07-0202-03
引言:
AutoCAD有强大的图形编辑功能,在测绘领域有着广泛的应用,目前国内流行的几种测图软件系统,像南方CASS软件、广州开思,都是以AutoCAD为平台进行二次开发,而CASS软件在国内各个测绘单位占了很大的使用比率,其图形要素的属性,以扩展属性的方式存放在图元上。AutoCAD的基本图形类型有以下几种:单行文本(Text)、多行文本(MText)、直线(Line)、圆(Circle)、圆弧(Arc)、多段线(PolyLine)、点(Point)、块参照(Insert),其中多段线又分为轻量多段线及二维多段线两种,后者又可分为无拟合、二次拟合、三次拟合等几种形式。
在AutoCAD数据文件中,只是记录着表示图形元素的几何位置、形状、大小的几何坐标和表示图形元素性质(如颜色、层号等)的辅助数据。采用扩展属性,在相应的图元上添加扩展数据,可以拓展AutoCAD在专业方面的应用,使其具有一定的GIS功能。
1扩展图元数据
AutoCAD的DWG文件,图形对象并不直接存贮属性数据,相反,对属性数据的存贮是通过图形的扩展数据XDATA来实现,利用XDATA设计变量,然后将属性数据赋给这些变量来完成。AutoCAD没有提供相应的菜单命令来直接操作XDATA,要读写属性数据,借助该平台的二次开发,选择一种开发语言:Lisp/VisualLisp、VBA/VB或C++编写代码来读写这些属性数据。如果图元包括扩展数据,则扩展数据将放在普通定义数据之后。利用扩展图元数据,用户能将用户定义数据添加到任何AutoCAD图元中。
1.1扩展图元数据码扩展数据是由AutoLISP或ObjectARX应用程序创建的。如果图元包括扩展数据,则扩展数据将跟在普通定义数据之后。从1000到1071的组码用来描述扩展数据。
组码1001表示扩展数据的开始。与普通图元组码相比,在扩展数据中相同的组码可以出现多次,而且次序非常重要。
扩展数据按照已注册的应用程序名称编组。每一个注册应用程序的组都从组码1001开始,其组值为表示应用程序名称的字符串。注册应用程序名称符合APPID符号表条目。
如果需要,应用程序可以使用多个APPID名称。APPID名称是永久性的,尽管那些在图形中非当前使用的APPID名称将被清理。每个APPID名称可以拥有一个附着到每个对象上的数据组。在应用程序的组码中,扩展数据组的序列及其含意由应用程序定义。
扩展数据组码的说明如表1。
1.2添加扩展图元数据在为一个图元添加XDATA之前,AutoCAD需要注册应用名。因为一个图形可以为许多不同的应用程序引用。一个应用程序必须将其数据与别的应用程序分开,唯一应用程序识别名(APPID)用于完成这种功能。注册应用程序名之后,可用APPEND函数把扩展图元数据添加到原图元数据表后。下面的代码示例基于ObjectARX2008及VC++2005。
完成添加扩展数据的功能。
voidaddXdata(CStringappName,CStringresString,ads_nameen){AcDbObject*pObj;AcDbObjectIdObjectId;acdbGetObjectId(ObjectId,en);acdbOpenAcDbObject(pObj,ObjectId,AcDb::kForWrite);structresbuf*pRb,*pTemp;pRb=pObj->xData(appName);if(pRb!=NULL){for(pTemp=pRb;pTemp->rbnext!=NULL;pTemp=pTemp->rbnext){;}}else{acdbRegApp(appName);pRb=acutNewRb(AcDb::kDxfRegAppName);pTemp=pRb;pTemp->resval.rstring=(ACHAR*)malloc((wcslen(appName)+1)*sizeof(ACHAR));_tcscpy(pTemp->resval.rstring,appName);}pTemp->rbnext=acutNewRb(AcDb::kDxfXdAsciiString);pTemp=pTemp->rbnext;pTemp->resval.rstring=(ACHAR*)malloc((wcslen(resString)+1)*sizeof(ACHAR));_tcscpy(pTemp->resval.rstring,resString);pObj->upgradeOpen();pObj->setXData(pRb);pObj->close();acutRelRb(pRb);}
1.3访问扩展图元数据访问扩展图元数据时,必须提供应用程序名,下面的代码展示如何获得扩展数据及如何删除扩展数据。
获取图元ent上扩展名为appName的扩展数据,存入csXdata中voidGet_Xdata(ads_nameent,CStringappName,CStringArray&csXdata){structresbuf*eb1=NULL,*eb2=NULL,*apps=NULL;CStringxData;apps=acutBuildList(RTSTR,appName,0);eb1=acdbEntGetX(ent,apps);for(eb2=eb1;eb2!=NULL;eb2=eb2->rbnext){if(eb2->restype==1000){_tcscpy(xData.GetBuffer(1000),eb2->resval.rstring);xData.ReleaseBuffer();csXdata.Add(xData);}}//foracutRelRb(apps);acutRelRb(eb1);return;}
删除图元ent上扩展名为appName的扩展数据intdelXdata(ads_nameent,CStringappName){structresbuf*entbuf,*pbuf1,*pbuf2;TCHARsbuf[20];entbuf=acdbEntGet(ent);pbuf1=acutNewRb(-3);pbuf2=acutNewRb(1001);_tcscpy(sbuf,appName.GetBuffer(20));appName.ReleaseBuffer();pbuf2->resval.rstring=sbuf;pbuf2->rbnext=NULL;pbuf1->rbnext=pbuf2;entbuf->rbnext=pbuf1;acdbEntMod(entbuf);returnRTNORM;
2扩展图元数据的应用
AutoCAD的图层组织较为自由,不同类型的几何实体可以放在同一层中,可以设置不同的颜色。在DWG文件中,图形对象并不直接存贮属性数据,相反,对属性数据的存贮是通过图形的扩展数据XDATA来实现,利用XDATA设计变量,然后将属性数据赋给这些变量来完成。AutoCAD没有提供相应的菜单命令来直接操作XDATA,要读写属性数据,借助该平台的二次开发,选择一种开发语言:Lisp/VisualLisp、VBA/VB或C++编写代码来读写这些属性数据。
利用扩展图元数据,可以实现图形数据与属性数据的连接,从而可以实现信息的管理、查询、分析等功能,弥补CAD系统在属性管理方面功能相对较弱的不足。在地籍测量的内业工作中,需要将采集到的界址点信息以及宗地信息录入计算机进行处理,根据作业要求,一般将地籍数据分为界址点、界址线及宗地三类,依照具体调查要求,将三种不同数据建立数据库,将数据录入其中,进行处理。
界址点主要属性有点号、X坐标、Y坐标等信息,界址线属性包括街坊号、起点点号、终点点号、左宗地号、右宗地号等内容,宗地属性包含街坊号、宗地号、单位性质等权属调查的详细信息,通过界址线表的界址点点号及宗地号,将界址点表和宗地属性表有机的结合起来。
界址线的数据格式的设计采用双重独立式地图编码法(DIME),这种结构是由美国人口统计局用于进行人口普查分析和制图,对于宗地、界址边以及它们邻接关系的检索都很容易。
界址线表是整个数据库系统的关键,它是连接界址点表及宗地属性表的纽带,界址线表是根据双重独立式地图编码法(DIME)来设计的,其原理是,在二维平面上,多边形的任意一条边都只能被两个并且最多被两个多边形共用,因此,对于宗地的界址边来说,某一条界址边只可能属于相邻的两宗地,或只属于某一宗地,其主要字段有“街坊号”、“起点点号”、“终点点号”、“宗地号1”、“宗地号2”、“备注”、“错误内容”这几项,其中“起点点号”和“终点点号”与界址点表中的点号相关联,“宗地号1”和“宗地号2”与属性表中的街坊号相对应。
在生成地籍图的时候,以字段名为扩展属性的应用程序名,字段值为扩展属性值,通过应用程序名,可以读取界址点、界址线的属性信息,这样就使图元和属性结合在一起。通过操作图形的扩展数据,能够自动生成街坊宗地图,自动计算宗地面积,进行宗地边长、宗地地类号、宗地面积的自动注记,并且由宗地图多边形范围,自动判断该宗地图的幅面大小及比例尺,实现宗地图的自动裁剪,而不需要人工干预。
3结束语
本文探讨了AutoCAD中扩展图元数据格式,采用代码示例的方式,介绍了扩展图元数据的添加、访问和删除方式,讨论了扩展数据在地籍测量内业中的具体应用,提出了一种应用扩展数据进行地籍测量内业数据处理的方法,对于地籍测量内业工作有一定的借鉴意义。
参考文献:
[1]王福军等.AutoCAD环境下C/VisualC++应用程序开发教程[M].北京希望电子出版社,2000.
[2]邵俊昌,李旭东.AutoCADObjectARX2000开发技术指南[M].电子工业出版社,2000.
[3]彭忠良等.VisualC++.NET程序设计从MFC到.NET类库[M].机械工业出版社,2003.
[4]DavidJ.Kruglinski.VisualC++技术内幕[M].清华大学出版社,1999.
[5]城镇地籍调查规程TD1001-93[S].地质出版社,1993.
[6]詹长根等.地籍测量学(第二版)[M].武汉大学出版社,2005.[7]庄宝杰等.地籍测量[M].中国建筑工业出版社,2003.