Exchange Forum > AutoCAD Games
Trapped!!
Trapped!!

#1

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)
 )
)
Trapped!!

#2

Adesu
Join Date:
10-03-2007
Good idea and interesting.