明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 817|回复: 1

[讨论] 麻烦高手帮忙看看这是什么问题?

[复制链接]
发表于 2013-7-29 23:12 | 显示全部楼层 |阅读模式
  1. (defun c:mj(/ name_layer blc_cass7 text_high en a s bb en_new #final loop en_data old_data new_data text_style)
  2. (setvar "cmdecho" 0)
  3. (setvar "DIMZIN" 0)
  4. (setq text_style (getvar "textstyle"))
  5. (command "style" "宋体" "宋体" "0" "1" "0" "" "")         ;设定字体
  6. (setq name_layer (getvar "clayer"))
  7. (if (= nil (tblsearch "layer" "面积标注"))
  8.     ( command "layer" "m" "面积标注" "")
  9. );end if
  10.   (setvar "clayer" name_layer)
  11.   (setq blc_cass7 (getvar "userr1"))
  12.   (cond  (  ( = blc_cass7 500)
  13.             (setq text_high 1.5)
  14.           )
  15.    
  16.    
  17.       (  ( = blc_cass7 200)
  18.          (setq text_high 0.6)
  19.       )
  20.    
  21.    
  22.       (  ( = blc_cass7 1000)
  23.          (setq text_high 3)
  24.         
  25.       )
  26.    
  27.      (  (and ( /= blc_cass7 500)  ( /= blc_cass7 200)  ( /= blc_cass7 1000))
  28.         (alert "比例尺不为1:500,1:200,1:1000请检查比例尺设置。")
  29.       (setq text_high 1.6)
  30.      )
  31.   
  32.   );end cond
  33.   
  34. (setq en (entsel "\n 请选择对象:"))
  35. (command "area" "o" en)
  36. (setq a (getvar "area"))
  37. (redraw (car en) 3)       
  38.   (setq s (strcat "S=" (rtos a 2 2)))
  39.   (setq #Final (grread T 4 4))
  40.   (setq bb (cadr #final))
  41.   (setq en_new
  42.     (entmakex
  43.      (list
  44.       '(0 . "TEXT")
  45.       '(100 . "AcDbEntity")
  46.       '(67 . 0)
  47.       '(100 . "AcDbText")
  48.        (cons 10 bb)
  49.        (cons 40  text_high)
  50.        (cons 1 s)
  51.       '(50 . 0)
  52.       '(41 . 1)
  53.       '(51 . 0.0)
  54.       '(7 . "宋体")           
  55.       '(72 . 1)
  56.        (cons 11 bb)
  57.       '(210 0.0 0.0 1.0)
  58.       '(100 . "AcDbText")
  59.       '(73 . 0)
  60.      );list
  61.    );entmakex
  62.   )
  63.   (setq loop t)
  64.   (while loop
  65.     (setq #final (grread t 4 4))
  66.     (cond (
  67.           (= 5 (car  #Final ))
  68.           (progn
  69.             (setq b (cadr #final))   
  70.             (setq en_data (entget  en_new))   
  71.             (setq old_data (assoc 11 en_data))
  72.             (setq new_data (cons 11 b))
  73.             (setq en_data (subst new_data old_data en_data))
  74.             (entmod en_data)
  75.           );end progn
  76.           )
  77.           );end cond
  78.     (cond (
  79.            (/= 5 (car  #Final ))
  80.           (setq loop nil)
  81.            )
  82.       );end cond
  83.     (cond (
  84.             (= 25 (car  #Final ))
  85.             (progn
  86.             (setq loop nil)
  87.             (entdel en_new)
  88.             );end progn
  89.            )
  90.       );end cond
  91.     );end while
  92.   

  93.   (command "chprop" (entlast) "" "la" "面积标注" "")    ;将最后被完成的对象放进“尺寸标注”图层
  94. (redraw (car en) 4)
  95.   (defun *error* (msg)
  96.    (entdel en_new)
  97.     (redraw (car en) 4)
  98.     (setvar "textstyle" text_style)
  99.     (if (not (member
  100.                  msg
  101.                  '(nil "函数被取消" ";错误:quit / exit abort")
  102.                 )
  103.          )
  104.       (princ (strcat ";错误:" msg))
  105.     )
  106.    );end defun error
  107.    (setvar "textstyle" text_style)
  108. );end
上面这个命令,如果第一次运行中在出现面积“S="随鼠标移动时,在这个过程中按了ESC后,程序好像没有运行(defun *error* msg 后面那些代码,但如果在运行过程中出现面积“S="随鼠标移动时,按了鼠标右键后,得到了想要的效果,在下次运行同样在相同的时候按了ESC后,却好像运行了那句(defun *error* msg 后面那些代码。搞不懂,求高手帮忙看看。
总的来说,这个命令里面,我想实现按了ESC的效果跟按了鼠标右键效果一样的。但首次使用ESC,效果并没有出来。
发表于 2013-7-29 23:30 | 显示全部楼层
(defun *error*要放在程序开头
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 10:25 , Processed in 0.160816 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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