本帖最后由 菡萏 于 2014-12-2 09:44 编辑
xiguanyiren_y 发表于 2014-12-2 08:40 
你说简单,能否帮忙写一下呢!
代码仅是个绘制示例,请自行根据需要完善!
 - (defun c:tt (/ PERDIST OS CMDECHO P1 P2 P3 W W1 D LEN N ANG ANG1
- PT1 PT2 *error*
- )
- (defun *error* (s)
- (setvar 'osmode os)
- (setvar 'cmdecho cmdecho)
- (princ s)
- )
- (defun PerDist (pt p1 p2 / norm)
- (setq norm (mapcar '- p2 p1)
- p1 (trans p1 0 norm)
- pt (trans pt 0 norm)
- )
- (- (car pt) (car p1))
- )
- (setq os (getvar 'osmode))
- (setvar 'osmode 681)
- (setq cmdecho (getvar 'cmdecho))
- (setvar 'cmdecho 0)
- (if (and
- (setq p1 (getpoint "\n起点:"))
- (setq p2 (getpoint p1 "\n中点:"))
- (setq p3 (getpoint p2 "\n终点:"))
- )
- (progn
- (initget 6)
- (setq w (getreal "\n半宽<0.5>:"))
- (if (null w)
- (setq w 0.5)
- )
- (setq w1 (getreal "\n间距<1.0>:"))
- (if (null w1)
- (setq w1 1.0)
- )
- (setq d (abs (perdist p1 p2 p3)))
- (setq len (distance p2 p3))
- (setq w1 (- (/ len (setq n (fix (/ len (+ w1 w w))))) w w))
- (setq ang (angle p2 p3)
- ang1 (+ ang (* pi 0.5))
- )
- (setq pt1 (polar p2 ang1 (- d))
- pt2 (polar pt1 ang1 (* 2 d))
- )
- (command "pline" "non" pt1 "H" w w "non" pt2 "")
- (setq p1 pt1 p2 pt2)
- (repeat n
- (setq pt1 (polar pt1 ang (+ w w w1))
- pt2 (polar pt1 ang1 (* 2 d))
- )
- (command "pline" "non" pt1 "non" pt2 "")
- )
- (command "line" "non" p1 "non" pt1 "")
- (command "line" "non" p2 "non" pt2 "")
- )
- )
- (setvar 'osmode os)
- (setvar 'cmdecho cmdecho)
- (princ)
- )
|