明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 949|回复: 7

[已解答] 请高手看看问题何在?

[复制链接]
发表于 2015-9-21 11:24:59 | 显示全部楼层 |阅读模式
本帖最后由 czcxxx 于 2015-9-30 13:08 编辑

总是说参数太少,代码如下:

  1. [code](defun bat_la (ss_mod  ii / x)
  2.   (mapcar
  3.     '(lambda (x) (cdr (assoc ii (entget x))))
  4.     (vl-remove-if
  5.       'listp
  6.       (mapcar 'cadr (ssnamex ss_mod))
  7.     )
  8.   )
  9. )

  10. (defun bat_d_e1        (ss_mod ii l_t_/ x n)
  11.   (mapcar
  12.     '(lambda (x)
  13.        (foreach        n     l_t_
  14.          (if (= (cdr (assoc ii (entget x))) n)
  15.            (entdel x)
  16.          )
  17.        )
  18.      )
  19.     (vl-remove-if
  20.       'listp
  21.       (mapcar 'cadr (ssnamex ss_mod))
  22.     )
  23.   )
  24. )

  25. (print "\n请选择要删除的多个不同内容的单行文字: ")
  26. (setq ss1 (ssget  '((0 . "text"))))
  27. (setq l_t (bat_la ss1 1))
  28. (print "\n请批量选择要删除的上述内容的单行文字: ")
  29. (setq ss2 (ssget  '((0 . "text"))))
  30. (bat_d_e1 ss2 1 l_t)
<Selection set: 1b09>
; 错误: 参数太少

请高手指教,谢谢!

第二个自定义函数有问题!
发表于 2015-9-21 11:45:43 | 显示全部楼层
(ss_mod ii l_t_/ x n)  ====》 (ss_mod ii l_t_  / x n)  ;;; +空格
 楼主| 发表于 2015-9-21 14:20:57 | 显示全部楼层
非常谢谢USER2128,解决了。
 楼主| 发表于 2015-9-21 14:27:19 | 显示全部楼层
本帖最后由 czcxxx 于 2015-9-21 14:28 编辑

再麻烦您一下:为什么当在选择集SS1后加sssetfirst后,第二个选择无效,代码如下:
  1. (defun bat_la (ss_mod  ii / x)
  2.   (mapcar
  3.     '(lambda (x) (cdr (assoc ii (entget x))))
  4.     (vl-remove-if
  5.       'listp
  6.       (mapcar 'cadr (ssnamex ss_mod))
  7.     )
  8.   )
  9. )

  10. (defun bat_d_e1        (ss_mod ii l_t_ / x n)
  11.   (mapcar
  12.     '(lambda (x)
  13.        (foreach        n l_t_
  14.          (if (= (cdr (assoc ii (entget x))) n)
  15.            (entdel x)
  16.          )
  17.        )
  18.      )
  19.     (vl-remove-if
  20.       'listp
  21.       (mapcar 'cadr (ssnamex ss_mod))
  22.     )
  23.   )
  24. )



  25. (print "\n请选择要删除的多个不同内容的单行文字: ")
  26. (setq ss1 (ssget  '((0 . "text"))))

  27. [b][size=6][color=Red](sssetfirst nil ss1)[/color][/size][/b]

  28. (setq l_t (bat_la ss1 1))

  29. (print "\n请批量选择要删除的上述内容的单行文字: ")
  30. (setq ss2 (ssget  '((0 . "text"))))
  31. (bat_d_e1 ss2 1 l_t)
就是第二个SSGET不执行了!!!
发表于 2015-9-21 18:20:59 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-9-21 18:24 编辑

第二个SSGET不是没有执行,而是直接把通过(sssetfirst nil ss1) 设置了夹点的图元全部给选择出来了,并不会要求再次在图面上进行通常的选择,所以看着象第二次选择没有被执行,实际上它已经有了选择结果。
也就是说,不能通过这种方式给第二次选择提示哪些图元已经被第一次选择所选择过。。。
发表于 2015-9-22 10:28:58 | 显示全部楼层
(sssetfirst nil ss1)  之后如再有COMMAND都不行
如后跟: (command "_.undo" "_end"),就不执行夹点显示
 楼主| 发表于 2015-9-22 12:26:00 | 显示全部楼层
非常感谢两位高手的解答!!!!
 楼主| 发表于 2015-9-23 09:44:36 | 显示全部楼层
(sssetfirst nil ss1)  之后如再有COMMAND都不行,哪它的用处何在?
我只是想让它暂停,好看看还有没有没选择的,用delay  只能是暂停,什么也不能做???
除了,当选择多个类别的图元后,再利用它选择某个具体类别的图元外,还有什么别的用外,请高手门指点!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 10:10 , Processed in 0.146028 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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