许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  AutoLISP图元扩展属性XDATA创建查看+APP开发

AutoLISP图元扩展属性XDATA创建查看+APP开发

阅读数 4
点赞 0
article_banner


AutlLisp版本:Visual LISP 2024 (zh)  

扩展属性(XDATA)是图元中嵌入的为APP服务的数据。

本文初步讲解图元的扩展属性(XDATA)创建与查看及APP创建,分为以下3个部分:

  1. 图元扩展属性(XDATA)的查看
  2. APPID创建
  3. 带有扩展属性的图元创建

一、图元扩展属性(XDATA)的查看

仅对<图元名>进行 (entget) 无法查看扩展属性(XDATA):

代码块

ts


     自动换行
   


     复制代码
   

123


(entget (car(entsel)))

((-1 . &lt;图元名: 1f4bf8b7b00&gt;) (0 . &quot;LWPOLYLINE&quot;) (330 . &lt;图元名: 1f4c95a19f0&gt;) (5 . &quot;E68&quot;) (100 . &quot;AcDbEntity&quot;) (67 . 0) (410 . &quot;Model&quot;) (8 . &quot;0&quot;) (100 . &quot;AcDbPolyline&quot;) (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 420.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 420.0 297.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 0.0 297.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0))

      复制成功
     
     
     
     

想要查看扩展属性,需要在entget后附APP名称:

代码块

ts


     自动换行
   


     复制代码
   

123


(setq #epTEMP (entget (car(entsel)) (list &quot;TestApp1&quot; &quot;TestApp2&quot;)))

((-1 . &lt;图元名: 1f4bf8b7b00&gt;) (0 . &quot;LWPOLYLINE&quot;) (330 . &lt;图元名: 1f4c95a19f0&gt;) (5 . &quot;E68&quot;) (100 . &quot;AcDbEntity&quot;) (67 . 0) (410 . &quot;Model&quot;) (8 . &quot;0&quot;) (100 . &quot;AcDbPolyline&quot;) (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 420.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 420.0 297.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 0.0 297.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0) (-3 (&quot;TestApp1&quot; (1040 . 1.25) (1000 . &quot;string 1&quot;) (1071 . 111)) (&quot;TestApp2&quot; (1040 . 125.0) (1000 . &quot;string 2&quot;) (1071 . 222))))

      复制成功
     
     
     
     

其中,组码 -3 项即为扩展属性。若未查到扩展属性,则会返回 nil。

对其采用如下方法单独提取:

代码块

ts


     自动换行
   


     复制代码
   

123


(setq #eq1 (assoc -3 #epTEMP))

(-3 (&quot;TestApp1&quot; (1040 . 1.25) (1000 . &quot;string 1&quot;) (1071 . 111)) (&quot;TestApp2&quot; (1040 . 125.0) (1000 . &quot;string 2&quot;) (1071 . 222)))

      复制成功
     
     
     
     

APPID为&#34;ACAD&#​34;时,表示AutoCAD默认自用的Application,常见于标注,对原始标注样式进行覆盖。

二、APPID创建

扩展属性是为APP服务的,在创建扩展属性图元前,要先创建APP。创建方法二选一:

   1)regapp

   2)entmake

代码块

ts


     自动换行
   


     复制代码
   

1234567891011


;APPID创建方法1
(regapp &quot;TestApp1&quot;)
;APPID创建方法2
(setq #listAPP (list &#39;(0 . &quot;APPID&quot;) 
                     &#39;(100 . &quot;AcDbSymbolTableRecord&quot;) 
                     &#39;(100 . &quot;AcDbRegAppTableRecord&quot;) ;子类名称,固定
                     &#39;(2 . &quot;TestApp2&quot;) ;APP名称
                     &#39;(70 . 0) ;flag:
               )
)
(entmake #listAPP)

      复制成功
     
     
     
     

AutoCAD中,APP属于Table Section,可以用(tblsearch)查看:

代码块

ts


     自动换行
   


     复制代码
   

12345678


(tblsearch &quot;APPID&quot; &quot;TestApp1&quot;)

((0 . &quot;APPID&quot;) (2 . &quot;TestApp1&quot;) (70 . 0))


(tblsearch &quot;APPID&quot; &quot;TestApp2&quot;)

((0 . &quot;APPID&quot;) (2 . &quot;TestApp2&quot;) (70 . 0))

      复制成功
     
     
     
     

可见,两种方法创建的APP均可查到。

此外可以通过 (tblobjname) 获取APP的图元名:

代码块

ts


     自动换行
   


     复制代码
   

12345678


(tblobjname &quot;APPID&quot; &quot;TestApp1&quot;)

&lt;图元名: 1f4bf8b7a80&gt;
  
  
(tblobjname &quot;APPID&quot; &quot;TestApp2&quot;)

&lt;图元名: 1f4bf8b7a90&gt;

      复制成功
     
     
     
     

三、带有扩展属性的图元创建

确认APP存在后,即可在创建图元时嵌入该APP扩展属性。

图元属性中扩展属性的组码为 -3,后跟随列表元素(每个APP一个列表),列表元素的第一元素为APPID,后面元素为扩展属性,组码为1000-1071。

以创建带有扩展属性的矩形为例:

代码块

ts


     自动换行
   


     复制代码
   

123456789101112131415161718192021222324252627


;带有扩展属性(XDATA)的图元创建
(setq #listE (list &#39;(0 . &quot;LWPOLYLINE&quot;) 
                   &#39;(100 . &quot;AcDbEntity&quot;)
                   &#39;(8 . &quot;0&quot;) ;图层
                   &#39;(100 . &quot;AcDbPolyline&quot;)
                   &#39;(90 . 4) ;点数
                   &#39;(70 . 1) ;闭合性
                   &#39;(43 . 0.0) 
                   (list 10 0.0 0.0) ;点坐标
                   (list 10 420 0.0)
                   (list 10 420 297)
                   (list 10 0.0 297)
                   (list &#39;-3 ;扩展属性
                         (list &quot;TestApp1&quot; ;APPID
                               &#39;(1040 . 1.25) ;实型数
                               &#39;(1000 . &quot;string 1&quot;) ;字符串
                               &#39;(1071 . 111) ;整型数
                         ) ;l3
                         (list &quot;TestApp2&quot; ;APPID
                               &#39;(1040 . 125)
                               &#39;(1000 . &quot;string 2&quot;) ;
                               &#39;(1071 . 222)
                         ) ;l3
                   ) ;l2
             ) ;l1
) ;s
(setq #en1 (entmakex #listE))

      复制成功
     
     
     
     

这样就创建了带有扩展属性的一个矩形,带有上节创建的两个APP的扩展数据。

根据DXF组码的规范,扩展数据的组码均为 1000~1071,每个组码有固定用途,可重复(1005不可),且顺序敏感,即数据顺序要与APP要求匹配。

【1000】字符串,最大长度255字节

【1001】字符串,APP名称,此项在DXF文件中标识APP,在AutoLISP环境不需要,且会被认为是新APP的开始,因此不要使用

【1002】字符串,控制字,与102类似,形如“{” “}”

【1003】扩展数据的图层名

【1004】二进制数据

【1005】转用于储存句柄,且会被当作软指针“soft-pointer handle”

【1010,1020,1030】三实型数,可以作为点坐标,AutoCAD不会篡改

【1011,1021,1031】三实型数,可以作为点坐标,世界坐标,与图元绑定,当旋转、缩放、镜像时会自动篡改,通过STRETCH命令可查看

【1040】实型数

【1041】距离,与父图元一同缩放

【1042】缩放因子,实型数,与父图元一同缩放,其与1041区别由APP定义

【1070】整型数,16位,带/不带符号

【1071】整型数,32位,带符号

四、其他

APP相关组码的含义




欢迎留言并发表您的见解!



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空