乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 152|回复: 9

获取扩展数据的函数

[复制链接]
cag

87

主题

265

帖子

10

银币

中流砥柱

Rank: 25

铜币
613
发表于 2004-4-9 16:01:00 | 显示全部楼层 |阅读模式
谁能帮我编一个获取扩展数据的函数
只要能获取注册的应用程序名和1000 项就行了。
谢了。
回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2004-4-9 17:49:00 | 显示全部楼层
应用程序可以调用 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 返回附着在图元上的所有扩展数据。;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:ttt()
(setq ed (entget (car (entsel)) '("MY_TAG")))
         (setq xdata (cadr (assoc -3 ED)))
         )
回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2004-4-9 17:51:00 | 显示全部楼层
漏说了一点,在上面的程序中只能取的注册名是 MY_TAG 的扩展数据
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2004-4-9 20:31:00 | 显示全部楼层
sping 真細心
回复

使用道具 举报

cag

87

主题

265

帖子

10

银币

中流砥柱

Rank: 25

铜币
613
发表于 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代码?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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)))
)
回复

使用道具 举报

cag

87

主题

265

帖子

10

银币

中流砥柱

Rank: 25

铜币
613
发表于 2004-4-10 12:11:00 | 显示全部楼层
呵呵,版主批评得对,可我只是想到一个问题不懂,就拿出来请教大家了。不好意思了。
还有一个问题请看帖
龙龙仔说得很含糊,能否帮我编一个,先谢了。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-4-10 17:42:00 | 显示全部楼层
这个习惯不是很好,有问题应该先自己琢磨,你这样久了,就会对别人产生依赖,自己就很难独立去写程序了.
看你好象是比较熟悉VBA一点,对LISP不是很熟,建议你还是要慢慢来,循序渐进,稍微熟悉LISP点的都应该清楚龙版主对你那个问题的回答已经相当明确了,
回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2004-4-11 11:58:00 | 显示全部楼层

第一步 :你将一个块炸开是不是要先选择块
第二步 setq ss(SSGET "P")) 这句是选中上次所选择的物体
回复

使用道具 举报

cag

87

主题

265

帖子

10

银币

中流砥柱

Rank: 25

铜币
613
发表于 2004-4-12 08:13:00 | 显示全部楼层
多谢各位了,已经搞定!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-15 22:11 , Processed in 1.922697 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表