明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2433|回复: 7

[提问] 关于亮显后ESC键取消的问题!

[复制链接]
发表于 2021-3-27 02:13:17 | 显示全部楼层 |阅读模式
以前在咱们论坛上下了一个小程序,自己根据需求改造了下,主要是可以方便查看线段长度,现在的有个不方便的地方就是本来想让选中后的图元成亮显状态,方便查看,加了 (if (= (type el) 'list) (redraw (car el) 3))这句函数,亮显是可以亮显了,但是按ESC键取消不掉亮显,必须再选中一次按ESC键才能取消亮显状态,感觉有点麻烦,最后加了句 (redraw (car el) 4 ),但是又不能亮显了,拜托大侠们出手相助下,解决这个困惑,也就是选中图元后可以呈亮显状态,亮显后可以按ESC键取消亮显,感谢!下面是代码:

(defun c:AA (/  el ent  )      

    (while
    (= (setq el (entsel "\n请点选实体:")) nil)
    )
    (setq ent  (entget (car el) '("*"))
      类型 (cdr (assoc '0 ent))
    )
   (if (= (type el) 'list) (redraw (car el) 3));亮显选中的对像

    (princ "\n 对象类型:")

    (cond
    ((= 类型 "LINE")
     (progn
         (setq pt0 (cdr (assoc '10 ent))
           pt1 (cdr (assoc '11 ent))
           l   (distance pt0 pt1)
         )
         (princ ",长度:")

         (princ l)

     )
    )

    ((or
         (= 类型 "LWPOLYLINE")
         (= 类型 "SPLINE")
         (= 类型 "ELLIPSE")
         (= 类型 "REGION")
     )
     (progn
         (setvar "CMDECHO" 0)
         (command "_AREA" "O" el)
         (setq l (getvar "PERIMETER")

         )
         (princ ",长度:")
         (princ  l )

     )
    )   

    (t
     (princ ",不能识别!!")
    )
    )
   ;(redraw (car el) 4 );;取消亮显
    (princ))

发表于 2021-3-27 07:24:47 | 显示全部楼层
亮显用(progn (sssetfirst nil ss) (pause) ) 代替试试
 楼主| 发表于 2021-3-27 10:34:47 | 显示全部楼层
xj6019 发表于 2021-3-27 07:24
亮显用(progn (sssetfirst nil ss) (pause) ) 代替试试

谢谢回复,换掉后就不能亮显了!
发表于 2021-3-27 11:54:17 | 显示全部楼层
(defun c:AA (/  el ent  s)
        (while
    (= (setq el (entsel "\n请点选实体:")) nil)
        )
        (setq ent  (entget (car el) '("*"))
                类型 (cdr (assoc '0 ent))
        )
        ;(if (= (type el) 'list) (redraw (car el) 3));亮显选中的对像
        (princ "\n 对象类型:")
        (cond
    ((= 类型 "LINE")
                        (progn
                                (setq pt0 (cdr (assoc '10 ent))
                                        pt1 (cdr (assoc '11 ent))
                                        l   (distance pt0 pt1)
                                )
                                (princ ",长度:")
                                (princ l)
                        )
    )
    ((or
                         (= 类型 "LWPOLYLINE")
                         (= 类型 "SPLINE")
                         (= 类型 "ELLIPSE")
                         (= 类型 "REGION")
     )
                        (progn
                                (setvar "CMDECHO" 0)
                                (command "_AREA" "O" el)
                                (setq l (getvar "PERIMETER")
                                )
                                (princ ",长度:")
                                (princ  l )
                        )
    )
    (t
                        (princ ",不能识别!!")
    )
        )
        ;(redraw (car el) 4 );;取消亮显
        (sssetfirst nil (setq s (ssadd) s (ssadd (car el) s)));亮显选中的对像
        (princ))
发表于 2021-3-27 13:25:27 | 显示全部楼层
(defun c:AA (/ *error* ECH ZIN EL E 类型 L E2)      
  (defun *error* (M)
    (if EL (redraw E 4))
    (setvar 'CMDECHO ECH)
    (setvar 'DIMZIN ZIN)
  )
  (setq ECH (getvar 'CMDECHO)
        ZIN (getvar 'DIMZIN)
  )
  (setvar 'CMDECHO 0)
  (setvar 'DIMZIN 0)
  (while (setq EL (entsel "\n请点选实体:"))
    (setq E    (car EL)
          类型 (cdr (assoc 0 (entget e)))
    )
    (redraw e 3);亮显选中的对像
    (princ "\n对象类型 = ")
    (princ 类型)
    (cond
      ((member 类型 '("LINE" "ARC" "CIRCLE" "LWPOLYLINE" "POLYLINE" "SPLINE" "ELLIPSE"))
       (setq l (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
      )
      ((= 类型 "REGION")
       (command "_.AREA" "O" el)
       (setq l (getvar 'PERIMETER))
      )
      (T (setq l nil)
         (princ ",长度不能识别!!")
      )
    )
    (if l
      (princ (strcat ",长度 = " (rtos l)))
    )
    (if e2
      (redraw e2 4);;取消亮显
    )
    (setq e2 e)
  )
  (redraw e 4)
  (setvar 'CMDECHO ECH)
  (setvar 'DIMZIN ZIN)
  (princ)
)
 楼主| 发表于 2021-3-27 13:38:25 | 显示全部楼层
start4444 发表于 2021-3-27 11:54
(defun c:AA (/  el ent  s)
        (while
    (= (setq el (entsel "\n请点选实体:")) nil)

真诚感谢start4444老师的及时准确的回复帮助,已得到您几次的热心帮助了,向您致敬!  向您学习!
 楼主| 发表于 2021-3-27 14:01:47 | 显示全部楼层
caoyin 发表于 2021-3-27 13:25
(defun c:AA (/ *error* ECH ZIN EL E 类型 L E2)      
  (defun *error* (M)
    (if EL (redraw E 4)) ...

感谢caoyin版,刚才试了您的代码,也非常的方便实用,把按ESC键这一步都省掉了,代码比我拼凑的更加严谨简洁,Nice!再次感谢!!  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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