




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CAD CASS下实体的扩展属性XDATA(2011-09-23 13: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 组码,也请参见 DXF Reference。为便于 AutoCAD 识别,必须注册应用名称。应用名称与使用该应用的每个图元的扩展数据一起存储,也在 APPID 表中。注册由 regapp 函数来完成,它指定一个字符串作为应用名称。如果 regapp 函数成功地将名称增加到 APPID 表中,则返回应用名称,否则返回 nil。返回 nil 则表示此名称已出现在该符号表中,但这不是一个真正的错误,而是一个正常的返回值,因为应用在每次绘图中只需注册一次。为了进行注册,应用首先检查它的名称是否已出现在 APPID 表中。如果表中没有该名称,则必须注册它。如果有,则可以如本节的后面部分所述,程序只需继续运行,并使用扩展数据。下列代码段中有 regapp 的典型用法(关于 tblsearch 函数的详细信息,请参见访问符号表和词典)。(setq appname MYAPP_2356) ; 唯一的应用名称(if (tblsearch appid appname) ; 检查是否已经注册 (princ (strcat n appname already registered. ) (if (= (regapp appname) nil) ; 一些其他问题 (princ (strcat nCant register XDATA for appname . ) )regapp 函数提供了一定的安全度,但它不能保证两个单独的应用不会选择相同的名称。确保不重名的一个办法是,采用一个统一的规则,即使用公司或产品的名称,以及唯一的编号(例如电话号码或当前的日期和时间)。获取扩展数据应用程序可以调用 entget 来获得已经注册的扩展数据。entget 函数既能返回定义数据,也能返回应用程序所需的扩展数据。这需要一个额外的参数 application,它用于指定应用名称。传给 entget 的名称必须与上一次调用 regapp 注册的应用一致,它们也可以包含通配符。在缺省情况下,关联填充图案也包含扩展数据。下列代码显示了该扩展数据的关联表。命令: (entget (car (entsel) (ACAD)选择对象: 选择关联图案填充在命令行中输入上述代码,会返回如下所示的一个表:(-1 . ) (0 . INSERT) (8 . 0) (2 . *X0)(10 0.0 0.0 0.0) (41 . 1.0) (42 . 1.0) (50 . 0.0) (43 . 1.0) (70 . 0) (71 . 0)(44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) (-3 (ACAD (1000 . HATCH)(1002 . ) (1070 . 16) (1000 . LINE) (1040 . 1.0) (1040 . 0.0)(1002 . )这段代码段演示了为两个指定的应用获取扩展数据的典型序列。请注意,参数 application 以表的格式来传入应用名称:(setq working_elist (entget ent_name (MY_APP_1 SOME_OTHER) ; 仅当扩展数据来自“MY_APP_1”和 ) ;“SOME_OTHER”时,才被获取)(if working_elist (progn . ; 更新工作图元组 (entmod working_elist) ; 只有仍在表 working_elist 中的注册 ) ; 应用程序的扩展数据才被修改)如样例代码所示,与用 entmod 修改正常定义数据一样,可以通过调用 entmod 的子序列修改用 entget 获取的扩展数据,也可以在传递给 entmake 的图元表中定义扩展数据来创建它。只返回应用明确要求的扩展数据,可以防止一个应用误用另一个应用的数据。它也控制了应用程序需要使用的内存数量,并简化了应用程序需进行的扩展数据处理。注意 由于 application 传入的字符串可以包含通配符,因此应用名为“*”将导致 entget 返回附着在图元上的所有扩展数据。在图元上附着扩展数据使用扩展数据可以存储任意类型的信息。例如,绘制一个图元(例如直线或圆),然后输入下列代码将扩展数据附着到图元上:(setq lastent (entget (entlast) ; 获得最新图元定义数据的关联表(regapp NEWDATA) ; 注册应用名称(setq exdata ; 设置 exdata 变量等于(-3 (NEWDATA ; 新的扩展数据 (1000 . This is a new thing!) ; 本例中是一个文本字符串 )(setq newent (append lastent exdata) ; 向图元表中增加新的数据表(entmod newent) ; 用新的定义数据修改图元为了验证扩展数据已被附着到图元上,输入下列代码,并选择该对象:(entget (car (entsel) (NEWDATA)本样例显示了在图元上附着扩展数据的基本方法。二、来自帮助Signatureobject.GetXData AppName, XDataType, XDataValueObject, , , , , , , , , , , , , ; The object or objects this method applies to.AppNameString; input-onlyA NULL string will return all the data attached to the object, regardless of the application that created it. Supplying an application name will return only the data that was created by the specified application.XDataTypeVariant (array of shorts); output-onlyXDataValueVariant (array of variants); output-onlyRemarksExtended data is an example of instance-specific data created by applications written with ObjectARX or AutoLISP. This data can be added to any object. This data follows the objects definition data, and is maintained in the order that it was saved into the document. (AutoCAD maintains this information, but doesnt use it.)三、例子Sub Example_GetXData() This example creates a line and attaches extended data to that line. Create the line Dim lineObj As AcadLine Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0# endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0# Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt) ZoomAll Initialize all the xdata values. Note that first data in the list should be application name and first datatype code should be 1001 Dim DataType(0 To 9) As Integer Dim Data(0 To 9) As Variant Dim reals3(0 To 2) As Double Dim worldPos(0 To 2) As Double 注意以下的1001 1000 1003 1040 1041 1070 1071.这些数字,参照我上面发的内容(来自网络部分) DataType(0) = 1001: Data(0) = Test_Application DataType(1) = 1000: Data(1) = This is a test for xdata DataType(2) = 1003: Data(2) = 0 layer DataType(3) = 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022圣诞节气氛感言(8篇)
- 老旧停车场智能化改造可行性研究报告(参考模板)
- 五以内的加法大班教学
- 年货促销策划方案
- 初创公司股权设计
- 河南司法警官职业学院《大数据平台及应用》2023-2024学年第二学期期末试卷
- 广西体育高等专科学校《土建工程基础》2023-2024学年第二学期期末试卷
- 福州科技职业技术学院《虚拟仪器技术》2023-2024学年第二学期期末试卷
- 江苏理工学院《电气检测技术》2023-2024学年第二学期期末试卷
- 安徽扬子职业技术学院《法律文献检索》2023-2024学年第二学期期末试卷
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
- 设计文件-汽轮机疏水系统
- 光源发光特性
- 2023重庆中考英语试题A卷及答案
- 甘肃省综合医院及部分专科医院等级一览表
- DB65∕T 3253-2020 建筑消防设施质量检测评定规程
- 《核技术利用单位放射性同位素与射线装置安全和防护状况年度评估报告》 模板 2016
- 韩国道路交通法
- T_CCAS 023-2022 用于水泥中的改性球状磷石膏
- 铁路隧道工程施工安全技术规程TB
- 压力容器使用年度检查报告(范本)
评论
0/150
提交评论