(defun C:2x(/ th ss bp sp ep pt1 pt2 pt3 pt4 n tmp bbp ssp) (setq old_err *error*) (setvar "CMDECHO" 0) (setvar "BLIPMODE" 0) (command "layer" "m" "wall" "c" "w" "wall" "") (setvar "osmode" 32) (if (= thw nil) (setq thw 240.0)) (setq th (getreal (strcat "\n外墙厚<" (rtos thw 2 0) ">:"))) (if (= th nil) (setq th thw)) (setq thw th) (if (= thlsw nil) (setq thlsw 120.0)) (setq thls (getreal (strcat "\n轴线外的墙厚<" (rtos thlsw 2 0) ">:"))) (if (= thls nil) (setq thls thlsw)) ;thls轴线外墙厚 (setq thlsw thls) (setq thrx (- th thls)) ;thrx轴线内墙厚 (setq bp (getpoint "\n第一点: ")) (setq bbp bp) ;bbp记录下第一点 (if (= nil bp) (quit)) (setq sp (getpoint bp "\n下一点(注意:按顺时针): ")) (setq ssp sp) ;ssp记录下第二点 (setvar "osmode" 0) (if (= nil sp) (quit)) (setq n 0 tmp 0) ;n=0为第一条线 ;tmp=0 (while T (setq ang1 (angle bp sp)) (setq dis1 (distance bp sp)) (setq pt1 (polar bp (+ ang1 (* pi 0.5)) thls)) (setq pt2 (polar pt1 ang1 dis1)) (if (= 0 n) (command "line" pt1 pt2 "") (command "line" pt11 pt2 "") ) (setq ss (ssadd)) (setq ss (ssget "L")) (setq pt3 (polar bp (- ang1 (* pi 0.5)) thrx)) (setq pt4 (polar pt3 ang1 dis1)) (if (= 0 n) (command "line" pt3 pt4 "") (command "line" pt33 pt4 "") ) (setq ss (ssadd (entlast) ss)) (if (= 1 tmp) (command "erase" ss "")) (if (= nil ep) (progn (if (= 1 tmp) (progn (redraw) (quit) ) (progn (setvar "osmode" 32) (initget "C") (setq ep (getpoint sp "\nC闭合/下一点: ")) (setvar "osmode" 0) ) ) (if (= nil ep) (quit)) (if (eq ep "C") (setq ep bbp)) (setq ang2 (angle sp ep)) (setq ang3 (- pi ang1)) (setq ang4 (- (* pi 2) ang2)) (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2))) (setq dis2 (distance sp ep)) (setq dis3 (* thls (tan ang3))) (setq dis4 (* thrx (tan ang3))) (setq pt1 (polar bp (+ ang1 (* pi 0.5)) thls)) (setq pt2 (polar pt1 ang1 (+ dis1 dis3))) (command "erase" ss "") (if (= 0 n) (progn (command "line" pt1 pt2 "") (setq sss (ssadd)) (setq sss (ssget "L")) ) (command "line" pt11 pt2 "") ) (setq pt3 (polar bp (- ang1 (* pi 0.5)) thrx)) (setq pt4 (polar pt3 ang1 (- dis1 dis4))) (if (= 0 n) (progn (command "line" pt3 pt4 "") (setq sss (ssadd (entlast) sss)) ) (command "line" pt33 pt4 "") ) ) (progn (command "erase" sss "") (setq ang2 (angle sp ep)) (setq ang3 (- pi ang1)) (setq ang4 (- (* pi 2) ang2)) (setq ang3 (- (/ pi 2) (/ (- ang3 ang4) 2))) (setq dis2 (distance sp ep)) (setq dis3 (* thls (tan ang3))) (setq dis4 (* thrx (tan ang3))) (setq pt1 (polar bp (+ ang1 (* pi 0.5)) thls)) (setq pt2 (polar pt1 ang1 (+ dis1 dis3))) (command "erase" ss "") (command "line" pt11 pt2 "") (setq ss (ssadd)) (setq ss (ssget "L")) (setq pt3 (polar bp (- ang1 (* pi 0.5)) thrx)) (setq pt4 (polar pt3 ang1 (- dis1 dis4))) (command "line" pt33 pt4 "") (setq ss (ssadd (entlast) ss)) (command "line" pt2 pte1 "") (command "line" pt4 pte2 "") (setq tmp 1) ) ) (if (= 0 n) (setq pte1 pt2 pte2 pt4) ) (setq pt11 pt2 pt33 pt4) (setq bp sp sp ep n 1) (if (equal bbp ep) (setq ep ssp) (setq ep nil) ) ) (princ) ) |