CADCASS下实体的扩展属性XDATA_第1页
CADCASS下实体的扩展属性XDATA_第2页
CADCASS下实体的扩展属性XDATA_第3页
CADCASS下实体的扩展属性XDATA_第4页
CADCASS下实体的扩展属性XDATA_第5页
全文预览已结束

下载本文档

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

文档简介

1、CADCAS下实体的扩展属性XDATA(2011-09-2313:15一:摘自网络正确叫法为扩展数据-xdata系统提供了几个用于处理扩展数据的AutoLISP函数,它们是由用ObjectARX或AutoLISP编写的应用程序创建的。如果一个图元包含扩展数据,则该数据会紧跟在图元的正常定义数据之后。通过调用entget可以获取一个图元的扩展数据。entget函数获取图元的正常定义数据和应用程序(在entget调用中指定)的扩展数据。当用entget获取扩展数据时,扩展数据的起始部分由-3组码指示。-3组码位于一个表中,该表以第一个1001组码开始。如下表所示,该1001组码包含所获取的第一个注

2、册的应用名称,详细信息请参见后面章节。正常和扩展数据的组码组码字段数据类型(?,?(0?39)图元名称)正常定义数据字段).常规图元定义数据(?(1001(1000,1002?071(1001(1000,1002?071(1001扩展数据标记注册的应用名称1)XDATA字段).册的应用程序名称2)XDATA字段)注册的应用名称3).扩展数据本节内容包括:组织扩展数据注册应用获取扩展数据在图元上附着扩展数据管理扩展数据使用的内存扩展数据中的句柄扩展数据由一个或多个1001组码组成,其中每个组码都以唯一的应用名称开始。由entget返回的扩展数据组码跟随在定义数据之后,按照保存宝数据库中的次序排列

3、。在每个应用的组码中,扩展数据的内容、含义及其数据的组织都是由应用自身定义的。AutoCAD维护这些信息,但不使用它们。表中还显示1000到1071之间扩展数据的组码。如下所示,这些组码的数据类型许多都是熟悉的:字符串1000。扩展数据中的字符串可长达255字节(第256字节是为空字符保留的)。应用名称1001(也是字符串)。应用名称可长达31字节(第32字节是为空字符保留的),而且必须符合符号表的名称规则(如图层名称)。应用名称可包含字母、数字、专用字符$(美元符号)、-(连字符)以及_(下划线),但不能包含空格。图层名称1003。与扩展数据相关联的图层名称。数据库句柄1005。图形数据库中

4、的图元句柄。三维点亠八、1010。包含在一个点中的三个实数值。实数1040。一个实数值。整数1070。一个16位整数(带符号或不带符号)。长整数1071。一个32位带符号的(长)整数。如果1071组码中出现短整数或实数值,则被转换为一个长整数;如果组码值非法(例如一个字符串),则将被转换为长整数形式的零(0L)。注意AutoLISP把1071组码作为实数值管理。如果用entget获取包含1071组码的图元定义表,则返回的值是实数。如下例所示:(1071.12.0)如果需要用entmake或entmod在图元中创建一个1071组码,则既可使用实数值,也可使用整数值。如下例所示:(entmake&

5、#39;(1071.12)(entmake'(1071.12.0)(entmake'(1071.65537.0)(entmake'(1071.65537)但AutoLISP返回的组码值仍是实数:(entmake'(1071.65537)上述语句的返回值如下所示:(1071.65537.0)ObjectARX总是把1071组码作为长整数来管理。其他几个的扩展数据组码在其上下文中具有特殊含义(如果应用程序选择使用它们):控制字符串1002。扩展数据的控制字符串可以是“”或“”。这些大括号使应用可以通过将扩展数据细分为表来组织它们。左括号开始一个表,右括号结束最新的表

6、。表是可以嵌套的。注意如果一个1001组码出现在该表中,则仅把它当作一个字符串,而不是一个新的应用组码的开始。二进制数据1004。二进制数据被组织为可变长度的数据块,它可在有ads_binary结构的ObjectARX中处理。数据块的最大长度为127字节。注意AutoLISP不能直接处理二进制数据块,所以适用于长整数(1071)组码的预防措施也同样适用于二进制组码。世界空间位置1011。与简单的三维点不同,其WCS坐标随扩展数据所属的父图元移动、比例缩放、旋转和镜像。当对父图元使用STRETCH命令并且此点位于选择窗口中时,该WCS的位置也会被拉伸。世界空间位移1012。一个随着父图元比例缩放

7、、旋转或镜像的三维点,但不可拉伸或移动。世界空间方向1013。一个随着父图元旋转或镜像的三维点,但不可比例缩放、拉伸或移动。其WCS方向是一个单位长度的规格化向量。距离1041。一个随着父图元比例缩放的实数值。比例因子1042。也是一个随着父图元比例缩放的实数值。关于扩展数据的DXF组码,也请参见DXFReference。为便于AutoCAD识别,必须注册应用名称。应用名称与使用该应用的每个图元的扩展数据一起存储,也在APPID表中。注册由regapp函数来完成,它指定一个字符串作为应用名称。如果regapp函数成功地将名称增加到APPID表中,则返回应用名称,否则返回nil。返回nil则表示

8、此名称已出现在该符号表中,但这不是一个真正的错误,而是一个正常的返回值,因为应用在每次绘图中只需注册一次。为了进行注册,应用首先检查它的名称是否已出现在APPID表中。如果表中没有该名称,则必须注册它。如果有,则可以如本节的后面部分所述,程序只需继续运行,并使用扩展数据。下列代码段中有regapp的典型用法(关于tblsearch函数的详细信息,请参见访问符号表和词典)。(setqappname"MYAPP_2356");唯一的应用名称(if(tblsearch"appid"appname);检查是否已经注册(princ(strcat"n&qu

9、ot;appname"alreadyregistered.")(if(=(regappappname)nil);一些其他问题(princ(strcat"nCan'tregisterXDATAfor"appname".")regapp函数提供了一定的安全度,但它不能保证两个单独的应用不会选择相同的名称。确保不重名的一个办法是,采用一个统一的规则,即使用公司或产品的名称,以及唯一的编号(例如电话号码或当前的日期和时间)。获取扩展数据应用程序可以调用entget来获得已经注册的扩展数据。entget函数既能返回定义数据,也能返回应用

10、程序所需的扩展数据。这需要一个额外的参数application,它用于指定应用名称。传给entget的名称必须与上一次调用regapp注册的应用一致,它们也可以包含通配符。在缺省情况下,关联填充图案也包含扩展数据。下列代码显示了该扩展数据的关联表。命令:(entget(car(entsel)'("ACAD")选择对象:选择关联图案填充在命令行中输入上述代码,会返回如下所示的一个表:(-1.<图元名:600000c0>)(0."INSERT")(8."0")(2."*X0")(100.00.00.

11、0)(41.1.0)(42.1.0)(50.0.0)(43.1.0)(70.0)(71.0)(44.0.0)(45.0.0)(2100.00.01.0)(-3("ACAD"(1000."HATCH")(1002."")(1070.16)(1000."LINE")(1040.1.0)(1040.0.0)(1002."")这段代码段演示了为两个指定的应用获取扩展数据的典型序列。请注意,参数application以表的格式来传入应用名称:(setqworking_elist(entgetent_nam

12、e'("MY_APP_1""SOME_OTHER");仅当扩展数据来自“MY_APP_”1和);“SOME_OTH”时,才被获取)(ifworking_elist(progn.;更新工作图元组(entmodworking_elist);只有仍在表working_elist中的注册);应用程序的扩展数据才被修改)如样例代码所示,与用entmod修改正常定义数据一样,可以通过调用entmod的子序列修改用entget获取的扩展数据,也可以在传递给entmake的图元表中定义扩展数据来创建它。只返回应用明确要求的扩展数据,可以防止一个应用误用另一个应用

13、的数据。它也控制了应用程序需要使用的内存数量,并简化了应用程序需进行的扩展数据处理。注意由于application传入的字符串可以包含通配符,因此应用名为“*”将导致entget返回附着在图元上的所有扩展数据。在图元上附着扩展数据使用扩展数据可以存储任意类型的信息。例如,绘制一个图元(例如直线或圆),然后输入下列代码将扩展数据附着到图元上:(setqlastent(entget(entlast);获得最新图元定义数据的关联表(regapp"NEWDATA");注册应用名称(setqexdata;设置exdata变量等于'(-3("NEWDATA"

14、新的扩展数据(1000."Thisisanewthing!");本例中是一个文本字符串)(setqnewent(appendlastentexdata);向图元表中增加新的数据表(entmodnewent);用新的定义数据修改图元为了验证扩展数据已被附着到图元上,输入下列代码,并选择该对象:(entget(car(entsel)'("NEWDATA")本样例显示了在图元上附着扩展数据的基本方法。二、来自帮助Signatureobject.GetXDataAppName,XDataType,XDataValueObjectJJJJJJJJJJJJJ

15、JTheobjectorobjectsthismethodappliesto.AppNameString;input-onlyANULLstringwillreturnallthedataattachedtotheobject,regardlessoftheapplicationthatcreatedit.Supplyinganapplicationnamewillreturnonlythedatathatwascreatedbythespecifiedapplication.XDataTypeVariant(arrayofshorts);output-onlyXDataValueVarian

16、t(arrayofvariants);output-onlyRemarksExtendeddataisanexampleofinstance-specificdatacreatedbyapplicationswrittenwithObjectARXorAutoLISP.Thisdatacanbeaddedtoanyobject.Thisdatafollowstheobject'sdefinitiondata,andismaintainedintheorderthatitwassavedintothedocument.(AutoCADmaintainsthisinformation,bu

17、tdoesn'tuseit.)三、例子SubExample_GetXData()'Thisexamplecreatesalineandattachesextendeddatatothatline.'CreatethelineDimlineObjAsAcadLineDimstartPt(0To2)AsDouble,endPt(0To2)AsDoublestartPt(0)=1#:startPt(1)=1#:startPt(2)=0#endPt(0)=5#:endPt(1)=5#:endPt(2)=0#SetlineObj=ThisDrawing.ModelSpace.Ad

18、dLine(startPt,endPt)ZoomAll'Initializeallthexdatavalues.Notethatfirstdatainthelistshouldbe'applicationnameandfirstdatatypecodeshouldbe1001DimDataType(0To9)AsIntegerDimData(0To9)AsVariantDimreals3(0To2)AsDoubleDimworldPos(0To2)AsDouble'注意以下的1001100010031040104110701071.这些数字,参照我上面发的内容(来自网络部分)DataType(0)=1001:Data(0)="Test_Application"DataType(1)=1000:Data(1)="Thisisatestforxdata"DataType(2)=1003:Data(2)="0"'lay

温馨提示

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

评论

0/150

提交评论