|
AVLISP |
 |
|
Join Date: |
|
09-28-2007 | |
Here is an interesting routine using the grread and grdraw functions.
Open a new drawing and draw a circle with center point (0,0,0) and radius 10.
Do a zoom extents and load application.
Run with (c:trapped).
You can move the balls around, but you cannot push them out of the big circle.
Code:
(defun c:trapped ()
(setvar "cmdecho" 0)
(setq div (/ pi 8))
(command "circle" (list 0 0 0) "10")
(setq maincir (entlast));(car (entsel)))
(setq maincir (vlax-ename->vla-object maincir))
(setq mainrad (vla-get-radius maincir))
(setq maincen (vla-get-center maincir))
(setq center (vlax-safearray->list (vlax-variant-value maincen)))
(setq fcen center)
(setq fcen2 (polar center 0 2))
(command "zoom" "c" center "")
(setq colorball 8)
(setq colora 2)
(setq colorb 3)
(setq radb 0.5)
(setq rad 1)
(while t
(setq x (grread T 2 0))
(if (= (car x) 5)
(progn
(setq p1 (nth 1 x))
(setq wang (angle center p1))
;; ;;;;;;;;;;;;;;;
(if (< (distance center p1) (- mainrad 1))
(progn
(setq pos (polar center wang (distance center p1)))
(setq colorball 8)
)
(progn
(setq pos (polar center wang (- mainrad radb)))
(setq colorball 1)
)
)
;; ;;;;;;;;;;;;;
(if (> (distance center fcen) (- mainrad 1))
(setq fcen (polar center (angle center fcen) (- mainrad 1)))
(setq fcen (polar center (angle center fcen)(distance center fcen)))
)
;; ;;;;;;;;;;;;;
(if (> (distance center fcen2) (- mainrad 1))
(setq fcen2 (polar center (angle center fcen2) (- mainrad 1)))
(setq fcen2 (polar center (angle center fcen2)(distance center fcen2)))
)
;; ;;;;;;;;;;;;;;;;
(command "regen")
(setq wangt 0)
(setq wpt1 (polar pos 0 radb))
(setq wpt2 (polar pos wangt radb))
(drawcir pos radb colorball)
(if (< (distance p1 fcen) 1.5)
(progn
(setq shang (angle p1 fcen))
(setq fcen (polar p1 shang 1.5))
)
)
(if (< (distance p1 fcen2) 1.5)
(progn
(setq shang2 (angle p1 fcen2))
(setq fcen2 (polar p1 shang2 1.5))
)
)
(if (< (distance fcen fcen2) 2)
(progn
(setq shang3 (angle fcen fcen2))
(setq fcen2 (polar fcen shang3 2))
)
)
(setq wangt 0)
(setq wpt1 (polar fcen 0 rad))
(setq wpt2 (polar fcen wangt rad))
(drawcir fcen rad colora)
(setq wangt 0)
(setq wpt1 (polar fcen2 0 rad))
(setq wpt2 (polar fcen2 wangt rad))
(drawcir fcen2 rad colorb)
)
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun drawcir (a b c)
(repeat 17
(setq wpt1 wpt2)
(setq wpt2 (polar a wangt b))
(setq wangt (+ wangt div))
(grdraw wpt1 wpt2 c)
)
)
|