(defun c:hh()
(setq osmode_bak (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq *error*_bak *error*)
(setq *error* *error*_set)
;*****************************************
(setq bigc_cen (getpoint "\n大圆的圆心:"))
(setq R (getdist bigc_cen "\n指定大圆半径:"))
(setq littlec_cen (getpoint bigc_cen "\n小圆的圆心:"))
(setq r (getdist littlec_cen "\n指定小圆半径:"))
(setq dis (distance bigc_cen littlec_cen))
(setq ang (angle bigc_cen littlec_cen))
(setq c2c_ang (atan (+ R r) (sqrt (- (expt dis 2.0) (expt (+ R r) 2.0)))))
(setq pt1 (polar bigc_cen (+ ang c2c_ang) R))
(setq pt2 (polar littlec_cen (+ ang c2c_ang pi) r))
(command "circle" bigc_cen R)
(command "circle" littlec_cen r) ;画出的大圆和小圆很出乎我的意料,他们的半径竟然是相等的
(setq ent (entlast)) ;获取小圆便于后面阵列
(command "line" pt1 pt2 "c") ;程序运行到这里就跳到下面的错误处理函数了
(setq ent1 (entlast)) ;获取切线
(command "mirror" ent1 "" bigc_cen littlec_cen "") ;镜像得到第二条切线
(setq ent21 (entlast)) ;获取第二条切线
(command "trim" ent1 ent2 "" (polar bigc_cen ang (- dis r)))
(command "array" ent1 ent2 ent "" "p" bigc_cen 6 "" "")
;*****************************************
(setvar "osmode" osmode_bak)
(setq *error* *error*_bak)
(setvar "cmdecho" 1)
)
(defun *error*_set (msg)
(command)
(setvar "osmode" osmode_bak)
(setvar "cmdecho" 1)
(setq *error* *error*_bak)
(print msg)
(princ)
)
这里最主要的问题是:
1.我画出来的两个圆无论如何竟然是相等的,后来我把这段代码“(setq r (getdist littlec_cen "\n指定小圆半径:"))”改为“(setq r (* R 0.35))”还是不行
2.程序运行到“(command "line" pt1 pt2 "c") ”时就跳到错误处理去了
问题1在我写别的程序中也出现过,不知道是不是函数getdist的问题。