这将使用相同的方法,offet由相对于选择中第一行的点确定:
- (defun c:test ( / a b c d f i l o p s )
- (setq o 3.0) ;; Offset
- (if
- (and
- (setq s (ssget '((0 . "LINE"))))
- (progn
- (redraw (ssname s 0) 3)
- (setq p (getpoint "\nSpecify Side of Highlighted Line to Offset: "))
- (redraw (ssname s 0) 4)
- p
- )
- )
- (progn
- (setq l (entget (ssname s 0))
- a (trans (cdr (assoc 10 l)) 0 1)
- b (trans (cdr (assoc 11 l)) 0 1)
- c (angle a b)
- d (+ c (/ pi 2.0))
- f (if (minusp (cos (- d (angle a p)))) - +)
- )
- (repeat (setq i (sslength s))
- (setq l (entget (ssname s (setq i (1- i))))
- a (trans (cdr (assoc 10 l)) 0 1)
- b (trans (cdr (assoc 11 l)) 0 1)
- c (angle a b)
- d (+ c (/ pi 2.0))
- )
- (entmakex
- (list
- (cons 0 "LINE")
- (cons 10 (trans (polar (polar a d (f o)) c (- o)) 1 0))
- (cons 11 (trans (polar (polar b d (f o)) c o ) 1 0))
- )
- )
- )
- )
- )
- (princ)
- )
如果你对这个方法有任何疑问,请提问——我以为这是一个学习练习。 |