本帖最后由 ssyfeng 于 2019-1-2 11:32 编辑
试试这个: - (defun c:tt (/ ang1 ang2 en1 en2 getds nwcs p2 perpt pts1 pts2 qpt qxcs r0 tang)
- (vl-load-com)
- (setq en1 (car (entsel "\n选择第一根平行直线:"))
- en2 (car (entsel "\n选择第二根平行直线:"))
- nwcs (if (null (setq nwcs (getint "\n选择偏移方向 < 1向内,2向外 > [默认:向外]:"))) 2 nwcs)
- pts1 (list (cdr (assoc 10 (entget en1))) (cdr (assoc 11 (entget en1))))
- pts2 (list (cdr (assoc 10 (entget en2))) (cdr (assoc 11 (entget en2))))
- ang1 (angle (car pts1) (cadr pts1))
- ang2 (angle (car pts2) (cadr pts2))
- getds (if (null (setq getds (getreal "\n输入偏移距离[默认:20]:"))) 20 getds)
- perPT (vlax-curve-getclosestpointto en1 (car pts2))
- qxcs (vlax-curve-getparamatpoint en1 perPT)
- qpt (vlax-curve-getFirstDeriv en1 qxcs)
- TAng (angle '(0.0 0.0 0.0) qpt)
- p2 (vlax-curve-getclosestpointto en1 (car pts2))
- r0 (- (angle p2 (car pts2)) TAng)
- r0 (if (< r0 0)
- (+ r0 (* pi 2))
- r0
- )
- )
- (cond ((equal nwcs 1) (setq getds (* getds -1))))
- (if (equal ang1 ang2 0.001)
- (if (<= 0 r0 pi)
- (progn
- (vla-offset (vlax-ename->vla-object en2) getds)
- (vla-offset (vlax-ename->vla-object en1) (* getds -1))
- )
- (progn
- (vla-offset (vlax-ename->vla-object en1) getds)
- (vla-offset (vlax-ename->vla-object en2) (* getds -1))
- )
- )
- (if (<= 0 r0 pi)
- (progn
- (vla-offset (vlax-ename->vla-object en1) (* getds -1))
- (vla-offset (vlax-ename->vla-object en2) (* getds -1))
- )
- (progn
- (vla-offset (vlax-ename->vla-object en2) getds)
- (vla-offset (vlax-ename->vla-object en1) getds)
- )
- )
- )
- (princ)
- )
|