有bug,不能选了线再选PL,或选了PL再选线,待高手 - ;不封闭的多义线动态拉伸dyst
- (defun c:dyst ( / old_cmd +- ang ang0 dis
- e ent epar gpt gpt1
- grr i ind mpar n
- o par pt pt1
- pt2 ptn pto spar
- vlapto ss tpar
- times
- )
- ;;; (mini_start nil)
- ;;; (princ "\n不封闭的多义线动态拉伸 carrot1983 2008/11/25")
- (setq en (entsel))
- (if (= "LINE" (cdr (assoc 0 (entget (car en)))))
- (COMMAND "LENGTHEN" "DY" en)
- (if (and (setq pt en)
- (setq e (car pt)
- pt (cadr pt)
- o (vlax-ename->vla-object e)
- )
- (= (vlax-get-property o 'ObjectName) "AcDbPolyline")
- (not (vlax-curve-isclosed o))
- )
- (progn
- (setq pt (vlax-curve-getClosestPointTo o (trans pt 1 0))
- spar (vlax-curve-getstartparam e)
- epar (vlax-curve-getendparam e)
- tpar (- epar spar)
- par (vlax-curve-getparamatpoint o pt)
- ang0 (vlax-curve-getfirstderiv o par)
- ang0 (angle '(0 0) (list (car ang0) (cadr ang0)))
- ind (fix par)
- mpar (+ ind 0.5)
- )
- (while (and (setq grr (grread t 4 0))
- (member (car grr) (list 2 5 25))
- )
- (setq pt1 (vlax-curve-getpointatparam e ind)
- pt2 (vlax-curve-getpointatparam e (+ ind 1))
- )
- (if (< par mpar)
- (setq i 0 +- - times (+ ind 1))
- (setq i pt1 pt1 pt2 pt2 i i 1 +- + times (fix (- tpar ind)))
- )
- (setq gpt (cadr grr)
- gpt1 (polar gpt (+ (* 0.5 pi) ang0) (car gpt))
- pto (inters pt1 pt2 gpt gpt1 nil)
- dis (distance pt1 pto)
- ang (angle pt1 pto)
- )
- (repeat times
- (setq n (+- ind i)
- i (1+ i)
- ptn (vlax-safearray->list (vlax-variant-value (vla-get-coordinate o n)))
- vlapto (vlax-make-safearray vlax-vbdouble '(0 . 1))
- )
- (vlax-safearray-fill vlapto (polar ptn ang dis))
- (vla-put-coordinate o n vlapto)
- )
- )
- )
- ))
- ;;; (mai_end)
- )
|