#N canvas 716 191 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 #fcfcfc #000000 #000000 1 1;
#X obj 209 198 tgl 15 1 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 595 198 tgl 15 1 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 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 952 333 446 463 more_iterating_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 - - - 0;
#X obj 22 111 translateXYZ -3 0 0;
#X obj 22 43 tgl 15 1 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
#X text 118 201 "repeat" 100 times the same "gemlist";
#X obj 22 197 gemrepeat 100;
#X connect 0 0 6 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 9 0;
#X connect 7 0 0 0;
#X connect 9 0 2 0;
#X restore 32 561 pd more_iterating_1;
#N canvas 804 223 464 582 more_iterating_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 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 - - - 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 #fcfcfc #000000 #000000 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 obj 22 190 gemrepeat 100;
#X connect 0 0 15 0;
#X connect 1 0 14 0;
#X connect 3 0 21 0;
#X connect 3 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 2 0;
#X connect 6 0 13 0;
#X connect 7 0 22 0;
#X connect 7 1 20 0;
#X connect 7 1 10 0;
#X connect 8 0 1 0;
#X connect 8 1 3 0;
#X connect 8 2 4 0;
#X connect 9 0 4 0;
#X connect 10 0 9 0;
#X connect 11 0 10 1;
#X connect 12 0 6 1;
#X connect 13 0 5 3;
#X connect 14 0 5 0;
#X connect 15 0 7 0;
#X connect 16 0 0 0;
#X connect 20 0 3 1;
#X connect 21 0 3 1;
#X connect 22 0 8 0;
#X restore 32 581 pd more_iterating_2;
#X obj 445 223 gemhead;
#X obj 445 198 tgl 15 1 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 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;
#X obj 748 8 declare -lib Gem;
#X obj 44 35 _gemwin \; 0 \; 0 \; lighting 1;
#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;
