#N canvas 102 61 864 638 10;
#X declare -lib Gem;
#X obj 209 223 gemhead;
#X obj 241 277 t a a a;
#X obj 264 320 cube 1;
#X obj 238 66 world_light;
#X obj 238 41 gemhead;
#X obj 37 226 gemhead;
#X obj 37 321 sphere 1.3 33;
#X obj 287 300 rotateXYZ 60 30 0;
#X obj 37 300 rotateXYZ 60 30 0;
#X text 36 184 #1:;
#X text 209 181 #2:;
#X obj 37 428 sphere 1.3 33;
#X obj 37 407 rotateXYZ 60 30 0;
#X obj 209 248 t a a;
#X obj 595 288 gemlist;
#X obj 595 223 gemhead;
#X obj 595 250 t b b a;
#X obj 37 202 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
#X obj 209 198 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 595 198 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 37 342 translateXYZ 2 0 0;
#X obj 37 449 translateXYZ 2 0 0;
#X obj 241 341 translateXYZ 2 0 0;
#X obj 209 386 t a a a;
#X obj 232 429 cube 1;
#X obj 255 409 rotateXYZ 60 30 0;
#X obj 209 450 translateXYZ 2 0 0;
#X obj 595 410 rotateXYZ 60 30 0;
#X obj 595 452 translateXYZ 2 0 0;
#X obj 595 431 sphere 1.6 4;
#X text 29 498 example #1 is the usual way to use Gem \, but the technique
shown in example #2 can be more flexible...;
#N canvas 186 321 446 463 more_interating_1 0;
#X obj 22 64 gemhead;
#X obj 22 351 rotateXYZ 0 0 12;
#X obj 22 274 scaleXYZ 0.97 0.9 1;
#X obj 22 296 translateXYZ 0.5 0 0;
#X obj 22 376 circle 0.2;
#X floatatom 131 331 5 0 0 0 - - -;
#X obj 22 226 gemlist;
#X obj 22 204 until;
#X msg 22 180 100;
#X obj 22 158 t b a;
#X obj 22 111 translateXYZ -3 0 0;
#X obj 22 43 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
;
#X text 85 198 "repeat" 100 times the same "gemlist";
#X connect 0 0 10 0;
#X connect 1 0 4 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 5 0 1 3;
#X connect 6 0 2 0;
#X connect 7 0 6 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 9 1 6 1;
#X connect 10 0 9 0;
#X connect 11 0 0 0;
#X restore 32 561 pd more_interating_1;
#N canvas 178 159 464 582 more_interating_2 0;
#X obj 22 69 gemhead;
#X obj 22 377 scaleXYZ 0.97 0.9 1;
#X obj 22 505 circle 0.2;
#X obj 22 235 gemlist;
#X obj 22 213 until;
#X msg 22 189 100;
#X obj 22 167 t b a;
#X obj 185 322 f;
#X obj 277 309 random 1000;
#X obj 22 480 rotateXYZ 0 0 0;
#X obj 185 420 *;
#X obj 22 132 t a b;
#X obj 22 264 t a b b;
#X msg 277 283 seed \$1;
#X obj 277 256 f;
#X floatatom 295 234 5 0 0 0 - - -;
#X obj 277 334 - 500;
#X obj 185 441 / 1000;
#X obj 22 400 translateXYZ -0.5 0 0;
#X obj 22 103 translateXYZ 3 0 0;
#X obj 22 42 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
;
#X text 343 233 <- change random;
#X text 276 356 rotation angle is random;
#X text 200 390 amplitude decrease;
#X msg 203 296 100;
#X obj 222 351 - 1;
#X connect 0 0 19 0;
#X connect 1 0 18 0;
#X connect 3 0 12 0;
#X connect 4 0 3 0;
#X connect 5 0 4 0;
#X connect 6 0 5 0;
#X connect 6 1 3 1;
#X connect 7 0 25 0;
#X connect 7 0 10 0;
#X connect 8 0 16 0;
#X connect 9 0 2 0;
#X connect 10 0 17 0;
#X connect 11 0 6 0;
#X connect 11 1 24 0;
#X connect 11 1 14 0;
#X connect 12 0 1 0;
#X connect 12 1 7 0;
#X connect 12 2 8 0;
#X connect 13 0 8 0;
#X connect 14 0 13 0;
#X connect 15 0 14 1;
#X connect 16 0 10 1;
#X connect 17 0 9 3;
#X connect 18 0 9 0;
#X connect 19 0 11 0;
#X connect 20 0 0 0;
#X connect 24 0 7 1;
#X connect 25 0 7 1;
#X restore 32 581 pd more_interating_2;
#X obj 445 223 gemhead;
#X obj 445 198 tgl 15 1 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X text 443 178 #3:;
#X obj 445 410 rotateXYZ 60 30 0;
#X obj 445 452 translateXYZ 2 0 0;
#X obj 445 271 t a a;
#X text 593 178 #4:;
#X text 611 314 [gemlist] stores the current state;
#X text 613 330 and outputs it when banged;
#X text 30 528 The example #4 can easily be extended to use many primitives.
;
#X text 31 122 [gemhead]'s output is a special message describing the
"state" of the system. This state is changed by the GEM objects. This
means that the examples below are equivalent:;
#X obj 445 431 teapot 1;
#N canvas 340 107 682 322 gemwin 0;
#X obj 102 122 tgl 15 0 \$0-gemstart \$0-gemstart empty 17 7 0 10 -262144
-1 -1 0 1;
#X obj 102 161 r \$0-gemstart;
#X obj 102 182 select 1 0;
#X msg 102 214 create \, 1;
#X msg 177 215 destroy;
#X obj 102 239 t a;
#X obj 318 54 inlet;
#X obj 318 255 gemwin;
#X obj 318 100 t a a;
#X obj 318 287 outlet;
#X obj 350 128 route create destroy;
#X obj 350 150 t b;
#X msg 350 172 1;
#X obj 390 150 t b;
#X msg 390 172 0;
#X obj 350 195 t f;
#X msg 350 219 set \$1;
#X text 118 122 rendering;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 4 0;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 6 0 8 0;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 8 1 10 0;
#X connect 10 0 11 0;
#X connect 10 1 13 0;
#X connect 11 0 12 0;
#X connect 12 0 15 0;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 0 0;
#X coords 0 -1 1 1 85 40 1 100 100;
#X restore 44 55 pd gemwin;
#N canvas 0 0 450 300 Gem.init 0;
#X obj 94 232 outlet;
#X obj 94 183 loadbang;
#X msg 94 208 lighting 1;
#X connect 1 0 2 0;
#X connect 2 0 0 0;
#X restore 44 36 pd Gem.init;
#X obj 748 8 declare -lib Gem;
#X connect 0 0 13 0;
#X connect 1 0 22 0;
#X connect 1 1 2 0;
#X connect 1 2 7 0;
#X connect 4 0 3 0;
#X connect 5 0 8 0;
#X connect 6 0 20 0;
#X connect 8 0 6 0;
#X connect 11 0 21 0;
#X connect 12 0 11 0;
#X connect 13 0 23 0;
#X connect 13 1 1 0;
#X connect 14 0 27 0;
#X connect 15 0 16 0;
#X connect 16 0 14 0;
#X connect 16 1 14 0;
#X connect 16 2 14 1;
#X connect 17 0 5 0;
#X connect 18 0 0 0;
#X connect 19 0 15 0;
#X connect 20 0 12 0;
#X connect 23 0 26 0;
#X connect 23 1 24 0;
#X connect 23 2 25 0;
#X connect 27 0 29 0;
#X connect 29 0 28 0;
#X connect 33 0 38 0;
#X connect 34 0 33 0;
#X connect 36 0 44 0;
#X connect 38 0 36 0;
#X connect 38 1 36 0;
#X connect 44 0 37 0;
#X connect 46 0 45 0;
