szx025 发表于 2014-9-28 10:15:10

请高手完善一下程序

(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 t01kth))
(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度的地方不能闭合,请高手完善一下,不胜感激

xyp1964 发表于 2014-9-28 13:46:42



页: [1]
查看完整版本: 请高手完善一下程序