明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2108|回复: 9

获取扩展数据的函数

[复制链接]
发表于 2004-4-9 16:01:00 | 显示全部楼层 |阅读模式
谁能帮我编一个获取扩展数据的函数


只要能获取注册的应用程序名和1000 项就行了。


谢了。
发表于 2004-4-9 17:49:00 | 显示全部楼层
应用程序可以调用 entget 来获得已经注册的扩展数据。entget 函数既能返回定义数据,也能返回应用程序所需的扩展数据。这需要一个额外的参数 application,它用于指定应用名称。传给 entget 的名称必须与上一次调用 regapp 注册的应用一致,它们也可以包含通配符。
在缺省情况下,关联填充图案也包含扩展数据。下列代码显示了该扩展数据的关联表。 命令: (entget (car (entsel)) '("ACAD")) 选择对象: 选择关联图案填充 在命令行中输入上述代码,会返回如下所示的一个表: ((-1 . <图元名:600000c0>) (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 返回附着在图元上的所有扩展数据。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:ttt()
(setq ed (entget (car (entsel)) '("MY_TAG")))
(setq xdata (cadr (assoc -3 ED)))
)
发表于 2004-4-9 17:51:00 | 显示全部楼层
漏说了一点,在上面的程序中只能取的注册名是 MY_TAG 的扩展数据
发表于 2004-4-9 20:31:00 | 显示全部楼层
sping 真細心
 楼主| 发表于 2004-4-10 09:30:00 | 显示全部楼层
多谢,请问如何用ActiveX方法获取一个扩展数据? Function Object_GetxData(Obj As AcadObject) As String
On Error Resume Next
Dim xdataOut As Variant
Dim xtypeOut As Variant
Obj.GetXData "", xtypeOut, xdataOut
Object_GetxData = xdataOut(1)
End Function
这是我以前编的一个VBA函数用来获取扩展数据,运行通过,如何将其转换成VL代码?
发表于 2004-4-10 10:45:00 | 显示全部楼层
不知道楼主到底要做什么,有问题不凡一次性都说出来,不要一点一点地问,拿些例子性的东西要别人转换... (defun Object_GetxData(obj / xtypeOut xdataOut)
(vla-getxdata obj "" 'xtypeOut 'xdataOut)
(cdr (mapcar 'vlax-variant-value (vlax-safearray->list xdataOut)))
)
 楼主| 发表于 2004-4-10 12:11:00 | 显示全部楼层
呵呵,版主批评得对,可我只是想到一个问题不懂,就拿出来请教大家了。不好意思了。 还有一个问题请看帖 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=19189 龙龙仔说得很含糊,能否帮我编一个,先谢了。
发表于 2004-4-10 17:42:00 | 显示全部楼层
这个习惯不是很好,有问题应该先自己琢磨,你这样久了,就会对别人产生依赖,自己就很难独立去写程序了.


看你好象是比较熟悉VBA一点,对LISP不是很熟,建议你还是要慢慢来,循序渐进,稍微熟悉LISP点的都应该清楚龙版主对你那个问题的回答已经相当明确了,
发表于 2004-4-11 11:58:00 | 显示全部楼层
cag发表于2004-4-10 12:11:00呵呵,版主批评得对,可我只是想到一个问题不懂,就拿出来请教大家了。不好意思了。 还有一个问题请看帖 <A href=\"dispbbs...
第一步 :你将一个块炸开是不是要先选择块 第二步 setq ss(SSGET "P")) 这句是选中上次所选择的物体
 楼主| 发表于 2004-4-12 08:13:00 | 显示全部楼层
多谢各位了,已经搞定!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 00:37 , Processed in 0.202362 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表