明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1392|回复: 5

求助!修改中心线和序

[复制链接]
发表于 2007-5-26 19:01 | 显示全部楼层 |阅读模式

各位高手,你们好,帮我修改一下下面的程序:

(defun c:cl ()
   (setvar "cmdecho" 0)
   (setq os_old (getvar "osmode"))
   (setq cl_old (getvar "clayer"))
   (setvar "osmode" 0)
   (command "ucs" "")
;-----------------------------------------------------------------------------------------
   (if (not (tblsearch "layer" "cen"))
       (command "_.layer" "_new" "cen" "_color" "1" "cen" "_ltype" "center" "cen" "")
       (command "_.layer" "thaw" "cen" "on" "cen" "unlock" "cen" "")
   )
;------------------------------------------------------------------------------------------
  (setq a1 (entsel "\n请选定要画中心线的圆\\圆弧\\直线:"))
  (while (null a1)
       (setq a1 (entsel "\n请选定要画中心线的圆\\圆弧\\直线:"))
  )
  (setq a2 (entget (car a1)))
  (setq l1 (assoc 0 a2))
  (setq l2 (cdr l1))
  (while (and (/= l2 "LINE") (/= l2 "ARC") (/= l2 "CIRCLE"))
         (setq a1 (entsel "\n所选的不是圆\\圆弧\\直线:"))
         (while (null a1)
            (setq a1 (entsel "\n请选定要画中心线的圆\\圆弧\\直线:"))
         )
         (setq pt1 (cadr a1))
         (setq a2 (entget (car a1)))
         (setq l1 (assoc 0 a2))
         (setq l2 (cdr l1))
  )
  (if (or (= l2 "ARC") (= l2 "CIRCLE"))
      (progn
          (setq b1 (cdr (assoc 10 a2)))  ;圆心座标
          (setq b2 (cdr (assoc 40 a2)))  ;圆半径
          (setvar "clayer" "cen")
          (command "line" (list (- (car b1) (* b2 1.2)) (cadr b1)) (strcat "@" (rtos (* b2 2.4))
                          "<0") "")
          (command "array" "l" "" "p" b1 "2" "90" "")
      )
   )
  (if (or (= l2 "LINE"))
      (progn
          (setq a3 (entsel "\n请选定另一直线:"))
          (while (null a3)
                 (setq a3 (entsel "\n请选定另一直线:"))
          )
          (setq a4 (entget (car a3)))
          (setq end1 (cdr (assoc 10 a2)))
          (setq end2 (cdr (assoc 11 a2)))
          (setq end3 (cdr (assoc 10 a4)))
          (setq end4 (cdr (assoc 11 a4)))
          (setq e1 (distance end1 end3))
          (setq e2 (distance end1 end4))
          (if (< e1 e2)
             (progn
              (setq end5 (list (/ (+ (car end1) (car end3)) 2.0) (/ (+ (cadr end1) (cadr end3)) 2.0)))
              (setq end6 (list (/ (+ (car end2) (car end4)) 2.0) (/ (+ (cadr end2) (cadr end4)) 2.0)))
             )
             (progn
              (setq end5 (list (/ (+ (car end1) (car end4)) 2.0) (/ (+ (cadr end1) (cadr end4)) 2.0)))
              (setq end6 (list (/ (+ (car end2) (car end3)) 2.0) (/ (+ (cadr end2) (cadr end3)) 2.0)))
             )
          )
          (setq end5_1 (polar end5 (angle end6 end5) 10))
          (setq end6_1 (polar end6 (angle end5 end6) 10))
          (setvar "clayer" "cen")
          (command "line" end5_1 end6_1 "")
      )
   )
   (setvar "osmode" os_old)
   (setvar "clayer" cl_old)
   (princ)
)

在画中心线时如果中断,我设置好的自动捕捉就全没有了,而且没有中断命令,设置好的坐标系也会自动跳掉啦!

谢谢!

发表于 2007-5-26 20:49 | 显示全部楼层

做个出错函数就可以了

 楼主| 发表于 2007-5-26 21:17 | 显示全部楼层

能帮帮我吗,我不怎么懂呢,

 楼主| 发表于 2007-5-26 21:27 | 显示全部楼层
二楼的兄弟,你还在线吗,帮我修改一下啦,我感激不尽
发表于 2007-5-26 23:45 | 显示全部楼层
随手改了一下
  1. (defun c:cl ()
  2.    (setvar "cmdecho" 0)
  3.    (setq os_old (getvar "osmode"))
  4.    (setq cl_old (getvar "clayer"))
  5.   
  6.    (setq olderr *error*)
  7.    (defun *error*(msg)
  8.       (command "_undo" "b")
  9.       (setvar "osmode" os_old)
  10.       (setvar "clayer" cl_old)
  11.       (setq *error* olderr)(princ)
  12.    )
  13.    (command "_undo" "m")
  14.   
  15.    (setvar "osmode" 0)
  16.    (command "ucs" "")
  17. ;-----------------------------------------------------------------------------------------
  18.    (if (not (tblsearch "layer" "cen"))
  19.        (command "_.layer" "_new" "cen" "_color" "1" "cen" "_ltype" "center" "cen" "")
  20.        (command "_.layer" "thaw" "cen" "on" "cen" "unlock" "cen" "")
  21.    )
  22. ;------------------------------------------------------------------------------------------
  23.   
  24.   
  25.   (while (setq a1 (entsel "\n请选定要画中心线的圆\\圆弧\\直线:"))
  26.      (setq a2 (entget (car a1)))
  27.      (setq l1 (assoc 0 a2))
  28.      (setq l2 (cdr l1))
  29.      (if (not (wcmatch l2 "LINE,ARC,CIRCLE"))
  30.          (princ "\n所选的不是圆\\圆弧\\直线!")
  31.          (progn
  32.             (cond ((wcmatch l2 "ARC,CIRCLE")
  33.        (setq b1 (cdr (assoc 10 a2)))  ;圆心座标
  34.                      (setq b2 (cdr (assoc 40 a2)))  ;圆半径
  35.                      (setvar "clayer" "cen")
  36.                      (command "line" (list (- (car b1) (* b2 1.2)) (cadr b1)) (strcat "@" (rtos (* b2 2.4))
  37.                           "<0") "")
  38.                      (command "array" (entlast) "" "p" b1 "2" "90" "")
  39.     )
  40.     ((= l2 "LINE")
  41.                       (while (not (setq a3 (entsel "\n请选定另一直线:")))
  42.                          (princ "\n没有选定另一直线!")
  43.                       )
  44.         (setq a4 (entget (car a3)))
  45.                       (setq end1 (cdr (assoc 10 a2)))
  46.                       (setq end2 (cdr (assoc 11 a2)))
  47.                       (setq end3 (cdr (assoc 10 a4)))
  48.                       (setq end4 (cdr (assoc 11 a4)))
  49.                       (setq e1 (distance end1 end3))
  50.                       (setq e2 (distance end1 end4))
  51.                       (if (< e1 e2)
  52.      (setq end5 (mapcar '* '(0.5 0.5) (mapcar '+ end1 end3))
  53.     end6 (mapcar '* '(0.5 0.5) (mapcar '+ end2 end4))
  54.      )
  55.      (setq end5 (mapcar '* '(0.5 0.5) (mapcar '+ end1 end4))
  56.           end6 (mapcar '* '(0.5 0.5) (mapcar '+ end2 end3))
  57.      )
  58.                            
  59.                       )
  60.                       (setq end5_1 (polar end5 (angle end6 end5) 10))
  61.                       (setq end6_1 (polar end6 (angle end5 end6) 10))
  62.                       (setvar "clayer" "cen")
  63.                       (command "line" end5_1 end6_1 "")
  64.                      
  65.     )
  66.         )
  67.      )
  68.   )
  69.    )
  70.    (setq *error* olderr)
  71.    (setvar "osmode" os_old)
  72.    (setvar "clayer" cl_old)
  73.    (princ)
  74. )
 楼主| 发表于 2007-5-27 12:36 | 显示全部楼层

上面的兄弟,谢谢你的修改,自动捕捉的问题是解决了,\但是我先前设置好的坐标系还是会跑掉啦,能再帮我修改一下吗?谢谢!

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

本版积分规则

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

GMT+8, 2024-5-6 03:41 , Processed in 0.223520 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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