乐筑天下

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

[编程交流] 扩展数据的ssget筛选器

[复制链接]

8

主题

34

帖子

26

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 19:42:50 | 显示全部楼层 |阅读模式
帮我了解发生了什么事。键入“点”并将点放置在空白图形中。现在键入“pline”并在屏幕上绘制任意长度的多段线。现在键入(regapp“test program”),然后复制/粘贴到这些程序中。
 
  1. (defun c:test1 ( / x pt edata xdata ndata)
  2. (setq x (entsel "Select the point.")
  3. pt (cadr x)
  4. edata (entget (car x))
  5. xdata (list -3 (list "test program" (cons 1000 "point") (cons 1011 pt)))
  6. ndata (append edata (list xdata)))
  7. (entmod ndata)
  8. (entupd (cdr (assoc -1 ndata)))
  9. (princ))
  10. (defun c:test2 ( / x)
  11. (if (setq x (ssget "a" '((-3 ("test program" (1000 . "point"))))))
  12.    (setq x (cdr (nth 2 (cadr (assoc -3 (entget (ssname x 0) '("test program"))))))))
  13. x)
  14. (defun c:test3 ( / x)
  15. (if (setq x (ssget "a" '((-3 ("test program")))))
  16.    (setq x (cdr (nth 2 (cadr (assoc -3 (entget (ssname x 0) '("test program"))))))))
  17. x)

 
现在键入“test1”并选择该点。现在输入“test2”,它是否返回NIL?
现在输入“test3”,它是否返回点?
再次键入“test1”并选择多段线。
现在键入“test2”,它是否返回附着到多段线的点?
现在请给我解释一下。为什么ssget不能过滤扩展数据中具有特定1000个字符串的点?但是同一个程序可以过滤附加到多段线的相同扩展数据?我希望答案不在眼前。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:42:58 | 显示全部楼层
我认为您应该在添加数据之前添加regapp名称,这意味着您正在向nil对象添加数据。
其次,扩展数据(cons 1000“点”)没有任何意义,它导致ssget函数无法选择具有该特定regapp名称的目标对象。
 
这就是扩展数据代码的特点。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:16 , Processed in 0.391983 second(s), 56 queries .

© 2020-2025 乐筑天下

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