接下来,我们将进行一场精彩的动态演示。
- (defun c:test (/ *error* Draw_Dynamic_Real s ang sn pt a b d g p gp len x)
- ;; Tharwat 12. Mar. 2014 ;;
- (defun *error* (x)
- (redraw)
- (if (wcmatch (strcase x) "*EXIT*,*CANCEL*,*BREAK*")
- (princ x)
- (princ (strcat "\n Error: " x))
- )
- )
- (if (and (setq p (getpoint "\n Specify point at the End Side of Polyline :"))
- (if (setq s (ssget p '((0 . "LWPOLYLINE,SPLINE,LINE,ARC"))))
- t
- (Alert "Pick a point at the end of [ LWPOLYLINE,SPLINE,LINE,ARC ] only .")
- )
- )
- (progn (defun Draw_Dynamic_Real (sn o x sp r / d i n l ang pt)
- (setq d (/ (vlax-curve-getdistatparam sn (vlax-curve-getendparam sn)) o)
- i o
- l (list (* o 0.5) (* o 1.5))
- )
- (if (> sp 0.)
- (setq n sp)
- (setq n i)
- )
- (repeat (fix d)
- (setq ang (angle '(0.0 0.0 0.0)
- (vlax-curve-getfirstderiv
- sn
- (vlax-curve-getparamatpoint sn (setq pt (vlax-curve-getpointatdist sn n)))
- )
- )
- n (+ n i)
- )
- (if r
- (entmake (list '(0 . "LINE")
- (cons 8 "test")
- (cons 10 pt)
- (cons 11
- (polar pt
- (if x
- (+ ang (* pi 0.5))
- (+ ang (* pi 1.5))
- )
- (car (setq l (reverse l)))
- )
- )
- )
- )
- (grdraw pt
- (polar pt
- (if x
- (+ ang (* pi 0.5))
- (+ ang (* pi 1.5))
- )
- (car (setq l (reverse l)))
- )
- 1
- 0
- )
- )
- )
- (princ)
- )
- (setq d 1.5
- len (vlax-curve-getdistatparam (setq sn (ssname s 0)) (vlax-curve-getendparam sn))
- )
- (if (< (distance (setq a (vlax-curve-getstartpoint sn)) p)
- (distance (setq b (vlax-curve-getendpoint sn)) p)
- )
- (setq p a
- gp 0.
- )
- (setq p b
- gp (rem len d)
- )
- )
- (while (eq (car (setq g (grread t 13 0))) 5)
- (redraw)
- (if (minusp (sin (- (angle p (polar p (angle b a) (/ len 1000.))) (angle p (cadr g)))))
- (setq x nil)
- (setq x t)
- )
- (Draw_Dynamic_Real sn d x gp nil)
- )
- (if (eq (car g) 3)
- (Draw_Dynamic_Real sn d x gp t)
- )
- )
- )
- (redraw)
- (princ)
- )
- (vl-load-com)
|