乐筑天下

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

[编程交流] 修改外部参照列表

[复制链接]

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 19:40:03 | 显示全部楼层 |阅读模式
你好
 
 
我有一个外部参照列表
 
 
Xref\u 1 Xref\u 2 Xref\u 3\u ELC Xref\u 4\u ELC Xref\u。。。。。。。。
 
 
我想修改列表,使其只包含末尾有ELC的项目。
 
 
如果我只能将外部参照添加到列表的末尾带有ELC,那就更好了。
 
 
以下两种尝试均未成功。
 
 
有什么想法吗?
 
 
 
 
  1. (defun c:findxref (/ td xrf)
  2. (setq XrfM nil)
  3. (while (setq td (tblnext "BLOCK" (not td)))
  4. (and (= (logand (cdr (assoc 70 td)) 4) 4)
  5. (setq xrf (cons (strcase (cdr (assoc 2 td))) xrf))
  6.      )
  7.   )
  8. (print xrf)
  9. ;attempt with Vl-remove
  10. (foreach n xrf
  11.   (if (/= (wcmatch n "*_ELC")T) (vlremove n xrf)))
  12. ;Create new list
  13. (foreach n xrf
  14.   (if (= (wcmatch n "*_ELC")T) (append n xrfm)))
  15. (print Xrf)
  16. (print Xrfm)
  17. (princ)
  18. )

 
 
 
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 19:46:32 | 显示全部楼层
这里只是一个提示。
 
  1. (if (wcmatch n "*_ELC")
  2.   (setq lst (append lst (list n)))
  3. )
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 19:47:39 | 显示全部楼层
谢谢你的提示,但是
这对我来说是不可能的,我从你的暗示中错过了什么?
 
 
 
 
Xrfm不断返回零
 
 
 
 
 
 
  1. (defun c:findxref (/ td xrf XrfM)
  2. (setq XrfM '())
  3. (while (setq td (tblnext "BLOCK" (not td)))
  4. (and (= (logand (cdr (assoc 70 td)) 4) 4)
  5. (setq xrf (cons (strcase (cdr (assoc 2 td))) xrf))
  6.      )
  7.   )
  8. (print xrf)
  9. (foreach n xrf
  10.   (if (wcmatch n "*_ELC")   
  11.       (setq XrfM (append  n Xrfm))
  12.    
  13.       )
  14. )
  15. (print Xrfm)
  16. (princ)
  17. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 19:50:44 | 显示全部楼层
很抱歉,我忘记为append函数添加list函数来处理列表。
 
因此,只需为n变量添加list函数,就可以将其附加到列表中。
 
如。
 
  1. (foreach n xrf
  2.    (if (wcmatch n "*_ELC")
  3.      (setq XrfM (append Xrfm (list n)))
  4.    )
  5. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:54:37 | 显示全部楼层
我建议在初始循环中省略它们,而不是从结果列表中删除不需要的项,例如:
  1. (defun c:findxref ( / td xrf xrn )
  2.    (while (setq td (tblnext "block" (not td)))
  3.        (and (= (logand (cdr (assoc 70 td)) 4) 4)
  4.             (wcmatch (setq xrn (strcase (cdr (assoc 2 td)))) "*_ELC") ;; Must pass this criteria before being added to the list
  5.             (setq xrf (cons xrn xrf))
  6.        )
  7.    )
  8.    (print xrf)
  9.    (princ)
  10. )
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 19:56:04 | 显示全部楼层
多亏了你们两个,两种选择都对我有效。
奥地利的问候
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 19:59:28 | 显示全部楼层
很好,欢迎你。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:04:36 | 显示全部楼层
非常欢迎你
回复

使用道具 举报

23

主题

132

帖子

112

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
114
发表于 2022-7-5 20:06:32 | 显示全部楼层
大家好,我在这里收到了一条错误消息
 
 
我试图检索列表中外部参照插入点的X值,
但它返回一个错误。如果我尝试选项2,并在位置“n”处输入外部参照名称,然后仅在命令行中输入,则它可以工作。知道我在这里遗漏了什么吗
 
 
  1. (foreach n xrf
  2.    
  3. [color=red]OPTION 1[/color]
  4.   (setq ss (ssget "X" '((0 . "INSERT")(67 . 0)(2 . n))))
  5. (setq x (car (cdr (assoc 10 (entget ss)))))  
  6.       
  7. [color=red]OPTION 2[/color]
  8.   (setq x (car (cdr (assoc 10 (entget (ssname (ssget "_X" '((2 . n))) 0))))))
  9. (print x)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:10:45 | 显示全部楼层
试试这个。
 
  1. (setq ss (ssget "_X" (list '(0 . "INSERT")'(67 . 0)(cons 2 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) xrf))))))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 00:47 , Processed in 0.522550 second(s), 72 queries .

© 2020-2025 乐筑天下

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