明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1143|回复: 8

[提问] grread左键后,如何让后续的ssget函数可多次选择

[复制链接]
发表于 2022-11-6 17:37:33 | 显示全部楼层 |阅读模式
20明经币
下面这段代码,左键后只能选择一次,请问如何能像(ssget)一样追加选择,而且让选中的图元显示被选择状态,谢谢。
  1. (defun c:tt ()
  2.   (setq loop t)
  3.   (prompt "\n左键框选")
  4.   (while loop
  5.     (setq gr (grread t 15 2)
  6.     pt (cadr gr)
  7.     gr (car gr)
  8.     )
  9.     (cond((= 3 gr) (setq oi   1
  10.         loop nil
  11.         )
  12.         )
  13.     ((or (= 11 gr) (= 25 gr))
  14.       (setq oi   2
  15.       loop nil
  16.       )
  17.       ))
  18.     )
  19.   (cond  ((= 1 oi)
  20.    (setq pt1 (getcorner pt "\n选择下一点:")
  21.          ss  (ssget "c" pt pt1'((0 . "line")))
  22.          )
  23.    )
  24.   ((= 2 oi)
  25.    (alert"啥也没有")
  26.    )
  27.   )
  28.   )




最佳答案

查看完整内容

;将ssget写到while里 (defun c:t1 () (setq loop t sss(ssadd)) (prompt "\n左键框选") (while loop (setq gr(grread t 15 2) pt(cadr gr) gr(car gr)) (cond ((= 3 gr) (setq pt1(getcorner pt "\n选择下一点:") ss(ssget "c" pt pt1 '((0 . "line")))) (mapcar(function(lambda(x) (if(ssmemb x sss)nil (progn(setq sss(ssadd x sss))(redraw x 3)) ...
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-11-6 17:37:34 | 显示全部楼层
;将ssget写到while里

(defun c:t1 ()
  (setq loop t sss(ssadd))
  (prompt "\n左键框选")
  (while loop
    (setq gr(grread t 15 2) pt(cadr gr) gr(car gr))
    (cond
   ((= 3 gr)
    (setq pt1(getcorner pt "\n选择下一点:") ss(ssget "c" pt pt1 '((0 . "line"))))
    (mapcar(function(lambda(x)
             (if(ssmemb x sss)nil
              (progn(setq sss(ssadd x sss))(redraw x 3))
             )
            )
        )
     (vl-remove-if 'listp(mapcar 'cadr(ssnamex ss))))
   )
   ((or(= 11 gr) (= 25 gr))(setq loop nil))
  )
)
(if sss(sssetfirst sss sss))
)

点评

谢谢  发表于 2022-11-7 08:43
回复

使用道具 举报

发表于 2022-11-6 22:16:12 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq loop t)
  3.   (prompt "\n左键框选")
  4.   (while loop
  5.     (setq gr (grread t 15 2)
  6.           pt (cadr gr)
  7.           gr (car gr)
  8.     )
  9.     (cond ((= 3 gr)
  10.            (setq oi   1
  11.                  loop nil
  12.            )
  13.           )
  14.           ((or (= 11 gr) (= 25 gr))
  15.            (setq oi   2
  16.                  loop nil
  17.            )
  18.           )
  19.     )
  20.   )
  21.   (cond        ((= 1 oi)
  22.          (setq pt1 (getcorner pt "\n选择下一点:")
  23.                ss  (ssget "c" pt pt1 '((0 . "line")))
  24.                ss1 (ssget '((0 . "line")))
  25.          )
  26.          (command "select" ss ss1 "")
  27.          (setq ss (ssget "p"))
  28.          (sssetfirst nil ss)
  29.         )
  30.         ((= 2 oi) (alert "啥也没有"))
  31.   )
  32.   (princ)
  33. )

评分

参与人数 1明经币 +1 收起 理由
x_s_s_1 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2022-11-7 06:18:34 来自手机 | 显示全部楼层
谢谢院长,采用command select有些版本autocad会提示错误,需改为command-s,导致我无法确定用command还是command-s,请问还有其它方法吗?

点评

(if command-s command-s command)  发表于 2022-11-7 08:30
回复

使用道具 举报

发表于 2022-11-7 10:49:05 | 显示全部楼层
grread 一般都是用于动态显示    你这个代码是在那种情况下适用呢  为何不直接用 ssget ?
回复

使用道具 举报

 楼主| 发表于 2022-11-7 16:46:20 | 显示全部楼层
guosheyang 发表于 2022-11-7 10:49
grread 一般都是用于动态显示    你这个代码是在那种情况下适用呢  为何不直接用 ssget ?

一键keyword
回复

使用道具 举报

发表于 2023-2-21 15:10:28 | 显示全部楼层
问题解决了么?grread,没有捕捉功能
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 10:17 , Processed in 0.199402 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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