 - (defun C:STR (/ pt1 pt2 l n p0 p1 t01 t02 t1 t2 S1 S2 old_osmode old_cmdecho k ent13 i th )
- ;;保存系统变量设置
- (setq old_osmode (getvar "osmode"))
- (setq old_CMDECHO (getvar "CMDECHO"))
- (setvar "CMDECHO" 0)
- (setvar "osmode" 32)
- (command "-layer" "m" "栏杆" "C" "1" "" "")
- (if (= thss nil)
- (setq thss 0)
- )
- (setq th (getreal (strcat "\n栏杆离板边距<" (rtos thss 2 0) ">:")))
- (if (= th nil)
- (setq th thss)
- )
- (setq thss th)
- (if (setq pt1 (getpoint "\n第一点(顺时针):"))
- (while (setq pt2 (getpoint pt1 "\n下一点:"))
- (setvar "osmode" 0)
- (setq k (angle pt1 pt2))
- ;(setq L (distance pt1 pt2))
- (setq t01 (polar pt1 (- k (* 0.5 pi)) th))
- (setq t1 (polar t01 k th))
- (setq t02 (polar pt2 (- k (* 0.5 pi)) th))
- (setq t2 (polar t02 (- k (* 1 pi)) th))
- (setq L (distance t1 t2))
- (command "line" t1 t2 "")
- (setq ENT13 (entlast)
- S1 (list ENT13 t1)
- )
- (if S2
- (command "_.EXTEND" S1 S2 "" S1 S2 "")
- )
- (command "donut" "0" "80" t1 "")
- (command "donut" "0" "80" t2 "")
- (setq N (/ L 1200))
- (setq I 1)
- (setq P0 t1)
- (while (<= i N)
- (setq P1 (polar p0 k 1200))
- ;(setvar "osmode" 0)
- (progn
- (command "donut" "0" "80" p1 "")
- (setq P0 (polar p0 k 1200))
- (setq I (+ i 1))
- (setq S2 (list ENT13 t2))
- )
- )
- (setvar "osmode" 32)
- (setq pt1 pt2)
- )
- )
- ;;恢复系统变量设置
- (setvar "osmode" old_osmode)
- (setvar "CMDECHO" old_CMDECHO)
- (setvar "clayer" "0")
- (princ)
- )
这个程序当栏杆离板边距不为0时,在凸90度的地方可以闭合,但在凹90度的地方不能闭合,请高手完善一下,不胜感激
|