文档详情

CADCASS下实体的扩展属性XDATA

cn****1
实名认证
店铺
DOC
62KB
约5页
文档ID:409442031
CADCASS下实体的扩展属性XDATA_第1页
1/5

CADCAS下实体的扩展属性XDATA(2011-09-2313:15一:摘自网络正确叫法为扩展数据--xdata系统提供了几个用于处理扩展数据的AutoLISP函数,它们是由用ObjectARX或AutoLISP编写的应用程序创建的如果一个图元包含扩展数据,则该数据会紧跟在图元的正常定义数据之后通过调用entget可以获取一个图元的扩展数据entget函数获取图元的正常定义数据和应用程序(在entget调用中指定)的扩展数据当用entget获取扩展数据时,扩展数据的起始部分由-3组码指示3组码位于一个表中,该表以第一个1001组码开始如下表所示,该1001组码包含所获取的第一个注册的应用名称,详细信息请参见后面章节正常和扩展数据的组码组码字段数据类型(?,?(0?39)图元名称)正常定义数据字段).常规图元定义数据(?(1001(1000,1002?071(1001(1000,1002?071(1001扩展数据标记注册的应用名称1)XDATA字段).册的应用程序名称2)XDATA字段)注册的应用名称3).扩展数据本节内容包括:组织扩展数据注册应用获取扩展数据在图元上附着扩展数据管理扩展数据使用的内存扩展数据中的句柄扩展数据由一个或多个1001组码组成,其中每个组码都以唯一的应用名称开始。

由entget返回的扩展数据组码跟随在定义数据之后,按照保存宝数据库中的次序排列在每个应用的组码中,扩展数据的内容、含义及其数据的组织都是由应用自身定义的AutoCAD维护这些信息,但不使用它们表中还显示1000到1071之间扩展数据的组码如下所示,这些组码的数据类型许多都是熟悉的:字符串1000扩展数据中的字符串可长达255字节(第256字节是为空字符保留的)应用名称1001(也是字符串)应用名称可长达31字节(第32字节是为空字符保留的),而且必须符合符号表的名称规则(如图层名称)应用名称可包含字母、数字、专用字符$(美元符号)、-(连字符)以及_(下划线),但不能包含空格图层名称1003与扩展数据相关联的图层名称数据库句柄1005图形数据库中的图元句柄三维点—亠八、、1010包含在一个点中的三个实数值实数1040一个实数值整数1070一个16位整数(带符号或不带符号)长整数1071一个32位带符号的(长)整数如果1071组码中出现短整数或实数值,则被转换为一个长整数;如果组码值非法(例如一个字符串),则将被转换为长整数形式的零(0L)注意AutoLISP把1071组码作为实数值管理。

如果用entget获取包含1071组码的图元定义表,则返回的值是实数如下例所示:(1071.12.0)如果需要用entmake或entmod在图元中创建一个1071组码,则既可使用实数值,也可使用整数值如下例所示:(entmake\'(((1071.12))))(entmake\'(((1071.12.0))))(entmake\'(((1071.65537.0))))(entmake\'(((1071.65537))))但AutoLISP返回的组码值仍是实数:(entmake\'(((1071.65537))))上述语句的返回值如下所示:(1071.65537.0)ObjectARX总是把1071组码作为长整数来管理其他几个的扩展数据组码在其上下文中具有特殊含义(如果应用程序选择使用它们):控制字符串1002扩展数据的控制字符串可以是“{”或“}”这些大括号使应用可以通过将扩展数据细分为表来组织它们左括号开始一个表,右括号结束最新的表表是可以嵌套的注意如果一个1001组码出现在该表中,则仅把它当作一个字符串,而不是一个新的应用组码的开始二进制数据1004二进制数据被组织为可变长度的数据块,它可在有ads_binary结构的ObjectARX中处理。

数据块的最大长度为127字节注意AutoLISP不能直接处理二进制数据块,所以适用于长整数(1071)组码的预防措施也同样适用于二进制组码世界空间位置1011与简单的三维点不同,其WCS坐标随扩展数据所属的父图元移动、比例缩放、旋转和镜像当对父图元使用STRETCH命令并且此点位于选择窗口中时,该WCS的位置也会被拉伸世界空间位移1012一个随着父图元比例缩放、旋转或镜像的三维点,但不可拉伸或移动世界空间方向1013一个随着父图元旋转或镜像的三维点,但不可比例缩放、拉伸或移动其WCS方向是一个单位长度的规格化向量距离1041一个随着父图元比例缩放的实数值比例因子1042也是一个随着父图元比例缩放的实数值关于扩展数据的DXF组码,也请参见DXFReference为便于AutoCAD识别,必须注册应用名称应用名称与使用该应用的每个图元的扩展数据一起存储,也在APPID表中注册由regapp函数来完成,它指定一个字符串作为应用名称如果regapp函数成功地将名称增加到APPID表中,则返回应用名称,否则返回nil返回nil则表示此名称已出现在该符号表中,但这不是一个真正的错误,而是一个正常的返回值,因为应用在每次绘图中只需注册一次。

为了进行注册,应用首先检查它的名称是否已出现在APPID表中如果表中没有该名称,则必须注册它如果有,则可以如本节的后面部分所述,程序只需继续运行,并使用扩展数据下列代码段中有regapp的典型用法(关于tblsearch函数的详细信息,请参见访问符号表和词典)setqappname"MYAPP_2356");唯一的应用名称(if(tblsearch"appid"appname);检查是否已经注册(princ(strcat"\\n"appname"alreadyregistered."))(if(=(regappappname)nil);一些其他问题(princ(strcat"\\nCan\'tregisterXDATAfor"appname"."))))regapp函数提供了一定的安全度,但它不能保证两个单独的应用不会选择相同的名称确保不重名的一个办法是,采用一个统一的规则,即使用公司或产品的名称,以及唯一的编号(例如号码或当前的日期和时间)获取扩展数据应用程序可以调用entget来获得已经注册的扩展数据entget函数既能返回定义数据,也能返回应用程序所需的扩展数据这需要一个额外的参数application,它用于指定应用名称。

传给entget的名称必须与上一次调用regapp注册的应用一致,它们也可以包含通配符在缺省情况下,关联填充图案也包含扩展数据下列代码显示了该扩展数据的关联表命令:(entget(car(entsel))\'("ACAD"))选择对象:选择关联图案填充在命令行中输入上述代码,会返回如下所示的一个表:((-1.<图元名:600000c0>)(0."INSERT")(8."0")(2."*X0")(100.00.00.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_name\'("MY_APP_1""SOME_OTHER");仅当扩展数据来自“MY_APP_”1和);“SOME_OTH”时,才被获取)(ifworking_elist(progn...;更新工作图元组(entmodworking_elist);只有仍在表working_elist中的注册);应用程序的扩展数据才被修改)如样例代码所示,与用entmod修改正常定义数据一样,可以通过调用entmod的子序列修改用entget获取的扩展数据,也可以在传递给entmake的图元表中定义扩展数据来创建它。

只返回应用明确要求的扩展数据,可以防止一个应用误用另一个应用的数据它也控制了应用程序需要使用的内存数量,并简化了应用程序需进行的扩展数据处理注意由于application传入的字符串可以包含通配符,因此应用名为“*”将导致entget返回附着在图元上的所有扩展数据在图元上附着扩展数据使用扩展数据可以存储任意类型的信息例如,绘制一个图元(例如直线或圆),然后输入下列代码将扩展数据附着到图元上:(setqlastent(entget(entlast)));获得最新图元定义数据的关联表(regapp"NEWDATA");注册应用名称(setqexdata;设置exdata变量等于\'((-3("NEWDATA";新的扩展数据(1000."Thisisanewthing!");本例中是一个文本字符串))))(setqnewent(appendlastentexdata));向图元表中增加新的数据表(entmodnewent);用新的定义数据修改图元为了验证扩展数据已被附着到图元上,输入下列代码,并选择该对象:(entget(car(entsel))\'("NEWDATA"))本样例显示了在图元上附着扩展数据的基本方法。

二、来自帮助Signatureobject.GetXDataAppName,XDataType,XDataValueObjectJJJJJJJJJJJJJJTheobjectorobjectsthismethodappliesto.AppNameString;input-onlyANULLstringwillreturnallthedataattachedtotheobject,regardlessoftheapplicationthatcreatedit.Supplyinganapplicationnamewillreturnonlythedatathatwascreatedbythespecifiedapplication.XDataTypeVariant(arrayofshorts);output-onlyXDataValueVariant(arrayofvariants);output-onlyRemarksExtendeddataisanexampleofinstance-specificdatacreatedbyapplicationswrittenwithObjectARXorAutoLISP.Thisdatacanbeaddedtoanyobject.Thisdatafollowstheobject'sdefinitiondata,andismaintainedintheorderthatitwassavedintothedocument.(AutoCADmaintainsthisinformation,butdoesn'tuseit.)三、例子SubExample_GetXData()'Thisexamplecreatesalineandattachesextendeddatatothatline.'CreatethelineDimlineObjAsAcadLineDimstartPt(0To2)As。

下载提示
相似文档
正为您匹配相似的精品文档