;子程序 (defun waiqie() (command "circle" cen2 banjc "") ;以cen2为圆心做圆 (setq yuan1 (entlast)) (redraw cir1 4) (redraw cir2 4)
(setq pt1 (polar cen2 (/ pi 2) banjc)) ;pt1点 半径差圆的上qua点
(setq pt2 (polar cen2 (/ pi 2) banj2)) ;pt2点 大圆的上qua点
(command "line" cen1 "tan" pt1 "") ;做圆的切线
(setq xian1 (entlast)) ;设为xian1
(command "offset" banj1 (entlast) pt2 "") ;偏移成为最终的切线
(setq xian2 (entlast)) ;设这条最终的切线为xian2
(command "mirror" xian2 "" cen1 cen2 "") ;镜像xian2
(command "erase" xian1 "") ;删除辅助的xian1
(command "erase" yuan1 "") ;删除辅助的yuan1
(setvar "osmode" oldos)
(princ) )
;子程序 (defun neiqie() (command "circle" cen2 banjh "") ;以cen2为圆心做圆 (setq yuan1 (entlast)) (redraw cir1 4) (redraw cir2 4)
(setq pt1 (polar cen2 (/ pi 2) banj2)) ;pt1点 半径差圆的上qua点
(setq pt2 (polar cen2 (/ pi 2) banjh)) ;pt2点 大圆的上qua点
(command "line" cen1 "tan" pt2 "") ;做圆的切线
(setq xian1 (entlast)) ;设为xian1
(command "offset" banj1 (entlast) pt1 "") ;偏移成为最终的切线
(setq xian2 (entlast)) ;设这条最终的切线为xian2
(command "mirror" xian2 "" cen1 cen2 "") ;镜像xian2
(command "erase" xian1 "") ;删除辅助的xian1
(command "erase" yuan1 "") ;删除辅助的yuan1
(setvar "osmode" oldos)
(princ) )
(defun c:yy() (setq oldos (getvar "osmode")) (setvar "cmdecho" 0) (setvar "osmode" 0)
(initget 7 "1 2") (setq str (getkword "请输入您想要的相切方式:[外切(1)/<内切(2)]"))
(setq cir1 (car (entsel "\n 请选择第一个较小的圆:"))) (redraw cir1 3) (setq cen1 (cdr (assoc 10 (entget cir1)))) ;圆心 (setq banj1 (cdr (assoc 40 (entget cir1)))) ;半径
(setq cir2 (car (entsel "\n 请选择第二个较大的圆:"))) (redraw cir2 3) (setq cen2 (cdr (assoc 10 (entget cir2)))) ;圆心 (setq banj2 (cdr (assoc 40 (entget cir2)))) ;半径
(setq banjc (- banj2 banj1)) ;半径差 (setq banjh (+ banj2 banj1)) ;半径和
(cond ((= str "") (waiqie)) ((= str "1") (waiqie)) ((= str "2") (neiqie)) (t (print)) ) (princ) )
|