aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Henry <nusmuk@users.sourceforge.net>2004-04-09 16:55:47 +0000
committerCyrille Henry <nusmuk@users.sourceforge.net>2004-04-09 16:55:47 +0000
commitc050bb9a7595860bf72e7c407ff3e8cbd7e77480 (patch)
treeecb3bc9c18a6ff435e980bee7dcce4f61eaade7e
This commit was generated by cvs2svn to compensate for changes in r1590,svn2git-root
which included commits to RCS files with non-trunk default branches. svn path=/trunk/externals/pmpd/; revision=1591
-rwxr-xr-xexemples/00_pmpd.pd36
-rwxr-xr-xexemples/01_basics.pd769
-rwxr-xr-xexemples/02_string.pd163
-rwxr-xr-xexemples/03_chaos2D.pd180
-rwxr-xr-xexemples/04_3D_exemple.pd71
-rwxr-xr-xexemples/05_corde2D.pd452
-rwxr-xr-xexemples/06_pyramide3D.pd249
-rwxr-xr-xexemples/07_corde3D.pd601
-rwxr-xr-xexemples/08_ball2D.pd315
-rwxr-xr-xexemples/09_tutorial2D.pd269
-rwxr-xr-xexemples/10_game.pd908
-rwxr-xr-xexemples/11_comportement.pd974
-rwxr-xr-xexemples/12_exitation.pd1838
-rwxr-xr-xexemples/13_plane3D.pd460
-rwxr-xr-xexemples/14_MP_curve3d.pd471
-rwxr-xr-xexemples/15_constant_force_field.pd283
-rwxr-xr-xexemples/16_name_and_interactors.pd148
-rwxr-xr-xexemples/17_rnd_mouvmnt_and_obstacles.pd74
-rwxr-xr-xexemples/18_flipper.pd265
-rwxr-xr-xexemples/19_vertex.pd107
-rwxr-xr-xexemples/20_moving_vertex.pd117
-rwxr-xr-xexemples/21_fluid_circulation_cylinder.pd199
-rwxr-xr-xexemples/22_gaz_molecules.pd204
-rwxr-xr-xexemples/23_test.pd339
-rwxr-xr-xexemples/24_sand.pd140
-rwxr-xr-xexemples/25_sand2.pd230
-rwxr-xr-xexemples/26_sand3.pd234
-rwxr-xr-xexemples/27_tLia.pd874
-rwxr-xr-xexemples/28_Lia.pd108
-rwxr-xr-xexemples/29_aglom.pd104
-rwxr-xr-xexemples/30_falling_aglom.pd167
-rwxr-xr-xexemples/31_paste.pd206
-rwxr-xr-xexemples/32_Kelvin_Helmoltz_instability.pd160
-rwxr-xr-xexemples/33_vorticity_ellipse.pd369
-rwxr-xr-xexemples/34_cigarette_smoke.pd326
-rwxr-xr-xexemples/35_gravitation.pd74
-rwxr-xr-xexemples/36_3D_interactors.pd781
-rwxr-xr-xexemples/37_hollywood_planette_explosion.pd480
-rwxr-xr-xexemples/38_elastique_membrane_on_a_sphere.pd1413
-rwxr-xr-xexemples/39_blob.pd696
-rwxr-xr-xexemples/40_i3D.pd214
-rwxr-xr-xexemples/41_morfing.pd265
-rwxr-xr-xexemples/42_tentacule.pd453
-rwxr-xr-xexemples/43_game.pd1251
-rwxr-xr-xexemples/44_flag.pd806
-rwxr-xr-xexemples/45_newWave.pd775
-rwxr-xr-xexemples/46_non_linear.pd191
-rwxr-xr-xexemples/aglom.pd43
-rwxr-xr-xexemples/aglom2.pd43
-rwxr-xr-xexemples/aglom3.pd23
-rwxr-xr-xexemples/aglom4.pd24
-rwxr-xr-xexemples/blob.pd105
-rwxr-xr-xexemples/ch_gemwin.pd170
-rwxr-xr-xexemples/ch_uzi.pd22
-rwxr-xr-xexemples/constructor.pd773
-rwxr-xr-xexemples/explose1.pd12
-rwxr-xr-xexemples/explose2.pd12
-rwxr-xr-xexemples/fluide_masse.pd34
-rwxr-xr-xexemples/fluide_masse2.pd138
-rwxr-xr-xexemples/fluide_masse3.pd17
-rwxr-xr-xexemples/fluide_masse4.pd30
-rwxr-xr-xexemples/fluide_masse5.pd66
-rwxr-xr-xexemples/fluide_masse6.pd17
-rwxr-xr-xexemples/game_line.pd70
-rwxr-xr-xexemples/gemLia.pd21
-rwxr-xr-xexemples/gemLia2.pd10
-rwxr-xr-xexemples/gemMasse.pd18
-rwxr-xr-xexemples/gemMasse2.pd12
-rwxr-xr-xexemples/gemMasse3.pd27
-rwxr-xr-xexemples/i3D.pd21
-rwxr-xr-xexemples/i3D2.pd83
-rwxr-xr-xexemples/mass_link.pd82
-rwxr-xr-xexemples/mass_link2.pd24
-rwxr-xr-xexemples/mass_link3.pd90
-rwxr-xr-xexemples/mountain.pd144
-rwxr-xr-xexemples/pd_lia.pd19
-rwxr-xr-xexemples/pd_lia2.pd19
-rwxr-xr-xexemples/pd_masse.pd44
-rwxr-xr-xexemples/pd_masse2.pd15
-rwxr-xr-xexemples/rain.pd16
-rwxr-xr-xexemples/rain1.pd16
-rwxr-xr-xexemples/sand.pd29
-rwxr-xr-xexemples/smoke.pd55
-rwxr-xr-xexemples/smoke1.pd32
-rwxr-xr-xexemples/smoke_vortex.pd41
-rwxr-xr-xexemples/tut_lia.pd19
-rwxr-xr-xexemples/tut_masse.pd15
-rwxr-xr-xexemples/vortex.pd26
-rwxr-xr-xexemples/vortex2.pd53
-rwxr-xr-xhelp/help-iAmbient2D.pd61
-rwxr-xr-xhelp/help-iAmbient3D.pd76
-rwxr-xr-xhelp/help-iCircle2D.pd83
-rwxr-xr-xhelp/help-iCircle3D.pd70
-rwxr-xr-xhelp/help-iCylinder3D.pd90
-rwxr-xr-xhelp/help-iLine2D.pd58
-rwxr-xr-xhelp/help-iPlane3D.pd55
-rwxr-xr-xhelp/help-iSeg2D.pd64
-rwxr-xr-xhelp/help-iSphere3D.pd67
-rwxr-xr-xhelp/help-lia.pd114
-rwxr-xr-xhelp/help-lia2D.pd68
-rwxr-xr-xhelp/help-lia3D.pd68
-rwxr-xr-xhelp/help-masse.pd55
-rwxr-xr-xhelp/help-masse2D.pd77
-rwxr-xr-xhelp/help-masse3D.pd80
-rwxr-xr-xhelp/help-pmpd.pd259
-rwxr-xr-xhelp/help-tCircle2D.pd40
-rwxr-xr-xhelp/help-tCircle3D.pd59
-rwxr-xr-xhelp/help-tCube3D.pd37
-rwxr-xr-xhelp/help-tCylinder3D.pd58
-rwxr-xr-xhelp/help-tLia2D.pd31
-rwxr-xr-xhelp/help-tLia3D.pd31
-rwxr-xr-xhelp/help-tLine2D.pd47
-rwxr-xr-xhelp/help-tPlane3D.pd41
-rwxr-xr-xhelp/help-tSeg2D.pd47
-rwxr-xr-xhelp/help-tSphere3D.pd37
-rwxr-xr-xhelp/help-tSquare2D.pd29
-rwxr-xr-xsrc/iAmbient2D.c200
-rwxr-xr-xsrc/iAmbient3D.c259
-rwxr-xr-xsrc/iCircle2D.c276
-rwxr-xr-xsrc/iCircle3D.c211
-rwxr-xr-xsrc/iCylinder3D.c292
-rwxr-xr-xsrc/iLine2D.c179
-rwxr-xr-xsrc/iPlane3D.c193
-rwxr-xr-xsrc/iSeg2D.c175
-rwxr-xr-xsrc/iSphere3D.c253
-rwxr-xr-xsrc/lia.c162
-rwxr-xr-xsrc/lia2D.c213
-rwxr-xr-xsrc/lia3D.c238
-rwxr-xr-xsrc/makefile95
-rwxr-xr-xsrc/masse.c153
-rwxr-xr-xsrc/masse2D.c810
-rwxr-xr-xsrc/masse3D.c1093
-rwxr-xr-xsrc/pmpd.c146
-rwxr-xr-xsrc/tCircle2D.c113
-rwxr-xr-xsrc/tCircle3D.c195
-rwxr-xr-xsrc/tCube3D.c114
-rwxr-xr-xsrc/tCylinder3D.c218
-rwxr-xr-xsrc/tLia2D.c157
-rwxr-xr-xsrc/tLia3D.c153
-rwxr-xr-xsrc/tLine2D.c137
-rwxr-xr-xsrc/tPlane3D.c175
-rwxr-xr-xsrc/tSeg2D.c139
-rwxr-xr-xsrc/tSphere3D.c128
-rwxr-xr-xsrc/tSquare2D.c92
144 files changed, 30710 insertions, 0 deletions
diff --git a/exemples/00_pmpd.pd b/exemples/00_pmpd.pd
new file mode 100755
index 0000000..5fd0af6
--- /dev/null
+++ b/exemples/00_pmpd.pd
@@ -0,0 +1,36 @@
+#N canvas 69 504 385 281 10;
+#X obj 17 29 pmpd;
+#X text 64 28 this object load the pmpd lib in memory.;
+#X text 17 54 you are ready to try the exemples patchs. Please do not
+run 2 exemples in the same time (somes use same send and receive name).
+;
+#N canvas 0 0 297 347 cpu 0;
+#X obj 118 168 cputime;
+#X obj 118 28 loadbang;
+#X obj 118 112 metro 1000;
+#X msg 118 56 1;
+#X floatatom 118 84 0 0 0 0 - - -;
+#X obj 118 140 t b b;
+#X obj 118 228 * 0.1;
+#X obj 118 197 int;
+#X text 163 84 <-- on/off;
+#X text 163 228 CPU load in percent;
+#X obj 118 252 outlet;
+#X connect 0 0 7 0;
+#X connect 1 0 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 0 0;
+#X connect 5 1 0 1;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X restore 20 212 pd cpu;
+#X floatatom 20 233 5 0 0 0 - - -;
+#X text 17 169 for big patch : look at the cpu used \, you have to
+reduce the simulation speed if your computer is to slow.;
+#X text 17 102 For most exmples \, a recent version of gem is neaded.
+;
+#X text 17 126 exemples are the files begginig with xx_name. xx is
+a number. others files are abstractions used by this examples.;
+#X connect 3 0 4 0;
diff --git a/exemples/01_basics.pd b/exemples/01_basics.pd
new file mode 100755
index 0000000..8fd596e
--- /dev/null
+++ b/exemples/01_basics.pd
@@ -0,0 +1,769 @@
+#N canvas 517 121 515 653 12;
+#X text 66 243 physical modeling for pure data using a collection of
+physical ojects.;
+#X obj 8 250 pmpd;
+#N canvas 0 0 623 384 read 0;
+#X text 123 207 cyrille.henry@la-kitchen.fr;
+#X text 412 312 ch20031213;
+#X text 30 25 The aim of this collection of objects is to create physical
+behavior with pure data. It's not audio synthesis. But it can be used
+for the creation of parameters that can be used for driving an audio
+or video synthesis.;
+#X text 30 101 Most of the examples use GEM \, to allow visualization
+of the "physical" geometry \, but you don't need it to use this collection.
+;
+#X text 30 161 any comments \, criticism \, suggestions \, help would
+be highly apreciated :;
+#X text 28 240 informations can be find :;
+#X text 122 263 http://drpichon.free.fr/pmpd/;
+#X restore 69 296 pd read me first;
+#N canvas 0 0 663 567 basics 0;
+#X text 34 30 Object in this collection can be mass \, link and interactor
+\, in 1D \, 2D or 3D.;
+#X text 47 69 Masses (mass \, mass2D \, mass3D) are ponctual. They've
+got a weight \, and know their position. They can move when they receive
+a force \, acording to physical rules.;
+#X text 47 126 Link (link \, link2D \, link3D) are the basic interaction
+beetween 2 masses. It is a visco-elastic link. The link object receive
+the position of 2 masses \, compute the force beetween the 2 masses
+and output a force for each mass.;
+#X text 47 202 Interactors are a kind of link \, but influence a group
+of masses at once. They can be used for global interaction. We will
+look further into it later.;
+#X text 32 272 This collection of objects can be interconnected for
+the creation of "physical" structures. Such structures can then move
+\, and distord themselves \, according to forces applied to them.;
+#X text 29 350 The resulting movements are very natural \, due to the
+physical equations used to define the objects.;
+#X text 30 418 all objects can be created using pmpd.name \, instead
+of name in order to avoid name conflict between libraries.;
+#X text 29 466 ex :;
+#X text 219 466 are the same objects.;
+#X obj 183 466 lia;
+#X obj 65 466 pmpd.link;
+#X obj 145 466 link;
+#X restore 69 324 pd basics;
+#N canvas 434 60 645 737 global_description 0;
+#X obj 34 169 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 268 print;
+#X obj 34 217 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 57 165 1;
+#X text 58 216 2;
+#X text 36 452 Here is the basic connection beetween 2 masses :;
+#X obj 40 591 lia;
+#X text 36 529 You can also create things like this :;
+#X text 32 23 For patching simplification \, objects in this collection
+only have "cold" inlets. The computation speed depends on an external
+metronome. This metronome should bang alternatively all links in the
+model and then masses of the model.;
+#X text 33 103 mass and link have a name corresponding to their class
+name. They will receive everything sent to this name.;
+#X text 159 236 clicking on bang 1 or 2 is equivalent;
+#X text 32 304 As you sould send a bang alternatively to links and
+masses \, you sould give diferent names to the links group and masses
+group.;
+#X text 36 361 Masses output their position when you bang them. This
+position depends on the forces applied to the mass.;
+#X text 36 401 Links output a force according to the position of the
+masses when you bang them. This force sould be applied to the same
+mass.;
+#X text 40 626 The masse1 will never receive forces \, so it will never
+move. It is useful for creating a structure attached to a fixed point.
+;
+#X obj 40 558 mass masse1;
+#X obj 76 591 mass masse2;
+#X obj 110 489 masse;
+#X obj 156 489 lia;
+#X obj 195 489 masse;
+#X obj 34 188 s foo1;
+#X obj 34 237 masse2D foo1;
+#X connect 0 0 20 0;
+#X connect 2 0 21 0;
+#X connect 6 1 16 0;
+#X connect 15 0 6 0;
+#X connect 16 0 6 1;
+#X connect 17 0 18 0;
+#X connect 18 0 17 0;
+#X connect 18 1 19 0;
+#X connect 19 0 18 1;
+#X connect 21 0 1 0;
+#X restore 69 353 pd global_description;
+#N canvas 0 0 762 661 test 0;
+#X msg 108 98 1;
+#X msg 74 98 0;
+#X msg 41 98 -1;
+#X msg 141 98 2;
+#X obj 15 16 loadbang;
+#X floatatom 41 169 5 0 0 0 - - -;
+#X msg 106 390 1;
+#X msg 72 390 0;
+#X msg 39 390 -1;
+#X msg 139 390 2;
+#X floatatom 39 461 5 0 0 0 - - -;
+#X floatatom 37 325 5 0 0 0 - - -;
+#X msg 106 508 1;
+#X msg 72 508 0;
+#X msg 39 508 -1;
+#X msg 139 508 2;
+#X floatatom 39 579 5 0 0 0 - - -;
+#X text 247 61 A force to a masse make it to move at a constant speed.
+You can accelerate it or decelerate it using message box. a nul force
+as no effect.;
+#X floatatom 172 267 5 0 0 0 - - -;
+#X msg 104 264 1;
+#X msg 70 264 0;
+#X msg 37 264 -1;
+#X msg 137 264 2;
+#X text 247 405 Viscosity link : the force is proportinal to the deformation
+speed of the link;
+#X text 249 265 Rigidity link : the force is proportional to the elongation
+of the link. (the right inlet is not used \, so the like take is defauld
+value : 0.) Lengh of the link is null.;
+#X text 238 529 Visco-elasic link : the effect is the somme of the
+2 previus link.;
+#X obj 15 69 s foo2;
+#X obj 41 142 mass foo2 10 0 0;
+#X obj 37 298 link foo2 0 0.1 0;
+#X obj 39 434 link foo2 0 0 0.1;
+#X obj 39 552 link foo2 0 0.1 0.1;
+#X obj 15 43 metro 300;
+#X connect 0 0 27 0;
+#X connect 1 0 27 0;
+#X connect 2 0 27 0;
+#X connect 3 0 27 0;
+#X connect 4 0 31 0;
+#X connect 6 0 29 0;
+#X connect 7 0 29 0;
+#X connect 8 0 29 0;
+#X connect 9 0 29 0;
+#X connect 12 0 30 0;
+#X connect 13 0 30 0;
+#X connect 14 0 30 0;
+#X connect 15 0 30 0;
+#X connect 18 0 28 0;
+#X connect 19 0 28 0;
+#X connect 20 0 28 0;
+#X connect 21 0 28 0;
+#X connect 22 0 28 0;
+#X connect 27 0 5 0;
+#X connect 28 0 11 0;
+#X connect 29 0 10 0;
+#X connect 30 0 16 0;
+#X connect 31 0 26 0;
+#X restore 71 474 pd test;
+#N canvas 394 231 879 595 simple_exemple 0;
+#X obj 356 237 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X obj 74 98 hradio 15 1 0 5 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#N canvas 477 25 445 299 preset 0;
+#X msg 36 193 setK 0.05 \, setD 0 \, setD2 30;
+#X msg 55 166 setK 1 \, setD 0 \, setD2 30;
+#X msg 75 138 setK 1 \, setD 0 \, setD2 200;
+#X obj 36 16 inlet;
+#X obj 115 254 outlet;
+#X msg 95 108 setK 300 \, setD 300 \, setD2 5;
+#X obj 36 43 sel 2 1 0 3 4;
+#X msg 115 78 setK 3000 \, setD 1000 \, setD2 5000;
+#X connect 0 0 4 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 0 0;
+#X connect 6 1 1 0;
+#X connect 6 2 2 0;
+#X connect 6 3 5 0;
+#X connect 6 4 7 0;
+#X connect 7 0 4 0;
+#X restore 74 119 pd preset;
+#X obj 336 237 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X text 80 415 the masse is link to the cursor with diferents kinf
+of liaison (see the preset);
+#X text 71 18 comportement of a single masse link to a fixed point
+with a visco elastic link.;
+#X text 173 95 <- diferents comportement of the link;
+#N canvas 0 0 268 186 stuff 0;
+#X obj 13 20 loadbang;
+#X obj 48 97 s \$0-lia;
+#X obj 13 72 t b b;
+#X obj 13 123 s \$0-masse;
+#X obj 13 45 metro 5;
+#X obj 89 20 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 124 92 reset;
+#X msg 89 66 resetL \, resetF;
+#X obj 89 40 t b b;
+#X connect 0 0 4 0;
+#X connect 2 0 3 0;
+#X connect 2 1 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X restore 75 65 pd stuff;
+#X text 98 346 click or move the slider ->;
+#X text 396 346 look at the mouvement of the masse (the right slider)
+;
+#X text 80 481 surch system can be usefull for replacing the line object
+of pd when more natural evolution is neaded...;
+#X obj 169 167 lia \$0-lia 0 1 0 200;
+#X obj 356 167 masse \$0-masse 10000 0;
+#X connect 1 0 2 0;
+#X connect 2 0 11 0;
+#X connect 3 0 11 0;
+#X connect 11 1 12 0;
+#X connect 12 0 0 0;
+#X connect 12 0 11 1;
+#X restore 71 501 pd simple_exemple;
+#X text 95 389 look at mass and link help file :;
+#X obj 96 407 mass;
+#X obj 96 437 link;
+#N canvas 108 97 450 541 list 0;
+#X obj 190 135 iAmbient2D;
+#X obj 305 137 iAmbient3D;
+#X obj 190 166 iCircle2D;
+#X obj 306 257 iCylinder3D;
+#X obj 305 227 iCircle3D;
+#X obj 190 196 iLine2D;
+#X obj 305 197 iPlane3D;
+#X obj 190 225 iSeg2D;
+#X obj 305 168 iSphere3D;
+#X obj 192 75 lia2D;
+#X obj 306 75 lia3D;
+#X obj 79 76 lia;
+#X obj 79 48 mass;
+#X obj 192 48 mass2D;
+#X obj 306 48 mass3D;
+#X text 78 25 1D;
+#X text 191 27 2D;
+#X text 304 28 3D;
+#X text 21 46 basic;
+#X text 19 136 interactors;
+#X text 24 328 test;
+#X obj 192 327 tLia2D;
+#X obj 307 327 tLia3D;
+#X obj 192 389 tCircle2D;
+#X obj 192 419 tLine2D;
+#X obj 192 448 tSeg2D;
+#X obj 305 480 tCylinder3D;
+#X obj 306 420 tPlane3D;
+#X obj 306 450 tCircle3D;
+#X obj 306 390 tSphere3D;
+#X obj 192 358 tSquare2D;
+#X obj 307 359 tCube3D;
+#X restore 71 531 pd list of pmpd's object;
+#X obj 10 200 cnv 15 15 15 Ma1 M1 empty 2 10 192 14 -1 -66577 0;
+#X obj 24 185 cnv 15 15 15 Ma3 M3 empty 2 10 192 14 -1 -66577 0;
+#X obj 39 172 cnv 15 15 15 Ma5 M5 empty 2 10 192 14 -1 -66577 0;
+#X obj 79 200 cnv 15 15 15 Ma9 M9 empty 2 10 192 14 -1 -66577 0;
+#X obj 183 200 cnv 15 15 15 empty M29 empty 2 10 64 14 -1 -66577 0
+;
+#X obj 120 200 cnv 15 15 15 Ma2 M2 empty 2 10 192 14 -1 -66577 0;
+#X obj 119 160 cnv 15 15 15 Ma4 M4 empty 2 10 192 14 -1 -66577 0;
+#X obj 100 170 cnv 15 15 15 Ma6 M6 empty 2 10 192 14 -1 -66577 0;
+#X obj 80 160 cnv 15 15 15 Ma8 M8 empty 2 10 192 14 -1 -66577 0;
+#X obj 120 180 cnv 15 15 15 Ma11 M11 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 79 180 cnv 15 15 15 Ma12 M12 empty 2 10 192 14 -1 -66577 0;
+#X obj 184 172 cnv 15 15 15 Ma14 M14 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 198 187 cnv 15 15 15 Ma13 M13 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 169 185 cnv 15 15 15 Ma15 M15 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 239 180 cnv 15 15 15 empty M30 empty 2 10 64 14 -1 -66577 0
+;
+#X obj 260 160 cnv 15 15 15 Ma20 M20 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 259 180 cnv 15 15 15 Ma17 M17 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 239 200 cnv 15 15 15 Ma19 M19 empty 2 10 192 14 -1 -66577 0
+;
+#X obj 259 200 cnv 15 15 15 Ma18 M18 empty 2 10 192 14 -1 -66577 0
+;
+#N canvas 0 0 470 320 pmpd 0;
+#X obj 7 196 s masse;
+#X obj 32 168 s link;
+#X msg 143 132 reset;
+#X obj 7 70 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1;
+#X obj 7 88 metro 50;
+#N canvas 154 59 1126 757 structure 0;
+#N canvas 0 0 478 328 masse1 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M1 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 10 50 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 14 253 pd masse1;
+#N canvas 0 0 470 320 masse3 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M3 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 10 30 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 23 143 pd masse3;
+#N canvas 0 0 474 324 masse5 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M5 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 10 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 26 58 pd masse5;
+#N canvas 0 0 472 322 masse7 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M7 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 30 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 324 62 pd masse7;
+#X obj 132 -19 r G;
+#X obj 17 215 link2D link 10 0.8;
+#X obj 20 180 link2D link 10 0.8 0 0.1;
+#X obj 163 213 link2D link 12 0.8;
+#X obj 18 96 link2D link 10 0.8 0 0.1;
+#N canvas 0 0 494 344 masse2 0;
+#X obj 79 57 inlet;
+#X obj 100 154 outlet;
+#X msg 79 110 \; M2 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 120 50 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 486 317 pd masse2;
+#N canvas 0 0 486 336 masse4 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M4 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 120 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 503 33 pd masse4;
+#N canvas 0 0 484 334 masse6 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M6 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 100 20 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 640 109 pd masse6;
+#N canvas 0 0 482 332 masse8 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 80 110 \; M8 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 80 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 767 36 pd masse8;
+#N canvas 0 0 484 334 masse9 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M9 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 80 50 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 722 335 pd masse9;
+#N canvas 0 0 484 334 masse11 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M11 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 120 30 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 490 216 pd masse11;
+#N canvas 0 0 484 334 masse12 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M12 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 80 30 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 821 226 pd masse12;
+#X obj 497 -9 r G;
+#X msg 499 9 force2D 0 0.1;
+#X obj 486 266 link2D link 12 0.3 0.1;
+#X obj 691 281 link2D link 12 0.3 0.1;
+#X obj 676 192 link2D link 12 0.3;
+#X obj 665 154 link2D link 12 0.3;
+#X obj 531 185 link2D link 12 0.3;
+#X obj 509 157 link2D link 12 0.3;
+#X obj 469 131 link2D link 12 0.3 0.1;
+#X obj 737 109 link2D link 12 0.3 0.1;
+#X obj 592 45 link2D link 12 0.3;
+#X obj 570 315 link2D link 12 0.3;
+#X msg 132 7 force2D 0 0.3;
+#X obj 636 214 link2D link 12 0.3;
+#N canvas 0 0 488 338 masse1 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M16 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 170 50 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 18 610 pd masse1;
+#N canvas 0 0 476 326 masse3 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M15 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 170 30 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 27 500 pd masse3;
+#N canvas 0 0 482 332 masse5 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M14 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 170 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 30 415 pd masse5;
+#N canvas 0 0 480 330 masse7 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 109 \; M13 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 190 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 363 409 pd masse7;
+#X obj 46 316 r G;
+#X obj 21 572 link2D link 10 0.8;
+#X obj 24 537 link2D link 10 0.8 0 0.1;
+#X obj 160 570 link2D link 12 0.8;
+#X obj 29 458 link2D link 10 0.8 0 0.1;
+#X msg 46 342 force2D 0 0.3;
+#N canvas 0 0 500 350 masse1 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 98 115 \; M20 pos \$1 \$2 \;;
+#X obj 79 83 mass2D masse 1 260 10 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 533 628 pd masse1;
+#N canvas 0 0 482 332 masse3 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M17 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 260 30 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 542 518 pd masse3;
+#N canvas 0 0 484 334 masse5 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 110 \; M18 pos \$1 \$2 \;;
+#X obj 78 84 mass2D masse 1 260 50 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 545 433 pd masse5;
+#N canvas 217 191 484 334 masse7 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 109 \; M19 pos \$1 \$2 \;;
+#X obj 79 84 mass2D masse 1 240 50 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 856 420 pd masse7;
+#X obj 561 376 r G;
+#X obj 536 590 link2D link 10 0.8;
+#X obj 539 555 link2D link 10 0.8 0 0.1;
+#X obj 675 588 link2D link 12 0.8;
+#X obj 544 476 link2D link 10 0.8 0 0.1;
+#X msg 561 402 force2D 0 0.3;
+#X obj 669 75 link2D link 12 0.5 0.1;
+#X obj 494 242 link2D link 12 0.5;
+#X obj 665 237 link2D link 12 0.5;
+#X obj 485 74 link2D link 12 0.5 0.1;
+#N canvas 0 0 476 326 masse8 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X obj 79 84 mass2D masse 1 30 30 0 1000 0 200;
+#X msg 103 110 \; M28 pos \$1 \$2 \;;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 1 0;
+#X restore 347 153 pd masse8;
+#X obj 251 101 link2D link 10 0.8 0 0.1;
+#X obj 139 47 link2D link 10 0.8;
+#X obj 143 73 link2D link 14 0.6;
+#X obj 146 126 link2D link 14 0.6;
+#X obj 160 154 link2D link 10 0.8;
+#X obj 148 410 link2D link 10 0.8;
+#X obj 144 433 link2D link 14 0.6;
+#X obj 141 504 link2D link 10 0.8;
+#X obj 144 480 link2D link 14 0.6;
+#N canvas 0 0 484 334 masse7 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X msg 79 109 \; M29 pos \$1 \$2 \;;
+#X obj 79 86 mass2D masse 1 190 30 0 1000 0 200;
+#X connect 0 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 1 0;
+#X restore 341 492 pd masse7;
+#X obj 251 453 link2D link 10 0.8 0 0.1;
+#N canvas 217 191 486 336 masse7 0;
+#X obj 79 57 inlet;
+#X obj 79 195 outlet;
+#X obj 79 84 mass2D masse 1 240 30 0 1000 0 200;
+#X msg 77 109 \; M30 pos \$1 \$2 \;;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 1 0;
+#X restore 840 522 pd masse7;
+#X obj 690 430 link2D link 10 0.8;
+#X obj 678 519 link2D link 10 0.8;
+#X obj 683 493 link2D link 14 0.6;
+#X obj 689 451 link2D link 14 0.6;
+#X obj 740 471 link2D link 10 0.8 0 0.1;
+#X connect 0 0 5 1;
+#X connect 0 0 6 1;
+#X connect 0 0 7 0;
+#X connect 1 0 6 0;
+#X connect 1 0 8 1;
+#X connect 1 0 57 0;
+#X connect 1 0 59 0;
+#X connect 2 0 5 0;
+#X connect 2 0 8 0;
+#X connect 2 0 56 0;
+#X connect 2 0 58 0;
+#X connect 3 0 7 1;
+#X connect 3 0 55 0;
+#X connect 3 0 56 1;
+#X connect 3 0 57 1;
+#X connect 4 0 28 0;
+#X connect 5 0 2 0;
+#X connect 5 1 0 0;
+#X connect 6 0 1 0;
+#X connect 6 1 0 0;
+#X connect 7 0 0 0;
+#X connect 7 1 3 0;
+#X connect 8 0 2 0;
+#X connect 8 1 1 0;
+#X connect 9 0 18 1;
+#X connect 9 0 23 0;
+#X connect 9 0 27 0;
+#X connect 9 0 51 0;
+#X connect 10 0 20 0;
+#X connect 10 0 21 0;
+#X connect 10 0 24 1;
+#X connect 10 0 26 0;
+#X connect 10 0 53 0;
+#X connect 11 0 50 0;
+#X connect 11 0 51 1;
+#X connect 11 0 52 0;
+#X connect 11 0 53 1;
+#X connect 12 0 22 1;
+#X connect 12 0 23 1;
+#X connect 12 0 25 1;
+#X connect 12 0 26 1;
+#X connect 12 0 50 1;
+#X connect 13 0 19 0;
+#X connect 13 0 21 1;
+#X connect 13 0 27 1;
+#X connect 13 0 52 1;
+#X connect 14 0 18 0;
+#X connect 14 0 22 0;
+#X connect 14 0 24 0;
+#X connect 14 0 29 0;
+#X connect 15 0 19 1;
+#X connect 15 0 20 1;
+#X connect 15 0 25 0;
+#X connect 15 0 29 1;
+#X connect 16 0 17 0;
+#X connect 17 0 14 0;
+#X connect 17 0 10 0;
+#X connect 17 0 12 0;
+#X connect 17 0 9 0;
+#X connect 17 0 13 0;
+#X connect 17 0 11 0;
+#X connect 17 0 15 0;
+#X connect 18 0 14 0;
+#X connect 18 1 9 0;
+#X connect 19 0 13 0;
+#X connect 19 1 15 0;
+#X connect 20 0 10 0;
+#X connect 20 1 15 0;
+#X connect 21 0 10 0;
+#X connect 21 1 13 0;
+#X connect 22 0 14 0;
+#X connect 22 1 12 0;
+#X connect 23 0 9 0;
+#X connect 23 1 12 0;
+#X connect 24 0 14 0;
+#X connect 24 1 10 0;
+#X connect 25 0 15 0;
+#X connect 25 1 12 0;
+#X connect 26 0 10 0;
+#X connect 26 1 12 0;
+#X connect 27 0 9 0;
+#X connect 27 1 13 0;
+#X connect 28 0 2 0;
+#X connect 28 0 1 0;
+#X connect 28 0 0 0;
+#X connect 28 0 3 0;
+#X connect 28 0 54 0;
+#X connect 29 0 14 0;
+#X connect 29 1 15 0;
+#X connect 30 0 35 1;
+#X connect 30 0 36 1;
+#X connect 30 0 37 0;
+#X connect 31 0 36 0;
+#X connect 31 0 38 1;
+#X connect 31 0 61 0;
+#X connect 31 0 62 0;
+#X connect 32 0 35 0;
+#X connect 32 0 38 0;
+#X connect 32 0 60 0;
+#X connect 32 0 63 0;
+#X connect 33 0 37 1;
+#X connect 33 0 60 1;
+#X connect 33 0 61 1;
+#X connect 33 0 65 0;
+#X connect 34 0 39 0;
+#X connect 35 0 32 0;
+#X connect 35 1 30 0;
+#X connect 36 0 31 0;
+#X connect 36 1 30 0;
+#X connect 37 0 30 0;
+#X connect 37 1 33 0;
+#X connect 38 0 32 0;
+#X connect 38 1 31 0;
+#X connect 39 0 32 0;
+#X connect 39 0 31 0;
+#X connect 39 0 30 0;
+#X connect 39 0 33 0;
+#X connect 39 0 64 0;
+#X connect 40 0 45 1;
+#X connect 40 0 46 1;
+#X connect 40 0 47 0;
+#X connect 41 0 46 0;
+#X connect 41 0 48 1;
+#X connect 41 0 68 0;
+#X connect 41 0 70 0;
+#X connect 42 0 45 0;
+#X connect 42 0 48 0;
+#X connect 42 0 67 0;
+#X connect 42 0 69 0;
+#X connect 43 0 47 1;
+#X connect 43 0 67 1;
+#X connect 43 0 70 1;
+#X connect 43 0 71 0;
+#X connect 44 0 49 0;
+#X connect 45 0 42 0;
+#X connect 45 1 40 0;
+#X connect 46 0 41 0;
+#X connect 46 1 40 0;
+#X connect 47 0 40 0;
+#X connect 47 1 43 0;
+#X connect 48 0 42 0;
+#X connect 48 1 41 0;
+#X connect 49 0 42 0;
+#X connect 49 0 41 0;
+#X connect 49 0 40 0;
+#X connect 49 0 43 0;
+#X connect 49 0 66 0;
+#X connect 50 0 11 0;
+#X connect 50 1 12 0;
+#X connect 51 0 9 0;
+#X connect 51 1 11 0;
+#X connect 52 0 11 0;
+#X connect 52 1 13 0;
+#X connect 53 0 10 0;
+#X connect 53 1 11 0;
+#X connect 54 0 55 1;
+#X connect 54 0 58 1;
+#X connect 54 0 59 1;
+#X connect 55 0 3 0;
+#X connect 55 1 54 0;
+#X connect 56 0 2 0;
+#X connect 56 1 3 0;
+#X connect 57 0 1 0;
+#X connect 57 1 3 0;
+#X connect 58 0 2 0;
+#X connect 58 1 54 0;
+#X connect 59 0 1 0;
+#X connect 59 1 54 0;
+#X connect 60 0 32 0;
+#X connect 60 1 33 0;
+#X connect 61 0 31 0;
+#X connect 61 1 33 0;
+#X connect 62 0 31 0;
+#X connect 62 1 64 0;
+#X connect 63 0 32 0;
+#X connect 63 1 64 0;
+#X connect 64 0 62 1;
+#X connect 64 0 63 1;
+#X connect 64 0 65 1;
+#X connect 65 0 33 0;
+#X connect 65 1 64 0;
+#X connect 66 0 68 1;
+#X connect 66 0 69 1;
+#X connect 66 0 71 1;
+#X connect 67 0 42 0;
+#X connect 67 1 43 0;
+#X connect 68 0 41 0;
+#X connect 68 1 66 0;
+#X connect 69 0 42 0;
+#X connect 69 1 66 0;
+#X connect 70 0 41 0;
+#X connect 70 1 43 0;
+#X connect 71 0 43 0;
+#X connect 71 1 66 0;
+#X restore 121 193 pd structure;
+#X msg 118 157 resetL \, resetF;
+#X obj 7 112 t b b;
+#X obj 42 135 s G;
+#X obj 118 110 t b b;
+#X obj 116 66 inlet;
+#X obj 62 24 loadbang;
+#X obj 30 66 delay 3000;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 6 0 1 0;
+#X connect 7 0 0 0;
+#X connect 7 1 1 0;
+#X connect 7 1 8 0;
+#X connect 9 0 6 0;
+#X connect 9 1 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 4 0;
+#X restore 9 597 pd pmpd;
+#X obj 9 575 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 1 216 cnv 10 500 10 empty empty empty 20 12 0 14 -99865 -66577
+0;
+#X obj 53 187 cnv 15 15 15 Ma7 M7 empty 2 10 192 14 -1 -66577 0;
+#X obj 38 200 cnv 15 15 15 empty M28 empty 2 10 64 14 -1 -66577 0;
+#X obj 155 200 cnv 15 15 15 Ma16 M16 empty 2 10 192 14 -1 -66577 0
+;
+#X connect 31 0 30 0;
diff --git a/exemples/02_string.pd b/exemples/02_string.pd
new file mode 100755
index 0000000..4ec372a
--- /dev/null
+++ b/exemples/02_string.pd
@@ -0,0 +1,163 @@
+#N canvas 45 79 876 551 12;
+#X obj 379 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 3587 1;
+#X obj 397 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 3075 1;
+#X obj 415 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 2562 1;
+#X obj 433 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 2050 1;
+#X obj 451 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 1537 1;
+#X obj 469 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 1025 1;
+#X obj 361 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 4100 1;
+#X obj 9 35 metro 10;
+#X obj 9 10 loadbang;
+#X text 138 362 move the first slider ->;
+#X text 570 368 <- or the last one;
+#X text 268 11 This is the first exemple of physical modeling;
+#X text 268 33 this is an elastic string;
+#X obj 487 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 512 1;
+#X obj 505 253 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 9 62 t b b;
+#X obj 44 87 s \$0-link;
+#X obj 9 113 s \$0-mass;
+#X text 158 95 <- metronome send bangs to mass and link and gives the
+general computation speed;
+#X text 135 409 all the slider are "link" together with a link. slider
+got a mass so they have inertial.;
+#X obj 3 196 lia \$0-link 0 1 1;
+#X obj 151 196 lia \$0-link 0 1 1;
+#X obj 300 196 lia \$0-link 0 1 1;
+#X obj 449 196 lia \$0-link 0 1 1;
+#X obj 599 196 lia \$0-link 0 1 1;
+#X obj 747 196 lia \$0-link 0 1 1;
+#X obj 896 196 lia \$0-link 0 1 1;
+#X obj 1045 196 lia \$0-link 0 1 1;
+#X obj 146 172 masse \$0-mass 30;
+#X obj 294 171 masse \$0-mass 30;
+#X obj 444 172 masse \$0-mass 30;
+#X obj 595 172 masse \$0-mass 30;
+#X obj 743 171 masse \$0-mass 30;
+#X obj 894 171 masse \$0-mass 30;
+#X obj 1041 171 masse \$0-mass 30;
+#X text 135 451 You can see the propagation of a wave \, and physical
+properties of a kind of elastic string.;
+#X text 160 132 masses and link has to be compute one after the other.
+;
+#X obj 749 384 mtof;
+#X obj 749 433 line;
+#X msg 749 409 \$1 15;
+#X obj 749 458 osc~;
+#X obj 805 384 mtof;
+#X obj 805 433 line;
+#X msg 805 409 \$1 15;
+#X obj 805 458 osc~;
+#X obj 860 384 mtof;
+#X obj 860 433 line;
+#X msg 860 409 \$1 15;
+#X obj 860 458 osc~;
+#X obj 916 383 mtof;
+#X obj 916 432 line;
+#X msg 916 408 \$1 15;
+#X obj 916 457 osc~;
+#X obj 972 382 mtof;
+#X obj 972 431 line;
+#X msg 972 407 \$1 15;
+#X obj 972 456 osc~;
+#X obj 1027 382 mtof;
+#X obj 1027 431 line;
+#X msg 1027 407 \$1 15;
+#X obj 1027 456 osc~;
+#X obj 1083 382 mtof;
+#X obj 1083 431 line;
+#X msg 1083 407 \$1 15;
+#X obj 1083 456 osc~;
+#X obj 880 534 dac~;
+#X obj 880 510 *~ 0.1;
+#X obj 933 510 *~ 0.1;
+#X connect 0 0 37 0;
+#X connect 1 0 41 0;
+#X connect 2 0 45 0;
+#X connect 3 0 49 0;
+#X connect 4 0 53 0;
+#X connect 5 0 57 0;
+#X connect 6 0 20 0;
+#X connect 7 0 15 0;
+#X connect 8 0 7 0;
+#X connect 13 0 61 0;
+#X connect 14 0 27 1;
+#X connect 15 0 17 0;
+#X connect 15 1 16 0;
+#X connect 20 1 28 0;
+#X connect 21 0 28 0;
+#X connect 21 1 29 0;
+#X connect 22 0 29 0;
+#X connect 22 1 30 0;
+#X connect 23 0 30 0;
+#X connect 23 1 31 0;
+#X connect 24 0 31 0;
+#X connect 24 1 32 0;
+#X connect 25 0 32 0;
+#X connect 25 1 33 0;
+#X connect 26 0 33 0;
+#X connect 26 1 34 0;
+#X connect 27 0 34 0;
+#X connect 28 0 0 0;
+#X connect 28 0 20 1;
+#X connect 28 0 21 0;
+#X connect 29 0 1 0;
+#X connect 29 0 21 1;
+#X connect 29 0 22 0;
+#X connect 30 0 2 0;
+#X connect 30 0 22 1;
+#X connect 30 0 23 0;
+#X connect 31 0 3 0;
+#X connect 31 0 23 1;
+#X connect 31 0 24 0;
+#X connect 32 0 4 0;
+#X connect 32 0 24 1;
+#X connect 32 0 25 0;
+#X connect 33 0 5 0;
+#X connect 33 0 25 1;
+#X connect 33 0 26 0;
+#X connect 34 0 13 0;
+#X connect 34 0 26 1;
+#X connect 34 0 27 0;
+#X connect 37 0 39 0;
+#X connect 38 0 40 0;
+#X connect 39 0 38 0;
+#X connect 40 0 66 0;
+#X connect 41 0 43 0;
+#X connect 42 0 44 0;
+#X connect 43 0 42 0;
+#X connect 44 0 66 0;
+#X connect 45 0 47 0;
+#X connect 46 0 48 0;
+#X connect 47 0 46 0;
+#X connect 48 0 66 0;
+#X connect 48 0 67 0;
+#X connect 49 0 51 0;
+#X connect 50 0 52 0;
+#X connect 51 0 50 0;
+#X connect 52 0 66 0;
+#X connect 52 0 67 0;
+#X connect 53 0 55 0;
+#X connect 54 0 56 0;
+#X connect 55 0 54 0;
+#X connect 56 0 66 0;
+#X connect 56 0 67 0;
+#X connect 57 0 59 0;
+#X connect 58 0 60 0;
+#X connect 59 0 58 0;
+#X connect 60 0 67 0;
+#X connect 61 0 63 0;
+#X connect 62 0 64 0;
+#X connect 63 0 62 0;
+#X connect 64 0 67 0;
+#X connect 66 0 65 0;
+#X connect 67 0 65 1;
diff --git a/exemples/03_chaos2D.pd b/exemples/03_chaos2D.pd
new file mode 100755
index 0000000..9753384
--- /dev/null
+++ b/exemples/03_chaos2D.pd
@@ -0,0 +1,180 @@
+#N canvas 1 4 843 542 12;
+#X obj 16 98 t b b;
+#X obj 16 50 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 73 233 unpack s f f;
+#X obj 177 293 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 8300 1;
+#X obj 121 343 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 10100 1;
+#X obj 16 71 metro 50;
+#X msg 360 291 setK \$1;
+#X msg 434 265 setD \$1;
+#X msg 507 237 setM \$1;
+#X floatatom 360 216 5 0 20 0 - - -;
+#X floatatom 434 214 5 0 30 0 - - -;
+#X floatatom 507 214 5 3 100 0 - - -;
+#N canvas 796 335 379 269 gem 0;
+#X obj 197 20 gemhead;
+#X msg 47 96 0 \, destroy;
+#X obj 13 124 gemwin;
+#X obj 197 152 circle 0.5;
+#X obj 182 47 inlet;
+#X obj 182 72 unpack s f f;
+#X obj 197 124 translateXYZ;
+#X obj 13 19 inlet;
+#X obj 13 45 sel 1;
+#X obj 227 99 / 30;
+#X obj 273 99 / 30;
+#X msg 13 71 reset \, create \, 1;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 1 9 0;
+#X connect 5 2 10 0;
+#X connect 6 0 3 0;
+#X connect 7 0 8 0;
+#X connect 8 0 11 0;
+#X connect 8 1 1 0;
+#X connect 9 0 6 1;
+#X connect 10 0 6 2;
+#X connect 11 0 2 0;
+#X restore 19 233 pd gem;
+#X obj 19 186 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#N canvas 513 286 485 188 structure 0;
+#N canvas 272 241 298 174 lia_left 0;
+#X obj 194 68 inlet;
+#X obj 194 121 outlet;
+#X obj 31 95 lia2D \$0-lia 70 1 0 0;
+#X obj 31 38 masse2D border_mass 1 -64 0;
+#X connect 0 0 2 1;
+#X connect 2 1 1 0;
+#X connect 3 0 2 0;
+#X restore 22 57 pd lia_left;
+#N canvas 345 616 329 171 lia_down 0;
+#X obj 181 53 inlet;
+#X obj 181 106 outlet;
+#X obj 18 80 lia2D \$0-lia 70 1 0 0;
+#X obj 18 23 masse2D border_mass 1 0 -64;
+#X connect 0 0 2 1;
+#X connect 2 1 1 0;
+#X connect 3 0 2 0;
+#X restore 117 90 pd lia_down;
+#N canvas 506 199 290 152 lia_up 0;
+#X obj 187 52 inlet;
+#X obj 187 105 outlet;
+#X obj 24 79 lia2D \$0-lia 70 1 0 0;
+#X obj 24 22 masse2D border_mass 1 0 64;
+#X connect 0 0 2 1;
+#X connect 2 1 1 0;
+#X connect 3 0 2 0;
+#X restore 121 29 pd lia_up;
+#X obj 222 93 outlet;
+#N canvas 703 434 355 273 lia_right 0;
+#X obj 191 65 inlet;
+#X obj 191 118 outlet;
+#X obj 28 92 lia2D \$0-lia 70 1 0 0;
+#X obj 28 35 masse2D border_mass 1 64 0;
+#X connect 0 0 2 1;
+#X connect 2 1 1 0;
+#X connect 3 0 2 0;
+#X restore 320 58 pd lia_right;
+#X obj 120 57 masse2D \$0-masse 8 37 19;
+#X connect 0 0 5 0;
+#X connect 1 0 5 0;
+#X connect 2 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 5 0 2 0;
+#X connect 5 0 1 0;
+#X connect 5 0 0 0;
+#X connect 5 0 4 0;
+#X restore 62 206 pd structure;
+#X obj 360 265 / 10;
+#X obj 360 239 + 1;
+#X obj 64 100 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 30 124 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 434 190 0;
+#X obj 164 6 loadbang;
+#X obj 118 263 + 64;
+#X obj 164 263 + 64;
+#X obj 434 238 / 10;
+#X text 42 47 <- click here;
+#X msg 360 190 3;
+#X msg 164 61 resetF;
+#X obj 235 11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 164 32 t b b;
+#X msg 177 83 force2D -100 140;
+#X obj 51 123 s \$0-lia;
+#X obj 16 147 s \$0-masse;
+#X msg 199 108 reset;
+#X obj 507 265 s \$0-masse;
+#X obj 360 323 s \$0-lia;
+#X text 269 8 <- reset the simulation;
+#X text 52 182 <- visualization (need gem);
+#X text 359 135 you can change physical properties of the system. take
+care of numerical instability (especially with fast movement);
+#X text 276 388 The mass is connected to the 4 borders of the screen
+with 4 link (without damping). The movement of the masses (should)
+follow a chaotic equation.;
+#X obj 40 445 osc~;
+#X obj 40 420 mtof;
+#X obj 40 395 line;
+#X obj 97 394 *;
+#X obj 39 471 *~;
+#X obj 97 445 line~;
+#X obj 39 497 dac~;
+#X obj 97 369 / 256;
+#X msg 97 419 \$1 100;
+#X msg 40 369 \$1 100;
+#X msg 507 189 20;
+#X connect 0 0 31 0;
+#X connect 0 1 30 0;
+#X connect 1 0 5 0;
+#X connect 2 1 21 0;
+#X connect 2 2 22 0;
+#X connect 5 0 0 0;
+#X connect 6 0 34 0;
+#X connect 7 0 34 0;
+#X connect 8 0 33 0;
+#X connect 9 0 16 0;
+#X connect 10 0 23 0;
+#X connect 11 0 8 0;
+#X connect 13 0 12 0;
+#X connect 14 0 2 0;
+#X connect 14 0 12 1;
+#X connect 15 0 6 0;
+#X connect 16 0 15 0;
+#X connect 17 0 30 0;
+#X connect 18 0 31 0;
+#X connect 19 0 10 0;
+#X connect 20 0 28 0;
+#X connect 21 0 4 0;
+#X connect 21 0 48 0;
+#X connect 22 0 3 0;
+#X connect 22 0 46 0;
+#X connect 23 0 7 0;
+#X connect 25 0 9 0;
+#X connect 26 0 30 0;
+#X connect 27 0 28 0;
+#X connect 28 0 26 0;
+#X connect 28 0 29 0;
+#X connect 28 1 32 0;
+#X connect 29 0 31 0;
+#X connect 32 0 31 0;
+#X connect 39 0 43 0;
+#X connect 40 0 39 0;
+#X connect 41 0 40 0;
+#X connect 42 0 47 0;
+#X connect 43 0 45 0;
+#X connect 43 0 45 1;
+#X connect 44 0 43 1;
+#X connect 46 0 42 1;
+#X connect 46 0 42 0;
+#X connect 47 0 44 0;
+#X connect 48 0 41 0;
+#X connect 49 0 11 0;
diff --git a/exemples/04_3D_exemple.pd b/exemples/04_3D_exemple.pd
new file mode 100755
index 0000000..670cee7
--- /dev/null
+++ b/exemples/04_3D_exemple.pd
@@ -0,0 +1,71 @@
+#N canvas 21 21 607 384 12;
+#X obj 82 222 t b b;
+#X obj 82 198 metro 10;
+#X obj 82 164 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#N canvas 451 422 544 277 gem 0;
+#X obj 267 18 gemhead;
+#X msg 47 96 0 \, destroy;
+#X obj 252 45 inlet;
+#X obj 267 146 translateXYZ;
+#X obj 13 19 inlet;
+#X obj 13 45 sel 1;
+#X obj 252 70 unpack s f f f;
+#X obj 13 124 gemwin 50;
+#X msg 13 71 reset \, lighting 1 \, create \, 1;
+#X obj 421 50 gemhead;
+#X obj 419 74 world_light;
+#X msg 342 193 20;
+#X obj 342 170 loadbang;
+#X obj 228 110 pack f f f;
+#X obj 267 216 sphere 0.1;
+#X obj 377 109 gemhead;
+#X obj 376 220 sphere 1;
+#X obj 377 135 alpha;
+#X obj 376 196 color 1 1 1 0.5;
+#X connect 0 0 3 0;
+#X connect 1 0 7 0;
+#X connect 2 0 6 0;
+#X connect 3 0 14 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 5 1 1 0;
+#X connect 6 1 3 1;
+#X connect 6 1 13 0;
+#X connect 6 2 3 2;
+#X connect 6 2 13 1;
+#X connect 6 3 3 3;
+#X connect 6 3 13 2;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 11 0 14 2;
+#X connect 11 0 16 2;
+#X connect 12 0 11 0;
+#X connect 15 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 16 0;
+#X restore 39 323 pd gem;
+#X obj 39 299 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 207 181 force3D 1 0 0;
+#X msg 215 204 force3D 0 1 0;
+#X msg 223 227 force3D 0 0 1;
+#X text 112 160 <- start here;
+#X text 62 296 <- gem simulation;
+#X text 347 205 <- send X \, Y \, Z forces;
+#X obj 82 264 masse3D 0 10;
+#X obj 189 264 lia3D 0 1 1 1 0.03;
+#X text 73 12 simulation of a 3D model. The small sphere is link in
+the center of the big one with a 3D link. This link has the same diametter
+than the big sphere.;
+#X connect 0 0 11 0;
+#X connect 0 1 12 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 11 0;
+#X connect 6 0 11 0;
+#X connect 7 0 11 0;
+#X connect 11 0 12 0;
+#X connect 11 0 3 1;
+#X connect 12 0 11 0;
diff --git a/exemples/05_corde2D.pd b/exemples/05_corde2D.pd
new file mode 100755
index 0000000..d5f4136
--- /dev/null
+++ b/exemples/05_corde2D.pd
@@ -0,0 +1,452 @@
+#N canvas 80 32 844 550 12;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 143 446 pd masse;
+#X obj 62 214 s lia;
+#X obj 27 239 s masse;
+#X obj 397 308 s masse;
+#X msg 184 199 setK \$1;
+#X msg 399 149 setM \$1;
+#X obj 184 231 s lia;
+#X obj 399 177 s masse;
+#X obj 184 173 / 10;
+#X obj 184 147 + 1;
+#X obj 508 151 gemwin;
+#X msg 515 122 0 \, destroy;
+#X floatatom 184 125 5 10 100 0 - - -;
+#X floatatom 245 127 5 0 3 0 - - -;
+#X floatatom 399 126 5 20 500 0 - - -;
+#X msg 411 278 force2D 2000 0;
+#X obj 27 163 metro 10;
+#X obj 27 187 t b b;
+#X msg 396 335 force2D 0 5000;
+#X msg 184 101 50;
+#X msg 245 101 1;
+#X msg 399 102 200;
+#X obj 868 143 world_light;
+#X obj 868 84 gemhead;
+#X obj 868 114 rotateXYZ;
+#X msg 397 250 force2D 0 1000;
+#X msg 245 150 setD \$1;
+#X obj 27 9 loadbang;
+#X msg 108 99 reset;
+#X obj 108 126 s masse;
+#X obj 27 40 t b b b b;
+#X msg 49 100 resetF;
+#X obj 49 127 s lia;
+#X floatatom 321 127 5 0 3 0 - - -;
+#X msg 321 101 1;
+#X msg 321 150 setD2 \$1;
+#N canvas 306 123 570 357 masse 0;
+#X obj 24 99 outlet;
+#X obj 145 98 gemhead;
+#X obj 137 134 unpack s f f;
+#X obj 143 190 translateXYZ 0 0 0;
+#X obj 144 224 sphere 0.3;
+#X obj 185 160 / 100;
+#X obj 228 161 / 100;
+#X obj 25 70 masse2D masse2 10 -300 0;
+#X connect 1 0 3 0;
+#X connect 2 1 5 0;
+#X connect 2 2 6 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 0 0;
+#X connect 7 0 2 0;
+#X restore 11 383 pd masse;
+#X msg 396 366 force2D 5000 0;
+#X text 461 7 2D string;
+#X text 542 250 <- send Y force to all masses;
+#X text 544 279 <- send X force to all masses;
+#X text 540 335 <- send Y force to 2 masses;
+#X text 542 364 <- send X force to 1 masses;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 281 449 pd masse;
+#X obj 11 409 lia2D lia 30 1 1;
+#X obj 158 408 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 432 446 pd masse;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 570 449 pd masse;
+#X obj 300 409 lia2D lia 30 1 1;
+#X obj 447 408 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 719 449 pd masse;
+#X obj 596 408 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 870 446 pd masse;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 1008 449 pd masse;
+#X obj 738 409 lia2D lia 30 1 1;
+#X obj 885 408 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 156 589 pd masse;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 294 592 pd masse;
+#X obj 24 552 lia2D lia 30 1 1;
+#X obj 171 551 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 445 589 pd masse;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 583 592 pd masse;
+#X obj 313 552 lia2D lia 30 1 1;
+#X obj 460 551 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 732 592 pd masse;
+#X obj 609 551 lia2D lia 30 1 1;
+#N canvas 306 123 261 242 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 1;
+#X connect 7 0 4 2;
+#X connect 8 0 1 0;
+#X connect 8 0 3 0;
+#X restore 883 589 pd masse;
+#N canvas 306 123 265 246 masse 0;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 83 197 sphere 0.3;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse2 10 300;
+#X connect 1 0 3 0;
+#X connect 2 1 5 0;
+#X connect 2 2 6 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 0 0;
+#X connect 7 0 2 0;
+#X restore 1021 524 pd masse;
+#X obj 751 552 lia2D lia 30 1 1;
+#X obj 898 551 lia2D lia 30 1 1;
+#X msg 508 95 reset \, lighting 1 \, create \, 1;
+#X obj 112 15 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 325 23 masses are link together like in an elastic string.
+;
+#X text 30 652 The extrem right and extreme left masses are fixed :
+the does not receive a force. they are neaded for the model to be link
+to a special point in the screen.;
+#X text 742 94 <- 1;
+#X connect 0 0 44 1;
+#X connect 0 0 45 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 13 0 26 0;
+#X connect 14 0 5 0;
+#X connect 15 0 3 0;
+#X connect 16 0 17 0;
+#X connect 17 0 2 0;
+#X connect 17 1 1 0;
+#X connect 18 0 0 0;
+#X connect 18 0 43 0;
+#X connect 19 0 12 0;
+#X connect 20 0 13 0;
+#X connect 21 0 14 0;
+#X connect 23 0 24 0;
+#X connect 24 0 22 0;
+#X connect 25 0 3 0;
+#X connect 26 0 6 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 30 0 16 0;
+#X connect 30 1 31 0;
+#X connect 30 2 28 0;
+#X connect 30 3 19 0;
+#X connect 30 3 20 0;
+#X connect 30 3 21 0;
+#X connect 30 3 34 0;
+#X connect 31 0 32 0;
+#X connect 33 0 35 0;
+#X connect 34 0 33 0;
+#X connect 35 0 6 0;
+#X connect 36 0 44 0;
+#X connect 37 0 46 0;
+#X connect 43 0 45 1;
+#X connect 43 0 48 0;
+#X connect 44 1 0 0;
+#X connect 45 0 0 0;
+#X connect 45 1 43 0;
+#X connect 46 0 48 1;
+#X connect 46 0 49 0;
+#X connect 47 0 49 1;
+#X connect 47 0 51 0;
+#X connect 48 0 43 0;
+#X connect 48 1 46 0;
+#X connect 49 0 46 0;
+#X connect 49 1 47 0;
+#X connect 50 0 51 1;
+#X connect 50 0 54 0;
+#X connect 51 0 47 0;
+#X connect 51 1 50 0;
+#X connect 52 0 54 1;
+#X connect 52 0 55 0;
+#X connect 53 0 55 1;
+#X connect 53 0 58 0;
+#X connect 54 0 50 0;
+#X connect 54 1 52 0;
+#X connect 55 0 52 0;
+#X connect 55 1 53 0;
+#X connect 56 0 58 1;
+#X connect 56 0 59 0;
+#X connect 57 0 59 1;
+#X connect 57 0 62 0;
+#X connect 58 0 53 0;
+#X connect 58 1 56 0;
+#X connect 59 0 56 0;
+#X connect 59 1 57 0;
+#X connect 60 0 62 1;
+#X connect 60 0 63 0;
+#X connect 61 0 63 1;
+#X connect 61 0 65 0;
+#X connect 62 0 57 0;
+#X connect 62 1 60 0;
+#X connect 63 0 60 0;
+#X connect 63 1 61 0;
+#X connect 64 0 65 1;
+#X connect 64 0 68 0;
+#X connect 65 0 61 0;
+#X connect 65 1 64 0;
+#X connect 66 0 68 1;
+#X connect 66 0 69 0;
+#X connect 67 0 69 1;
+#X connect 68 0 64 0;
+#X connect 68 1 66 0;
+#X connect 69 0 66 0;
+#X connect 70 0 10 0;
+#X connect 71 0 30 0;
diff --git a/exemples/06_pyramide3D.pd b/exemples/06_pyramide3D.pd
new file mode 100755
index 0000000..e3c7d9d
--- /dev/null
+++ b/exemples/06_pyramide3D.pd
@@ -0,0 +1,249 @@
+#N canvas 516 258 695 581 12;
+#N canvas 381 0 941 947 forme 0;
+#X obj 22 676 translateXYZ;
+#X obj 16 646 unpack s f f f;
+#X obj 22 705 sphere 0.3;
+#X obj 143 676 translateXYZ;
+#X obj 137 646 unpack s f f f;
+#X obj 143 705 sphere 0.3;
+#X obj 391 677 translateXYZ;
+#X obj 385 647 unpack s f f f;
+#X obj 391 706 sphere 0.3;
+#X obj 264 678 translateXYZ;
+#X obj 258 648 unpack s f f f;
+#X obj 264 707 sphere 0.3;
+#X obj 303 15 inlet;
+#X obj 11 762 gemhead;
+#X obj 22 605 gemhead;
+#X obj 142 606 gemhead;
+#X obj 264 604 gemhead;
+#X obj 390 604 gemhead;
+#X msg 31 811 \$1 \$2 \$3;
+#X msg 62 788 \$1 \$2 \$3;
+#X obj 235 766 gemhead;
+#X msg 269 816 \$1 \$2 \$3;
+#X msg 286 788 \$1 \$2 \$3;
+#X obj 360 764 gemhead;
+#X msg 394 814 \$1 \$2 \$3;
+#X msg 411 790 \$1 \$2 \$3;
+#X obj 475 764 gemhead;
+#X msg 509 813 \$1 \$2 \$3;
+#X msg 526 789 \$1 \$2 \$3;
+#X obj 581 763 gemhead;
+#X msg 615 813 \$1 \$2 \$3;
+#X msg 632 789 \$1 \$2 \$3;
+#X obj 11 842 curve 2;
+#X obj 236 846 curve 2;
+#X obj 360 844 curve 2;
+#X obj 581 843 curve 2;
+#X obj 120 761 gemhead;
+#X msg 140 810 \$1 \$2 \$3;
+#X msg 171 787 \$1 \$2 \$3;
+#X obj 120 841 curve 2;
+#X obj 718 762 gemhead;
+#X msg 738 811 \$1 \$2 \$3;
+#X obj 718 842 curve 2;
+#X obj 475 843 curve 2;
+#X obj 27 283 masse3D masse 10 -1 0 0;
+#X obj 107 123 lia3D lia 1 3 1 0.1;
+#X obj 322 63 masse3D masse 10 1 0 0;
+#X obj 422 138 lia3D lia 1 3 1 0.1;
+#X obj 289 246 lia3D lia 1 3 1 0.1;
+#X obj 276 306 lia3D lia 1 3 1 0.1;
+#X obj 91 403 lia3D lia 1 3 1 0.1;
+#X obj 287 486 masse3D masse 10 0 1 0;
+#X obj 458 375 lia3D lia 1 3 1 0.1;
+#X obj 570 273 masse3D masse 10 0 0;
+#X obj 758 271 lia3D lia2 1 0.6 0 0;
+#X connect 0 0 2 0;
+#X connect 1 1 0 1;
+#X connect 1 2 0 2;
+#X connect 1 3 0 3;
+#X connect 3 0 5 0;
+#X connect 4 1 3 1;
+#X connect 4 2 3 2;
+#X connect 4 3 3 3;
+#X connect 6 0 8 0;
+#X connect 7 1 6 1;
+#X connect 7 2 6 2;
+#X connect 7 3 6 3;
+#X connect 9 0 11 0;
+#X connect 10 1 9 1;
+#X connect 10 2 9 2;
+#X connect 10 3 9 3;
+#X connect 12 0 46 0;
+#X connect 13 0 32 0;
+#X connect 14 0 0 0;
+#X connect 15 0 3 0;
+#X connect 16 0 9 0;
+#X connect 17 0 6 0;
+#X connect 18 0 32 1;
+#X connect 19 0 32 2;
+#X connect 20 0 33 0;
+#X connect 21 0 33 1;
+#X connect 22 0 33 2;
+#X connect 23 0 34 0;
+#X connect 24 0 34 1;
+#X connect 25 0 34 2;
+#X connect 26 0 43 0;
+#X connect 27 0 43 1;
+#X connect 28 0 43 2;
+#X connect 29 0 35 0;
+#X connect 30 0 35 1;
+#X connect 31 0 35 2;
+#X connect 36 0 39 0;
+#X connect 37 0 39 1;
+#X connect 38 0 39 2;
+#X connect 40 0 42 0;
+#X connect 41 0 42 1;
+#X connect 44 0 50 0;
+#X connect 44 0 45 0;
+#X connect 44 0 48 0;
+#X connect 44 0 1 0;
+#X connect 44 0 18 0;
+#X connect 44 0 37 0;
+#X connect 44 0 21 0;
+#X connect 45 0 44 0;
+#X connect 45 1 46 0;
+#X connect 46 0 45 1;
+#X connect 46 0 47 0;
+#X connect 46 0 49 1;
+#X connect 46 0 4 0;
+#X connect 46 0 22 0;
+#X connect 46 0 28 0;
+#X connect 46 0 30 0;
+#X connect 47 0 46 0;
+#X connect 47 1 53 0;
+#X connect 48 0 44 0;
+#X connect 48 1 53 0;
+#X connect 49 0 51 0;
+#X connect 49 1 46 0;
+#X connect 50 0 44 0;
+#X connect 50 1 51 0;
+#X connect 51 0 50 1;
+#X connect 51 0 52 0;
+#X connect 51 0 49 0;
+#X connect 51 0 10 0;
+#X connect 51 0 19 0;
+#X connect 51 0 24 0;
+#X connect 51 0 27 0;
+#X connect 52 0 51 0;
+#X connect 52 1 53 0;
+#X connect 53 0 52 1;
+#X connect 53 0 48 1;
+#X connect 53 0 7 0;
+#X connect 53 0 38 0;
+#X connect 53 0 25 0;
+#X connect 53 0 31 0;
+#X connect 53 0 41 0;
+#X connect 53 0 47 1;
+#X connect 53 0 54 0;
+#X connect 54 0 53 0;
+#X restore 39 472 pd forme;
+#X obj 10 26 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 78 105 s lia;
+#X obj 10 104 s masse;
+#X obj 36 343 s masse;
+#X obj 10 47 metro 50;
+#X msg 193 73 destroy;
+#X msg 166 48 reset \, create \, 1 \, lighting 1;
+#X obj 166 106 gemwin;
+#X obj 458 107 world_light;
+#X obj 78 129 s lia2;
+#X msg 36 242 force3D 0 0 1;
+#X msg 44 266 force3D 0 1 0;
+#X msg 53 290 force3D 1 0 0;
+#X obj 458 82 gemhead 1;
+#X msg 39 385 force3D 0 0 10;
+#X msg 45 409 force3D 0 10 0;
+#X msg 54 433 force3D 10 0 0;
+#X msg 61 314 force3D 2 1 1;
+#X obj 10 73 t b b;
+#N canvas 518 337 782 499 change 0;
+#X msg 102 189 setK \$1;
+#X msg 170 189 setD \$1;
+#X msg 33 73 setM \$1;
+#X floatatom 102 162 5 0 0 0 - - -;
+#X floatatom 170 162 5 0 0 0 - - -;
+#X floatatom 33 50 5 5 100 0 - - -;
+#X obj 33 216 s lia;
+#X obj 33 99 s masse;
+#X floatatom 33 163 5 0 0 0 - - -;
+#X msg 33 189 setL \$1;
+#X obj 36 380 s lia2;
+#X floatatom 36 297 5 0 0 0 - - -;
+#X msg 36 319 setL \$1;
+#X msg 33 140 1;
+#X msg 171 140 1;
+#X msg 102 139 3;
+#X msg 33 26 10;
+#X msg 102 319 setK \$1;
+#X msg 170 319 setD \$1;
+#X floatatom 102 293 5 0 0 0 - - -;
+#X floatatom 170 293 5 0 0 0 - - -;
+#X text 106 27 <- default value;
+#X text 109 100 weight of the masse;
+#X text 317 137 <- default values;
+#X text 315 189 pyramide liaison properties;
+#X text 257 270 <- default values;
+#X text 258 318 liaison beetween the pyramide and a fixed point (0
+\, 0 \, 0);
+#X msg 36 273 1;
+#X msg 102 270 0.6;
+#X msg 171 271 0;
+#X floatatom 238 162 5 0 0 0 - - -;
+#X msg 238 189 setD2 \$1;
+#X msg 239 140 0.1;
+#X text 36 429 take care to extrem values;
+#X connect 0 0 6 0;
+#X connect 1 0 6 0;
+#X connect 2 0 7 0;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 8 0 9 0;
+#X connect 9 0 6 0;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
+#X connect 13 0 8 0;
+#X connect 14 0 4 0;
+#X connect 15 0 3 0;
+#X connect 16 0 5 0;
+#X connect 17 0 10 0;
+#X connect 18 0 10 0;
+#X connect 19 0 17 0;
+#X connect 20 0 18 0;
+#X connect 27 0 11 0;
+#X connect 28 0 19 0;
+#X connect 29 0 20 0;
+#X connect 30 0 31 0;
+#X connect 31 0 6 0;
+#X connect 32 0 30 0;
+#X restore 459 44 pd change physical properties;
+#X text 215 262 <- send forces to the 4 masses;
+#X text 225 378 <- send forces to a masses;
+#X text 227 474 <- structure and gem stuff;
+#X text 76 168 4 masses are all link together \, with the same kind
+of link.;
+#X text 73 193 A link is add to a mass \, for the structure to stay
+in the screen.;
+#X text 89 552 If the line does not display corectly \, you sould upgrade
+GEM;
+#X text 44 22 <- 1;
+#X text 399 48 <- 2;
+#X connect 1 0 5 0;
+#X connect 5 0 19 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 11 0 4 0;
+#X connect 12 0 4 0;
+#X connect 13 0 4 0;
+#X connect 14 0 9 0;
+#X connect 15 0 0 0;
+#X connect 16 0 0 0;
+#X connect 17 0 0 0;
+#X connect 18 0 4 0;
+#X connect 19 0 3 0;
+#X connect 19 1 2 0;
+#X connect 19 1 10 0;
diff --git a/exemples/07_corde3D.pd b/exemples/07_corde3D.pd
new file mode 100755
index 0000000..8f48fa4
--- /dev/null
+++ b/exemples/07_corde3D.pd
@@ -0,0 +1,601 @@
+#N canvas 102 60 816 578 12;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 99 622 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 47 593 pd lia;
+#X obj 23 83 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 94 188 s lia;
+#X obj 23 187 s masse;
+#X obj 540 417 s masse;
+#X msg 392 179 setK \$1;
+#X msg 613 131 setM \$1;
+#X obj 392 206 s lia;
+#X obj 613 159 s masse;
+#X obj 392 153 / 10;
+#X obj 392 127 + 1;
+#X obj 43 314 gemwin;
+#X msg 62 281 0 \, destroy;
+#X floatatom 392 105 5 0 0 0 - - -;
+#X floatatom 529 109 5 0 0 0 - - -;
+#X floatatom 613 108 5 0 0 0 - - -;
+#X obj 392 47 loadbang;
+#X obj 23 104 metro 10;
+#X obj 23 128 t b b;
+#X msg 392 81 50;
+#X msg 613 84 200;
+#X obj 251 115 world_light;
+#X obj 251 87 gemhead;
+#X text 194 158 <- gravity simulation;
+#X obj 535 304 s gemhead;
+#X obj 535 223 gemhead;
+#X obj 535 279 rotateXYZ;
+#X floatatom 557 253 5 0 0 0 - - -;
+#X floatatom 607 254 5 0 0 0 - - -;
+#X floatatom 657 254 5 0 0 0 - - -;
+#X msg 158 479 force3D 1000 0 0;
+#X msg 179 503 force3D 0 1000 0;
+#X msg 196 525 force3D 0 0 1000;
+#X msg 556 391 force3D 1000 0 0;
+#X msg 550 368 force3D 0 0 500;
+#X msg 540 346 force3D 0 500 0;
+#N canvas 846 252 304 336 masse 0;
+#X obj 25 99 outlet;
+#X obj 75 228 translateXYZ 0 0 0;
+#X obj 75 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 167 127 / 100;
+#X obj 75 162 r gemhead;
+#X obj 75 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 214 128 / 100;
+#X obj 24 71 masse3D 0 10 0 300 5;
+#X connect 1 0 2 0;
+#X connect 3 0 1 1;
+#X connect 4 0 1 2;
+#X connect 5 0 6 0;
+#X connect 6 0 1 0;
+#X connect 7 1 3 0;
+#X connect 7 2 4 0;
+#X connect 7 3 8 0;
+#X connect 8 0 1 3;
+#X connect 9 0 0 0;
+#X connect 9 0 7 0;
+#X restore 47 562 pd masse;
+#X msg 529 132 setD2 \$1;
+#X msg 58 156 force3D 0 -8 0;
+#X msg 506 517 force3D 0 0 2000;
+#X msg 490 495 force3D 0 2000 0;
+#X msg 468 471 force3D 2000 0 0;
+#X floatatom 445 110 5 0 0 0 - - -;
+#X msg 445 133 setD \$1;
+#X msg 445 84 1;
+#X msg 529 83 1;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 174 623 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 128 593 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 245 623 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 193 594 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 320 624 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 274 594 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 393 626 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 341 597 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 468 627 pd masse;
+#N canvas 470 145 284 118 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 422 597 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 539 627 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 487 598 pd lia;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 568 598 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 613 627 pd masse;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 686 629 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 634 600 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 761 630 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 715 600 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 832 630 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 780 601 pd lia;
+#N canvas 663 236 288 320 masse 0;
+#X obj 25 38 inlet;
+#X obj 25 99 outlet;
+#X obj 76 228 translateXYZ 0 0 0;
+#X obj 76 256 sphere 0.3;
+#X obj 121 127 / 100;
+#X obj 168 127 / 100;
+#X obj 76 162 r gemhead;
+#X obj 76 191 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 215 128 / 100;
+#X obj 25 70 masse3D masse 10;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 2;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 8 3 9 0;
+#X connect 9 0 2 3;
+#X connect 10 0 1 0;
+#X connect 10 0 8 0;
+#X restore 907 631 pd masse;
+#N canvas 470 145 282 116 lia 0;
+#X obj 177 23 inlet;
+#X obj 177 78 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia 50 10 0;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 861 601 pd lia;
+#X msg 43 253 reset \, lighting 1 \, create \, 1;
+#X text 433 12 string 3D;
+#X text 25 366 At the initialisation \, all the masse are in the same
+point (0 \, 0). The masse move to find the minimal energy of the system.
+;
+#X text 720 366 <- send forces to all the masses;
+#X text 654 491 <- send forces to specific masses;
+#X text 21 421 The gravity simulation is a force vertical force aply
+to all masses.;
+#X text 710 252 <- rotate the model in 3D;
+#X text 55 78 <- 1;
+#X text 289 255 <- 2;
+#X connect 0 0 1 1;
+#X connect 0 0 48 0;
+#X connect 1 1 0 0;
+#X connect 2 0 18 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 10 0 6 0;
+#X connect 11 0 10 0;
+#X connect 13 0 12 0;
+#X connect 14 0 11 0;
+#X connect 15 0 38 0;
+#X connect 16 0 7 0;
+#X connect 17 0 21 0;
+#X connect 17 0 46 0;
+#X connect 17 0 20 0;
+#X connect 17 0 45 0;
+#X connect 18 0 19 0;
+#X connect 19 0 4 0;
+#X connect 19 1 3 0;
+#X connect 19 1 39 0;
+#X connect 20 0 14 0;
+#X connect 21 0 16 0;
+#X connect 23 0 22 0;
+#X connect 26 0 27 0;
+#X connect 27 0 25 0;
+#X connect 28 0 27 1;
+#X connect 29 0 27 2;
+#X connect 30 0 27 3;
+#X connect 31 0 0 0;
+#X connect 32 0 0 0;
+#X connect 33 0 0 0;
+#X connect 34 0 5 0;
+#X connect 35 0 5 0;
+#X connect 36 0 5 0;
+#X connect 37 0 1 0;
+#X connect 38 0 8 0;
+#X connect 39 0 4 0;
+#X connect 40 0 55 0;
+#X connect 41 0 55 0;
+#X connect 42 0 55 0;
+#X connect 43 0 44 0;
+#X connect 44 0 8 0;
+#X connect 45 0 43 0;
+#X connect 46 0 15 0;
+#X connect 47 0 48 1;
+#X connect 47 0 50 0;
+#X connect 48 0 0 0;
+#X connect 48 1 47 0;
+#X connect 49 0 50 1;
+#X connect 49 0 52 0;
+#X connect 50 0 47 0;
+#X connect 50 1 49 0;
+#X connect 51 0 52 1;
+#X connect 51 0 54 0;
+#X connect 52 0 49 0;
+#X connect 52 1 51 0;
+#X connect 53 0 54 1;
+#X connect 53 0 56 0;
+#X connect 54 0 51 0;
+#X connect 54 1 53 0;
+#X connect 55 0 56 1;
+#X connect 55 0 58 0;
+#X connect 56 0 53 0;
+#X connect 56 1 55 0;
+#X connect 57 0 58 1;
+#X connect 57 0 59 0;
+#X connect 58 0 55 0;
+#X connect 58 1 57 0;
+#X connect 59 0 57 0;
+#X connect 59 1 60 0;
+#X connect 60 0 62 0;
+#X connect 60 0 59 1;
+#X connect 61 0 62 1;
+#X connect 61 0 64 0;
+#X connect 62 0 60 0;
+#X connect 62 1 61 0;
+#X connect 63 0 64 1;
+#X connect 63 0 66 0;
+#X connect 64 0 61 0;
+#X connect 64 1 63 0;
+#X connect 65 0 66 1;
+#X connect 65 0 68 0;
+#X connect 66 0 63 0;
+#X connect 66 1 65 0;
+#X connect 67 0 68 1;
+#X connect 68 0 65 0;
+#X connect 68 1 67 0;
+#X connect 69 0 12 0;
diff --git a/exemples/08_ball2D.pd b/exemples/08_ball2D.pd
new file mode 100755
index 0000000..f7bcf3e
--- /dev/null
+++ b/exemples/08_ball2D.pd
@@ -0,0 +1,315 @@
+#N canvas 43 5 837 614 12;
+#X obj 212 146 t b b;
+#X obj 212 98 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 36 384 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 62 90 0 \, destroy;
+#X obj 28 118 gemwin;
+#X msg 28 65 reset \, create \, 1;
+#N canvas 510 193 994 722 structure 0;
+#X obj 124 314 pd_lia \$0;
+#X obj 213 373 pd_lia \$0;
+#X obj 49 445 pd_lia \$0;
+#X obj 198 502 pd_lia \$0;
+#X obj 189 113 pd_lia \$0;
+#X obj 69 161 pd_lia \$0;
+#X obj 201 187 pd_lia \$0;
+#X obj 279 598 pd_lia \$0;
+#X obj 410 562 pd_lia \$0;
+#X obj 580 585 pd_lia \$0;
+#X obj 310 327 pd_lia \$0;
+#X obj 388 330 pd_lia \$0;
+#X obj 468 330 pd_lia \$0;
+#X obj 338 427 pd_lia \$0;
+#X obj 509 422 pd_lia \$0;
+#X obj 304 26 pd_lia \$0;
+#X obj 441 57 pd_lia \$0;
+#X obj 347 129 pd_lia \$0;
+#X obj 308 231 pd_lia \$0;
+#X obj 304 280 pd_lia \$0;
+#X obj 393 227 pd_lia \$0;
+#X obj 475 227 pd_lia \$0;
+#X obj 562 277 pd_lia \$0;
+#X obj 604 358 pd_lia \$0;
+#X obj 678 291 pd_lia \$0;
+#X obj 604 221 pd_lia \$0;
+#X obj 499 135 pd_lia \$0;
+#X obj 571 43 pd_lia \$0;
+#X obj 612 101 pd_lia \$0;
+#X obj 749 179 pd_lia \$0;
+#X obj 763 429 pd_lia \$0;
+#X obj 671 510 pd_lia \$0;
+#X obj 28 21 inlet;
+#N canvas 0 0 450 300 lia 0;
+#X obj 266 35 inlet;
+#X obj 274 100 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X obj 47 61 lia2D lia 0 10 10 0.001;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 28 52 pd lia;
+#X obj 27 290 pd_masse -1 0 \$0;
+#X obj 37 101 loadbang;
+#X obj 407 274 pd_masse 0 0 \$0;
+#X obj 124 43 pd_masse -0.7 0.7 \$0;
+#X obj 123 558 pd_masse -0.7 -0.7 \$0;
+#X obj 399 624 pd_masse 0 -1 \$0;
+#X obj 436 16 pd_masse 0 1 \$0;
+#X obj 680 64 pd_masse 0.7 0.7 \$0;
+#X obj 766 285 pd_masse 1 0 \$0;
+#X obj 748 552 pd_masse 0.7 -0.7 \$0;
+#X obj 554 253 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 0 0 37 0;
+#X connect 0 1 38 0;
+#X connect 1 0 37 0;
+#X connect 1 1 39 0;
+#X connect 2 0 34 0;
+#X connect 2 1 38 0;
+#X connect 3 0 34 0;
+#X connect 3 1 39 0;
+#X connect 4 0 34 0;
+#X connect 4 1 40 0;
+#X connect 5 0 34 0;
+#X connect 5 1 37 0;
+#X connect 6 0 40 0;
+#X connect 6 1 38 0;
+#X connect 7 0 38 0;
+#X connect 7 1 39 0;
+#X connect 8 0 38 0;
+#X connect 8 1 43 0;
+#X connect 9 0 39 0;
+#X connect 9 1 43 0;
+#X connect 10 0 38 0;
+#X connect 10 1 36 0;
+#X connect 11 0 36 0;
+#X connect 11 1 39 0;
+#X connect 12 0 36 0;
+#X connect 12 1 43 0;
+#X connect 13 0 34 0;
+#X connect 13 1 43 0;
+#X connect 14 0 38 0;
+#X connect 14 1 42 0;
+#X connect 15 0 37 0;
+#X connect 15 1 40 0;
+#X connect 16 0 37 0;
+#X connect 16 1 41 0;
+#X connect 17 0 34 0;
+#X connect 17 1 41 0;
+#X connect 18 0 37 0;
+#X connect 18 1 36 0;
+#X connect 19 0 34 0;
+#X connect 19 1 36 0;
+#X connect 20 0 36 0;
+#X connect 20 1 40 0;
+#X connect 21 0 36 0;
+#X connect 21 1 41 0;
+#X connect 22 0 36 0;
+#X connect 22 1 42 0;
+#X connect 23 0 39 0;
+#X connect 23 1 41 0;
+#X connect 24 0 43 0;
+#X connect 24 1 41 0;
+#X connect 25 0 40 0;
+#X connect 25 1 43 0;
+#X connect 26 0 37 0;
+#X connect 26 1 42 0;
+#X connect 27 0 40 0;
+#X connect 27 1 41 0;
+#X connect 28 0 40 0;
+#X connect 28 1 42 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 42 0;
+#X connect 30 1 43 0;
+#X connect 31 0 39 0;
+#X connect 31 1 42 0;
+#X connect 32 0 33 0;
+#X connect 33 1 36 0;
+#X connect 34 0 2 0;
+#X connect 34 0 3 0;
+#X connect 34 0 4 0;
+#X connect 34 0 5 0;
+#X connect 34 0 13 0;
+#X connect 34 0 17 0;
+#X connect 34 0 19 0;
+#X connect 35 0 36 1;
+#X connect 36 0 10 1;
+#X connect 36 0 11 0;
+#X connect 36 0 12 0;
+#X connect 36 0 18 1;
+#X connect 36 0 19 1;
+#X connect 36 0 20 0;
+#X connect 36 0 21 0;
+#X connect 36 0 22 0;
+#X connect 36 0 33 1;
+#X connect 37 0 0 0;
+#X connect 37 0 1 0;
+#X connect 37 0 5 1;
+#X connect 37 0 15 0;
+#X connect 37 0 16 0;
+#X connect 37 0 18 0;
+#X connect 37 0 26 0;
+#X connect 38 0 0 1;
+#X connect 38 0 2 1;
+#X connect 38 0 6 1;
+#X connect 38 0 7 0;
+#X connect 38 0 8 0;
+#X connect 38 0 10 0;
+#X connect 38 0 14 0;
+#X connect 39 0 1 1;
+#X connect 39 0 3 1;
+#X connect 39 0 7 1;
+#X connect 39 0 9 0;
+#X connect 39 0 11 1;
+#X connect 39 0 23 0;
+#X connect 39 0 31 0;
+#X connect 40 0 4 1;
+#X connect 40 0 6 0;
+#X connect 40 0 15 1;
+#X connect 40 0 20 1;
+#X connect 40 0 25 0;
+#X connect 40 0 27 0;
+#X connect 40 0 28 0;
+#X connect 41 0 16 1;
+#X connect 41 0 17 1;
+#X connect 41 0 21 1;
+#X connect 41 0 23 1;
+#X connect 41 0 24 1;
+#X connect 41 0 27 1;
+#X connect 41 0 29 0;
+#X connect 42 0 14 1;
+#X connect 42 0 22 1;
+#X connect 42 0 26 1;
+#X connect 42 0 28 1;
+#X connect 42 0 29 1;
+#X connect 42 0 30 0;
+#X connect 42 0 31 1;
+#X connect 43 0 8 1;
+#X connect 43 0 9 1;
+#X connect 43 0 12 1;
+#X connect 43 0 13 1;
+#X connect 43 0 24 0;
+#X connect 43 0 25 1;
+#X connect 43 0 30 1;
+#X connect 44 0 36 1;
+#X restore 39 346 pd structure;
+#X msg 284 401 force2D 0 5;
+#X msg 340 427 force2D 5 0;
+#X obj 212 119 metro 50;
+#X obj 55 383 loadbang;
+#X msg 286 455 force2D 0 -5;
+#X msg 229 428 force2D -5 0;
+#X obj 247 171 s \$0-lia;
+#X obj 212 199 s \$0-masse;
+#X obj 285 487 s \$0-masse;
+#X msg 87 439 reset;
+#X msg 61 491 resetL;
+#X msg 36 517 resetF;
+#X obj 36 411 t b b b;
+#X obj 274 226 iAmbient2D \$0-masse 0 -0.2;
+#X text 223 250 ambient Force \, simulating gravity;
+#X text 179 63 <- create Gem windows;
+#X obj 36 548 s \$0-lia;
+#X obj 87 464 s \$0-masse;
+#X text 251 96 <- on / off;
+#X text 451 425 <- send forces to the structure;
+#X text 222 549 If the line does not display corectly \, you sould
+upgrade GEM;
+#X obj 37 260 square 3.9;
+#X obj 37 203 gemhead 11;
+#X obj 37 231 color 0 0.5 0;
+#X msg 209 293 \; pd dsp 1 \;;
+#X msg 291 292 \; pd dsp 0 \;;
+#X text 236 11 Forces aply to a mass create sound.;
+#X text 234 31 each masse got a diferent frequency;
+#X msg 517 312 setK \$1;
+#X msg 591 286 setD \$1;
+#X msg 733 258 setM \$1;
+#X floatatom 517 237 5 -10 200 0 - - -;
+#X floatatom 591 235 5 0 0 0 - - -;
+#X floatatom 733 235 5 0 0 0 - - -;
+#X obj 517 286 / 10;
+#X obj 517 260 + 1;
+#X obj 591 259 / 10;
+#X msg 517 210 100;
+#X msg 591 211 25;
+#X msg 733 209 50;
+#X floatatom 658 235 5 0 0 0 - - -;
+#X obj 658 259 / 10;
+#X msg 658 286 setD2 \$1;
+#X msg 658 211 1;
+#X obj 517 344 s \$0-lia;
+#X obj 733 286 s \$0-masse;
+#X text 517 157 you can change physical properties;
+#X text 515 182 this will change the sound;
+#X floatatom 373 143 5 0 0 0 - - -;
+#X msg 373 167 setFY \$1;
+#N canvas 316 568 450 300 gemmouse 0;
+#X obj 31 26 gemmouse;
+#X obj 31 57 / 62.5;
+#X obj 31 80 - 4;
+#X obj 31 133 pack f f;
+#X msg 31 158 position2D \$1 \$2;
+#X obj 155 109 spigot;
+#X obj 152 82 r \$0-lia;
+#X obj 154 135 s lia;
+#X obj 66 83 / -62.5;
+#X obj 66 106 + 4;
+#X obj 32 193 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 8 0;
+#X connect 0 2 5 1;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 10 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 1;
+#X restore 39 319 pd gemmouse;
+#X connect 0 0 14 0;
+#X connect 0 1 13 0;
+#X connect 0 1 20 0;
+#X connect 1 0 9 0;
+#X connect 2 0 19 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 7 0 15 0;
+#X connect 8 0 15 0;
+#X connect 9 0 0 0;
+#X connect 10 0 19 0;
+#X connect 11 0 15 0;
+#X connect 12 0 15 0;
+#X connect 16 0 24 0;
+#X connect 17 0 23 0;
+#X connect 18 0 23 0;
+#X connect 19 0 18 0;
+#X connect 19 1 17 0;
+#X connect 19 2 16 0;
+#X connect 29 0 30 0;
+#X connect 30 0 28 0;
+#X connect 35 0 51 0;
+#X connect 36 0 51 0;
+#X connect 37 0 52 0;
+#X connect 38 0 42 0;
+#X connect 39 0 43 0;
+#X connect 40 0 37 0;
+#X connect 41 0 35 0;
+#X connect 42 0 41 0;
+#X connect 43 0 36 0;
+#X connect 44 0 38 0;
+#X connect 45 0 39 0;
+#X connect 46 0 40 0;
+#X connect 47 0 48 0;
+#X connect 48 0 49 0;
+#X connect 49 0 51 0;
+#X connect 50 0 47 0;
+#X connect 55 0 56 0;
+#X connect 56 0 20 0;
+#X connect 57 0 6 0;
diff --git a/exemples/09_tutorial2D.pd b/exemples/09_tutorial2D.pd
new file mode 100755
index 0000000..5de0ee6
--- /dev/null
+++ b/exemples/09_tutorial2D.pd
@@ -0,0 +1,269 @@
+#N canvas 57 28 600 601 12;
+#N canvas 623 135 520 309 init 0;
+#X msg 200 169 setK \$1;
+#X msg 274 143 setD \$1;
+#X msg 416 115 setM \$1;
+#X floatatom 200 94 5 -10 200 0 - - -;
+#X floatatom 274 92 5 0 0 0 - - -;
+#X floatatom 416 92 5 0 0 0 - - -;
+#X obj 416 143 s masse;
+#X obj 200 143 / 10;
+#X obj 200 117 + 1;
+#X obj 274 116 / 10;
+#X msg 200 67 100;
+#X msg 274 68 25;
+#X msg 416 66 50;
+#X obj 49 50 loadbang;
+#X floatatom 341 92 5 0 0 0 - - -;
+#X obj 341 116 / 10;
+#X msg 341 143 setD2 \$1;
+#X msg 341 68 1;
+#X obj 139 23 inlet;
+#X obj 47 201 s tut_masse;
+#X obj 200 201 s tut_lia;
+#X msg 44 84 setXmin -3.8;
+#X msg 58 110 setXmax 3.8;
+#X msg 81 131 setYmin -3.8;
+#X msg 95 157 setYmax 3.8;
+#X connect 0 0 20 0;
+#X connect 1 0 20 0;
+#X connect 2 0 6 0;
+#X connect 3 0 8 0;
+#X connect 4 0 9 0;
+#X connect 5 0 2 0;
+#X connect 7 0 0 0;
+#X connect 8 0 7 0;
+#X connect 9 0 1 0;
+#X connect 10 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 5 0;
+#X connect 13 0 21 0;
+#X connect 13 0 22 0;
+#X connect 13 0 23 0;
+#X connect 13 0 24 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 20 0;
+#X connect 17 0 14 0;
+#X connect 18 0 21 0;
+#X connect 18 0 22 0;
+#X connect 18 0 23 0;
+#X connect 18 0 24 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X connect 23 0 19 0;
+#X connect 24 0 19 0;
+#X restore 168 43 pd init;
+#X obj 42 92 t b b;
+#X obj 42 44 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 329 22 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 75 231 0 \, destroy;
+#X obj 41 259 gemwin;
+#X msg 41 206 reset \, create \, 1;
+#N canvas 115 18 1382 984 structure 0;
+#X obj 503 58 tut_lia;
+#X obj 193 331 tut_lia;
+#X obj 243 219 tut_lia;
+#X obj 353 120 tut_lia;
+#X obj 1022 465 tut_lia;
+#X obj 791 778 tut_lia;
+#X obj 910 681 tut_lia;
+#X obj 997 574 tut_lia;
+#X obj 988 236 tut_lia;
+#X obj 746 55 tut_lia;
+#X obj 907 142 tut_lia;
+#X obj 1009 345 tut_lia;
+#X obj 556 793 tut_lia;
+#X obj 188 450 tut_lia;
+#X obj 252 593 tut_lia;
+#X obj 384 717 tut_lia;
+#X obj 654 751 tut_lia;
+#X obj 801 707 tut_lia;
+#X obj 850 622 tut_lia;
+#X obj 902 500 tut_lia;
+#X obj 908 405 tut_lia;
+#X obj 907 301 tut_lia;
+#X obj 865 207 tut_lia;
+#X obj 769 154 tut_lia;
+#X obj 226 276 tut_masse -0.9 0.4;
+#X obj 422 90 tut_masse -0.4 0.9;
+#X obj 997 291 tut_masse 0.9 0.4;
+#X obj 637 815 tut_masse 0 -1;
+#X obj 972 633 tut_masse 0.7 -0.7;
+#X obj 947 189 tut_masse 0.7 0.7;
+#X obj 173 374 tut_masse -1 0;
+#X obj 272 165 tut_masse -0.7 0.7;
+#X obj 304 648 tut_masse -0.7 -0.7;
+#X obj 837 97 tut_masse 0.4 0.9;
+#X obj 207 520 tut_masse -0.9 -0.4;
+#X obj 1015 400 tut_masse 1 0;
+#X obj 445 758 tut_masse -0.4 -0.9;
+#X obj 873 734 tut_masse 0.4 -0.9;
+#X obj 598 28 tut_masse 0 1;
+#X obj 1017 517 tut_masse 0.9 -0.4;
+#X connect 0 0 25 0;
+#X connect 0 1 38 0;
+#X connect 1 0 30 0;
+#X connect 1 1 24 0;
+#X connect 2 0 31 0;
+#X connect 2 1 24 0;
+#X connect 3 0 31 0;
+#X connect 3 1 25 0;
+#X connect 4 0 39 0;
+#X connect 4 1 35 0;
+#X connect 5 0 27 0;
+#X connect 5 1 37 0;
+#X connect 6 0 37 0;
+#X connect 6 1 28 0;
+#X connect 7 0 28 0;
+#X connect 7 1 39 0;
+#X connect 8 0 29 0;
+#X connect 8 1 26 0;
+#X connect 9 0 38 0;
+#X connect 9 1 33 0;
+#X connect 10 0 33 0;
+#X connect 10 1 29 0;
+#X connect 11 0 26 0;
+#X connect 11 1 35 0;
+#X connect 12 0 36 0;
+#X connect 12 1 27 0;
+#X connect 13 0 30 0;
+#X connect 13 1 34 0;
+#X connect 14 0 34 0;
+#X connect 14 1 32 0;
+#X connect 15 0 32 0;
+#X connect 15 1 36 0;
+#X connect 16 0 38 0;
+#X connect 16 1 27 0;
+#X connect 17 0 25 0;
+#X connect 17 1 37 0;
+#X connect 18 0 31 0;
+#X connect 18 1 28 0;
+#X connect 19 0 24 0;
+#X connect 19 1 39 0;
+#X connect 20 0 30 0;
+#X connect 20 1 35 0;
+#X connect 21 0 34 0;
+#X connect 21 1 26 0;
+#X connect 22 0 32 0;
+#X connect 22 1 29 0;
+#X connect 23 0 36 0;
+#X connect 23 1 33 0;
+#X connect 24 0 1 1;
+#X connect 24 0 2 1;
+#X connect 24 0 19 0;
+#X connect 25 0 0 0;
+#X connect 25 0 3 1;
+#X connect 25 0 17 0;
+#X connect 26 0 8 1;
+#X connect 26 0 11 0;
+#X connect 26 0 21 1;
+#X connect 27 0 5 0;
+#X connect 27 0 12 1;
+#X connect 27 0 16 1;
+#X connect 28 0 7 0;
+#X connect 28 0 6 1;
+#X connect 28 0 18 1;
+#X connect 29 0 8 0;
+#X connect 29 0 10 1;
+#X connect 29 0 22 1;
+#X connect 30 0 1 0;
+#X connect 30 0 13 0;
+#X connect 30 0 20 0;
+#X connect 31 0 2 0;
+#X connect 31 0 3 0;
+#X connect 31 0 18 0;
+#X connect 32 0 15 0;
+#X connect 32 0 14 1;
+#X connect 32 0 22 0;
+#X connect 33 0 10 0;
+#X connect 33 0 9 1;
+#X connect 33 0 23 1;
+#X connect 34 0 13 1;
+#X connect 34 0 14 0;
+#X connect 34 0 21 0;
+#X connect 35 0 4 1;
+#X connect 35 0 11 1;
+#X connect 35 0 20 1;
+#X connect 36 0 12 0;
+#X connect 36 0 15 1;
+#X connect 36 0 23 0;
+#X connect 37 0 5 1;
+#X connect 37 0 6 0;
+#X connect 37 0 17 1;
+#X connect 38 0 0 1;
+#X connect 38 0 9 0;
+#X connect 38 0 16 0;
+#X connect 39 0 4 0;
+#X connect 39 0 7 1;
+#X connect 39 0 19 1;
+#X restore 417 325 pd structure;
+#X obj 329 45 loadbang;
+#X msg 244 270 force2D 0 2;
+#X msg 190 295 force2D -2 0;
+#X msg 247 322 force2D 0 -2;
+#X msg 301 294 force2D 2 0;
+#X obj 329 74 t b b b;
+#X msg 380 99 reset;
+#X msg 355 124 resetL;
+#X msg 329 152 resetF;
+#X obj 42 65 metro 50;
+#X msg 54 150 force2D 0 -0.1;
+#X obj 168 22 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 246 354 s tut_masse;
+#X obj 42 178 s tut_masse;
+#X obj 77 117 s tut_lia;
+#X text 39 403 You can use this exemple to try to make you own structure.
+;
+#X text 58 506 Go to pd structure;
+#X text 59 526 Remove everything;
+#X text 41 427 look at the structure \, and look a the patch : a lia
+is corespnding to a segment \, and a maase is a white sphere;
+#X text 41 462 everyting is here to make a 2D structure easilly;
+#X text 40 486 to make your own strucute :;
+#X text 59 546 put "tut_masse" object in the screen where you want
+to put your masse in the gem windows.;
+#X text 58 658 create a "tut_lia" object for each link you whant to
+put in the structure.;
+#X text 60 726 The structure is ready. you should now do the initialisation
+part :;
+#X text 222 19 <- init;
+#X text 375 20 <- reset;
+#X text 59 763 click on pd init : this will give a minimal and maximal
+position to the masse. (for them to stay on the screen).;
+#X text 60 806 click on reset : this will tell the link to learn there
+good initial lenght \, reset forces etc...;
+#X text 59 584 when all masse are there \, you can specifie them ther
+initial position : edit "tut_masse" object and add 2 float corresponding
+to ther X and Y position in the GEM screen. (should be about from -4
+to 4);
+#X text 59 694 connect them to the masse (link and masses as to be
+connected in 2 way : mass to link and link to mass).;
+#X text 61 846 now \, you are ready for toggle the metro on...;
+#X text 30 887 If the line does not display corectly \, you sould upgrade
+GEM;
+#X text 192 204 <- create;
+#X connect 1 0 21 0;
+#X connect 1 1 18 0;
+#X connect 1 1 22 0;
+#X connect 2 0 17 0;
+#X connect 3 0 13 0;
+#X connect 4 0 5 0;
+#X connect 6 0 5 0;
+#X connect 8 0 13 0;
+#X connect 9 0 20 0;
+#X connect 10 0 20 0;
+#X connect 11 0 20 0;
+#X connect 12 0 20 0;
+#X connect 13 0 16 0;
+#X connect 13 1 15 0;
+#X connect 13 2 14 0;
+#X connect 14 0 21 0;
+#X connect 15 0 22 0;
+#X connect 16 0 22 0;
+#X connect 17 0 1 0;
+#X connect 18 0 21 0;
+#X connect 19 0 0 0;
diff --git a/exemples/10_game.pd b/exemples/10_game.pd
new file mode 100755
index 0000000..447916c
--- /dev/null
+++ b/exemples/10_game.pd
@@ -0,0 +1,908 @@
+#N canvas 507 158 593 464 12;
+#N canvas 623 135 500 289 init 0;
+#X msg 200 169 setK \$1;
+#X msg 274 143 setD \$1;
+#X msg 416 115 setM \$1;
+#X floatatom 200 94 5 -10 200 0 - - -;
+#X floatatom 274 92 5 0 0 0 - - -;
+#X floatatom 416 92 5 0 0 0 - - -;
+#X obj 416 143 s masse;
+#X obj 200 143 / 10;
+#X obj 200 117 + 1;
+#X obj 274 116 / 10;
+#X msg 200 67 100;
+#X msg 274 68 25;
+#X msg 416 66 50;
+#X obj 47 50 loadbang;
+#X floatatom 341 92 5 0 0 0 - - -;
+#X obj 341 116 / 10;
+#X msg 341 143 setD2 \$1;
+#X msg 341 68 1;
+#X obj 47 201 s \$0-masse;
+#X obj 200 201 s \$0-lia;
+#X msg 47 84 setXmin -3.8;
+#X msg 61 107 setXmax 3.8;
+#X msg 77 130 setYmin -3.8;
+#X msg 90 153 setYmax 3.8;
+#X connect 0 0 19 0;
+#X connect 1 0 19 0;
+#X connect 2 0 6 0;
+#X connect 3 0 8 0;
+#X connect 4 0 9 0;
+#X connect 5 0 2 0;
+#X connect 7 0 0 0;
+#X connect 8 0 7 0;
+#X connect 9 0 1 0;
+#X connect 10 0 3 0;
+#X connect 11 0 4 0;
+#X connect 12 0 5 0;
+#X connect 13 0 20 0;
+#X connect 13 0 21 0;
+#X connect 13 0 22 0;
+#X connect 13 0 23 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 16 0 19 0;
+#X connect 17 0 14 0;
+#X connect 20 0 18 0;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 18 0;
+#X restore 429 282 pd init;
+#X obj 30 69 t b b;
+#X obj 30 21 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 343 10 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 64 218 0 \, destroy;
+#X obj 30 246 gemwin;
+#X msg 30 193 reset \, create \, 1;
+#N canvas 298 0 776 832 structure 0;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 29 94 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 80 187 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 36 296 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 33 499 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 35 675 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 87 740 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 88 716 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 81 574 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 82 548 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 71 370 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 72 345 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 359 17 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 354 206 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 342 400 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 354 608 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 349 770 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 601 748 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 601 726 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 657 680 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 604 579 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 604 555 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 651 490 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 578 365 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 576 342 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 642 293 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 575 180 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 643 101 pd lia;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 2;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 30 7 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 1.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 32 214 pd masse;
+#N canvas 0 0 458 308 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 35 398 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 38 611 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 32 768 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 23 66 masse2D \$0-masse 50 0.3 2;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 642 14 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.3 1.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 640 202 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 25 65 masse2D \$0-masse 50 0.3 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 647 393 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.3 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 655 614 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.3 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 654 776 pd masse;
+#X connect 0 0 27 0;
+#X connect 0 1 28 0;
+#X connect 1 0 28 0;
+#X connect 1 1 32 0;
+#X connect 2 0 28 0;
+#X connect 2 1 29 0;
+#X connect 3 0 29 0;
+#X connect 3 1 30 0;
+#X connect 4 0 30 0;
+#X connect 4 1 31 0;
+#X connect 5 0 31 0;
+#X connect 5 1 35 0;
+#X connect 6 0 31 0;
+#X connect 6 1 34 0;
+#X connect 7 0 30 0;
+#X connect 7 1 34 0;
+#X connect 8 0 30 0;
+#X connect 8 1 33 0;
+#X connect 9 0 29 0;
+#X connect 9 1 33 0;
+#X connect 10 0 29 0;
+#X connect 10 1 32 0;
+#X connect 11 0 27 0;
+#X connect 11 1 32 0;
+#X connect 12 0 28 0;
+#X connect 12 1 33 0;
+#X connect 13 0 29 0;
+#X connect 13 1 34 0;
+#X connect 14 0 30 0;
+#X connect 14 1 35 0;
+#X connect 15 0 31 0;
+#X connect 15 1 36 0;
+#X connect 16 0 30 0;
+#X connect 16 1 36 0;
+#X connect 17 0 29 0;
+#X connect 17 1 36 0;
+#X connect 18 0 35 0;
+#X connect 18 1 36 0;
+#X connect 19 0 29 0;
+#X connect 19 1 35 0;
+#X connect 20 0 28 0;
+#X connect 20 1 35 0;
+#X connect 21 0 34 0;
+#X connect 21 1 35 0;
+#X connect 22 0 28 0;
+#X connect 22 1 34 0;
+#X connect 23 0 27 0;
+#X connect 23 1 34 0;
+#X connect 24 0 33 0;
+#X connect 24 1 34 0;
+#X connect 25 0 27 0;
+#X connect 25 1 33 0;
+#X connect 26 0 32 0;
+#X connect 26 1 33 0;
+#X connect 27 0 0 0;
+#X connect 27 0 11 0;
+#X connect 27 0 25 0;
+#X connect 27 0 23 0;
+#X connect 28 0 0 1;
+#X connect 28 0 2 0;
+#X connect 28 0 12 0;
+#X connect 28 0 1 0;
+#X connect 28 0 22 0;
+#X connect 28 0 20 0;
+#X connect 29 0 2 1;
+#X connect 29 0 3 0;
+#X connect 29 0 13 0;
+#X connect 29 0 9 0;
+#X connect 29 0 10 0;
+#X connect 29 0 19 0;
+#X connect 29 0 17 0;
+#X connect 30 0 3 1;
+#X connect 30 0 4 0;
+#X connect 30 0 14 0;
+#X connect 30 0 7 0;
+#X connect 30 0 8 0;
+#X connect 30 0 16 0;
+#X connect 31 0 4 1;
+#X connect 31 0 15 0;
+#X connect 31 0 5 0;
+#X connect 31 0 6 0;
+#X connect 32 0 26 0;
+#X connect 32 0 11 1;
+#X connect 32 0 1 1;
+#X connect 32 0 10 1;
+#X connect 33 0 26 1;
+#X connect 33 0 24 0;
+#X connect 33 0 12 1;
+#X connect 33 0 25 1;
+#X connect 33 0 9 1;
+#X connect 33 0 8 1;
+#X connect 34 0 24 1;
+#X connect 34 0 21 0;
+#X connect 34 0 13 1;
+#X connect 34 0 22 1;
+#X connect 34 0 23 1;
+#X connect 34 0 6 1;
+#X connect 34 0 7 1;
+#X connect 35 0 21 1;
+#X connect 35 0 18 0;
+#X connect 35 0 14 1;
+#X connect 35 0 19 1;
+#X connect 35 0 20 1;
+#X connect 35 0 5 1;
+#X connect 36 0 18 1;
+#X connect 36 0 15 1;
+#X connect 36 0 16 1;
+#X connect 36 0 17 1;
+#X restore 429 310 pd structure;
+#X obj 341 31 loadbang;
+#X msg 256 256 force2D 0 2;
+#X msg 202 281 force2D -2 0;
+#X msg 259 308 force2D 0 -2;
+#X msg 313 280 force2D 2 0;
+#X obj 65 94 s \$0-lia;
+#X obj 30 155 s \$0-masse;
+#X obj 341 60 t b b b;
+#X msg 392 85 reset;
+#X msg 367 110 resetL;
+#X msg 341 138 resetF;
+#X obj 257 340 s \$0-masse;
+#X obj 30 42 metro 50;
+#X msg 42 127 force2D 0 -0.1;
+#X text 54 402 small game : try to put the structure horizontally on
+the floor \, and then back to vertical.;
+#X text 383 8 <- reset;
+#X text 93 17 <- 1;
+#X text 180 194 <- 2;
+#X connect 1 0 14 0;
+#X connect 1 1 21 0;
+#X connect 1 1 13 0;
+#X connect 2 0 20 0;
+#X connect 3 0 15 0;
+#X connect 4 0 5 0;
+#X connect 6 0 5 0;
+#X connect 8 0 15 0;
+#X connect 9 0 19 0;
+#X connect 10 0 19 0;
+#X connect 11 0 19 0;
+#X connect 12 0 19 0;
+#X connect 15 0 18 0;
+#X connect 15 1 17 0;
+#X connect 15 2 16 0;
+#X connect 16 0 14 0;
+#X connect 17 0 13 0;
+#X connect 18 0 13 0;
+#X connect 20 0 1 0;
+#X connect 21 0 14 0;
diff --git a/exemples/11_comportement.pd b/exemples/11_comportement.pd
new file mode 100755
index 0000000..d63ae0b
--- /dev/null
+++ b/exemples/11_comportement.pd
@@ -0,0 +1,974 @@
+#N canvas 575 348 594 486 12;
+#X obj 32 75 t b b;
+#X obj 32 27 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 298 29 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 65 236 0 \, destroy;
+#X obj 31 264 gemwin;
+#X msg 31 211 reset \, create \, 1;
+#N canvas 598 38 899 956 structure 0;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 29 94 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 80 187 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 36 296 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 33 499 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 35 675 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 87 740 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 88 716 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 81 574 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 82 548 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 71 370 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 72 345 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 359 17 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 354 206 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 342 400 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 354 608 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 349 770 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 601 748 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 601 726 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 657 680 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 604 579 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 604 555 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 651 490 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 578 365 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 576 342 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 642 293 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 575 180 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 643 101 pd lia;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 2;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 30 7 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 1.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 32 214 pd masse;
+#N canvas 0 0 458 308 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 35 398 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 38 611 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.3 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 32 768 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 23 66 masse2D \$0-masse 50 0.3 2;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 642 14 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.3 1.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 640 202 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 25 65 masse2D \$0-masse 50 0.3 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 647 393 pd masse;
+#N canvas 0 0 454 304 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.3 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 655 614 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.3 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 654 776 pd masse;
+#X connect 0 0 27 0;
+#X connect 0 1 28 0;
+#X connect 1 0 28 0;
+#X connect 1 1 32 0;
+#X connect 2 0 28 0;
+#X connect 2 1 29 0;
+#X connect 3 0 29 0;
+#X connect 3 1 30 0;
+#X connect 4 0 30 0;
+#X connect 4 1 31 0;
+#X connect 5 0 31 0;
+#X connect 5 1 35 0;
+#X connect 6 0 31 0;
+#X connect 6 1 34 0;
+#X connect 7 0 30 0;
+#X connect 7 1 34 0;
+#X connect 8 0 30 0;
+#X connect 8 1 33 0;
+#X connect 9 0 29 0;
+#X connect 9 1 33 0;
+#X connect 10 0 29 0;
+#X connect 10 1 32 0;
+#X connect 11 0 27 0;
+#X connect 11 1 32 0;
+#X connect 12 0 28 0;
+#X connect 12 1 33 0;
+#X connect 13 0 29 0;
+#X connect 13 1 34 0;
+#X connect 14 0 30 0;
+#X connect 14 1 35 0;
+#X connect 15 0 31 0;
+#X connect 15 1 36 0;
+#X connect 16 0 30 0;
+#X connect 16 1 36 0;
+#X connect 17 0 29 0;
+#X connect 17 1 36 0;
+#X connect 18 0 35 0;
+#X connect 18 1 36 0;
+#X connect 19 0 29 0;
+#X connect 19 1 35 0;
+#X connect 20 0 28 0;
+#X connect 20 1 35 0;
+#X connect 21 0 34 0;
+#X connect 21 1 35 0;
+#X connect 22 0 28 0;
+#X connect 22 1 34 0;
+#X connect 23 0 27 0;
+#X connect 23 1 34 0;
+#X connect 24 0 33 0;
+#X connect 24 1 34 0;
+#X connect 25 0 27 0;
+#X connect 25 1 33 0;
+#X connect 26 0 32 0;
+#X connect 26 1 33 0;
+#X connect 27 0 0 0;
+#X connect 27 0 11 0;
+#X connect 27 0 25 0;
+#X connect 27 0 23 0;
+#X connect 28 0 0 1;
+#X connect 28 0 2 0;
+#X connect 28 0 12 0;
+#X connect 28 0 1 0;
+#X connect 28 0 22 0;
+#X connect 28 0 20 0;
+#X connect 29 0 2 1;
+#X connect 29 0 3 0;
+#X connect 29 0 13 0;
+#X connect 29 0 9 0;
+#X connect 29 0 10 0;
+#X connect 29 0 19 0;
+#X connect 29 0 17 0;
+#X connect 30 0 3 1;
+#X connect 30 0 4 0;
+#X connect 30 0 14 0;
+#X connect 30 0 7 0;
+#X connect 30 0 8 0;
+#X connect 30 0 16 0;
+#X connect 31 0 4 1;
+#X connect 31 0 15 0;
+#X connect 31 0 5 0;
+#X connect 31 0 6 0;
+#X connect 32 0 26 0;
+#X connect 32 0 11 1;
+#X connect 32 0 1 1;
+#X connect 32 0 10 1;
+#X connect 33 0 26 1;
+#X connect 33 0 24 0;
+#X connect 33 0 12 1;
+#X connect 33 0 25 1;
+#X connect 33 0 9 1;
+#X connect 33 0 8 1;
+#X connect 34 0 24 1;
+#X connect 34 0 21 0;
+#X connect 34 0 13 1;
+#X connect 34 0 22 1;
+#X connect 34 0 23 1;
+#X connect 34 0 6 1;
+#X connect 34 0 7 1;
+#X connect 35 0 21 1;
+#X connect 35 0 18 0;
+#X connect 35 0 14 1;
+#X connect 35 0 19 1;
+#X connect 35 0 20 1;
+#X connect 35 0 5 1;
+#X connect 36 0 18 1;
+#X connect 36 0 15 1;
+#X connect 36 0 16 1;
+#X connect 36 0 17 1;
+#X restore 407 307 pd structure;
+#N canvas 157 92 871 502 init 0;
+#X msg 245 351 setK \$1;
+#X msg 427 318 setD \$1;
+#X floatatom 245 276 5 -10 200 0 - - -;
+#X floatatom 427 267 5 0 0 0 - - -;
+#X obj 245 325 / 10;
+#X obj 245 299 + 1;
+#X obj 427 291 / 10;
+#X obj 49 50 loadbang;
+#X floatatom 611 259 5 0 0 0 - - -;
+#X obj 611 283 / 10;
+#X msg 611 310 setD2 \$1;
+#X obj 47 201 s \$0-masse;
+#X obj 245 383 s \$0-lia;
+#X obj 217 28 loadbang;
+#X obj 269 110 sel 0 1 2 3;
+#X obj 268 71 r preset;
+#X obj 406 25 loadbang;
+#X obj 458 107 sel 0 1 2 3;
+#X obj 457 68 r preset;
+#X obj 593 22 loadbang;
+#X obj 645 104 sel 0 1 2 3;
+#X obj 644 65 r preset;
+#X msg 224 144 25;
+#X msg 414 141 7;
+#X msg 601 138 1;
+#X msg 275 143 1;
+#X msg 651 137 0.1;
+#X msg 463 140 0.2;
+#X msg 326 142 30;
+#X msg 514 139 13;
+#X msg 701 136 0.1;
+#X msg 371 142 10;
+#X msg 560 139 0.2;
+#X msg 747 136 0.2;
+#X msg 44 84 setXmin -3.8;
+#X msg 58 110 setXmax 3.8;
+#X msg 75 135 setYmin -3.8;
+#X msg 89 161 setYmax 3.8;
+#X connect 0 0 12 0;
+#X connect 1 0 12 0;
+#X connect 2 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 7 0 34 0;
+#X connect 7 0 35 0;
+#X connect 7 0 36 0;
+#X connect 7 0 37 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 13 0 22 0;
+#X connect 14 0 22 0;
+#X connect 14 1 25 0;
+#X connect 14 2 28 0;
+#X connect 14 3 31 0;
+#X connect 15 0 14 0;
+#X connect 16 0 23 0;
+#X connect 17 0 23 0;
+#X connect 17 1 27 0;
+#X connect 17 2 29 0;
+#X connect 17 3 32 0;
+#X connect 18 0 17 0;
+#X connect 19 0 24 0;
+#X connect 20 0 24 0;
+#X connect 20 1 26 0;
+#X connect 20 2 30 0;
+#X connect 20 3 33 0;
+#X connect 21 0 20 0;
+#X connect 22 0 2 0;
+#X connect 23 0 3 0;
+#X connect 24 0 8 0;
+#X connect 25 0 2 0;
+#X connect 26 0 8 0;
+#X connect 27 0 3 0;
+#X connect 28 0 2 0;
+#X connect 29 0 3 0;
+#X connect 30 0 8 0;
+#X connect 31 0 2 0;
+#X connect 32 0 3 0;
+#X connect 33 0 8 0;
+#X connect 34 0 11 0;
+#X connect 35 0 11 0;
+#X connect 36 0 11 0;
+#X connect 37 0 11 0;
+#X restore 407 280 pd init;
+#X obj 319 28 loadbang;
+#X msg 235 252 force2D 0 2;
+#X msg 180 278 force2D -2 0;
+#X msg 237 305 force2D 0 -2;
+#X msg 291 277 force2D 2 0;
+#X obj 32 48 metro 5;
+#X obj 67 100 s \$0-lia;
+#X obj 32 161 s \$0-masse;
+#X obj 319 57 t b b b;
+#X msg 370 82 reset;
+#X msg 345 107 resetL;
+#X msg 319 135 resetF;
+#X obj 235 337 s \$0-masse;
+#N canvas 894 558 454 304 gravite 0;
+#X obj 80 154 inlet;
+#X obj 79 241 outlet;
+#X obj 80 184 f;
+#X msg 81 213 force2D 0 \$1;
+#X obj 185 29 loadbang;
+#X obj 269 110 sel 0 1 2 3;
+#X obj 268 71 r preset;
+#X msg 224 144 -0.01;
+#X msg 275 143 -0.003;
+#X msg 325 142 -0.003;
+#X msg 386 142 -0.03;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 7 0;
+#X connect 5 0 7 0;
+#X connect 5 1 8 0;
+#X connect 5 2 9 0;
+#X connect 5 3 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 2 1;
+#X connect 8 0 2 1;
+#X connect 9 0 2 1;
+#X connect 10 0 2 1;
+#X restore 80 129 pd gravite;
+#X obj 451 118 vradio 15 1 0 4 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X obj 451 184 s preset;
+#X text 52 410 the diferent preset show diferents kind of comportement
+for the structure.;
+#X text 55 25 <- 1;
+#X text 174 213 <- 2;
+#X connect 0 0 15 0;
+#X connect 0 1 14 0;
+#X connect 0 1 21 0;
+#X connect 1 0 13 0;
+#X connect 2 0 16 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 8 0 16 0;
+#X connect 9 0 20 0;
+#X connect 10 0 20 0;
+#X connect 11 0 20 0;
+#X connect 12 0 20 0;
+#X connect 13 0 0 0;
+#X connect 16 0 19 0;
+#X connect 16 1 18 0;
+#X connect 16 2 17 0;
+#X connect 17 0 15 0;
+#X connect 18 0 14 0;
+#X connect 19 0 14 0;
+#X connect 21 0 15 0;
+#X connect 22 0 23 0;
diff --git a/exemples/12_exitation.pd b/exemples/12_exitation.pd
new file mode 100755
index 0000000..12cd023
--- /dev/null
+++ b/exemples/12_exitation.pd
@@ -0,0 +1,1838 @@
+#N canvas 120 -1 585 638 12;
+#X obj 32 75 t b b;
+#X obj 32 27 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 170 26 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 73 277 0 \, destroy;
+#X obj 39 305 gemwin;
+#X msg 39 252 reset \, create \, 1;
+#N canvas 46 337 1195 749 structure 0;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 25 279 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 77 344 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 119 216 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 114 378 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 141 350 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 197 282 pd lia;
+#N canvas 0 0 460 310 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -1 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 28 215 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -1 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 22 372 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.5 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 195 216 pd masse;
+#N canvas 0 0 458 308 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.5 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 194 379 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 365 279 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 417 344 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 459 216 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 454 378 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 481 350 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 537 282 pd lia;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 368 215 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 362 372 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.5 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 535 216 pd masse;
+#N canvas 0 0 458 308 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.5 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 534 378 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 735 282 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 787 347 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 829 219 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 824 381 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 851 353 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 907 285 pd lia;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 1 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 738 218 pd masse;
+#N canvas 0 0 456 306 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 1 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 730 378 pd masse;
+#N canvas 0 0 458 308 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 25 65 masse2D \$0-masse 50 1.5 0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 905 219 pd masse;
+#N canvas 0 0 460 310 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 1.5 0;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 904 381 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 233 344 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 291 215 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 290 378 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 311 340 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 612 342 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 641 219 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 649 376 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 676 348 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.75 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 123 96 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 64 150 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 164 153 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.25 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 297 94 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 238 148 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 334 153 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.25 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 482 100 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 422 154 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 523 157 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.75 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 668 106 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 609 160 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 709 163 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 1.25 1;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 851 110 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 792 164 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 892 167 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.75 -0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 96 503 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 49 434 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 149 437 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 -0.25 -0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 270 501 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 227 436 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 319 437 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 66 masse2D \$0-masse 50 0.25 -0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 455 507 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 407 438 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 508 441 pd lia;
+#N canvas 0 0 462 312 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 0.75 -0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 641 513 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 594 444 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 694 447 pd lia;
+#N canvas 0 0 464 314 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 1.25 -0.5;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 825 516 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 777 448 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 877 451 pd lia;
+#X obj 613 11 inlet;
+#N canvas 0 0 454 304 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 466 321 pd lia;
+#N canvas 0 0 456 306 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 425 248 pd lia;
+#N canvas 0 0 454 304 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 309 303 pd lia;
+#N canvas 0 0 454 304 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X restore 299 264 pd lia;
+#N canvas 787 26 460 310 masse 0;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 24 65 masse2D \$0-masse 50 2 0.25;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X restore 1037 291 pd masse;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 977 346 pd lia;
+#N canvas 0 0 452 302 lia 0;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$0-lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
+#X restore 970 258 pd lia;
+#X msg 613 35 position2D 0 \$1;
+#X obj 96 529 unpack s f f;
+#X obj 187 556 route -3.8;
+#X msg 262 582 0 200;
+#X obj 187 610 line~;
+#X obj 168 636 *~;
+#X obj 270 526 unpack s f f;
+#X obj 361 553 route -3.8;
+#X msg 436 579 0 200;
+#X obj 361 607 line~;
+#X obj 342 633 *~;
+#X obj 455 533 unpack s f f;
+#X obj 546 560 route -3.8;
+#X msg 621 586 0 200;
+#X obj 546 614 line~;
+#X obj 527 640 *~;
+#X obj 521 679 dac~;
+#X obj 642 539 unpack s f f;
+#X obj 733 566 route -3.8;
+#X msg 808 592 0 200;
+#X obj 733 620 line~;
+#X obj 714 646 *~;
+#X obj 826 542 unpack s f f;
+#X obj 917 569 route -3.8;
+#X msg 992 595 0 200;
+#X obj 917 623 line~;
+#X obj 898 649 *~;
+#X obj 292 559 osc~ 183;
+#X obj 477 566 osc~ 370;
+#X obj 664 572 osc~ 457;
+#X msg 362 581 0.1 5;
+#X msg 546 588 0.1 5;
+#X msg 733 594 0.1 5;
+#X obj 458 59 lia2D lia3 0 0 0.08 0;
+#X obj 118 562 osc~ 805;
+#X msg 187 584 0.1 5;
+#X msg 915 596 0.6 5;
+#X obj 845 570 osc~ 105;
+#X connect 0 0 6 0;
+#X connect 0 1 7 0;
+#X connect 1 0 7 0;
+#X connect 1 1 8 0;
+#X connect 2 0 6 0;
+#X connect 2 1 8 0;
+#X connect 3 0 7 0;
+#X connect 3 1 9 0;
+#X connect 4 0 6 0;
+#X connect 4 1 9 0;
+#X connect 5 0 8 0;
+#X connect 5 1 9 0;
+#X connect 6 0 0 0;
+#X connect 6 0 2 0;
+#X connect 6 0 4 0;
+#X connect 6 0 39 0;
+#X connect 6 0 70 0;
+#X connect 7 0 0 1;
+#X connect 7 0 3 0;
+#X connect 7 0 1 0;
+#X connect 7 0 54 0;
+#X connect 7 0 69 0;
+#X connect 8 0 5 0;
+#X connect 8 0 2 1;
+#X connect 8 0 1 1;
+#X connect 8 0 33 0;
+#X connect 8 0 31 0;
+#X connect 8 0 40 1;
+#X connect 8 0 42 0;
+#X connect 8 0 72 0;
+#X connect 9 0 5 1;
+#X connect 9 0 3 1;
+#X connect 9 0 4 1;
+#X connect 9 0 30 0;
+#X connect 9 0 32 0;
+#X connect 9 0 55 1;
+#X connect 9 0 57 0;
+#X connect 9 0 71 0;
+#X connect 10 0 16 0;
+#X connect 10 1 17 0;
+#X connect 11 0 17 0;
+#X connect 11 1 18 0;
+#X connect 12 0 16 0;
+#X connect 12 1 18 0;
+#X connect 13 0 17 0;
+#X connect 13 1 19 0;
+#X connect 14 0 16 0;
+#X connect 14 1 19 0;
+#X connect 15 0 18 0;
+#X connect 15 1 19 0;
+#X connect 16 0 10 0;
+#X connect 16 0 12 0;
+#X connect 16 0 14 0;
+#X connect 16 0 30 1;
+#X connect 16 0 31 1;
+#X connect 16 0 43 1;
+#X connect 16 0 45 0;
+#X connect 16 0 109 0;
+#X connect 17 0 10 1;
+#X connect 17 0 13 0;
+#X connect 17 0 11 0;
+#X connect 17 0 32 1;
+#X connect 17 0 33 1;
+#X connect 17 0 58 1;
+#X connect 17 0 60 0;
+#X connect 18 0 15 0;
+#X connect 18 0 12 1;
+#X connect 18 0 11 1;
+#X connect 18 0 37 0;
+#X connect 18 0 35 0;
+#X connect 18 0 46 1;
+#X connect 18 0 48 0;
+#X connect 19 0 15 1;
+#X connect 19 0 13 1;
+#X connect 19 0 14 1;
+#X connect 19 0 34 0;
+#X connect 19 0 36 0;
+#X connect 19 0 61 1;
+#X connect 19 0 63 0;
+#X connect 20 0 26 0;
+#X connect 20 1 27 0;
+#X connect 21 0 27 0;
+#X connect 21 1 28 0;
+#X connect 22 0 26 0;
+#X connect 22 1 28 0;
+#X connect 23 0 27 0;
+#X connect 23 1 29 0;
+#X connect 24 0 26 0;
+#X connect 24 1 29 0;
+#X connect 25 0 28 0;
+#X connect 25 1 29 0;
+#X connect 26 0 20 0;
+#X connect 26 0 22 0;
+#X connect 26 0 24 0;
+#X connect 26 0 34 1;
+#X connect 26 0 35 1;
+#X connect 26 0 49 1;
+#X connect 26 0 51 0;
+#X connect 26 0 71 1;
+#X connect 27 0 20 1;
+#X connect 27 0 23 0;
+#X connect 27 0 21 0;
+#X connect 27 0 36 1;
+#X connect 27 0 37 1;
+#X connect 27 0 64 1;
+#X connect 27 0 66 0;
+#X connect 27 0 72 1;
+#X connect 28 0 25 0;
+#X connect 28 0 22 1;
+#X connect 28 0 21 1;
+#X connect 28 0 52 1;
+#X connect 28 0 69 1;
+#X connect 28 0 75 0;
+#X connect 29 0 25 1;
+#X connect 29 0 23 1;
+#X connect 29 0 24 1;
+#X connect 29 0 67 1;
+#X connect 29 0 70 1;
+#X connect 29 0 74 0;
+#X connect 30 0 9 0;
+#X connect 30 1 16 0;
+#X connect 31 0 8 0;
+#X connect 31 1 16 0;
+#X connect 32 0 9 0;
+#X connect 32 1 17 0;
+#X connect 33 0 8 0;
+#X connect 33 1 17 0;
+#X connect 34 0 19 0;
+#X connect 34 1 26 0;
+#X connect 35 0 18 0;
+#X connect 35 1 26 0;
+#X connect 36 0 19 0;
+#X connect 36 1 27 0;
+#X connect 37 0 18 0;
+#X connect 37 1 27 0;
+#X connect 38 0 39 1;
+#X connect 38 0 40 0;
+#X connect 39 0 6 0;
+#X connect 39 1 38 0;
+#X connect 40 0 38 0;
+#X connect 40 1 8 0;
+#X connect 41 0 42 1;
+#X connect 41 0 43 0;
+#X connect 42 0 8 0;
+#X connect 42 1 41 0;
+#X connect 43 0 41 0;
+#X connect 43 1 16 0;
+#X connect 44 0 45 1;
+#X connect 44 0 46 0;
+#X connect 45 0 16 0;
+#X connect 45 1 44 0;
+#X connect 46 0 44 0;
+#X connect 46 1 18 0;
+#X connect 47 0 48 1;
+#X connect 47 0 49 0;
+#X connect 48 0 18 0;
+#X connect 48 1 47 0;
+#X connect 49 0 47 0;
+#X connect 49 1 26 0;
+#X connect 50 0 51 1;
+#X connect 50 0 52 0;
+#X connect 51 0 26 0;
+#X connect 51 1 50 0;
+#X connect 52 0 50 0;
+#X connect 52 1 28 0;
+#X connect 53 0 54 1;
+#X connect 53 0 55 0;
+#X connect 53 0 77 0;
+#X connect 54 0 7 0;
+#X connect 54 1 53 0;
+#X connect 55 0 53 0;
+#X connect 55 1 9 0;
+#X connect 56 0 57 1;
+#X connect 56 0 58 0;
+#X connect 56 0 82 0;
+#X connect 57 0 9 0;
+#X connect 57 1 56 0;
+#X connect 58 0 56 0;
+#X connect 58 1 17 0;
+#X connect 59 0 60 1;
+#X connect 59 0 61 0;
+#X connect 59 0 87 0;
+#X connect 60 0 17 0;
+#X connect 60 1 59 0;
+#X connect 61 0 59 0;
+#X connect 61 1 19 0;
+#X connect 62 0 63 1;
+#X connect 62 0 64 0;
+#X connect 62 0 93 0;
+#X connect 63 0 19 0;
+#X connect 63 1 62 0;
+#X connect 64 0 62 0;
+#X connect 64 1 27 0;
+#X connect 65 0 66 1;
+#X connect 65 0 67 0;
+#X connect 65 0 98 0;
+#X connect 66 0 27 0;
+#X connect 66 1 65 0;
+#X connect 67 0 65 0;
+#X connect 67 1 29 0;
+#X connect 68 0 76 0;
+#X connect 69 0 7 0;
+#X connect 69 1 28 0;
+#X connect 70 0 6 0;
+#X connect 70 1 29 0;
+#X connect 71 0 9 0;
+#X connect 71 1 26 0;
+#X connect 72 0 8 0;
+#X connect 72 1 27 0;
+#X connect 73 0 75 1;
+#X connect 73 0 74 1;
+#X connect 74 0 29 0;
+#X connect 74 1 73 0;
+#X connect 75 0 28 0;
+#X connect 75 1 73 0;
+#X connect 76 0 109 1;
+#X connect 77 2 78 0;
+#X connect 78 0 111 0;
+#X connect 78 1 79 0;
+#X connect 79 0 80 0;
+#X connect 80 0 81 1;
+#X connect 81 0 92 0;
+#X connect 81 0 92 1;
+#X connect 82 2 83 0;
+#X connect 83 0 106 0;
+#X connect 83 1 84 0;
+#X connect 84 0 85 0;
+#X connect 85 0 86 1;
+#X connect 86 0 92 0;
+#X connect 86 0 92 1;
+#X connect 87 2 88 0;
+#X connect 88 0 107 0;
+#X connect 88 1 89 0;
+#X connect 89 0 90 0;
+#X connect 90 0 91 1;
+#X connect 91 0 92 0;
+#X connect 91 0 92 1;
+#X connect 93 2 94 0;
+#X connect 94 0 108 0;
+#X connect 94 1 95 0;
+#X connect 95 0 96 0;
+#X connect 96 0 97 1;
+#X connect 97 0 92 0;
+#X connect 98 2 99 0;
+#X connect 99 0 112 0;
+#X connect 99 1 100 0;
+#X connect 100 0 101 0;
+#X connect 101 0 102 1;
+#X connect 102 0 92 1;
+#X connect 102 0 92 0;
+#X connect 103 0 86 0;
+#X connect 104 0 91 0;
+#X connect 105 0 97 0;
+#X connect 106 0 85 0;
+#X connect 107 0 90 0;
+#X connect 108 0 96 0;
+#X connect 109 0 16 0;
+#X connect 110 0 81 0;
+#X connect 111 0 80 0;
+#X connect 112 0 101 0;
+#X connect 113 0 102 0;
+#X restore 313 258 pd structure;
+#N canvas 137 36 733 328 init 0;
+#X msg 253 181 setK \$1;
+#X msg 363 159 setD \$1;
+#X msg 544 129 setM \$1;
+#X floatatom 253 106 5 -10 200 0 - - -;
+#X floatatom 363 108 5 0 0 0 - - -;
+#X floatatom 544 106 5 0 0 0 - - -;
+#X obj 544 157 s masse;
+#X obj 253 155 / 10;
+#X obj 253 129 + 1;
+#X obj 363 132 / 10;
+#X obj 42 50 loadbang;
+#X floatatom 450 105 5 0 0 0 - - -;
+#X obj 450 129 / 10;
+#X msg 450 156 setD2 \$1;
+#X obj 44 201 s \$0-masse;
+#X obj 253 213 s \$0-lia;
+#X msg 543 83 12;
+#X msg 254 80 25;
+#X msg 361 78 7;
+#X msg 451 80 1;
+#X obj 331 30 loadbang;
+#X msg 44 84 setXmin -3.8;
+#X msg 57 109 setXmax 3.8;
+#X msg 75 133 setYmin -3.8;
+#X msg 88 159 setYmax 3.8;
+#X connect 0 0 15 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 8 0;
+#X connect 4 0 9 0;
+#X connect 5 0 2 0;
+#X connect 7 0 0 0;
+#X connect 8 0 7 0;
+#X connect 9 0 1 0;
+#X connect 10 0 21 0;
+#X connect 10 0 22 0;
+#X connect 10 0 23 0;
+#X connect 10 0 24 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 15 0;
+#X connect 16 0 5 0;
+#X connect 17 0 3 0;
+#X connect 18 0 4 0;
+#X connect 19 0 11 0;
+#X connect 20 0 17 0;
+#X connect 20 0 18 0;
+#X connect 20 0 19 0;
+#X connect 20 0 16 0;
+#X connect 21 0 14 0;
+#X connect 22 0 14 0;
+#X connect 23 0 14 0;
+#X connect 24 0 14 0;
+#X restore 308 37 pd init;
+#X obj 191 25 loadbang;
+#X obj 32 48 metro 5;
+#X obj 69 105 s \$0-lia;
+#X obj 32 161 s \$0-masse;
+#X obj 191 54 t b b b;
+#X msg 242 79 reset;
+#X msg 216 104 resetL;
+#X msg 191 132 resetF;
+#N canvas 894 558 454 304 gravite 0;
+#X obj 80 154 inlet;
+#X obj 79 241 outlet;
+#X obj 80 184 f;
+#X msg 81 213 force2D 0 \$1;
+#X obj 185 29 loadbang;
+#X obj 269 110 sel 0 1 2 3;
+#X obj 268 71 r preset;
+#X msg 224 144 -0.01;
+#X msg 275 143 -0.003;
+#X msg 325 142 -0.003;
+#X msg 386 142 -0.03;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 7 0;
+#X connect 5 0 7 0;
+#X connect 5 1 8 0;
+#X connect 5 2 9 0;
+#X connect 5 3 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 2 1;
+#X connect 8 0 2 1;
+#X connect 9 0 2 1;
+#X connect 10 0 2 1;
+#X restore 80 129 pd gravite;
+#X obj 41 189 s lfo-m;
+#X obj 127 159 s lfo-l;
+#X obj 140 185 s lia3;
+#X obj 268 260 / 2;
+#X obj 268 284 + 64;
+#X obj 268 309 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 10968 1;
+#N canvas 931 259 458 308 MP_lfo 0;
+#X obj 84 126 lia lfo-l 0 1 0 0;
+#X obj 67 89 masse lfo-m 1000 100;
+#X obj 60 164 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 0 0;
+#X connect 1 0 2 0;
+#X restore 269 234 pd MP_lfo;
+#X obj 328 394 s \$0-masse;
+#X msg 329 346 force2D -1 0;
+#X msg 430 346 force2D 1 0;
+#X msg 380 371 force2D 0 -1;
+#X msg 387 321 force2D 0 1;
+#X text 33 547 a "a way liaison" is a liaison wich can send energy
+from masse 1 to 2 \, but not from masse 2 to 1 This is absolutly not
+physical (as it's act as creation energy) \, but usefull for exiting
+a system. It can be made if the lia output (force output) is not conectet
+to the masse wich should not receive energy from the lia.;
+#X text 34 485 a single structure (mass and link) is oscilating without
+damping (so \, it's a sinus LFO). a "one-way liaison" link it to the
+main structure. So the main structure is moving.;
+#X text 33 662 You can also make a muscle while changing a link lenght.
+;
+#X obj 265 140 s \$0-masse;
+#X obj 265 165 s lfo-m;
+#X msg 34 384 \; dsp 1 \;;
+#X msg 99 383 \; dsp 0 \;;
+#X text 32 695 sound is generated with masses position;
+#X text 52 26 <- 1;
+#X text 178 251 <- 2;
+#X connect 0 0 11 0;
+#X connect 0 0 17 0;
+#X connect 0 1 10 0;
+#X connect 0 1 16 0;
+#X connect 0 1 18 0;
+#X connect 0 1 19 0;
+#X connect 1 0 9 0;
+#X connect 2 0 12 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 8 0 12 0;
+#X connect 9 0 0 0;
+#X connect 12 0 15 0;
+#X connect 12 1 14 0;
+#X connect 12 2 13 0;
+#X connect 13 0 32 0;
+#X connect 13 0 33 0;
+#X connect 14 0 10 0;
+#X connect 15 0 10 0;
+#X connect 15 0 18 0;
+#X connect 16 0 11 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 23 0 20 0;
+#X connect 23 0 6 0;
+#X connect 25 0 24 0;
+#X connect 26 0 24 0;
+#X connect 27 0 24 0;
+#X connect 28 0 24 0;
diff --git a/exemples/13_plane3D.pd b/exemples/13_plane3D.pd
new file mode 100755
index 0000000..866c02b
--- /dev/null
+++ b/exemples/13_plane3D.pd
@@ -0,0 +1,460 @@
+#N canvas 124 6 758 583 12;
+#X obj 28 79 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 99 184 s lia;
+#X obj 28 183 s masse;
+#X obj 49 413 s masse;
+#X msg 397 175 setK \$1;
+#X msg 618 127 setM \$1;
+#X obj 397 202 s lia;
+#X obj 618 155 s masse;
+#X obj 397 149 / 10;
+#X obj 397 123 + 1;
+#X obj 69 298 gemwin;
+#X msg 88 269 0 \, destroy;
+#X floatatom 397 101 5 0 0 0 - - -;
+#X floatatom 534 105 5 0 0 0 - - -;
+#X floatatom 618 104 5 0 0 0 - - -;
+#X obj 28 100 metro 10;
+#X obj 28 124 t b b;
+#X obj 256 111 world_light;
+#X obj 256 83 gemhead;
+#X text 199 154 <- gravity simulation;
+#X obj 559 355 s gemhead;
+#X obj 559 216 gemhead;
+#X floatatom 581 246 5 0 0 0 - - -;
+#X floatatom 631 247 5 0 0 0 - - -;
+#X floatatom 681 247 5 0 0 0 - - -;
+#X msg 534 128 setD2 \$1;
+#X msg 63 152 force3D 0 -8 0;
+#X floatatom 450 106 5 0 0 0 - - -;
+#X msg 450 129 setD \$1;
+#X obj 329 442 gemLia 0 1 0.1 0.1;
+#X obj 632 442 gemLia 0 1 0.1 0.1;
+#X obj 934 443 gemLia 0 1 0.1 0.1;
+#X obj 1237 443 gemLia 0 1 0.1 0.1;
+#X obj 327 504 gemLia 0 1 0.1 0.1;
+#X obj 176 472 gemLia 0 1 0.1 0.1;
+#X obj 631 504 gemLia 0 1 0.1 0.1;
+#X obj 479 472 gemLia 0 1 0.1 0.1;
+#X obj 933 505 gemLia 0 1 0.1 0.1;
+#X obj 781 473 gemLia 0 1 0.1 0.1;
+#X obj 1236 505 gemLia 0 1 0.1 0.1;
+#X obj 1084 473 gemLia 0 1 0.1 0.1;
+#X obj 1542 504 gemLia 0 1 0.1 0.1;
+#X obj 1390 472 gemLia 0 1 0.1 0.1;
+#X obj 1693 472 gemLia 0 1 0.1 0.1;
+#X obj 327 563 gemLia 0 1 0.1 0.1;
+#X obj 175 531 gemLia 0 1 0.1 0.1;
+#X obj 630 563 gemLia 0 1 0.1 0.1;
+#X obj 478 531 gemLia 0 1 0.1 0.1;
+#X obj 932 564 gemLia 0 1 0.1 0.1;
+#X obj 780 532 gemLia 0 1 0.1 0.1;
+#X obj 1235 564 gemLia 0 1 0.1 0.1;
+#X obj 1083 532 gemLia 0 1 0.1 0.1;
+#X obj 326 625 gemLia 0 1 0.1 0.1;
+#X obj 174 593 gemLia 0 1 0.1 0.1;
+#X obj 629 625 gemLia 0 1 0.1 0.1;
+#X obj 477 593 gemLia 0 1 0.1 0.1;
+#X obj 931 626 gemLia 0 1 0.1 0.1;
+#X obj 779 594 gemLia 0 1 0.1 0.1;
+#X obj 1234 626 gemLia 0 1 0.1 0.1;
+#X obj 1082 594 gemLia 0 1 0.1 0.1;
+#X obj 1541 563 gemLia 0 1 0.1 0.1;
+#X obj 1389 531 gemLia 0 1 0.1 0.1;
+#X obj 1692 531 gemLia 0 1 0.1 0.1;
+#X obj 1540 625 gemLia 0 1 0.1 0.1;
+#X obj 1388 593 gemLia 0 1 0.1 0.1;
+#X obj 1691 593 gemLia 0 1 0.1 0.1;
+#X obj 1543 442 gemLia 0 1 0.1 0.1;
+#X obj 325 687 gemLia 0 1 0.1 0.1;
+#X obj 173 655 gemLia 0 1 0.1 0.1;
+#X obj 628 687 gemLia 0 1 0.1 0.1;
+#X obj 476 655 gemLia 0 1 0.1 0.1;
+#X obj 930 688 gemLia 0 1 0.1 0.1;
+#X obj 1233 688 gemLia 0 1 0.1 0.1;
+#X obj 1081 656 gemLia 0 1 0.1 0.1;
+#X obj 323 749 gemLia 0 1 0.1 0.1;
+#X obj 172 717 gemLia 0 1 0.1 0.1;
+#X obj 627 749 gemLia 0 1 0.1 0.1;
+#X obj 475 717 gemLia 0 1 0.1 0.1;
+#X obj 929 750 gemLia 0 1 0.1 0.1;
+#X obj 777 718 gemLia 0 1 0.1 0.1;
+#X obj 1232 750 gemLia 0 1 0.1 0.1;
+#X obj 1080 718 gemLia 0 1 0.1 0.1;
+#X obj 1387 655 gemLia 0 1 0.1 0.1;
+#X obj 1690 655 gemLia 0 1 0.1 0.1;
+#X obj 1538 749 gemLia 0 1 0.1 0.1;
+#X obj 1386 717 gemLia 0 1 0.1 0.1;
+#X obj 1689 717 gemLia 0 1 0.1 0.1;
+#X obj 778 656 gemLia 0 1 0.1 0.1;
+#X obj 1539 687 gemLia 0 1 0.1 0.1;
+#X obj 25 592 gemMasse2 10 0 3 0;
+#X obj 836 154 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 857 153 loadbang;
+#X obj 857 182 t b b b;
+#X msg 908 207 reset;
+#X msg 883 232 resetL;
+#X msg 857 260 resetF;
+#X obj 857 296 s lia;
+#X obj 910 308 s masse;
+#X obj 902 340 s masse2;
+#X obj 329 472 gemMasse 10 1 1 0;
+#X obj 325 532 gemMasse 10 1 2 0;
+#X obj 327 593 gemMasse 10 1 3 0;
+#X obj 326 654 gemMasse 10 1 4 0;
+#X obj 324 717 gemMasse 10 1 5 0;
+#X obj 633 472 gemMasse 10 2 1 0;
+#X obj 630 531 gemMasse 10 2 2 0;
+#X obj 629 593 gemMasse 10 2 3 0;
+#X obj 629 656 gemMasse 10 2 4 0;
+#X obj 627 717 gemMasse 10 2 5 0;
+#X obj 933 473 gemMasse 10 3 1 0;
+#X obj 932 532 gemMasse 10 3 2 0;
+#X obj 931 594 gemMasse 10 3 3 0;
+#X obj 930 656 gemMasse 10 3 4 0;
+#X obj 929 718 gemMasse 10 3 5 0;
+#X obj 1236 473 gemMasse 10 4 1 0;
+#X obj 1235 532 gemMasse 10 4 2 0;
+#X obj 1234 594 gemMasse 10 4 3 0;
+#X obj 1234 656 gemMasse 10 4 4 0;
+#X obj 1232 718 gemMasse 10 4 5 0;
+#X obj 1543 473 gemMasse 10 5 1 0;
+#X obj 1542 531 gemMasse 10 5 2 0;
+#X obj 1541 593 gemMasse 10 5 3 0;
+#X obj 1540 655 gemMasse 10 5 4 0;
+#X obj 1538 718 gemMasse 10 5 5 0;
+#X obj 329 410 gemMasse2 10 1 0 0;
+#X obj 632 410 gemMasse2 10 2 0 0;
+#X obj 934 411 gemMasse2 10 3 0 0;
+#X obj 1237 411 gemMasse2 10 4 0 0;
+#X obj 1543 410 gemMasse2 10 5 0 0;
+#X obj 26 471 gemMasse2 10 0 1 0;
+#X obj 1846 472 gemMasse2 10 6 1 0;
+#X obj 1844 531 gemMasse2 10 6 2 0;
+#X obj 25 530 gemMasse2 10 0 2 0;
+#X obj 23 654 gemMasse2 10 0 4 0;
+#X obj 22 716 gemMasse2 10 0 5 0;
+#X obj 321 777 gemMasse2 10 1 6 0;
+#X obj 626 776 gemMasse2 10 2 6 0;
+#X obj 928 777 gemMasse2 10 3 6 0;
+#X obj 1231 777 gemMasse2 10 4 6 0;
+#X obj 1537 776 gemMasse2 10 5 6 0;
+#X obj 1844 594 gemMasse2 10 6 3 0;
+#X obj 1845 656 gemMasse2 10 6 4 0;
+#X obj 1841 717 gemMasse2 10 6 5 0;
+#X msg 397 77 2;
+#X msg 618 80 10;
+#X msg 450 80 0.1;
+#X msg 535 80 0.03;
+#X msg 49 342 force3D 0 1 0;
+#X msg 60 364 force3D 0 0 1;
+#X msg 67 388 force3D 1 0 0;
+#X floatatom 613 298 5 0 0 0 - - -;
+#X floatatom 663 299 5 0 0 0 - - -;
+#X floatatom 713 299 5 0 0 0 - - -;
+#X obj 559 328 translateXYZ -2.8 0 0;
+#X obj 559 272 rotateXYZ -40 0 0;
+#X msg 210 352 force3D 0 3 0;
+#X msg 203 375 force3D 0 0 3;
+#X msg 195 398 force3D 3 0 0;
+#X obj 505 51 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 69 241 reset \, lighting 1 \, create \, 1;
+#X text 409 20 This is a plane with 3D masses.;
+#X text 33 814 masses are used in the border (gemMasse2) for telling
+the link there position. they do not receive bang information \, so
+they will not move.;
+#X text 53 75 <- 1;
+#X text 308 242 <- 2;
+#X connect 0 0 15 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 13 0 25 0;
+#X connect 14 0 5 0;
+#X connect 15 0 16 0;
+#X connect 16 0 2 0;
+#X connect 16 1 1 0;
+#X connect 16 1 26 0;
+#X connect 18 0 17 0;
+#X connect 21 0 154 0;
+#X connect 22 0 154 1;
+#X connect 23 0 154 2;
+#X connect 24 0 154 3;
+#X connect 25 0 6 0;
+#X connect 27 0 28 0;
+#X connect 28 0 6 0;
+#X connect 29 0 124 0;
+#X connect 29 1 99 0;
+#X connect 30 0 125 0;
+#X connect 30 1 104 0;
+#X connect 31 0 126 0;
+#X connect 31 1 109 0;
+#X connect 32 0 127 0;
+#X connect 32 1 114 0;
+#X connect 33 0 99 0;
+#X connect 33 1 100 0;
+#X connect 34 0 129 0;
+#X connect 34 1 99 0;
+#X connect 35 0 104 0;
+#X connect 35 1 105 0;
+#X connect 36 0 99 0;
+#X connect 36 1 104 0;
+#X connect 37 0 109 0;
+#X connect 37 1 110 0;
+#X connect 38 0 104 0;
+#X connect 38 1 109 0;
+#X connect 39 0 114 0;
+#X connect 39 1 115 0;
+#X connect 40 0 109 0;
+#X connect 40 1 114 0;
+#X connect 41 0 119 0;
+#X connect 41 1 120 0;
+#X connect 42 0 114 0;
+#X connect 42 1 119 0;
+#X connect 43 0 119 0;
+#X connect 43 1 130 0;
+#X connect 44 0 100 0;
+#X connect 44 1 101 0;
+#X connect 45 0 132 0;
+#X connect 45 1 100 0;
+#X connect 46 0 105 0;
+#X connect 46 1 106 0;
+#X connect 47 0 100 0;
+#X connect 47 1 105 0;
+#X connect 48 0 110 0;
+#X connect 48 1 111 0;
+#X connect 49 0 105 0;
+#X connect 49 1 110 0;
+#X connect 50 0 115 0;
+#X connect 50 1 116 0;
+#X connect 51 0 110 0;
+#X connect 51 1 115 0;
+#X connect 52 0 101 0;
+#X connect 52 1 102 0;
+#X connect 53 0 89 0;
+#X connect 53 1 101 0;
+#X connect 54 0 106 0;
+#X connect 54 1 107 0;
+#X connect 55 0 101 0;
+#X connect 55 1 106 0;
+#X connect 56 0 111 0;
+#X connect 56 1 112 0;
+#X connect 57 0 106 0;
+#X connect 57 1 111 0;
+#X connect 58 0 116 0;
+#X connect 58 1 117 0;
+#X connect 59 0 111 0;
+#X connect 59 1 116 0;
+#X connect 60 0 120 0;
+#X connect 60 1 121 0;
+#X connect 61 0 115 0;
+#X connect 61 1 120 0;
+#X connect 62 0 120 0;
+#X connect 62 1 131 0;
+#X connect 63 0 121 0;
+#X connect 63 1 122 0;
+#X connect 64 0 116 0;
+#X connect 64 1 121 0;
+#X connect 65 0 121 0;
+#X connect 65 1 140 0;
+#X connect 66 0 128 0;
+#X connect 66 1 119 0;
+#X connect 67 0 102 0;
+#X connect 67 1 103 0;
+#X connect 68 0 133 0;
+#X connect 68 1 102 0;
+#X connect 69 0 107 0;
+#X connect 69 1 108 0;
+#X connect 70 0 102 0;
+#X connect 70 1 107 0;
+#X connect 71 0 112 0;
+#X connect 71 1 113 0;
+#X connect 72 0 117 0;
+#X connect 72 1 118 0;
+#X connect 73 0 112 0;
+#X connect 73 1 117 0;
+#X connect 74 0 103 0;
+#X connect 74 1 135 0;
+#X connect 75 0 134 0;
+#X connect 75 1 103 0;
+#X connect 76 0 108 0;
+#X connect 76 1 136 0;
+#X connect 77 0 103 0;
+#X connect 77 1 108 0;
+#X connect 78 0 113 0;
+#X connect 78 1 137 0;
+#X connect 79 0 108 0;
+#X connect 79 1 113 0;
+#X connect 80 0 118 0;
+#X connect 80 1 138 0;
+#X connect 81 0 113 0;
+#X connect 81 1 118 0;
+#X connect 82 0 117 0;
+#X connect 82 1 122 0;
+#X connect 83 0 122 0;
+#X connect 83 1 141 0;
+#X connect 84 0 123 0;
+#X connect 84 1 139 0;
+#X connect 85 0 118 0;
+#X connect 85 1 123 0;
+#X connect 86 0 123 0;
+#X connect 86 1 142 0;
+#X connect 87 0 107 0;
+#X connect 87 1 112 0;
+#X connect 88 0 122 0;
+#X connect 88 1 123 0;
+#X connect 89 0 53 0;
+#X connect 90 0 92 0;
+#X connect 91 0 92 0;
+#X connect 92 0 95 0;
+#X connect 92 1 94 0;
+#X connect 92 2 93 0;
+#X connect 93 0 97 0;
+#X connect 93 0 98 0;
+#X connect 94 0 96 0;
+#X connect 95 0 96 0;
+#X connect 99 0 33 0;
+#X connect 99 0 34 1;
+#X connect 99 0 36 0;
+#X connect 99 0 29 1;
+#X connect 100 0 44 0;
+#X connect 100 0 45 1;
+#X connect 100 0 47 0;
+#X connect 100 0 33 1;
+#X connect 101 0 52 0;
+#X connect 101 0 53 1;
+#X connect 101 0 55 0;
+#X connect 101 0 44 1;
+#X connect 102 0 67 0;
+#X connect 102 0 68 1;
+#X connect 102 0 70 0;
+#X connect 102 0 52 1;
+#X connect 103 0 74 0;
+#X connect 103 0 75 1;
+#X connect 103 0 77 0;
+#X connect 103 0 67 1;
+#X connect 104 0 35 0;
+#X connect 104 0 36 1;
+#X connect 104 0 38 0;
+#X connect 104 0 30 1;
+#X connect 105 0 46 0;
+#X connect 105 0 47 1;
+#X connect 105 0 49 0;
+#X connect 105 0 35 1;
+#X connect 106 0 54 0;
+#X connect 106 0 55 1;
+#X connect 106 0 57 0;
+#X connect 106 0 46 1;
+#X connect 107 0 69 0;
+#X connect 107 0 70 1;
+#X connect 107 0 87 0;
+#X connect 107 0 54 1;
+#X connect 108 0 76 0;
+#X connect 108 0 77 1;
+#X connect 108 0 79 0;
+#X connect 108 0 69 1;
+#X connect 109 0 37 0;
+#X connect 109 0 38 1;
+#X connect 109 0 40 0;
+#X connect 109 0 31 1;
+#X connect 110 0 48 0;
+#X connect 110 0 49 1;
+#X connect 110 0 51 0;
+#X connect 110 0 37 1;
+#X connect 111 0 56 0;
+#X connect 111 0 57 1;
+#X connect 111 0 59 0;
+#X connect 111 0 48 1;
+#X connect 112 0 71 0;
+#X connect 112 0 73 0;
+#X connect 112 0 87 1;
+#X connect 112 0 56 1;
+#X connect 113 0 78 0;
+#X connect 113 0 79 1;
+#X connect 113 0 81 0;
+#X connect 113 0 71 1;
+#X connect 114 0 39 0;
+#X connect 114 0 40 1;
+#X connect 114 0 32 1;
+#X connect 114 0 42 0;
+#X connect 115 0 50 0;
+#X connect 115 0 51 1;
+#X connect 115 0 61 0;
+#X connect 115 0 39 1;
+#X connect 116 0 58 0;
+#X connect 116 0 59 1;
+#X connect 116 0 50 1;
+#X connect 116 0 64 0;
+#X connect 117 0 72 0;
+#X connect 117 0 73 1;
+#X connect 117 0 82 0;
+#X connect 117 0 58 1;
+#X connect 118 0 80 0;
+#X connect 118 0 81 1;
+#X connect 118 0 72 1;
+#X connect 118 0 85 0;
+#X connect 119 0 41 0;
+#X connect 119 0 42 1;
+#X connect 119 0 43 0;
+#X connect 119 0 66 1;
+#X connect 120 0 60 0;
+#X connect 120 0 61 1;
+#X connect 120 0 62 0;
+#X connect 120 0 41 1;
+#X connect 121 0 63 0;
+#X connect 121 0 64 1;
+#X connect 121 0 65 0;
+#X connect 121 0 60 1;
+#X connect 122 0 82 1;
+#X connect 122 0 83 0;
+#X connect 122 0 88 0;
+#X connect 122 0 63 1;
+#X connect 123 0 84 0;
+#X connect 123 0 85 1;
+#X connect 123 0 86 0;
+#X connect 123 0 88 1;
+#X connect 124 0 29 0;
+#X connect 125 0 30 0;
+#X connect 126 0 31 0;
+#X connect 127 0 32 0;
+#X connect 128 0 66 0;
+#X connect 129 0 34 0;
+#X connect 130 0 43 1;
+#X connect 131 0 62 1;
+#X connect 132 0 45 0;
+#X connect 133 0 68 0;
+#X connect 134 0 75 0;
+#X connect 135 0 74 1;
+#X connect 136 0 76 1;
+#X connect 137 0 78 1;
+#X connect 138 0 80 1;
+#X connect 139 0 84 1;
+#X connect 140 0 65 1;
+#X connect 141 0 83 1;
+#X connect 142 0 86 1;
+#X connect 143 0 12 0;
+#X connect 144 0 14 0;
+#X connect 145 0 27 0;
+#X connect 146 0 13 0;
+#X connect 147 0 3 0;
+#X connect 148 0 3 0;
+#X connect 149 0 3 0;
+#X connect 150 0 153 1;
+#X connect 151 0 153 2;
+#X connect 152 0 153 3;
+#X connect 153 0 20 0;
+#X connect 154 0 153 0;
+#X connect 155 0 105 0;
+#X connect 156 0 105 0;
+#X connect 157 0 105 0;
+#X connect 158 0 145 0;
+#X connect 158 0 143 0;
+#X connect 158 0 146 0;
+#X connect 158 0 144 0;
+#X connect 159 0 10 0;
diff --git a/exemples/14_MP_curve3d.pd b/exemples/14_MP_curve3d.pd
new file mode 100755
index 0000000..59354ac
--- /dev/null
+++ b/exemples/14_MP_curve3d.pd
@@ -0,0 +1,471 @@
+#N canvas 68 208 763 458 12;
+#X obj 23 83 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 94 155 s lia;
+#X obj 23 154 s masse;
+#X obj 48 321 s masse;
+#X msg 801 142 setK \$1;
+#X msg 798 266 setM \$1;
+#X obj 801 169 s lia;
+#X obj 798 294 s masse;
+#X obj 801 116 / 10;
+#X obj 801 90 + 1;
+#X msg 306 107 0 \, destroy;
+#X floatatom 801 68 5 0 0 0 - - -;
+#X floatatom 938 72 5 0 0 0 - - -;
+#X floatatom 798 243 5 0 0 0 - - -;
+#X obj 184 63 loadbang;
+#X obj 23 104 metro 10;
+#X obj 23 128 t b b;
+#X msg 320 137 lighting 1;
+#X obj 581 283 world_light;
+#X obj 581 255 gemhead;
+#X obj 567 185 s gemhead;
+#X obj 567 32 gemhead;
+#X floatatom 589 62 5 0 0 0 - - -;
+#X floatatom 639 63 5 0 0 0 - - -;
+#X floatatom 689 63 5 0 0 0 - - -;
+#X msg 938 95 setD2 \$1;
+#X floatatom 854 73 5 0 0 0 - - -;
+#X msg 854 96 setD \$1;
+#X obj 156 69 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 156 89 t b b b;
+#X msg 207 114 reset;
+#X msg 182 139 resetL;
+#X msg 156 167 resetF;
+#X obj 156 203 s lia;
+#X obj 215 170 s masse;
+#X obj 207 202 s masse2;
+#X msg 801 44 2;
+#X msg 798 219 10;
+#X msg 939 47 0.03;
+#X msg 55 271 force3D 0 1 0;
+#X msg 43 248 force3D 0 0 1;
+#X msg 66 296 force3D 1 0 0;
+#X floatatom 621 128 5 0 0 0 - - -;
+#X floatatom 671 129 5 0 0 0 - - -;
+#X floatatom 729 133 5 0 0 0 - - -;
+#X obj 567 158 translateXYZ -2.8 0 0;
+#X obj 567 88 rotateXYZ -40 0 0;
+#N canvas 780 246 348 253 curve3d 0;
+#X obj 71 93 r curve3d;
+#X obj 56 69 r gemhead;
+#X obj 71 126 curve3d 5 5;
+#X obj 93 31 inlet;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 3 0 2 0;
+#X restore 381 308 pd curve3d;
+#X msg 381 234 draw control_line;
+#X msg 391 257 draw fill;
+#X msg 401 280 draw line;
+#X msg 213 250 force3D 0 0 8;
+#X msg 202 272 force3D 0 8 0;
+#X msg 193 295 force3D 8 0 0;
+#X msg 854 47 0.05;
+#N canvas 0 0 954 451 structure 0;
+#X obj 331 12 gemMasse2 10 1 0 0;
+#X obj 178 74 gemLia2 0 1 0.1 0.1;
+#X obj 176 195 gemLia2 0 1 0.1 0.1;
+#X obj 177 133 gemLia2 0 1 0.1 0.1;
+#X obj 175 257 gemLia2 0 1 0.1 0.1;
+#X obj 174 319 gemLia2 0 1 0.1 0.1;
+#X obj 481 74 gemLia2 0 1 0.1 0.1;
+#X obj 480 133 gemLia2 0 1 0.1 0.1;
+#X obj 479 195 gemLia2 0 1 0.1 0.1;
+#X obj 478 257 gemLia2 0 1 0.1 0.1;
+#X obj 477 319 gemLia2 0 1 0.1 0.1;
+#X obj 331 44 gemLia2 0 1 0.1 0.1;
+#X obj 329 106 gemLia2 0 1 0.1 0.1;
+#X obj 329 165 gemLia2 0 1 0.1 0.1;
+#X obj 328 227 gemLia2 0 1 0.1 0.1;
+#X obj 327 289 gemLia2 0 1 0.1 0.1;
+#X obj 325 351 gemLia2 0 1 0.1 0.1;
+#X obj 634 44 gemLia2 0 1 0.1 0.1;
+#X obj 633 106 gemLia2 0 1 0.1 0.1;
+#X obj 632 165 gemLia2 0 1 0.1 0.1;
+#X obj 631 227 gemLia2 0 1 0.1 0.1;
+#X obj 630 289 gemLia2 0 1 0.1 0.1;
+#X obj 629 351 gemLia2 0 1 0.1 0.1;
+#X obj 935 45 gemLia2 0 1 0.1 0.1;
+#X obj 935 107 gemLia2 0 1 0.1 0.1;
+#X obj 934 166 gemLia2 0 1 0.1 0.1;
+#X obj 933 228 gemLia2 0 1 0.1 0.1;
+#X obj 932 290 gemLia2 0 1 0.1 0.1;
+#X obj 931 352 gemLia2 0 1 0.1 0.1;
+#X obj 1239 45 gemLia2 0 1 0.1 0.1;
+#X obj 1238 107 gemLia2 0 1 0.1 0.1;
+#X obj 1238 166 gemLia2 0 1 0.1 0.1;
+#X obj 1236 228 gemLia2 0 1 0.1 0.1;
+#X obj 1235 290 gemLia2 0 1 0.1 0.1;
+#X obj 1234 352 gemLia2 0 1 0.1 0.1;
+#X obj 784 75 gemLia2 0 1 0.1 0.1;
+#X obj 782 134 gemLia2 0 1 0.1 0.1;
+#X obj 781 196 gemLia2 0 1 0.1 0.1;
+#X obj 781 258 gemLia2 0 1 0.1 0.1;
+#X obj 779 320 gemLia2 0 1 0.1 0.1;
+#X obj 1086 75 gemLia2 0 1 0.1 0.1;
+#X obj 1085 134 gemLia2 0 1 0.1 0.1;
+#X obj 1085 196 gemLia2 0 1 0.1 0.1;
+#X obj 1083 259 gemLia2 0 1 0.1 0.1;
+#X obj 1082 320 gemLia2 0 1 0.1 0.1;
+#X obj 1392 74 gemLia2 0 1 0.1 0.1;
+#X obj 1391 133 gemLia2 0 1 0.1 0.1;
+#X obj 1390 195 gemLia2 0 1 0.1 0.1;
+#X obj 1389 257 gemLia2 0 1 0.1 0.1;
+#X obj 1389 319 gemLia2 0 1 0.1 0.1;
+#X obj 1545 44 gemLia2 0 1 0.1 0.1;
+#X obj 1544 106 gemLia2 0 1 0.1 0.1;
+#X obj 1543 165 gemLia2 0 1 0.1 0.1;
+#X obj 1542 227 gemLia2 0 1 0.1 0.1;
+#X obj 1541 289 gemLia2 0 1 0.1 0.1;
+#X obj 1540 351 gemLia2 0 1 0.1 0.1;
+#X obj 1695 74 gemLia2 0 1 0.1 0.1;
+#X obj 1694 133 gemLia2 0 1 0.1 0.1;
+#X obj 1693 195 gemLia2 0 1 0.1 0.1;
+#X obj 1692 257 gemLia2 0 1 0.1 0.1;
+#X obj 1691 319 gemLia2 0 1 0.1 0.1;
+#X obj 27 194 gemMasse2 10 0 3 0;
+#X obj 634 12 gemMasse2 10 2 0 0;
+#X obj 936 13 gemMasse2 10 3 0 0;
+#X obj 1239 13 gemMasse2 10 4 0 0;
+#X obj 1545 12 gemMasse2 10 5 0 0;
+#X obj 28 73 gemMasse2 10 0 1 0;
+#X obj 1848 74 gemMasse2 10 6 1 0;
+#X obj 1846 133 gemMasse2 10 6 2 0;
+#X obj 27 132 gemMasse2 10 0 2 0;
+#X obj 25 256 gemMasse2 10 0 4 0;
+#X obj 24 318 gemMasse2 10 0 5 0;
+#X obj 323 379 gemMasse2 10 1 6 0;
+#X obj 628 378 gemMasse2 10 2 6 0;
+#X obj 930 379 gemMasse2 10 3 6 0;
+#X obj 1233 379 gemMasse2 10 4 6 0;
+#X obj 1539 378 gemMasse2 10 5 6 0;
+#X obj 1846 196 gemMasse2 10 6 3 0;
+#X obj 1847 258 gemMasse2 10 6 4 0;
+#X obj 1843 319 gemMasse2 10 6 5 0;
+#X obj 331 74 gemMasse3 10 1 1 0;
+#X obj 326 319 gemMasse3 10 1 5 0;
+#X obj 327 134 gemMasse3 10 1 2 0;
+#X obj 329 195 gemMasse3 10 1 3 0;
+#X obj 630 319 gemMasse3 10 2 5 0;
+#X obj 631 258 gemMasse3 10 2 4 0;
+#X obj 631 195 gemMasse3 10 2 3 0;
+#X obj 632 134 gemMasse3 10 2 2 0;
+#X obj 635 74 gemMasse3 10 2 1 0;
+#X obj 935 75 gemMasse3 10 3 1 0;
+#X obj 934 134 gemMasse3 10 3 2 0;
+#X obj 933 196 gemMasse3 10 3 3 0;
+#X obj 931 320 gemMasse3 10 3 5 0;
+#X obj 1238 75 gemMasse3 10 4 1 0;
+#X obj 1237 134 gemMasse3 10 4 2 0;
+#X obj 1236 196 gemMasse3 10 4 3 0;
+#X obj 1236 258 gemMasse3 10 4 4 0;
+#X obj 1234 320 gemMasse3 10 4 5 0;
+#X obj 1545 75 gemMasse3 10 5 1 0;
+#X obj 1544 133 gemMasse3 10 5 2 0;
+#X obj 1543 195 gemMasse3 10 5 3 0;
+#X obj 1541 257 gemMasse3 10 5 4 0;
+#X obj 1540 320 gemMasse3 10 5 5 0;
+#X obj 328 256 gemMasse3 10 1 4 0;
+#X obj 933 258 gemMasse3 10 3 4 0;
+#X obj 111 23 inlet;
+#X connect 0 0 11 0;
+#X connect 1 0 66 0;
+#X connect 1 1 80 0;
+#X connect 2 0 61 0;
+#X connect 2 1 83 0;
+#X connect 3 0 69 0;
+#X connect 3 1 82 0;
+#X connect 4 0 70 0;
+#X connect 4 1 103 0;
+#X connect 5 0 71 0;
+#X connect 5 1 81 0;
+#X connect 6 0 80 0;
+#X connect 6 1 88 0;
+#X connect 7 0 82 0;
+#X connect 7 1 87 0;
+#X connect 8 0 83 0;
+#X connect 8 1 86 0;
+#X connect 9 0 103 0;
+#X connect 9 1 85 0;
+#X connect 10 0 81 0;
+#X connect 10 1 84 0;
+#X connect 11 0 0 0;
+#X connect 11 1 80 0;
+#X connect 12 0 80 0;
+#X connect 12 1 82 0;
+#X connect 13 0 82 0;
+#X connect 13 1 83 0;
+#X connect 14 0 83 0;
+#X connect 14 1 103 0;
+#X connect 15 0 103 0;
+#X connect 15 1 81 0;
+#X connect 16 0 81 0;
+#X connect 16 1 72 0;
+#X connect 17 0 62 0;
+#X connect 17 1 88 0;
+#X connect 18 0 88 0;
+#X connect 18 1 87 0;
+#X connect 19 0 87 0;
+#X connect 19 1 86 0;
+#X connect 20 0 86 0;
+#X connect 20 1 85 0;
+#X connect 21 0 85 0;
+#X connect 21 1 84 0;
+#X connect 22 0 84 0;
+#X connect 22 1 73 0;
+#X connect 23 0 63 0;
+#X connect 23 1 89 0;
+#X connect 24 0 89 0;
+#X connect 24 1 90 0;
+#X connect 25 0 90 0;
+#X connect 25 1 91 0;
+#X connect 26 0 91 0;
+#X connect 26 1 104 0;
+#X connect 27 0 104 0;
+#X connect 27 1 92 0;
+#X connect 28 0 92 0;
+#X connect 28 1 74 0;
+#X connect 29 0 64 0;
+#X connect 29 1 93 0;
+#X connect 30 0 93 0;
+#X connect 30 1 94 0;
+#X connect 31 0 94 0;
+#X connect 31 1 95 0;
+#X connect 32 0 95 0;
+#X connect 32 1 96 0;
+#X connect 33 0 96 0;
+#X connect 33 1 97 0;
+#X connect 34 0 97 0;
+#X connect 34 1 75 0;
+#X connect 35 0 88 0;
+#X connect 35 1 89 0;
+#X connect 36 0 87 0;
+#X connect 36 1 90 0;
+#X connect 37 0 86 0;
+#X connect 37 1 91 0;
+#X connect 38 0 85 0;
+#X connect 38 1 104 0;
+#X connect 39 0 84 0;
+#X connect 39 1 92 0;
+#X connect 40 0 89 0;
+#X connect 40 1 93 0;
+#X connect 41 0 90 0;
+#X connect 41 1 94 0;
+#X connect 42 0 91 0;
+#X connect 42 1 95 0;
+#X connect 43 0 104 0;
+#X connect 43 1 96 0;
+#X connect 44 0 92 0;
+#X connect 44 1 97 0;
+#X connect 45 0 93 0;
+#X connect 45 1 98 0;
+#X connect 46 0 94 0;
+#X connect 46 1 99 0;
+#X connect 47 0 95 0;
+#X connect 47 1 100 0;
+#X connect 48 0 96 0;
+#X connect 48 1 101 0;
+#X connect 49 0 97 0;
+#X connect 49 1 102 0;
+#X connect 50 0 65 0;
+#X connect 50 1 98 0;
+#X connect 51 0 98 0;
+#X connect 51 1 99 0;
+#X connect 52 0 99 0;
+#X connect 52 1 100 0;
+#X connect 53 0 100 0;
+#X connect 53 1 101 0;
+#X connect 54 0 101 0;
+#X connect 54 1 102 0;
+#X connect 55 0 102 0;
+#X connect 55 1 76 0;
+#X connect 56 0 98 0;
+#X connect 56 1 67 0;
+#X connect 57 0 99 0;
+#X connect 57 1 68 0;
+#X connect 58 0 100 0;
+#X connect 58 1 77 0;
+#X connect 59 0 101 0;
+#X connect 59 1 78 0;
+#X connect 60 0 102 0;
+#X connect 60 1 79 0;
+#X connect 61 0 2 0;
+#X connect 62 0 17 0;
+#X connect 63 0 23 0;
+#X connect 64 0 29 0;
+#X connect 65 0 50 0;
+#X connect 66 0 1 0;
+#X connect 67 0 56 1;
+#X connect 68 0 57 1;
+#X connect 69 0 3 0;
+#X connect 70 0 4 0;
+#X connect 71 0 5 0;
+#X connect 72 0 16 1;
+#X connect 73 0 22 1;
+#X connect 74 0 28 1;
+#X connect 75 0 34 1;
+#X connect 76 0 55 1;
+#X connect 77 0 58 1;
+#X connect 78 0 59 1;
+#X connect 79 0 60 1;
+#X connect 80 0 1 1;
+#X connect 80 0 6 0;
+#X connect 80 0 11 1;
+#X connect 80 0 12 0;
+#X connect 81 0 5 1;
+#X connect 81 0 10 0;
+#X connect 81 0 15 1;
+#X connect 81 0 16 0;
+#X connect 82 0 3 1;
+#X connect 82 0 7 0;
+#X connect 82 0 12 1;
+#X connect 82 0 13 0;
+#X connect 83 0 2 1;
+#X connect 83 0 8 0;
+#X connect 83 0 13 1;
+#X connect 83 0 14 0;
+#X connect 84 0 10 1;
+#X connect 84 0 21 1;
+#X connect 84 0 22 0;
+#X connect 84 0 39 0;
+#X connect 85 0 9 1;
+#X connect 85 0 20 1;
+#X connect 85 0 21 0;
+#X connect 85 0 38 0;
+#X connect 86 0 8 1;
+#X connect 86 0 19 1;
+#X connect 86 0 20 0;
+#X connect 86 0 37 0;
+#X connect 87 0 7 1;
+#X connect 87 0 18 1;
+#X connect 87 0 19 0;
+#X connect 87 0 36 0;
+#X connect 88 0 6 1;
+#X connect 88 0 17 1;
+#X connect 88 0 18 0;
+#X connect 88 0 35 0;
+#X connect 89 0 23 1;
+#X connect 89 0 24 0;
+#X connect 89 0 35 1;
+#X connect 89 0 40 0;
+#X connect 90 0 24 1;
+#X connect 90 0 25 0;
+#X connect 90 0 36 1;
+#X connect 90 0 41 0;
+#X connect 91 0 25 1;
+#X connect 91 0 26 0;
+#X connect 91 0 37 1;
+#X connect 91 0 42 0;
+#X connect 92 0 27 1;
+#X connect 92 0 28 0;
+#X connect 92 0 39 1;
+#X connect 92 0 44 0;
+#X connect 93 0 29 1;
+#X connect 93 0 30 0;
+#X connect 93 0 40 1;
+#X connect 93 0 45 0;
+#X connect 94 0 30 1;
+#X connect 94 0 31 0;
+#X connect 94 0 41 1;
+#X connect 94 0 46 0;
+#X connect 95 0 31 1;
+#X connect 95 0 32 0;
+#X connect 95 0 42 1;
+#X connect 95 0 47 0;
+#X connect 96 0 32 1;
+#X connect 96 0 33 0;
+#X connect 96 0 43 1;
+#X connect 96 0 48 0;
+#X connect 97 0 33 1;
+#X connect 97 0 34 0;
+#X connect 97 0 44 1;
+#X connect 97 0 49 0;
+#X connect 98 0 45 1;
+#X connect 98 0 50 1;
+#X connect 98 0 51 0;
+#X connect 98 0 56 0;
+#X connect 99 0 46 1;
+#X connect 99 0 51 1;
+#X connect 99 0 52 0;
+#X connect 99 0 57 0;
+#X connect 100 0 47 1;
+#X connect 100 0 52 1;
+#X connect 100 0 53 0;
+#X connect 100 0 58 0;
+#X connect 101 0 48 1;
+#X connect 101 0 53 1;
+#X connect 101 0 54 0;
+#X connect 101 0 59 0;
+#X connect 102 0 49 1;
+#X connect 102 0 54 1;
+#X connect 102 0 55 0;
+#X connect 102 0 60 0;
+#X connect 103 0 4 1;
+#X connect 103 0 9 0;
+#X connect 103 0 14 1;
+#X connect 103 0 15 0;
+#X connect 104 0 26 1;
+#X connect 104 0 27 0;
+#X connect 104 0 38 1;
+#X connect 104 0 43 0;
+#X connect 105 0 87 0;
+#X connect 105 0 90 0;
+#X restore 213 326 pd structure;
+#X obj 287 169 gemwin 40;
+#X msg 286 73 reset \, lighting 1 \, create \, 1;
+#X text 77 11 This is the same as previus exemple \, but using a diferent
+visualisation.;
+#X text 48 79 <- 1;
+#X text 518 73 <- 2;
+#X connect 0 0 15 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 10 0 56 0;
+#X connect 11 0 9 0;
+#X connect 12 0 25 0;
+#X connect 13 0 5 0;
+#X connect 14 0 29 0;
+#X connect 15 0 16 0;
+#X connect 16 0 2 0;
+#X connect 16 1 1 0;
+#X connect 17 0 56 0;
+#X connect 19 0 18 0;
+#X connect 21 0 46 0;
+#X connect 22 0 46 1;
+#X connect 23 0 46 2;
+#X connect 24 0 46 3;
+#X connect 25 0 6 0;
+#X connect 26 0 27 0;
+#X connect 27 0 6 0;
+#X connect 28 0 29 0;
+#X connect 29 0 32 0;
+#X connect 29 1 31 0;
+#X connect 29 2 30 0;
+#X connect 30 0 34 0;
+#X connect 30 0 35 0;
+#X connect 31 0 33 0;
+#X connect 32 0 33 0;
+#X connect 36 0 11 0;
+#X connect 37 0 13 0;
+#X connect 38 0 12 0;
+#X connect 39 0 3 0;
+#X connect 40 0 3 0;
+#X connect 41 0 3 0;
+#X connect 42 0 45 1;
+#X connect 43 0 45 2;
+#X connect 44 0 45 3;
+#X connect 45 0 20 0;
+#X connect 46 0 45 0;
+#X connect 48 0 47 0;
+#X connect 49 0 47 0;
+#X connect 50 0 47 0;
+#X connect 51 0 55 0;
+#X connect 52 0 55 0;
+#X connect 53 0 55 0;
+#X connect 54 0 26 0;
+#X connect 57 0 56 0;
diff --git a/exemples/15_constant_force_field.pd b/exemples/15_constant_force_field.pd
new file mode 100755
index 0000000..6ad4be1
--- /dev/null
+++ b/exemples/15_constant_force_field.pd
@@ -0,0 +1,283 @@
+#N canvas 40 72 795 432 12;
+#X obj 16 104 t b b;
+#X obj 16 56 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 94 57 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 258 79 0 \, destroy;
+#X msg 224 54 reset \, create \, 1;
+#N canvas 510 193 970 698 structure 0;
+#X obj 124 314 pd_lia \$0;
+#X obj 27 290 pd_masse -1 0 \$0;
+#X obj 49 445 pd_lia \$0;
+#X obj 123 558 pd_masse -0.7 -0.7 \$0;
+#X obj 198 502 pd_lia \$0;
+#X obj 124 43 pd_masse -0.7 0.7 \$0;
+#X obj 189 113 pd_lia \$0;
+#X obj 69 161 pd_lia \$0;
+#X obj 201 187 pd_lia \$0;
+#X obj 213 373 pd_lia \$0;
+#X obj 279 598 pd_lia \$0;
+#X obj 399 624 pd_masse 0 -1 \$0;
+#X obj 410 562 pd_lia \$0;
+#X obj 580 585 pd_lia \$0;
+#X obj 310 327 pd_lia \$0;
+#X obj 388 330 pd_lia \$0;
+#X obj 468 330 pd_lia \$0;
+#X obj 338 427 pd_lia \$0;
+#X obj 509 422 pd_lia \$0;
+#X obj 304 26 pd_lia \$0;
+#X obj 436 16 pd_masse 0 1 \$0;
+#X obj 441 57 pd_lia \$0;
+#X obj 347 129 pd_lia \$0;
+#X obj 308 231 pd_lia \$0;
+#X obj 304 280 pd_lia \$0;
+#X obj 393 227 pd_lia \$0;
+#X obj 475 227 pd_lia \$0;
+#X obj 529 278 pd_lia \$0;
+#X obj 604 358 pd_lia \$0;
+#X obj 678 291 pd_lia \$0;
+#X obj 604 221 pd_lia \$0;
+#X obj 499 135 pd_lia \$0;
+#X obj 571 43 pd_lia \$0;
+#X obj 612 101 pd_lia \$0;
+#X obj 749 179 pd_lia \$0;
+#X obj 680 64 pd_masse 0.7 0.7 \$0;
+#X obj 766 285 pd_masse 1 0 \$0;
+#X obj 763 429 pd_lia \$0;
+#X obj 671 510 pd_lia \$0;
+#X obj 748 552 pd_masse 0.7 -0.7 \$0;
+#X obj 407 274 pd_masse 0 0 \$0;
+#X connect 0 0 5 0;
+#X connect 0 1 3 0;
+#X connect 1 0 2 0;
+#X connect 1 0 4 0;
+#X connect 1 0 6 0;
+#X connect 1 0 7 0;
+#X connect 1 0 17 0;
+#X connect 1 0 22 0;
+#X connect 1 0 24 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 0;
+#X connect 3 0 0 1;
+#X connect 3 0 2 1;
+#X connect 3 0 8 1;
+#X connect 3 0 10 0;
+#X connect 3 0 12 0;
+#X connect 3 0 14 0;
+#X connect 3 0 18 0;
+#X connect 4 0 1 0;
+#X connect 4 1 11 0;
+#X connect 5 0 0 0;
+#X connect 5 0 7 1;
+#X connect 5 0 9 0;
+#X connect 5 0 19 0;
+#X connect 5 0 21 0;
+#X connect 5 0 23 0;
+#X connect 5 0 31 0;
+#X connect 6 0 1 0;
+#X connect 6 1 20 0;
+#X connect 7 0 1 0;
+#X connect 7 1 5 0;
+#X connect 8 0 20 0;
+#X connect 8 1 3 0;
+#X connect 9 0 5 0;
+#X connect 9 1 11 0;
+#X connect 10 0 3 0;
+#X connect 10 1 11 0;
+#X connect 11 0 4 1;
+#X connect 11 0 9 1;
+#X connect 11 0 10 1;
+#X connect 11 0 13 0;
+#X connect 11 0 15 1;
+#X connect 11 0 28 0;
+#X connect 11 0 38 0;
+#X connect 12 0 3 0;
+#X connect 12 1 39 0;
+#X connect 13 0 11 0;
+#X connect 13 1 39 0;
+#X connect 14 0 3 0;
+#X connect 14 1 40 0;
+#X connect 15 0 40 0;
+#X connect 15 1 11 0;
+#X connect 16 0 40 0;
+#X connect 16 1 39 0;
+#X connect 17 0 1 0;
+#X connect 17 1 39 0;
+#X connect 18 0 3 0;
+#X connect 18 1 36 0;
+#X connect 19 0 5 0;
+#X connect 19 1 20 0;
+#X connect 20 0 6 1;
+#X connect 20 0 8 0;
+#X connect 20 0 19 1;
+#X connect 20 0 25 1;
+#X connect 20 0 30 0;
+#X connect 20 0 32 0;
+#X connect 20 0 33 0;
+#X connect 21 0 5 0;
+#X connect 21 1 35 0;
+#X connect 22 0 1 0;
+#X connect 22 1 35 0;
+#X connect 23 0 5 0;
+#X connect 23 1 40 0;
+#X connect 24 0 1 0;
+#X connect 24 1 40 0;
+#X connect 25 0 40 0;
+#X connect 25 1 20 0;
+#X connect 26 0 40 0;
+#X connect 26 1 35 0;
+#X connect 27 0 40 0;
+#X connect 27 1 36 0;
+#X connect 28 0 11 0;
+#X connect 28 1 35 0;
+#X connect 29 0 39 0;
+#X connect 29 1 35 0;
+#X connect 30 0 20 0;
+#X connect 30 1 39 0;
+#X connect 31 0 5 0;
+#X connect 31 1 36 0;
+#X connect 32 0 20 0;
+#X connect 32 1 35 0;
+#X connect 33 0 20 0;
+#X connect 33 1 36 0;
+#X connect 34 0 35 0;
+#X connect 34 1 36 0;
+#X connect 35 0 21 1;
+#X connect 35 0 22 1;
+#X connect 35 0 26 1;
+#X connect 35 0 28 1;
+#X connect 35 0 29 1;
+#X connect 35 0 32 1;
+#X connect 35 0 34 0;
+#X connect 36 0 18 1;
+#X connect 36 0 27 1;
+#X connect 36 0 31 1;
+#X connect 36 0 33 1;
+#X connect 36 0 34 1;
+#X connect 36 0 37 0;
+#X connect 36 0 38 1;
+#X connect 37 0 36 0;
+#X connect 37 1 39 0;
+#X connect 38 0 11 0;
+#X connect 38 1 36 0;
+#X connect 39 0 12 1;
+#X connect 39 0 13 1;
+#X connect 39 0 16 1;
+#X connect 39 0 17 1;
+#X connect 39 0 29 0;
+#X connect 39 0 30 1;
+#X connect 39 0 37 1;
+#X connect 40 0 14 1;
+#X connect 40 0 15 0;
+#X connect 40 0 16 0;
+#X connect 40 0 23 1;
+#X connect 40 0 24 1;
+#X connect 40 0 25 0;
+#X connect 40 0 26 0;
+#X connect 40 0 27 0;
+#X restore 372 150 pd structure;
+#X msg 590 101 force2D 0 5;
+#X msg 646 127 force2D 5 0;
+#N canvas 623 135 504 293 init 0;
+#X msg 200 169 setK \$1;
+#X msg 274 143 setD \$1;
+#X msg 416 115 setM \$1;
+#X floatatom 200 94 5 -10 200 0 - - -;
+#X floatatom 274 92 5 0 0 0 - - -;
+#X floatatom 416 92 5 0 0 0 - - -;
+#X obj 200 143 / 10;
+#X obj 200 117 + 1;
+#X obj 274 116 / 10;
+#X msg 200 67 100;
+#X msg 274 68 25;
+#X msg 416 66 50;
+#X floatatom 341 92 5 0 0 0 - - -;
+#X obj 341 116 / 10;
+#X msg 341 143 setD2 \$1;
+#X msg 341 68 1;
+#X obj 200 201 s \$0-lia;
+#X obj 416 143 s \$0-masse;
+#X obj 42 50 loadbang;
+#X obj 44 202 s \$0-masse;
+#X msg 44 84 setXmin -3.8;
+#X msg 57 109 setXmax 3.8;
+#X msg 75 133 setYmin -3.8;
+#X msg 88 159 setYmax 3.8;
+#X connect 0 0 16 0;
+#X connect 1 0 16 0;
+#X connect 2 0 17 0;
+#X connect 3 0 7 0;
+#X connect 4 0 8 0;
+#X connect 5 0 2 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 1 0;
+#X connect 9 0 3 0;
+#X connect 10 0 4 0;
+#X connect 11 0 5 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 16 0;
+#X connect 15 0 12 0;
+#X connect 18 0 20 0;
+#X connect 18 0 21 0;
+#X connect 18 0 22 0;
+#X connect 18 0 23 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X connect 23 0 19 0;
+#X restore 372 123 pd init;
+#X obj 117 52 loadbang;
+#X msg 592 155 force2D 0 -5;
+#X msg 535 128 force2D -5 0;
+#X obj 51 181 s \$0-lia;
+#X obj 16 209 s \$0-masse;
+#X obj 591 187 s \$0-masse;
+#X msg 145 108 reset;
+#X msg 119 132 resetL;
+#X msg 94 153 resetF;
+#X obj 94 81 t b b b;
+#X obj 223 176 color 1 0 0;
+#X obj 223 231 rectangle 2 1;
+#X obj 223 146 gemhead 40;
+#X obj 223 205 translateXYZ -2 -3 0;
+#X text 437 310 <- positive Y force : just in the red square;
+#X text 239 284 <- negative Y force (gravity) everywhere.;
+#X text 92 361 the red square is a place with force from bottom to
+top. like a ball in wather.;
+#X obj 16 77 metro 50;
+#X obj 224 107 gemwin;
+#X obj 26 285 iAmbient2D \$0-masse 0 -1;
+#X obj 24 309 iAmbient2D \$0-masse 0 3 0 0 0 -4 0 -4 -2;
+#X text 285 -27 This is the same ball as prevuis exemple \, but in
+a differents context.;
+#X obj 646 72 loadbang;
+#X text 40 54 <- 1;
+#X text 359 55 <- 2;
+#X text 579 212 move the structure;
+#X connect 0 0 13 0;
+#X connect 0 1 12 0;
+#X connect 0 1 28 0;
+#X connect 0 1 29 0;
+#X connect 1 0 26 0;
+#X connect 2 0 18 0;
+#X connect 3 0 27 0;
+#X connect 4 0 27 0;
+#X connect 6 0 14 0;
+#X connect 7 0 14 0;
+#X connect 9 0 18 0;
+#X connect 10 0 14 0;
+#X connect 11 0 14 0;
+#X connect 15 0 13 0;
+#X connect 16 0 12 0;
+#X connect 17 0 12 0;
+#X connect 18 0 17 0;
+#X connect 18 1 16 0;
+#X connect 18 2 15 0;
+#X connect 19 0 22 0;
+#X connect 21 0 19 0;
+#X connect 22 0 20 0;
+#X connect 26 0 0 0;
+#X connect 31 0 7 0;
diff --git a/exemples/16_name_and_interactors.pd b/exemples/16_name_and_interactors.pd
new file mode 100755
index 0000000..0b71d57
--- /dev/null
+++ b/exemples/16_name_and_interactors.pd
@@ -0,0 +1,148 @@
+#N canvas 34 14 669 578 12;
+#X obj 9 18 t b b;
+#X obj 9 -30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 158 -6 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 238 46 0 \, destroy;
+#X msg 204 21 reset \, create \, 1;
+#N canvas 623 135 504 293 init 0;
+#X obj 49 50 loadbang;
+#X msg 44 84 Xmin -3.8;
+#X msg 58 110 Xmax 3.8;
+#X msg 81 131 Ymin -3.8;
+#X msg 95 157 Ymax 3.8;
+#X obj 47 201 s \$0-masse;
+#X connect 0 0 1 0;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 1 0 5 0;
+#X connect 2 0 5 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
+#X restore 401 -8 pd init;
+#X obj 88 -11 loadbang;
+#X msg 139 45 reset;
+#X msg 113 69 resetL;
+#X msg 88 93 resetF;
+#X obj 88 18 t b b b;
+#X obj 9 -9 metro 50;
+#X obj 204 74 gemwin;
+#X text 90 152 negative Y force (gravity);
+#X text 86 266 positive Y force;
+#X obj 23 498 gemhead;
+#X obj 43 524 unpack s f f;
+#X obj 42 551 translateXYZ 0 0 0;
+#X obj 42 583 sphere 0.3;
+#X obj 173 498 gemhead;
+#X obj 193 524 unpack s f f;
+#X obj 192 551 translateXYZ 0 0 0;
+#X obj 192 583 sphere 0.3;
+#X obj 330 499 gemhead;
+#X obj 350 525 unpack s f f;
+#X obj 349 552 translateXYZ 0 0 0;
+#X obj 349 584 sphere 0.3;
+#X obj 479 499 gemhead;
+#X obj 499 525 unpack s f f;
+#X obj 498 552 translateXYZ 0 0 0;
+#X obj 498 584 sphere 0.3;
+#X obj 628 499 gemhead;
+#X obj 648 525 unpack s f f;
+#X obj 647 552 translateXYZ 0 0 0;
+#X obj 647 584 sphere 0.3;
+#X obj 44 465 masse2D foo 1 -2 3;
+#X obj 193 465 masse2D foo2 1 -1 3;
+#X obj 350 465 masse2D foo3 1 0 3;
+#X obj 499 465 masse2D foo4 1 1 3;
+#X obj 648 465 masse2D foo 1 2 3;
+#X obj 9 123 s masse;
+#X obj 55 437 r masse;
+#X obj 193 438 r masse;
+#X obj 350 436 r masse;
+#X obj 499 436 r masse;
+#X obj 648 437 r masse;
+#X obj 52 174 iAmbient2D foo 0 -0.1;
+#X obj 63 201 iAmbient2D foo2 0 -0.1;
+#X obj 76 227 iAmbient2D foo3 0 -0.1;
+#X text 268 173 force is apply to masse named foo \, foo2 and foo3
+;
+#X text 344 287 a positive forece is apply to foo2 \, and to foo3 (according
+to pd link). this force allows masse 2 and 3 to stay at Y=0.;
+#X obj 529 657 iAmbient2D;
+#X obj 530 684 iLine2D;
+#X obj 530 710 iSeg2D;
+#X obj 530 737 iCircle2D;
+#X msg 17 406 reset;
+#X obj 17 379 sel 1;
+#X obj 17 351 tSquare2D -4 4 -10000 -4;
+#X text 260 345 tSquare is a test : test if the position of the masse
+is in a specific square. This test is used to reset the mass to it's
+initial state if the mass go out of the screen.;
+#X obj 44 292 iSeg2D foo2 -3 0 3 0 3 0 0 0.5 1;
+#X text 398 -34 This patch explain how interactors works;
+#X text 283 195 but not to foo4 \, so it will not move.;
+#X text 201 -10 <- reset;
+#X text 348 50 interactor are design to be a kind of link beetween
+masses and a simple object.;
+#X text 347 85 interactors can be a link to all masse with the same
+name. It's easier to patch than putting a link object for all link.
+;
+#X text 41 655 for more informations about interactors or test \, see
+the help file :;
+#X obj 623 683 tLine2D;
+#X obj 623 709 tSeg2D;
+#X obj 623 736 tCircle2D;
+#X obj 622 656 tSquare2D;
+#X text 356 20 <- 1 GEM window;
+#X text 34 -37 <- 2 begin simulation;
+#X connect 0 0 40 0;
+#X connect 0 1 46 0;
+#X connect 0 1 47 0;
+#X connect 0 1 48 0;
+#X connect 0 1 59 0;
+#X connect 1 0 11 0;
+#X connect 2 0 10 0;
+#X connect 3 0 12 0;
+#X connect 4 0 12 0;
+#X connect 6 0 10 0;
+#X connect 7 0 40 0;
+#X connect 10 0 9 0;
+#X connect 10 1 8 0;
+#X connect 10 2 7 0;
+#X connect 11 0 0 0;
+#X connect 15 0 17 0;
+#X connect 16 1 17 1;
+#X connect 16 2 17 2;
+#X connect 17 0 18 0;
+#X connect 19 0 21 0;
+#X connect 20 1 21 1;
+#X connect 20 2 21 2;
+#X connect 21 0 22 0;
+#X connect 23 0 25 0;
+#X connect 24 1 25 1;
+#X connect 24 2 25 2;
+#X connect 25 0 26 0;
+#X connect 27 0 29 0;
+#X connect 28 1 29 1;
+#X connect 28 2 29 2;
+#X connect 29 0 30 0;
+#X connect 31 0 33 0;
+#X connect 32 1 33 1;
+#X connect 32 2 33 2;
+#X connect 33 0 34 0;
+#X connect 35 0 16 0;
+#X connect 35 0 57 0;
+#X connect 36 0 20 0;
+#X connect 37 0 24 0;
+#X connect 38 0 28 0;
+#X connect 39 0 32 0;
+#X connect 41 0 35 0;
+#X connect 42 0 36 0;
+#X connect 43 0 37 0;
+#X connect 44 0 38 0;
+#X connect 45 0 39 0;
+#X connect 55 0 35 0;
+#X connect 56 0 55 0;
+#X connect 57 0 56 0;
+#X connect 59 0 37 0;
diff --git a/exemples/17_rnd_mouvmnt_and_obstacles.pd b/exemples/17_rnd_mouvmnt_and_obstacles.pd
new file mode 100755
index 0000000..3de27d9
--- /dev/null
+++ b/exemples/17_rnd_mouvmnt_and_obstacles.pd
@@ -0,0 +1,74 @@
+#N canvas 29 57 762 481 10;
+#X obj 18 182 t b b;
+#X obj 18 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 18 155 metro 50;
+#X obj 107 138 loadbang;
+#X obj 433 139 fluide_masse;
+#X msg 56 65 0 \, destroy;
+#X obj 22 93 gemwin;
+#X msg 22 40 reset \, create \, 1;
+#X obj 18 446 s masse;
+#X obj 346 141 gemhead;
+#X obj 346 164 sphere 0.7;
+#X obj 118 187 s reset_masse;
+#X msg 107 163 bang;
+#X obj 443 149 fluide_masse;
+#X obj 453 159 fluide_masse;
+#X obj 463 169 fluide_masse;
+#X obj 473 179 fluide_masse;
+#X obj 483 189 fluide_masse;
+#X obj 493 199 fluide_masse;
+#X obj 503 209 fluide_masse;
+#X obj 513 219 fluide_masse;
+#X obj 523 229 fluide_masse;
+#X obj 533 239 fluide_masse;
+#X obj 543 249 fluide_masse;
+#X obj 553 259 fluide_masse;
+#X obj 534 138 fluide_masse;
+#X obj 544 148 fluide_masse;
+#X obj 554 158 fluide_masse;
+#X obj 564 168 fluide_masse;
+#X obj 574 178 fluide_masse;
+#X obj 584 188 fluide_masse;
+#X obj 594 198 fluide_masse;
+#X obj 604 208 fluide_masse;
+#X obj 614 218 fluide_masse;
+#X obj 624 228 fluide_masse;
+#X obj 634 238 fluide_masse;
+#X obj 644 248 fluide_masse;
+#X obj 654 258 fluide_masse;
+#X obj 664 268 fluide_masse;
+#X text 283 49 the mouving particules don't interact each other;
+#X text 283 65 they interact with 4 lines (the border of the screen)
+\, and with a central circle so they bonce on the obstacle.;
+#X obj 107 285 iAmbient2D masse 0 0 3 3;
+#X obj 43 308 iLine2D masse 3 -3 3 3 1000 0 0 1;
+#X obj 53 332 iLine2D masse -3 3 -3 -3 1000 0 0 1;
+#X obj 68 355 iLine2D masse 3 3 -3 3 1000 0 0 1;
+#X obj 78 378 iLine2D masse -3 -3 3 -3 1000 0 0 1;
+#X obj 43 417 iCircle2D masse 0 0 0 1 0 0 10;
+#X obj 563 269 fluide_masse;
+#X text 302 287 <- give random speed when starting the patch;
+#X text 301 309 <- right border;
+#X text 302 331 <- left border;
+#X text 302 353 <- top border;
+#X text 302 375 <- bottom border;
+#X text 302 416 <- circular interaction in the center;
+#X text 328 25 interactor to a collection of masses;
+#X text 132 40 <- 1;
+#X text 45 131 <- 2;
+#X connect 0 0 8 0;
+#X connect 0 1 42 0;
+#X connect 0 1 43 0;
+#X connect 0 1 44 0;
+#X connect 0 1 45 0;
+#X connect 0 1 46 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 12 0;
+#X connect 5 0 6 0;
+#X connect 7 0 6 0;
+#X connect 9 0 10 0;
+#X connect 12 0 11 0;
+#X connect 12 0 41 0;
diff --git a/exemples/18_flipper.pd b/exemples/18_flipper.pd
new file mode 100755
index 0000000..778119f
--- /dev/null
+++ b/exemples/18_flipper.pd
@@ -0,0 +1,265 @@
+#N canvas 106 59 736 538 10;
+#X obj 11 91 t b b;
+#X obj 11 43 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 60 86 loadbang;
+#X msg 60 108 reset;
+#X msg 185 104 0 \, destroy;
+#X obj 11 132 s masse;
+#X obj 481 330 gemhead;
+#X obj 481 363 translateXYZ;
+#X obj 470 303 unpack s f f;
+#X obj 11 64 metro 5;
+#X obj 481 392 sphere 0.2;
+#X msg 198 129 reset \, dimen 400 800 \, create \, 1;
+#N canvas 435 26 414 248 bords 0;
+#X obj 10 9 inlet;
+#X obj 39 165 curve 2;
+#X obj 37 101 gemhead;
+#X obj 101 116 loadbang;
+#X obj 198 166 curve 2;
+#X obj 196 102 gemhead;
+#X obj 260 117 loadbang;
+#X msg 66 141 -2 1 0;
+#X msg 225 142 2 1 0;
+#X msg 130 139 -1 -3 0;
+#X msg 289 140 1 -3 0;
+#X obj 18 34 iSeg2D masse -2 1 -1 -3 10 0 0 1 0.3 0.3;
+#X obj 18 58 iSeg2D masse 1 -3 2 1 10 0 0 1 0.3 0.3;
+#X connect 0 0 11 0;
+#X connect 0 0 12 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 3 0 9 0;
+#X connect 5 0 4 0;
+#X connect 6 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 1 1;
+#X connect 8 0 4 1;
+#X connect 9 0 1 2;
+#X connect 10 0 4 2;
+#X restore 81 214 pd bords;
+#N canvas 585 242 753 499 curseur 0;
+#X obj 23 20 inlet;
+#X obj 343 300 curve 2;
+#X obj 343 247 gemhead;
+#X obj 516 23 loadbang;
+#X obj 568 307 curve 2;
+#X obj 568 257 gemhead;
+#X obj 399 143 sin;
+#X obj 361 142 cos;
+#X obj 400 166 * 0.8;
+#X obj 362 167 * 0.8;
+#X obj 360 216 pack f f 0;
+#X obj 365 118 t f f;
+#X obj 362 189 - 1;
+#X obj 400 190 - 2.5;
+#X obj 363 49 sel 0 1;
+#X obj 364 96 line;
+#X obj 365 24 inlet;
+#X obj 625 146 sin;
+#X obj 587 145 cos;
+#X obj 586 219 pack f f 0;
+#X obj 591 121 t f f;
+#X obj 589 52 sel 0 1;
+#X obj 590 99 line;
+#X obj 591 27 inlet;
+#X obj 588 170 * -0.8;
+#X obj 626 169 * -0.8;
+#X msg 362 70 -0.6 50;
+#X msg 419 71 0.3 50;
+#X msg 588 73 0.6 50;
+#X msg 644 74 -0.3 50;
+#X obj 627 194 - 2.5;
+#X obj 588 192 + 1;
+#X msg 380 274 -1.3 -2.5 0;
+#X msg 605 280 1.3 -2.5 0;
+#X msg 434 387 setX1 \$1;
+#X msg 442 412 setY1 \$1;
+#X msg 265 319 setX2 \$1;
+#X msg 285 344 setY2 \$1;
+#X obj 40 387 iSeg2D masse -1.3 -2.5 0 0 0.4 0 0 1 0.5 0.5;
+#X obj 26 441 iSeg2D masse 0 0 1.3 -2.5 0.4 0 0 1 0.5 0.5;
+#X connect 0 0 38 0;
+#X connect 0 0 39 0;
+#X connect 2 0 1 0;
+#X connect 3 0 32 0;
+#X connect 3 0 33 0;
+#X connect 5 0 4 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 0;
+#X connect 9 0 12 0;
+#X connect 10 0 1 1;
+#X connect 11 0 7 0;
+#X connect 11 1 6 0;
+#X connect 12 0 10 0;
+#X connect 12 0 36 0;
+#X connect 13 0 10 1;
+#X connect 13 0 37 0;
+#X connect 14 0 26 0;
+#X connect 14 1 27 0;
+#X connect 15 0 11 0;
+#X connect 16 0 14 0;
+#X connect 17 0 25 0;
+#X connect 18 0 24 0;
+#X connect 19 0 4 1;
+#X connect 20 0 18 0;
+#X connect 20 1 17 0;
+#X connect 21 0 28 0;
+#X connect 21 1 29 0;
+#X connect 22 0 20 0;
+#X connect 23 0 21 0;
+#X connect 24 0 31 0;
+#X connect 25 0 30 0;
+#X connect 26 0 15 0;
+#X connect 27 0 15 0;
+#X connect 28 0 22 0;
+#X connect 29 0 22 0;
+#X connect 30 0 19 1;
+#X connect 30 0 35 0;
+#X connect 31 0 19 0;
+#X connect 31 0 34 0;
+#X connect 32 0 1 2;
+#X connect 33 0 4 2;
+#X connect 34 0 39 0;
+#X connect 35 0 39 0;
+#X connect 36 0 38 0;
+#X connect 37 0 38 0;
+#X restore 36 414 pd curseur;
+#N canvas 401 13 480 352 bords2 0;
+#X obj 10 9 inlet;
+#X obj 78 189 curve 2;
+#X obj 76 125 gemhead;
+#X obj 140 140 loadbang;
+#X obj 237 190 curve 2;
+#X obj 235 126 gemhead;
+#X obj 299 141 loadbang;
+#X msg 105 165 -1.8 4 0;
+#X msg 169 163 -1.8 -1 0;
+#X msg 264 166 1.8 4 0;
+#X msg 327 164 1.8 -1 0;
+#X obj 42 51 iSeg2D masse -1.8 4 -1.8 -1 2 0 0 0.4 0.4 0.5;
+#X obj 42 75 iSeg2D masse 1.8 -1.2 1.8 4 2 0 0 0.4 0.4 0.5;
+#X connect 0 0 11 0;
+#X connect 0 0 12 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 1 1;
+#X connect 8 0 1 2;
+#X connect 9 0 4 1;
+#X connect 10 0 4 2;
+#X restore 81 238 pd bords2;
+#X obj 42 346 gemmouse;
+#N canvas 399 45 480 347 top 0;
+#X obj 10 9 inlet;
+#X obj 78 189 curve 2;
+#X obj 76 125 gemhead;
+#X obj 140 140 loadbang;
+#X msg 105 165 4 3.5 0;
+#X msg 169 163 -4 3.5 0;
+#X obj 16 47 iSeg2D masse 4 3.5 -4 3.5 2 0 0 0.4 0.4 0.4;
+#X connect 0 0 6 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 1;
+#X connect 5 0 1 2;
+#X restore 81 263 pd top;
+#N canvas 893 368 484 356 circle 0;
+#X obj 23 15 inlet;
+#X obj 25 177 gemhead;
+#X obj 25 201 translateXYZ 0 2.5 0;
+#X obj 26 225 sphere 0.3;
+#X obj 156 178 gemhead;
+#X obj 157 226 sphere 0.3;
+#X obj 287 179 gemhead;
+#X obj 288 227 sphere 0.3;
+#X obj 156 202 translateXYZ 1 1.5 0;
+#X obj 287 203 translateXYZ -1 1.5 0;
+#X obj 36 51 iCircle2D masse 0 2.5 0 0.3 1;
+#X obj 36 75 iCircle2D masse 1 1.5 0 0.3 1;
+#X obj 37 97 iCircle2D masse -1 1.5 0 0.3 1;
+#X connect 0 0 10 0;
+#X connect 0 0 11 0;
+#X connect 0 0 12 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 8 0;
+#X connect 6 0 9 0;
+#X connect 8 0 5 0;
+#X connect 9 0 7 0;
+#X restore 80 192 pd circle;
+#X obj 470 279 masse2D masse 10 1.5 3.4;
+#X msg 74 487 \; masse reset \;;
+#X obj 103 320 loadbang;
+#X msg 103 344 0;
+#X obj 80 170 iAmbient2D masse 0 -0.001 0 0 0.003;
+#X text 357 34 click on the GEM windows with right and left click.
+;
+#X text 359 50 middle click to reset the game;
+#X obj 181 258 keyname;
+#X msg 218 308 1;
+#X msg 261 307 0;
+#X obj 181 338 spigot;
+#X obj 292 257 keyname;
+#X msg 329 307 1;
+#X msg 378 306 0;
+#X obj 292 337 spigot;
+#X obj 218 283 sel Left;
+#X obj 329 283 sel Right;
+#X obj 88 441 key;
+#X obj 88 462 sel 32;
+#X text 356 80 If you don't have a 3 button mouse \, you can use left
+\, right key \, and space for resetting the game.;
+#X text 403 128 <- this is better \, but seem to crash somes computers
+;
+#X msg 173 82 reset \, create \, 1;
+#X text 284 82 <- 1;
+#X text 36 42 <- 2;
+#X obj 173 151 gemwin 50;
+#X connect 0 0 5 0;
+#X connect 0 1 12 0;
+#X connect 0 1 13 0;
+#X connect 0 1 14 0;
+#X connect 0 1 16 0;
+#X connect 0 1 22 0;
+#X connect 0 1 17 0;
+#X connect 1 0 9 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 42 0;
+#X connect 6 0 7 0;
+#X connect 7 0 10 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 9 0 0 0;
+#X connect 11 0 42 0;
+#X connect 15 2 13 1;
+#X connect 15 3 19 0;
+#X connect 15 4 13 2;
+#X connect 18 0 8 0;
+#X connect 20 0 21 0;
+#X connect 21 0 13 2;
+#X connect 21 0 13 1;
+#X connect 25 0 28 0;
+#X connect 25 1 33 0;
+#X connect 26 0 28 1;
+#X connect 27 0 28 1;
+#X connect 28 0 13 1;
+#X connect 29 0 32 0;
+#X connect 29 1 34 0;
+#X connect 30 0 32 1;
+#X connect 31 0 32 1;
+#X connect 32 0 13 2;
+#X connect 33 0 26 0;
+#X connect 33 1 27 0;
+#X connect 34 0 30 0;
+#X connect 34 1 31 0;
+#X connect 35 0 36 0;
+#X connect 36 0 19 0;
+#X connect 39 0 42 0;
diff --git a/exemples/19_vertex.pd b/exemples/19_vertex.pd
new file mode 100755
index 0000000..63984a6
--- /dev/null
+++ b/exemples/19_vertex.pd
@@ -0,0 +1,107 @@
+#N canvas 155 178 513 340 10;
+#X obj 17 248 t b b;
+#X obj 17 150 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 106 207 loadbang;
+#X msg 233 196 0 \, destroy;
+#X obj 199 224 gemwin;
+#X msg 199 171 reset \, create \, 1;
+#X obj 17 304 s masse;
+#X obj 106 253 s reset_masse;
+#X msg 106 229 bang;
+#N canvas 717 329 472 322 pool 0;
+#X obj 106 103 fluide_masse2 19;
+#X obj 186 183 fluide_masse2 27;
+#X obj 166 163 fluide_masse2 25;
+#X obj 16 13 fluide_masse2 10;
+#X obj 26 23 fluide_masse2 11;
+#X obj 36 33 fluide_masse2 12;
+#X obj 46 43 fluide_masse2 13;
+#X obj 56 53 fluide_masse2 14;
+#X obj 66 63 fluide_masse2 15;
+#X obj 76 73 fluide_masse2 16;
+#X obj 86 83 fluide_masse2 17;
+#X obj 96 93 fluide_masse2 18;
+#X obj 116 113 fluide_masse2 20;
+#X obj 126 123 fluide_masse2 21;
+#X obj 136 133 fluide_masse2 22;
+#X obj 146 143 fluide_masse2 23;
+#X obj 156 153 fluide_masse2 24;
+#X obj 176 173 fluide_masse2 26;
+#X obj 196 193 fluide_masse2 28;
+#X obj 206 203 fluide_masse2 29;
+#X obj 216 213 fluide_masse2 30;
+#X obj 226 223 fluide_masse2 31;
+#X obj 236 233 fluide_masse2 32;
+#X obj 246 243 fluide_masse2 33;
+#X obj 256 253 fluide_masse2 34;
+#X obj 266 263 fluide_masse2 35;
+#X obj 276 273 fluide_masse2 36;
+#X obj 286 283 fluide_masse2 37;
+#X obj 296 293 fluide_masse2 38;
+#X obj 306 303 fluide_masse2 39;
+#X obj 316 313 fluide_masse2 40;
+#X obj 326 323 fluide_masse2 41;
+#X obj 336 333 fluide_masse2 42;
+#X obj 346 343 fluide_masse2 43;
+#X obj 356 353 fluide_masse2 44;
+#X obj 366 363 fluide_masse2 45;
+#X obj 376 373 fluide_masse2 46;
+#X obj 386 383 fluide_masse2 47;
+#X obj 396 393 fluide_masse2 48;
+#X obj 406 403 fluide_masse2 49;
+#X obj 416 413 fluide_masse2 50;
+#X restore 355 201 pd pool;
+#N canvas 860 482 340 441 creation 0;
+#X obj 43 318 s pd-new;
+#X msg 87 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 43 289 menuclose;
+#X obj 76 237 pack f f f;
+#X obj 43 47 sel 0 1;
+#X obj 44 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X obj 76 186 t f f f;
+#X msg 76 265 obj \$1 \$2 fluide_masse2 \$3;
+#X obj 103 210 * 10;
+#X obj 76 210 * 10;
+#X obj 61 163 ch_uzi 60;
+#X text 30 373 used to create the collection of object;
+#X connect 2 0 0 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 4 1 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 11 0;
+#X connect 6 1 1 0;
+#X connect 7 0 10 0;
+#X connect 7 1 9 0;
+#X connect 7 2 3 2;
+#X connect 8 0 0 0;
+#X connect 9 0 3 1;
+#X connect 10 0 3 0;
+#X connect 11 1 7 0;
+#X restore 355 227 pd creation pool;
+#X text 15 65 this exemple got 250 masses \, so it nead more CPU than
+before.;
+#X msg 60 176 20;
+#X floatatom 60 199 5 0 0 0 - - -;
+#X text 15 102 if you've got a slow computer \, you can slow down the
+computation speed by changing the metronome frequency.;
+#X text 44 149 <- begin;
+#X text 176 5 Fuids mecanics;
+#X text 85 31 Masses have no weight \, they are in a displacement field
+\, corresponding to a vertex.;
+#X obj 42 279 iCircle2D masse 0 0 0 5 0 0 0 0 0 0 0 0 0 0.0005;
+#X obj 17 221 metro 20;
+#X text 309 170 <- 1;
+#X connect 0 0 6 0;
+#X connect 0 1 18 0;
+#X connect 1 0 19 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 8 0 7 0;
+#X connect 12 0 13 0;
+#X connect 13 0 19 1;
+#X connect 19 0 0 0;
diff --git a/exemples/20_moving_vertex.pd b/exemples/20_moving_vertex.pd
new file mode 100755
index 0000000..6066017
--- /dev/null
+++ b/exemples/20_moving_vertex.pd
@@ -0,0 +1,117 @@
+#N canvas 546 89 548 542 10;
+#X obj 16 222 t b b;
+#X obj 16 151 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 105 179 loadbang;
+#X msg 250 200 0 \, destroy;
+#X obj 216 228 gemwin;
+#X msg 216 175 reset \, create \, 1;
+#X obj 16 486 s masse;
+#X obj 105 227 s reset_masse;
+#X msg 105 203 bang;
+#X obj 16 195 metro 5;
+#N canvas 860 482 416 441 creation 0;
+#X obj 40 362 s pd-new;
+#X msg 95 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 45 333 menuclose;
+#X obj 85 286 pack f f f;
+#X obj 43 47 sel 0 1;
+#X obj 44 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 69 72 t b b;
+#X obj 85 235 t f f f;
+#X msg 83 314 obj \$1 \$2 fluide_masse2 \$3;
+#X obj 112 261 * 10;
+#X obj 85 259 * 10;
+#X obj 89 188 * 2;
+#X obj 73 163 ch_uzi 30;
+#X connect 2 0 0 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 4 1 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 12 0;
+#X connect 6 1 1 0;
+#X connect 7 0 10 0;
+#X connect 7 1 9 0;
+#X connect 7 2 3 2;
+#X connect 8 0 0 0;
+#X connect 9 0 3 1;
+#X connect 10 0 3 0;
+#X connect 11 0 7 0;
+#X connect 12 1 11 0;
+#X restore 345 264 pd creation pool;
+#X obj 133 305 t b b;
+#X obj 194 287 r reset_masse;
+#X msg 194 308 reset;
+#X obj 269 346 lia foo 0 1;
+#X obj 133 386 / 50;
+#X text 177 373 X position of the center of the vertex.;
+#X floatatom 178 390 5 0 0 0 - - -;
+#X text 157 17 same as previus exemple but with a moving vertex (Y)
+;
+#X obj 133 470 iCircle2D masse 0 0 0 5 0 0 0 0 -1e-006 0.0001;
+#X msg 133 443 setX \$1;
+#X obj 133 346 masse foo 100000 99;
+#N canvas 0 0 464 314 pool 0;
+#X obj 0 0 fluide_masse2 0;
+#X obj 20 20 fluide_masse2 2;
+#X obj 40 40 fluide_masse2 4;
+#X obj 60 60 fluide_masse2 6;
+#X obj 80 80 fluide_masse2 8;
+#X obj 100 100 fluide_masse2 10;
+#X obj 120 120 fluide_masse2 12;
+#X obj 140 140 fluide_masse2 14;
+#X obj 160 160 fluide_masse2 16;
+#X obj 180 180 fluide_masse2 18;
+#X obj 200 200 fluide_masse2 20;
+#X obj 220 220 fluide_masse2 22;
+#X obj 240 240 fluide_masse2 24;
+#X obj 260 260 fluide_masse2 26;
+#X obj 280 280 fluide_masse2 28;
+#X obj 300 300 fluide_masse2 30;
+#X obj 320 320 fluide_masse2 32;
+#X obj 340 340 fluide_masse2 34;
+#X obj 360 360 fluide_masse2 36;
+#X obj 380 380 fluide_masse2 38;
+#X obj 400 400 fluide_masse2 40;
+#X obj 420 420 fluide_masse2 42;
+#X obj 440 440 fluide_masse2 44;
+#X obj 460 460 fluide_masse2 46;
+#X obj 480 480 fluide_masse2 48;
+#X obj 500 500 fluide_masse2 50;
+#X obj 520 520 fluide_masse2 52;
+#X obj 540 540 fluide_masse2 54;
+#X obj 560 560 fluide_masse2 56;
+#X obj 580 580 fluide_masse2 58;
+#X restore 345 238 pd pool;
+#X text 96 41 The vertex goes from right / left with sinusoidal variations.
+the mouvement comes frome a single mass/link structure \, as seen before.
+;
+#X text 97 92 if you've got a slow computer \, you can slow down the
+computation speed by changing the metronome frequency.;
+#X floatatom 53 174 5 0 0 0 - - -;
+#X text 40 150 <- begin;
+#X obj 41 418 iAmbient2D masse 0 0 0 0 1;
+#X text 330 175 <- 1;
+#X connect 0 0 6 0;
+#X connect 0 1 19 0;
+#X connect 0 1 27 0;
+#X connect 1 0 9 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 8 0 7 0;
+#X connect 9 0 0 0;
+#X connect 9 0 11 0;
+#X connect 11 0 21 0;
+#X connect 11 1 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 21 0;
+#X connect 14 0 21 0;
+#X connect 15 0 20 0;
+#X connect 20 0 19 0;
+#X connect 21 0 14 0;
+#X connect 21 0 15 0;
+#X connect 21 0 17 0;
+#X connect 25 0 9 1;
diff --git a/exemples/21_fluid_circulation_cylinder.pd b/exemples/21_fluid_circulation_cylinder.pd
new file mode 100755
index 0000000..01ce200
--- /dev/null
+++ b/exemples/21_fluid_circulation_cylinder.pd
@@ -0,0 +1,199 @@
+#N canvas 95 190 751 371 10;
+#X obj 23 167 t b b;
+#X obj 23 59 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 483 150 loadbang;
+#X msg 153 132 0 \, destroy;
+#X obj 119 160 gemwin;
+#X msg 119 107 reset \, create \, 1;
+#X obj 23 205 s masse;
+#X obj 345 126 gemhead;
+#N canvas 19 7 1256 797 pool 0;
+#X obj 0 0 fluide_masse6 -6 -0.958333;
+#X obj 240 0 fluide_masse6 -5.71429 -0.958333;
+#X obj 480 0 fluide_masse6 -5.42857 -0.958333;
+#X obj 720 0 fluide_masse6 -5.14286 -0.958333;
+#X obj 960 0 fluide_masse6 -4.85714 -0.958333;
+#X obj 0 30 fluide_masse6 -6 -0.875;
+#X obj 240 30 fluide_masse6 -5.71429 -0.875;
+#X obj 480 30 fluide_masse6 -5.42857 -0.875;
+#X obj 720 30 fluide_masse6 -5.14286 -0.875;
+#X obj 960 30 fluide_masse6 -4.85714 -0.875;
+#X obj 0 60 fluide_masse6 -6 -0.791667;
+#X obj 240 60 fluide_masse6 -5.71429 -0.791667;
+#X obj 480 60 fluide_masse6 -5.42857 -0.791667;
+#X obj 720 60 fluide_masse6 -5.14286 -0.791667;
+#X obj 960 60 fluide_masse6 -4.85714 -0.791667;
+#X obj 0 90 fluide_masse6 -6 -0.708333;
+#X obj 240 90 fluide_masse6 -5.71429 -0.708333;
+#X obj 480 90 fluide_masse6 -5.42857 -0.708333;
+#X obj 720 90 fluide_masse6 -5.14286 -0.708333;
+#X obj 960 90 fluide_masse6 -4.85714 -0.708333;
+#X obj 0 120 fluide_masse6 -6 -0.625;
+#X obj 240 120 fluide_masse6 -5.71429 -0.625;
+#X obj 480 120 fluide_masse6 -5.42857 -0.625;
+#X obj 720 120 fluide_masse6 -5.14286 -0.625;
+#X obj 960 120 fluide_masse6 -4.85714 -0.625;
+#X obj 0 150 fluide_masse6 -6 -0.541667;
+#X obj 240 150 fluide_masse6 -5.71429 -0.541667;
+#X obj 480 150 fluide_masse6 -5.42857 -0.541667;
+#X obj 720 150 fluide_masse6 -5.14286 -0.541667;
+#X obj 960 150 fluide_masse6 -4.85714 -0.541667;
+#X obj 0 180 fluide_masse6 -6 -0.458333;
+#X obj 240 180 fluide_masse6 -5.71429 -0.458333;
+#X obj 480 180 fluide_masse6 -5.42857 -0.458333;
+#X obj 720 180 fluide_masse6 -5.14286 -0.458333;
+#X obj 960 180 fluide_masse6 -4.85714 -0.458333;
+#X obj 0 210 fluide_masse6 -6 -0.375;
+#X obj 240 210 fluide_masse6 -5.71429 -0.375;
+#X obj 480 210 fluide_masse6 -5.42857 -0.375;
+#X obj 720 210 fluide_masse6 -5.14286 -0.375;
+#X obj 960 210 fluide_masse6 -4.85714 -0.375;
+#X obj 0 240 fluide_masse6 -6 -0.291667;
+#X obj 240 240 fluide_masse6 -5.71429 -0.291667;
+#X obj 480 240 fluide_masse6 -5.42857 -0.291667;
+#X obj 720 240 fluide_masse6 -5.14286 -0.291667;
+#X obj 960 240 fluide_masse6 -4.85714 -0.291667;
+#X obj 0 270 fluide_masse6 -6 -0.208333;
+#X obj 240 270 fluide_masse6 -5.71429 -0.208333;
+#X obj 480 270 fluide_masse6 -5.42857 -0.208333;
+#X obj 720 270 fluide_masse6 -5.14286 -0.208333;
+#X obj 960 270 fluide_masse6 -4.85714 -0.208333;
+#X obj 0 300 fluide_masse6 -6 -0.125;
+#X obj 240 300 fluide_masse6 -5.71429 -0.125;
+#X obj 480 300 fluide_masse6 -5.42857 -0.125;
+#X obj 720 300 fluide_masse6 -5.14286 -0.125;
+#X obj 960 300 fluide_masse6 -4.85714 -0.125;
+#X obj 0 330 fluide_masse6 -6 -0.0416667;
+#X obj 240 330 fluide_masse6 -5.71429 -0.0416667;
+#X obj 480 330 fluide_masse6 -5.42857 -0.0416667;
+#X obj 720 330 fluide_masse6 -5.14286 -0.0416667;
+#X obj 960 330 fluide_masse6 -4.85714 -0.0416667;
+#X obj 0 360 fluide_masse6 -6 0.0416667;
+#X obj 240 360 fluide_masse6 -5.71429 0.0416667;
+#X obj 480 360 fluide_masse6 -5.42857 0.0416667;
+#X obj 720 360 fluide_masse6 -5.14286 0.0416667;
+#X obj 960 360 fluide_masse6 -4.85714 0.0416667;
+#X obj 0 390 fluide_masse6 -6 0.125;
+#X obj 240 390 fluide_masse6 -5.71429 0.125;
+#X obj 480 390 fluide_masse6 -5.42857 0.125;
+#X obj 720 390 fluide_masse6 -5.14286 0.125;
+#X obj 960 390 fluide_masse6 -4.85714 0.125;
+#X obj 0 420 fluide_masse6 -6 0.208333;
+#X obj 240 420 fluide_masse6 -5.71429 0.208333;
+#X obj 480 420 fluide_masse6 -5.42857 0.208333;
+#X obj 720 420 fluide_masse6 -5.14286 0.208333;
+#X obj 960 420 fluide_masse6 -4.85714 0.208333;
+#X obj 0 450 fluide_masse6 -6 0.291667;
+#X obj 240 450 fluide_masse6 -5.71429 0.291667;
+#X obj 480 450 fluide_masse6 -5.42857 0.291667;
+#X obj 720 450 fluide_masse6 -5.14286 0.291667;
+#X obj 960 450 fluide_masse6 -4.85714 0.291667;
+#X obj 0 480 fluide_masse6 -6 0.375;
+#X obj 240 480 fluide_masse6 -5.71429 0.375;
+#X obj 480 480 fluide_masse6 -5.42857 0.375;
+#X obj 720 480 fluide_masse6 -5.14286 0.375;
+#X obj 960 480 fluide_masse6 -4.85714 0.375;
+#X obj 0 510 fluide_masse6 -6 0.458333;
+#X obj 240 510 fluide_masse6 -5.71429 0.458333;
+#X obj 480 510 fluide_masse6 -5.42857 0.458333;
+#X obj 720 510 fluide_masse6 -5.14286 0.458333;
+#X obj 960 510 fluide_masse6 -4.85714 0.458333;
+#X obj 0 540 fluide_masse6 -6 0.541667;
+#X obj 240 540 fluide_masse6 -5.71429 0.541667;
+#X obj 480 540 fluide_masse6 -5.42857 0.541667;
+#X obj 720 540 fluide_masse6 -5.14286 0.541667;
+#X obj 960 540 fluide_masse6 -4.85714 0.541667;
+#X obj 0 570 fluide_masse6 -6 0.625;
+#X obj 240 570 fluide_masse6 -5.71429 0.625;
+#X obj 480 570 fluide_masse6 -5.42857 0.625;
+#X obj 720 570 fluide_masse6 -5.14286 0.625;
+#X obj 960 570 fluide_masse6 -4.85714 0.625;
+#X obj 0 600 fluide_masse6 -6 0.708333;
+#X obj 240 600 fluide_masse6 -5.71429 0.708333;
+#X obj 480 600 fluide_masse6 -5.42857 0.708333;
+#X obj 720 600 fluide_masse6 -5.14286 0.708333;
+#X obj 960 600 fluide_masse6 -4.85714 0.708333;
+#X obj 0 630 fluide_masse6 -6 0.791667;
+#X obj 240 630 fluide_masse6 -5.71429 0.791667;
+#X obj 480 630 fluide_masse6 -5.42857 0.791667;
+#X obj 720 630 fluide_masse6 -5.14286 0.791667;
+#X obj 960 630 fluide_masse6 -4.85714 0.791667;
+#X obj 0 660 fluide_masse6 -6 0.875;
+#X obj 240 660 fluide_masse6 -5.71429 0.875;
+#X obj 480 660 fluide_masse6 -5.42857 0.875;
+#X obj 720 660 fluide_masse6 -5.14286 0.875;
+#X obj 960 660 fluide_masse6 -4.85714 0.875;
+#X restore 344 180 pd pool;
+#N canvas 696 98 351 591 creation 0;
+#X obj 41 491 s pd-new;
+#X msg 95 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 40 464 menuclose;
+#X obj 40 47 sel 0 1;
+#X obj 40 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 69 72 t b b;
+#X obj 97 412 pack f f f f;
+#X obj 89 191 t b f f;
+#X obj 100 299 t f f;
+#X obj 107 219 * 30;
+#X obj 99 377 * 120;
+#X obj 126 328 / 7;
+#X obj 127 351 - 6;
+#X obj 163 346 - 11.5;
+#X msg 95 440 obj \$1 \$2 fluide_masse6 \$3 \$4;
+#X obj 101 275 * 2;
+#X obj 160 370 / 12;
+#X obj 69 163 ch_uzi 23;
+#X obj 88 247 ch_uzi 5;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 17 0;
+#X connect 5 1 1 0;
+#X connect 6 0 14 0;
+#X connect 7 0 18 0;
+#X connect 7 1 9 0;
+#X connect 7 1 13 0;
+#X connect 8 0 10 0;
+#X connect 8 1 11 0;
+#X connect 9 0 6 1;
+#X connect 10 0 6 0;
+#X connect 11 0 12 0;
+#X connect 12 0 6 2;
+#X connect 13 0 16 0;
+#X connect 14 0 0 0;
+#X connect 15 0 8 0;
+#X connect 16 0 6 3;
+#X connect 17 1 7 0;
+#X connect 18 1 15 0;
+#X restore 344 202 pd creation pool;
+#X msg 483 174 reset;
+#X obj 483 198 s masse;
+#X obj 345 149 sphere 0.5;
+#X obj 23 140 metro 10;
+#X obj 73 289 iCircle2D masse 0.1 0 0 10 0 0 0 0 0 0 0 0 -0.02 0;
+#X obj 58 268 iCircle2D masse -0.1 0 0 10 0 0 0 0 0 0 0 0 0.02 0;
+#X text 47 58 <- begin (change the metro speed for slow computer);
+#X floatatom 66 111 5 0 0 0 - - -;
+#X text 123 11 simulation of no weight particules in a no viscus fluid
+flow around a cylinder;
+#X text 390 248 <- left to right displacement field;
+#X text 390 279 <- this mouvement creation correspond to the simulation
+of the cylinder;
+#X obj 49 247 iAmbient2D masse 0 0 0 0 0 -1000 1000 -1000 1000 0.01
+0;
+#X text 233 108 <-1;
+#X connect 0 0 6 0;
+#X connect 0 1 14 0;
+#X connect 0 1 15 0;
+#X connect 0 1 21 0;
+#X connect 1 0 13 0;
+#X connect 2 0 10 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 7 0 12 0;
+#X connect 10 0 11 0;
+#X connect 13 0 0 0;
+#X connect 17 0 13 1;
diff --git a/exemples/22_gaz_molecules.pd b/exemples/22_gaz_molecules.pd
new file mode 100755
index 0000000..8048147
--- /dev/null
+++ b/exemples/22_gaz_molecules.pd
@@ -0,0 +1,204 @@
+#N canvas 131 77 652 468 10;
+#X obj 27 199 t b b;
+#X obj 27 121 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 116 203 loadbang;
+#X msg 245 217 0 \, destroy;
+#X obj 211 245 gemwin;
+#X msg 211 192 reset \, create \, 1;
+#X obj 27 436 s masse;
+#X obj 127 270 s reset_masse;
+#X msg 116 246 bang;
+#X text 358 302 <- give random speed when starting the patch;
+#X text 358 326 <- right border;
+#X text 359 348 <- left border;
+#X text 359 370 <- top border;
+#X text 359 392 <- bottom border;
+#N canvas 398 169 696 677 pool 0;
+#X msg 32 388 setXY \$1 \$2;
+#X obj 32 241 loadbang;
+#X obj 32 363 pack f f;
+#X obj 32 265 t b b;
+#X obj 53 465 gemhead;
+#X obj 53 488 translateXYZ;
+#X obj 42 438 unpack s f f;
+#X obj 139 243 r reset_masse;
+#X msg 32 574 setX \$1 \, setY \$2;
+#X obj 32 289 random 20;
+#X obj 32 335 / 4;
+#X obj 98 288 random 20;
+#X obj 98 334 / 4;
+#X obj 32 312 - 10;
+#X obj 98 310 - 10;
+#X obj 8 551 r link;
+#X obj 32 414 masse2D masse 100;
+#X obj 53 531 sphere 0.1;
+#X obj 33 598 iCircle2D masse 0 0 0.0001 0.3 0 0 1;
+#X obj 53 509 color 1 0 0;
+#X obj 303 303 fluide_masse5 29;
+#X obj 313 313 fluide_masse5 30;
+#X obj 203 203 fluide_masse5 19;
+#X obj 513 513 fluide_masse5 50;
+#X obj 443 443 fluide_masse5 43;
+#X obj 403 403 fluide_masse5 39;
+#X obj 193 193 fluide_masse5 18;
+#X obj 233 233 fluide_masse5 22;
+#X obj 93 93 fluide_masse5 8;
+#X obj 13 13 fluide_masse5 0;
+#X obj 183 183 fluide_masse5 17;
+#X obj 173 173 fluide_masse5 16;
+#X obj 23 23 fluide_masse5 1;
+#X obj 33 33 fluide_masse5 2;
+#X obj 43 43 fluide_masse5 3;
+#X obj 53 53 fluide_masse5 4;
+#X obj 63 63 fluide_masse5 5;
+#X obj 73 73 fluide_masse5 6;
+#X obj 83 83 fluide_masse5 7;
+#X obj 103 103 fluide_masse5 9;
+#X obj 113 113 fluide_masse5 10;
+#X obj 123 123 fluide_masse5 11;
+#X obj 133 133 fluide_masse5 12;
+#X obj 143 143 fluide_masse5 13;
+#X obj 153 153 fluide_masse5 14;
+#X obj 163 163 fluide_masse5 15;
+#X obj 213 213 fluide_masse5 20;
+#X obj 223 223 fluide_masse5 21;
+#X obj 243 243 fluide_masse5 23;
+#X obj 253 253 fluide_masse5 24;
+#X obj 263 263 fluide_masse5 25;
+#X obj 273 273 fluide_masse5 26;
+#X obj 283 283 fluide_masse5 27;
+#X obj 293 293 fluide_masse5 28;
+#X obj 323 323 fluide_masse5 31;
+#X obj 333 333 fluide_masse5 32;
+#X obj 343 343 fluide_masse5 33;
+#X obj 353 353 fluide_masse5 34;
+#X obj 363 363 fluide_masse5 35;
+#X obj 373 373 fluide_masse5 36;
+#X obj 383 383 fluide_masse5 37;
+#X obj 393 393 fluide_masse5 38;
+#X obj 413 413 fluide_masse5 40;
+#X obj 423 423 fluide_masse5 41;
+#X obj 433 433 fluide_masse5 42;
+#X obj 453 453 fluide_masse5 44;
+#X obj 463 463 fluide_masse5 45;
+#X obj 473 473 fluide_masse5 46;
+#X obj 483 483 fluide_masse5 47;
+#X obj 493 493 fluide_masse5 48;
+#X obj 503 503 fluide_masse5 49;
+#X obj 202 424 unpack s f f f;
+#X obj 324 533 osc~;
+#X obj 324 508 mtof;
+#X obj 324 425 loadbang;
+#X obj 282 597 *~;
+#X obj 281 533 line~;
+#X obj 282 627 dac~;
+#X obj 281 483 *;
+#X obj 324 452 random 60;
+#X msg 281 508 \$1 5;
+#X obj 281 452 * 1;
+#X obj 324 483 + 20;
+#X connect 0 0 16 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 9 0;
+#X connect 3 1 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 19 0;
+#X connect 6 1 5 1;
+#X connect 6 2 5 2;
+#X connect 7 0 3 0;
+#X connect 8 0 18 0;
+#X connect 9 0 13 0;
+#X connect 10 0 2 0;
+#X connect 11 0 14 0;
+#X connect 12 0 2 1;
+#X connect 13 0 10 0;
+#X connect 14 0 12 0;
+#X connect 15 0 18 0;
+#X connect 16 0 6 0;
+#X connect 16 0 8 0;
+#X connect 16 2 71 0;
+#X connect 19 0 17 0;
+#X connect 71 3 81 0;
+#X connect 72 0 75 1;
+#X connect 73 0 72 0;
+#X connect 74 0 79 0;
+#X connect 75 0 77 0;
+#X connect 75 0 77 1;
+#X connect 76 0 75 0;
+#X connect 78 0 80 0;
+#X connect 79 0 82 0;
+#X connect 80 0 76 0;
+#X connect 81 0 78 0;
+#X connect 81 0 78 1;
+#X connect 82 0 73 0;
+#X restore 428 180 pd pool;
+#N canvas 307 126 323 403 creation 0;
+#X obj 38 318 s pd-new;
+#X msg 95 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 43 289 menuclose;
+#X obj 83 242 pack f f f;
+#X obj 43 47 sel 0 1;
+#X obj 44 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 69 72 t b b;
+#X obj 83 191 t f f f;
+#X obj 110 217 * 10;
+#X obj 83 215 * 10;
+#X msg 81 270 obj \$1 \$2 fluide_masse5 \$3;
+#X obj 67 163 ch_uzi 50;
+#X connect 2 0 0 0;
+#X connect 3 0 10 0;
+#X connect 4 0 2 0;
+#X connect 4 1 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 11 0;
+#X connect 6 1 1 0;
+#X connect 7 0 9 0;
+#X connect 7 1 8 0;
+#X connect 7 2 3 2;
+#X connect 8 0 3 1;
+#X connect 9 0 3 0;
+#X connect 10 0 0 0;
+#X connect 11 1 7 0;
+#X restore 427 206 pd creation pool;
+#X obj 74 259 s link;
+#X obj 27 172 metro 5;
+#X obj 116 302 iAmbient2D masse 0 0 1 1;
+#X obj 52 325 iLine2D masse 3.5 -3.5 3.5 3.5 1000 0 0 10;
+#X obj 62 349 iLine2D masse -3.5 3.5 -3.5 -3.5 1000 0 0 10;
+#X obj 77 372 iLine2D masse 3.5 3.5 -3.5 3.5 1000 0 0 10;
+#X obj 88 395 iLine2D masse -3.5 -3.5 3.5 -3.5 1000 0 0 10;
+#X text 238 5 All masses interact each other;
+#X text 59 118 <- begin (change the metro speed for slow computer)
+;
+#X floatatom 64 141 5 0 0 0 - - -;
+#X text 185 25 All masses got a circular interactor around them. so
+each masses can interact with every other;
+#X text 181 62 each time a mass is boncing somwhere \, it emit a sound.
+(each masse got a frequency \, volum is prportional to forces apply
+to the mass). so \, it's a simple additive synthesis.;
+#X obj 119 154 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 119 176 metro 200;
+#X text 182 152 this one is nice to!;
+#X msg 426 234 \; pd dsp 1 \;;
+#X msg 492 234 \; pd dsp 0 \;;
+#X text 324 192 <- 1;
+#X connect 0 0 6 0;
+#X connect 0 1 16 0;
+#X connect 0 1 19 0;
+#X connect 0 1 20 0;
+#X connect 0 1 21 0;
+#X connect 0 1 22 0;
+#X connect 1 0 17 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 8 0 7 0;
+#X connect 8 0 18 0;
+#X connect 17 0 0 0;
+#X connect 25 0 17 1;
+#X connect 28 0 29 0;
+#X connect 29 0 1 0;
diff --git a/exemples/23_test.pd b/exemples/23_test.pd
new file mode 100755
index 0000000..5cdf183
--- /dev/null
+++ b/exemples/23_test.pd
@@ -0,0 +1,339 @@
+#N canvas 508 106 537 727 10;
+#X obj 17 90 t b b;
+#X obj 17 19 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 65 85 loadbang;
+#X msg 65 107 reset;
+#X msg 175 128 0 \, destroy;
+#X obj 17 130 s masse;
+#X obj 11 496 gemhead;
+#X obj 11 529 translateXYZ;
+#X obj 8 471 unpack s f f;
+#X obj 17 63 metro 5;
+#X obj 11 558 sphere 0.2;
+#X msg 198 150 reset \, dimen 400 800 \, create \, 1;
+#N canvas 435 26 414 248 bords 0;
+#X obj 10 9 inlet;
+#X obj 39 165 curve 2;
+#X obj 37 101 gemhead;
+#X obj 101 116 loadbang;
+#X obj 198 166 curve 2;
+#X obj 196 102 gemhead;
+#X obj 260 117 loadbang;
+#X msg 66 141 -2 1 0;
+#X msg 225 142 2 1 0;
+#X msg 130 139 -1 -3 0;
+#X msg 289 140 1 -3 0;
+#X obj 18 34 iSeg2D masse -2 1 -1 -3 10 0 0 1 0.3 0.3;
+#X obj 18 58 iSeg2D masse 1 -3 2 1 10 0 0 1 0.3 0.3;
+#X connect 0 0 11 0;
+#X connect 0 0 12 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 3 0 9 0;
+#X connect 5 0 4 0;
+#X connect 6 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 1 1;
+#X connect 8 0 4 1;
+#X connect 9 0 1 2;
+#X connect 10 0 4 2;
+#X restore 71 237 pd bords;
+#N canvas 585 242 753 499 curseur 0;
+#X obj 23 20 inlet;
+#X obj 343 300 curve 2;
+#X obj 343 247 gemhead;
+#X obj 516 23 loadbang;
+#X obj 568 307 curve 2;
+#X obj 568 257 gemhead;
+#X obj 399 143 sin;
+#X obj 361 142 cos;
+#X obj 400 166 * 0.8;
+#X obj 362 167 * 0.8;
+#X obj 360 216 pack f f 0;
+#X obj 365 118 t f f;
+#X obj 362 189 - 1;
+#X obj 400 190 - 2.5;
+#X obj 363 49 sel 0 1;
+#X obj 364 96 line;
+#X obj 365 24 inlet;
+#X obj 625 146 sin;
+#X obj 587 145 cos;
+#X obj 586 219 pack f f 0;
+#X obj 591 121 t f f;
+#X obj 589 52 sel 0 1;
+#X obj 590 99 line;
+#X obj 591 27 inlet;
+#X obj 588 170 * -0.8;
+#X obj 626 169 * -0.8;
+#X msg 362 70 -0.6 50;
+#X msg 419 71 0.3 50;
+#X msg 588 73 0.6 50;
+#X msg 644 74 -0.3 50;
+#X obj 627 194 - 2.5;
+#X obj 588 192 + 1;
+#X msg 380 274 -1.3 -2.5 0;
+#X msg 605 280 1.3 -2.5 0;
+#X msg 434 387 setX1 \$1;
+#X msg 442 412 setY1 \$1;
+#X msg 265 319 setX2 \$1;
+#X msg 285 344 setY2 \$1;
+#X obj 40 387 iSeg2D masse -1.3 -2.5 0 0 0.4 0 0 1 0.5 0.5;
+#X obj 26 441 iSeg2D masse 0 0 1.3 -2.5 0.4 0 0 1 0.5 0.5;
+#X connect 0 0 38 0;
+#X connect 0 0 39 0;
+#X connect 2 0 1 0;
+#X connect 3 0 32 0;
+#X connect 3 0 33 0;
+#X connect 5 0 4 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 13 0;
+#X connect 9 0 12 0;
+#X connect 10 0 1 1;
+#X connect 11 0 7 0;
+#X connect 11 1 6 0;
+#X connect 12 0 10 0;
+#X connect 12 0 36 0;
+#X connect 13 0 10 1;
+#X connect 13 0 37 0;
+#X connect 14 0 26 0;
+#X connect 14 1 27 0;
+#X connect 15 0 11 0;
+#X connect 16 0 14 0;
+#X connect 17 0 25 0;
+#X connect 18 0 24 0;
+#X connect 19 0 4 1;
+#X connect 20 0 18 0;
+#X connect 20 1 17 0;
+#X connect 21 0 28 0;
+#X connect 21 1 29 0;
+#X connect 22 0 20 0;
+#X connect 23 0 21 0;
+#X connect 24 0 31 0;
+#X connect 25 0 30 0;
+#X connect 26 0 15 0;
+#X connect 27 0 15 0;
+#X connect 28 0 22 0;
+#X connect 29 0 22 0;
+#X connect 30 0 19 1;
+#X connect 30 0 35 0;
+#X connect 31 0 19 0;
+#X connect 31 0 34 0;
+#X connect 32 0 1 2;
+#X connect 33 0 4 2;
+#X connect 34 0 39 0;
+#X connect 35 0 39 0;
+#X connect 36 0 38 0;
+#X connect 37 0 38 0;
+#X restore 46 357 pd curseur;
+#N canvas 401 13 480 352 bords2 0;
+#X obj 10 9 inlet;
+#X obj 78 189 curve 2;
+#X obj 76 125 gemhead;
+#X obj 140 140 loadbang;
+#X obj 237 190 curve 2;
+#X obj 235 126 gemhead;
+#X obj 299 141 loadbang;
+#X msg 105 165 -1.8 4 0;
+#X msg 169 163 -1.8 -1 0;
+#X msg 264 166 1.8 4 0;
+#X msg 327 164 1.8 -1 0;
+#X obj 42 51 iSeg2D masse -1.8 4 -1.8 -1 2 0 0 0.4 0.4 0.5;
+#X obj 42 75 iSeg2D masse 1.8 -1.2 1.8 4 2 0 0 0.4 0.4 0.5;
+#X connect 0 0 11 0;
+#X connect 0 0 12 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 1 1;
+#X connect 8 0 1 2;
+#X connect 9 0 4 1;
+#X connect 10 0 4 2;
+#X restore 71 261 pd bords2;
+#X obj 54 332 gemmouse;
+#N canvas 399 45 480 347 top 0;
+#X obj 10 9 inlet;
+#X obj 78 189 curve 2;
+#X obj 76 125 gemhead;
+#X obj 140 140 loadbang;
+#X msg 105 165 4 3.5 0;
+#X msg 169 163 -4 3.5 0;
+#X obj 16 47 iSeg2D masse 4 3.5 -4 3.5 2 0 0 0.4 0.4 0.4;
+#X connect 0 0 6 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 1;
+#X connect 5 0 1 2;
+#X restore 71 284 pd top;
+#N canvas 567 215 490 520 circle 0;
+#X obj 23 15 inlet;
+#X obj 26 323 gemhead;
+#X obj 26 347 translateXYZ 0 2.5 0;
+#X obj 27 428 sphere 0.3;
+#X obj 157 324 gemhead;
+#X obj 158 429 sphere 0.3;
+#X obj 288 325 gemhead;
+#X obj 289 430 sphere 0.3;
+#X obj 157 348 translateXYZ 1 1.5 0;
+#X obj 288 349 translateXYZ -1 1.5 0;
+#X obj 36 51 iCircle2D masse 0 2.5 0 0.3 1;
+#X obj 36 75 iCircle2D masse 1 1.5 0 0.3 1;
+#X obj 37 97 iCircle2D masse -1 1.5 0 0.3 1;
+#X obj 26 372 color 1 1 1;
+#X obj 156 370 color 1 1 1;
+#X obj 287 371 color 1 1 1;
+#X msg 100 280 1 1 1;
+#X msg 85 233 1 0 0;
+#X obj 91 188 r color1;
+#X obj 90 211 sel 1;
+#X obj 100 258 delay 200;
+#X msg 214 282 1 1 1;
+#X msg 199 235 1 0 0;
+#X obj 204 213 sel 1;
+#X obj 214 260 delay 200;
+#X msg 344 271 1 1 1;
+#X msg 329 224 1 0 0;
+#X obj 334 202 sel 1;
+#X obj 344 249 delay 200;
+#X obj 205 190 r color2;
+#X obj 335 179 r color3;
+#X connect 0 0 10 0;
+#X connect 0 0 11 0;
+#X connect 0 0 12 0;
+#X connect 1 0 2 0;
+#X connect 2 0 13 0;
+#X connect 4 0 8 0;
+#X connect 6 0 9 0;
+#X connect 8 0 14 0;
+#X connect 9 0 15 0;
+#X connect 13 0 3 0;
+#X connect 14 0 5 0;
+#X connect 15 0 7 0;
+#X connect 16 0 13 1;
+#X connect 17 0 13 1;
+#X connect 18 0 19 0;
+#X connect 19 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 16 0;
+#X connect 21 0 14 1;
+#X connect 22 0 14 1;
+#X connect 23 0 22 0;
+#X connect 23 0 24 0;
+#X connect 24 0 21 0;
+#X connect 25 0 15 1;
+#X connect 26 0 15 1;
+#X connect 27 0 26 0;
+#X connect 27 0 28 0;
+#X connect 28 0 25 0;
+#X connect 29 0 23 0;
+#X connect 30 0 27 0;
+#X restore 70 215 pd circle;
+#X obj 8 440 masse2D masse 10 1.5 3.4;
+#X msg 128 400 \; masse reset \;;
+#X obj 121 296 loadbang;
+#X msg 121 320 0;
+#X obj 70 193 iAmbient2D masse 0 -0.001 0 0 0.003;
+#X obj 140 496 change;
+#X obj 140 538 change;
+#X obj 139 580 change;
+#X obj 103 649 f;
+#X obj 103 673 + 1;
+#X obj 103 621 sel 1;
+#X floatatom 103 696 5 0 0 0 - - -;
+#X text 153 696 <- score;
+#X obj 185 495 s color1;
+#X obj 185 538 s color2;
+#X obj 187 579 s color3;
+#X msg 69 620 -1;
+#X floatatom 54 40 5 0 0 0 - - -;
+#X text 180 440 Change the color if the masse in in interaction with
+a circle.;
+#X text 244 15 How to use test objects;
+#X text 45 17 <- begin;
+#X obj 252 235 keyname;
+#X msg 289 285 1;
+#X msg 332 284 0;
+#X obj 252 315 spigot;
+#X obj 363 234 keyname;
+#X msg 400 284 1;
+#X msg 449 283 0;
+#X obj 363 314 spigot;
+#X obj 289 260 sel Left;
+#X obj 400 260 sel Right;
+#X obj 127 354 key;
+#X obj 127 375 sel 32;
+#X obj 140 474 tCircle2D 0 2.5 0 0.3;
+#X obj 140 516 tCircle2D 1 1.5 0 0.3;
+#X obj 139 558 tCircle2D -1 1.5 0 0.3;
+#X text 172 34 Test object (tCircle)can test the position of a masse.
+;
+#X text 168 52 this is use to count the score and make some animation
+then the masse is bouncing somewhere;
+#X obj 161 171 gemwin 50;
+#X msg 161 98 reset \, create \, 1;
+#X connect 0 0 5 0;
+#X connect 0 1 12 0;
+#X connect 0 1 13 0;
+#X connect 0 1 14 0;
+#X connect 0 1 16 0;
+#X connect 0 1 22 0;
+#X connect 0 1 17 0;
+#X connect 1 0 9 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 56 0;
+#X connect 6 0 7 0;
+#X connect 7 0 10 0;
+#X connect 8 1 7 1;
+#X connect 8 2 7 2;
+#X connect 9 0 0 0;
+#X connect 11 0 56 0;
+#X connect 15 2 13 1;
+#X connect 15 3 19 0;
+#X connect 15 3 34 0;
+#X connect 15 4 13 2;
+#X connect 18 0 8 0;
+#X connect 18 0 51 0;
+#X connect 18 0 52 0;
+#X connect 18 0 53 0;
+#X connect 20 0 21 0;
+#X connect 21 0 13 2;
+#X connect 21 0 13 1;
+#X connect 23 0 28 0;
+#X connect 23 0 31 0;
+#X connect 24 0 28 0;
+#X connect 24 0 32 0;
+#X connect 25 0 28 0;
+#X connect 25 0 33 0;
+#X connect 26 0 27 0;
+#X connect 27 0 26 1;
+#X connect 27 0 29 0;
+#X connect 28 0 26 0;
+#X connect 34 0 26 0;
+#X connect 35 0 9 1;
+#X connect 39 0 42 0;
+#X connect 39 1 47 0;
+#X connect 40 0 42 1;
+#X connect 41 0 42 1;
+#X connect 42 0 13 1;
+#X connect 43 0 46 0;
+#X connect 43 1 48 0;
+#X connect 44 0 46 1;
+#X connect 45 0 46 1;
+#X connect 46 0 13 2;
+#X connect 47 0 40 0;
+#X connect 47 1 41 0;
+#X connect 48 0 44 0;
+#X connect 48 1 45 0;
+#X connect 49 0 50 0;
+#X connect 50 0 19 0;
+#X connect 50 0 34 0;
+#X connect 51 0 23 0;
+#X connect 52 0 24 0;
+#X connect 53 0 25 0;
+#X connect 57 0 56 0;
diff --git a/exemples/24_sand.pd b/exemples/24_sand.pd
new file mode 100755
index 0000000..0ace14e
--- /dev/null
+++ b/exemples/24_sand.pd
@@ -0,0 +1,140 @@
+#N canvas 167 110 527 418 10;
+#X obj 20 164 t b b;
+#X obj 20 98 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 215 187 0 \, destroy;
+#X obj 181 215 gemwin;
+#X obj 20 202 s masse;
+#N canvas 815 340 1100 365 pool 0;
+#X obj 594 157 loadbang;
+#X obj 240 240 sand 1.5 5.4;
+#X obj 240 30 sand -2 5.4;
+#X obj 240 0 sand -2.5 5.4;
+#X obj 720 90 sand -1 6.2;
+#X obj 720 150 sand 0 6.2;
+#X obj 720 30 sand -2 6.2;
+#X obj 480 150 sand 0 5.8;
+#X obj 240 270 sand 2 5.4;
+#X obj 240 150 sand 0 5.4;
+#X obj 240 120 sand -0.5 5.4;
+#X obj 240 180 sand 0.5 5.4;
+#X obj 240 60 sand -1.5 5.4;
+#X obj 240 90 sand -1 5.4;
+#X obj 0 0 sand -2.5 5;
+#X obj 480 0 sand -2.5 5.8;
+#X obj 720 0 sand -2.5 6.2;
+#X obj 960 0 sand -2.5 6.6;
+#X obj 0 30 sand -2 5;
+#X obj 480 30 sand -2 5.8;
+#X obj 960 30 sand -2 6.6;
+#X obj 0 60 sand -1.5 5;
+#X obj 480 60 sand -1.5 5.8;
+#X obj 720 60 sand -1.5 6.2;
+#X obj 960 60 sand -1.5 6.6;
+#X obj 0 90 sand -1 5;
+#X obj 480 90 sand -1 5.8;
+#X obj 960 90 sand -1 6.6;
+#X obj 0 120 sand -0.5 5;
+#X obj 480 120 sand -0.5 5.8;
+#X obj 720 120 sand -0.5 6.2;
+#X obj 960 120 sand -0.5 6.6;
+#X obj 0 150 sand 0 5;
+#X obj 960 150 sand 0 6.6;
+#X obj 0 180 sand 0.5 5;
+#X obj 480 180 sand 0.5 5.8;
+#X obj 720 180 sand 0.5 6.2;
+#X obj 960 180 sand 0.5 6.6;
+#X obj 0 210 sand 1 5;
+#X obj 240 210 sand 1 5.4;
+#X obj 480 210 sand 1 5.8;
+#X obj 720 210 sand 1 6.2;
+#X obj 960 210 sand 1 6.6;
+#X obj 0 240 sand 1.5 5;
+#X obj 480 240 sand 1.5 5.8;
+#X obj 720 240 sand 1.5 6.2;
+#X obj 960 240 sand 1.5 6.6;
+#X obj 0 270 sand 2 5;
+#X obj 480 270 sand 2 5.8;
+#X obj 720 270 sand 2 6.2;
+#X obj 960 270 sand 2 6.6;
+#X connect 0 0 35 0;
+#X restore 358 243 pd pool;
+#N canvas 696 98 355 595 creation 0;
+#X obj 41 491 s pd-new;
+#X msg 95 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 40 464 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 44 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 69 72 t b b;
+#X obj 97 412 pack f f f f;
+#X obj 89 191 t b f f;
+#X obj 100 299 t f f;
+#X obj 107 219 * 30;
+#X obj 99 377 * 120;
+#X obj 101 275 * 2;
+#X obj 163 346 - 5;
+#X obj 160 370 / 2;
+#X obj 126 328 / 5;
+#X msg 96 440 obj \$1 \$2 sand \$3 \$4;
+#X obj 127 351 + 5;
+#X obj 73 163 ch_uzi 10;
+#X obj 88 247 ch_uzi 5;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 17 0;
+#X connect 5 1 1 0;
+#X connect 6 0 15 0;
+#X connect 7 0 18 0;
+#X connect 7 1 9 0;
+#X connect 7 1 12 0;
+#X connect 8 0 10 0;
+#X connect 8 1 14 0;
+#X connect 9 0 6 1;
+#X connect 10 0 6 0;
+#X connect 11 0 8 0;
+#X connect 12 0 13 0;
+#X connect 13 0 6 2;
+#X connect 14 0 16 0;
+#X connect 15 0 0 0;
+#X connect 16 0 6 3;
+#X connect 17 1 7 0;
+#X connect 18 1 11 0;
+#X restore 359 268 pd creation pool;
+#X obj 83 342 s link;
+#X obj 59 299 iCircle2D masse 3 2 0 2.95 0 0 1 0 0 0 0.1;
+#X obj 69 319 iCircle2D masse -3 2 0 2.95 0 0 1 0 0 0 0.1;
+#X text 184 3 sand simulation;
+#X text 69 27 all masse interact each other. They are in a viscuce
+place \, with vertical force (gravity);
+#X text 70 59 2 big circles (invisible) made the masses to go down
+like in a sand glass.;
+#X text 83 369 Masses are not very stable \, due to internal forces
+of the structure.;
+#X text 41 96 <- begin (change metro speed for slow computer);
+#X floatatom 57 116 5 0 0 0 - - -;
+#X msg 181 158 reset \, view 0 0 6 \, create \, 1;
+#X msg 94 178 reset;
+#X obj 78 147 t b b;
+#X msg 75 201 \; reset bang \;;
+#X obj 116 122 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 45 263 iAmbient2D masse 0 -0.0005 0 0 0.03;
+#X obj 20 137 metro 5;
+#X text 366 158 <- 1;
+#X connect 0 0 4 0;
+#X connect 0 1 9 0;
+#X connect 0 1 8 0;
+#X connect 0 1 7 0;
+#X connect 0 1 21 0;
+#X connect 1 0 22 0;
+#X connect 2 0 3 0;
+#X connect 15 0 22 1;
+#X connect 16 0 3 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 18 1 17 0;
+#X connect 20 0 18 0;
+#X connect 22 0 0 0;
diff --git a/exemples/25_sand2.pd b/exemples/25_sand2.pd
new file mode 100755
index 0000000..69cd676
--- /dev/null
+++ b/exemples/25_sand2.pd
@@ -0,0 +1,230 @@
+#N canvas 210 246 506 335 10;
+#X obj 23 122 t b b;
+#X obj 23 50 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 222 144 0 \, destroy;
+#X obj 199 172 gemwin;
+#X obj 23 160 s masse;
+#N canvas 61 550 1250 480 pool 0;
+#X obj 480 90 sand -1 9.8;
+#X obj 720 60 sand -1.5 10.2;
+#X obj 480 180 sand 0.5 9.8;
+#X obj 480 120 sand -0.5 9.8;
+#X obj 480 240 sand 1.5 9.8;
+#X obj 0 0 sand -2.5 9;
+#X obj 240 0 sand -2.5 9.4;
+#X obj 480 0 sand -2.5 9.8;
+#X obj 720 0 sand -2.5 10.2;
+#X obj 960 0 sand -2.5 10.6;
+#X obj 1200 0 sand -2.5 11;
+#X obj 1440 0 sand -2.5 11.4;
+#X obj 1680 0 sand -2.5 11.8;
+#X obj 1920 0 sand -2.5 12.2;
+#X obj 2160 0 sand -2.5 12.6;
+#X obj 2400 0 sand -2.5 13;
+#X obj 2640 0 sand -2.5 13.4;
+#X obj 2880 0 sand -2.5 13.8;
+#X obj 3120 0 sand -2.5 14.2;
+#X obj 3360 0 sand -2.5 14.6;
+#X obj 0 30 sand -2 9;
+#X obj 240 30 sand -2 9.4;
+#X obj 480 30 sand -2 9.8;
+#X obj 720 30 sand -2 10.2;
+#X obj 960 30 sand -2 10.6;
+#X obj 1200 30 sand -2 11;
+#X obj 1440 30 sand -2 11.4;
+#X obj 1680 30 sand -2 11.8;
+#X obj 1920 30 sand -2 12.2;
+#X obj 2160 30 sand -2 12.6;
+#X obj 2400 30 sand -2 13;
+#X obj 2640 30 sand -2 13.4;
+#X obj 2880 30 sand -2 13.8;
+#X obj 3120 30 sand -2 14.2;
+#X obj 3360 30 sand -2 14.6;
+#X obj 0 60 sand -1.5 9;
+#X obj 240 60 sand -1.5 9.4;
+#X obj 480 60 sand -1.5 9.8;
+#X obj 960 60 sand -1.5 10.6;
+#X obj 1200 60 sand -1.5 11;
+#X obj 1440 60 sand -1.5 11.4;
+#X obj 1680 60 sand -1.5 11.8;
+#X obj 1920 60 sand -1.5 12.2;
+#X obj 2160 60 sand -1.5 12.6;
+#X obj 2400 60 sand -1.5 13;
+#X obj 2640 60 sand -1.5 13.4;
+#X obj 2880 60 sand -1.5 13.8;
+#X obj 3120 60 sand -1.5 14.2;
+#X obj 3360 60 sand -1.5 14.6;
+#X obj 0 90 sand -1 9;
+#X obj 240 90 sand -1 9.4;
+#X obj 720 90 sand -1 10.2;
+#X obj 960 90 sand -1 10.6;
+#X obj 1200 90 sand -1 11;
+#X obj 1440 90 sand -1 11.4;
+#X obj 1680 90 sand -1 11.8;
+#X obj 1920 90 sand -1 12.2;
+#X obj 2160 90 sand -1 12.6;
+#X obj 2400 90 sand -1 13;
+#X obj 2640 90 sand -1 13.4;
+#X obj 2880 90 sand -1 13.8;
+#X obj 3120 90 sand -1 14.2;
+#X obj 3360 90 sand -1 14.6;
+#X obj 0 120 sand -0.5 9;
+#X obj 240 120 sand -0.5 9.4;
+#X obj 720 120 sand -0.5 10.2;
+#X obj 960 120 sand -0.5 10.6;
+#X obj 1200 120 sand -0.5 11;
+#X obj 1440 120 sand -0.5 11.4;
+#X obj 1680 120 sand -0.5 11.8;
+#X obj 1920 120 sand -0.5 12.2;
+#X obj 2160 120 sand -0.5 12.6;
+#X obj 2400 120 sand -0.5 13;
+#X obj 2640 120 sand -0.5 13.4;
+#X obj 2880 120 sand -0.5 13.8;
+#X obj 3120 120 sand -0.5 14.2;
+#X obj 3360 120 sand -0.5 14.6;
+#X obj 0 150 sand 0 9;
+#X obj 240 150 sand 0 9.4;
+#X obj 480 150 sand 0 9.8;
+#X obj 720 150 sand 0 10.2;
+#X obj 960 150 sand 0 10.6;
+#X obj 1200 150 sand 0 11;
+#X obj 1440 150 sand 0 11.4;
+#X obj 1680 150 sand 0 11.8;
+#X obj 1920 150 sand 0 12.2;
+#X obj 2160 150 sand 0 12.6;
+#X obj 2400 150 sand 0 13;
+#X obj 2640 150 sand 0 13.4;
+#X obj 2880 150 sand 0 13.8;
+#X obj 3120 150 sand 0 14.2;
+#X obj 3360 150 sand 0 14.6;
+#X obj 0 180 sand 0.5 9;
+#X obj 240 180 sand 0.5 9.4;
+#X obj 720 180 sand 0.5 10.2;
+#X obj 960 180 sand 0.5 10.6;
+#X obj 1200 180 sand 0.5 11;
+#X obj 1440 180 sand 0.5 11.4;
+#X obj 1680 180 sand 0.5 11.8;
+#X obj 1920 180 sand 0.5 12.2;
+#X obj 2160 180 sand 0.5 12.6;
+#X obj 2400 180 sand 0.5 13;
+#X obj 2640 180 sand 0.5 13.4;
+#X obj 2880 180 sand 0.5 13.8;
+#X obj 3120 180 sand 0.5 14.2;
+#X obj 3360 180 sand 0.5 14.6;
+#X obj 0 210 sand 1 9;
+#X obj 240 210 sand 1 9.4;
+#X obj 480 210 sand 1 9.8;
+#X obj 720 210 sand 1 10.2;
+#X obj 960 210 sand 1 10.6;
+#X obj 1200 210 sand 1 11;
+#X obj 1440 210 sand 1 11.4;
+#X obj 1680 210 sand 1 11.8;
+#X obj 1920 210 sand 1 12.2;
+#X obj 2160 210 sand 1 12.6;
+#X obj 2400 210 sand 1 13;
+#X obj 2640 210 sand 1 13.4;
+#X obj 2880 210 sand 1 13.8;
+#X obj 3120 210 sand 1 14.2;
+#X obj 3360 210 sand 1 14.6;
+#X obj 0 240 sand 1.5 9;
+#X obj 240 240 sand 1.5 9.4;
+#X obj 720 240 sand 1.5 10.2;
+#X obj 960 240 sand 1.5 10.6;
+#X obj 1200 240 sand 1.5 11;
+#X obj 1440 240 sand 1.5 11.4;
+#X obj 1680 240 sand 1.5 11.8;
+#X obj 1920 240 sand 1.5 12.2;
+#X obj 2160 240 sand 1.5 12.6;
+#X obj 2400 240 sand 1.5 13;
+#X obj 2640 240 sand 1.5 13.4;
+#X obj 2880 240 sand 1.5 13.8;
+#X obj 3120 240 sand 1.5 14.2;
+#X obj 3360 240 sand 1.5 14.6;
+#X obj 0 270 sand 2 9;
+#X obj 240 270 sand 2 9.4;
+#X obj 480 270 sand 2 9.8;
+#X obj 720 270 sand 2 10.2;
+#X obj 960 270 sand 2 10.6;
+#X obj 1200 270 sand 2 11;
+#X obj 1440 270 sand 2 11.4;
+#X obj 1680 270 sand 2 11.8;
+#X obj 1920 270 sand 2 12.2;
+#X obj 2160 270 sand 2 12.6;
+#X obj 2400 270 sand 2 13;
+#X obj 2640 270 sand 2 13.4;
+#X obj 2880 270 sand 2 13.8;
+#X obj 3120 270 sand 2 14.2;
+#X obj 3360 270 sand 2 14.6;
+#X restore 317 122 pd pool;
+#N canvas 696 98 365 605 creation 0;
+#X obj 41 491 s pd-new;
+#X msg 95 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 40 464 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 44 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 69 72 t b b;
+#X obj 97 412 pack f f f f;
+#X obj 89 191 t b f f;
+#X obj 100 299 t f f;
+#X obj 107 219 * 30;
+#X obj 99 377 * 120;
+#X obj 163 346 - 5;
+#X obj 126 328 / 5;
+#X msg 96 440 obj \$1 \$2 sand \$3 \$4;
+#X obj 101 275 * 2;
+#X obj 127 351 + 5;
+#X obj 160 370 / 4;
+#X obj 73 163 ch_uzi 10;
+#X obj 88 247 ch_uzi 15;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 17 0;
+#X connect 5 1 1 0;
+#X connect 6 0 13 0;
+#X connect 7 0 18 0;
+#X connect 7 1 9 0;
+#X connect 7 1 11 0;
+#X connect 8 0 10 0;
+#X connect 8 1 12 0;
+#X connect 9 0 6 1;
+#X connect 10 0 6 0;
+#X connect 11 0 16 0;
+#X connect 12 0 15 0;
+#X connect 13 0 0 0;
+#X connect 14 0 8 0;
+#X connect 15 0 6 3;
+#X connect 16 0 6 2;
+#X connect 17 1 7 0;
+#X connect 18 1 14 0;
+#X restore 317 147 pd creation pool;
+#X obj 83 287 s link;
+#X text 212 4 sand;
+#X floatatom 66 72 5 0 0 0 - - -;
+#X obj 23 95 metro 10;
+#X msg 199 94 reset \, view 0 0 -8 0 0 0 0 1 0 \, create \, 1;
+#X text 125 18 it's the same than previus exemple \, but with more
+masses \, and diferents physical properties so that the global shape
+is diferent.;
+#X obj 83 143 s masse;
+#X msg 83 120 reset \, setT 0.9;
+#X obj 49 221 iAmbient2D masse 0 -0.00051 0 0 0.031 -1000 1000 -1000
+1000;
+#X obj 59 245 iCircle2D masse 3.1 2 0 3 0 0 1 0 0 0 0.1;
+#X obj 69 264 iCircle2D masse -3.1 2 0 3 0 0 1 0 0 0 0.1;
+#X text 461 94 <- 1;
+#X text 49 47 <- 2;
+#X connect 0 0 4 0;
+#X connect 0 1 7 0;
+#X connect 0 1 15 0;
+#X connect 0 1 16 0;
+#X connect 0 1 17 0;
+#X connect 1 0 10 0;
+#X connect 2 0 3 0;
+#X connect 9 0 10 1;
+#X connect 10 0 0 0;
+#X connect 11 0 3 0;
+#X connect 14 0 13 0;
diff --git a/exemples/26_sand3.pd b/exemples/26_sand3.pd
new file mode 100755
index 0000000..e1b2408
--- /dev/null
+++ b/exemples/26_sand3.pd
@@ -0,0 +1,234 @@
+#N canvas 695 527 588 372 10;
+#X obj 19 112 t b b;
+#X obj 19 36 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 137 86 loadbang;
+#X msg 237 138 0 \, destroy;
+#X obj 203 166 gemwin;
+#X obj 19 150 s masse;
+#N canvas 39 357 1226 456 pool 0;
+#X obj 480 120 sand -0.25 5.8;
+#X obj 0 0 sand -1.25 5;
+#X obj 240 0 sand -1.25 5.4;
+#X obj 480 0 sand -1.25 5.8;
+#X obj 720 0 sand -1.25 6.2;
+#X obj 960 0 sand -1.25 6.6;
+#X obj 1200 0 sand -1.25 7;
+#X obj 1440 0 sand -1.25 7.4;
+#X obj 1680 0 sand -1.25 7.8;
+#X obj 1920 0 sand -1.25 8.2;
+#X obj 2160 0 sand -1.25 8.6;
+#X obj 2400 0 sand -1.25 9;
+#X obj 2640 0 sand -1.25 9.4;
+#X obj 2880 0 sand -1.25 9.8;
+#X obj 3120 0 sand -1.25 10.2;
+#X obj 3360 0 sand -1.25 10.6;
+#X obj 0 30 sand -1 5;
+#X obj 240 30 sand -1 5.4;
+#X obj 480 30 sand -1 5.8;
+#X obj 720 30 sand -1 6.2;
+#X obj 960 30 sand -1 6.6;
+#X obj 1200 30 sand -1 7;
+#X obj 1440 30 sand -1 7.4;
+#X obj 1680 30 sand -1 7.8;
+#X obj 1920 30 sand -1 8.2;
+#X obj 2160 30 sand -1 8.6;
+#X obj 2400 30 sand -1 9;
+#X obj 2640 30 sand -1 9.4;
+#X obj 2880 30 sand -1 9.8;
+#X obj 3120 30 sand -1 10.2;
+#X obj 3360 30 sand -1 10.6;
+#X obj 0 60 sand -0.75 5;
+#X obj 240 60 sand -0.75 5.4;
+#X obj 480 60 sand -0.75 5.8;
+#X obj 720 60 sand -0.75 6.2;
+#X obj 960 60 sand -0.75 6.6;
+#X obj 1200 60 sand -0.75 7;
+#X obj 1440 60 sand -0.75 7.4;
+#X obj 1680 60 sand -0.75 7.8;
+#X obj 1920 60 sand -0.75 8.2;
+#X obj 2160 60 sand -0.75 8.6;
+#X obj 2400 60 sand -0.75 9;
+#X obj 2640 60 sand -0.75 9.4;
+#X obj 2880 60 sand -0.75 9.8;
+#X obj 3120 60 sand -0.75 10.2;
+#X obj 3360 60 sand -0.75 10.6;
+#X obj 0 90 sand -0.5 5;
+#X obj 240 90 sand -0.5 5.4;
+#X obj 480 90 sand -0.5 5.8;
+#X obj 720 90 sand -0.5 6.2;
+#X obj 960 90 sand -0.5 6.6;
+#X obj 1200 90 sand -0.5 7;
+#X obj 1440 90 sand -0.5 7.4;
+#X obj 1680 90 sand -0.5 7.8;
+#X obj 1920 90 sand -0.5 8.2;
+#X obj 2160 90 sand -0.5 8.6;
+#X obj 2400 90 sand -0.5 9;
+#X obj 2640 90 sand -0.5 9.4;
+#X obj 2880 90 sand -0.5 9.8;
+#X obj 3120 90 sand -0.5 10.2;
+#X obj 3360 90 sand -0.5 10.6;
+#X obj 0 120 sand -0.25 5;
+#X obj 240 120 sand -0.25 5.4;
+#X obj 720 120 sand -0.25 6.2;
+#X obj 960 120 sand -0.25 6.6;
+#X obj 1200 120 sand -0.25 7;
+#X obj 1440 120 sand -0.25 7.4;
+#X obj 1680 120 sand -0.25 7.8;
+#X obj 1920 120 sand -0.25 8.2;
+#X obj 2160 120 sand -0.25 8.6;
+#X obj 2400 120 sand -0.25 9;
+#X obj 2640 120 sand -0.25 9.4;
+#X obj 2880 120 sand -0.25 9.8;
+#X obj 3120 120 sand -0.25 10.2;
+#X obj 3360 120 sand -0.25 10.6;
+#X obj 0 150 sand 0 5;
+#X obj 240 150 sand 0 5.4;
+#X obj 480 150 sand 0 5.8;
+#X obj 720 150 sand 0 6.2;
+#X obj 960 150 sand 0 6.6;
+#X obj 1200 150 sand 0 7;
+#X obj 1440 150 sand 0 7.4;
+#X obj 1680 150 sand 0 7.8;
+#X obj 1920 150 sand 0 8.2;
+#X obj 2160 150 sand 0 8.6;
+#X obj 2400 150 sand 0 9;
+#X obj 2640 150 sand 0 9.4;
+#X obj 2880 150 sand 0 9.8;
+#X obj 3120 150 sand 0 10.2;
+#X obj 3360 150 sand 0 10.6;
+#X obj 0 180 sand 0.25 5;
+#X obj 240 180 sand 0.25 5.4;
+#X obj 480 180 sand 0.25 5.8;
+#X obj 720 180 sand 0.25 6.2;
+#X obj 960 180 sand 0.25 6.6;
+#X obj 1200 180 sand 0.25 7;
+#X obj 1440 180 sand 0.25 7.4;
+#X obj 1680 180 sand 0.25 7.8;
+#X obj 1920 180 sand 0.25 8.2;
+#X obj 2160 180 sand 0.25 8.6;
+#X obj 2400 180 sand 0.25 9;
+#X obj 2640 180 sand 0.25 9.4;
+#X obj 2880 180 sand 0.25 9.8;
+#X obj 3120 180 sand 0.25 10.2;
+#X obj 3360 180 sand 0.25 10.6;
+#X obj 0 210 sand 0.5 5;
+#X obj 240 210 sand 0.5 5.4;
+#X obj 480 210 sand 0.5 5.8;
+#X obj 720 210 sand 0.5 6.2;
+#X obj 960 210 sand 0.5 6.6;
+#X obj 1200 210 sand 0.5 7;
+#X obj 1440 210 sand 0.5 7.4;
+#X obj 1680 210 sand 0.5 7.8;
+#X obj 1920 210 sand 0.5 8.2;
+#X obj 2160 210 sand 0.5 8.6;
+#X obj 2400 210 sand 0.5 9;
+#X obj 2640 210 sand 0.5 9.4;
+#X obj 2880 210 sand 0.5 9.8;
+#X obj 3120 210 sand 0.5 10.2;
+#X obj 3360 210 sand 0.5 10.6;
+#X obj 0 240 sand 0.75 5;
+#X obj 240 240 sand 0.75 5.4;
+#X obj 480 240 sand 0.75 5.8;
+#X obj 720 240 sand 0.75 6.2;
+#X obj 960 240 sand 0.75 6.6;
+#X obj 1200 240 sand 0.75 7;
+#X obj 1440 240 sand 0.75 7.4;
+#X obj 1680 240 sand 0.75 7.8;
+#X obj 1920 240 sand 0.75 8.2;
+#X obj 2160 240 sand 0.75 8.6;
+#X obj 2400 240 sand 0.75 9;
+#X obj 2640 240 sand 0.75 9.4;
+#X obj 2880 240 sand 0.75 9.8;
+#X obj 3120 240 sand 0.75 10.2;
+#X obj 3360 240 sand 0.75 10.6;
+#X obj 0 270 sand 1 5;
+#X obj 240 270 sand 1 5.4;
+#X obj 480 270 sand 1 5.8;
+#X obj 720 270 sand 1 6.2;
+#X obj 960 270 sand 1 6.6;
+#X obj 1200 270 sand 1 7;
+#X obj 1440 270 sand 1 7.4;
+#X obj 1680 270 sand 1 7.8;
+#X obj 1920 270 sand 1 8.2;
+#X obj 2160 270 sand 1 8.6;
+#X obj 2400 270 sand 1 9;
+#X obj 2640 270 sand 1 9.4;
+#X obj 2880 270 sand 1 9.8;
+#X obj 3120 270 sand 1 10.2;
+#X obj 3360 270 sand 1 10.6;
+#X restore 324 139 pd pool;
+#N canvas 366 192 363 603 creation 0;
+#X obj 41 491 s pd-new;
+#X msg 95 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 40 464 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 44 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 69 72 t b b;
+#X obj 97 412 pack f f f f;
+#X obj 89 191 t b f f;
+#X obj 100 299 t f f;
+#X obj 107 219 * 30;
+#X obj 99 377 * 120;
+#X obj 101 275 * 2;
+#X obj 163 346 - 5;
+#X obj 126 328 / 5;
+#X msg 96 440 obj \$1 \$2 sand \$3 \$4;
+#X obj 127 351 + 5;
+#X obj 160 370 / 4;
+#X obj 73 163 ch_uzi 10;
+#X obj 88 247 ch_uzi 15;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 17 0;
+#X connect 5 1 1 0;
+#X connect 6 0 14 0;
+#X connect 7 0 18 0;
+#X connect 7 1 9 0;
+#X connect 7 1 12 0;
+#X connect 8 0 10 0;
+#X connect 8 1 13 0;
+#X connect 9 0 6 1;
+#X connect 10 0 6 0;
+#X connect 11 0 8 0;
+#X connect 12 0 16 0;
+#X connect 13 0 15 0;
+#X connect 14 0 0 0;
+#X connect 15 0 6 3;
+#X connect 16 0 6 2;
+#X connect 17 1 7 0;
+#X connect 18 1 11 0;
+#X restore 325 166 pd creation pool;
+#X msg 137 110 reset;
+#X obj 137 134 s masse;
+#X obj 79 172 s link;
+#X obj 19 85 metro 10;
+#X obj 58 247 iCircle2D masse 3 2 0 2.98 0 0 1 0 0 0 0.1;
+#X obj 68 267 iCircle2D masse -3 2 0 2.98 0 0 1 0 0 0 0.1;
+#X obj 83 289 iCircle2D masse 7 6 0 5 0 0 1 0 0 0 0.1;
+#X obj 93 309 iCircle2D masse -7 6 0 5 0 0 1 0 0 0 0.1;
+#X floatatom 62 65 5 0 0 0 - - -;
+#X text 99 19 some physical parameters change from the previus exemples...
+;
+#X msg 203 115 reset \, view 0 0 -6 0 0 0 0 1 0 \, create \, 1;
+#X text 161 5 small balls;
+#X obj 45 210 iAmbient2D masse 0 -0.001 0 0 0.005;
+#X text 464 115 <- 1;
+#X text 39 33 <- 2;
+#X connect 0 0 5 0;
+#X connect 0 1 10 0;
+#X connect 0 1 12 0;
+#X connect 0 1 13 0;
+#X connect 0 1 14 0;
+#X connect 0 1 15 0;
+#X connect 0 1 20 0;
+#X connect 1 0 11 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 8 0 9 0;
+#X connect 11 0 0 0;
+#X connect 16 0 11 1;
+#X connect 18 0 4 0;
diff --git a/exemples/27_tLia.pd b/exemples/27_tLia.pd
new file mode 100755
index 0000000..6b1015c
--- /dev/null
+++ b/exemples/27_tLia.pd
@@ -0,0 +1,874 @@
+#N canvas 128 41 836 611 12;
+#N canvas 306 123 269 250 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 143 474 pd masse;
+#X obj 27 266 s lia;
+#X obj 62 242 s masse;
+#X obj 397 336 s masse;
+#X msg 184 227 setK \$1;
+#X msg 399 177 setM \$1;
+#X obj 184 259 s lia;
+#X obj 399 205 s masse;
+#X obj 184 201 / 10;
+#X obj 184 175 + 1;
+#X obj 487 188 gemwin;
+#X msg 494 159 0 \, destroy;
+#X floatatom 184 153 5 10 100 0 - - -;
+#X floatatom 245 155 5 0 3 0 - - -;
+#X floatatom 399 154 5 20 500 0 - - -;
+#X msg 411 306 force2D 2000 0;
+#X obj 27 191 metro 10;
+#X obj 27 215 t b b;
+#X msg 396 363 force2D 0 5000;
+#X msg 184 129 50;
+#X msg 245 129 1;
+#X msg 399 130 200;
+#X obj 868 171 world_light;
+#X obj 868 112 gemhead;
+#X obj 868 142 rotateXYZ;
+#X msg 397 278 force2D 0 1000;
+#X msg 245 178 setD \$1;
+#X obj 27 37 loadbang;
+#X msg 108 127 reset;
+#X obj 108 154 s masse;
+#X obj 27 68 t b b b b;
+#X msg 49 128 resetF;
+#X obj 49 155 s lia;
+#X floatatom 321 155 5 0 3 0 - - -;
+#X msg 321 129 1;
+#X msg 321 178 setD2 \$1;
+#N canvas 306 123 576 363 masse 0;
+#X obj 24 99 outlet;
+#X obj 145 98 gemhead;
+#X obj 137 134 unpack s f f;
+#X obj 143 190 translateXYZ 0 0 0;
+#X obj 185 160 / 100;
+#X obj 228 161 / 100;
+#X obj 144 224 sphere 0.1;
+#X obj 26 70 masse2D masse2 10 -300 0;
+#X msg 25 42 reset;
+#X connect 1 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 2 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 7 0 0 0;
+#X connect 7 0 2 0;
+#X connect 8 0 7 0;
+#X restore 11 411 pd masse;
+#X msg 396 394 force2D 5000 0;
+#X text 474 12 2D string;
+#X text 542 278 <- send Y force to all masses;
+#X text 544 307 <- send X force to all masses;
+#X text 540 363 <- send Y force to 2 masses;
+#X text 542 392 <- send X force to 1 masses;
+#N canvas 306 123 265 246 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 288 480 pd masse;
+#X obj 11 437 lia2D lia 30 1 1;
+#X obj 158 436 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 432 474 pd masse;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 198 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 570 477 pd masse;
+#X obj 300 437 lia2D lia 30 1 1;
+#X obj 447 436 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 719 477 pd masse;
+#X obj 596 436 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 870 474 pd masse;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 1008 477 pd masse;
+#X obj 738 437 lia2D lia 30 1 1;
+#X obj 885 436 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 157 617 pd masse;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 292 622 pd masse;
+#X obj 24 580 lia2D lia 30 1 1;
+#X obj 171 579 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 445 617 pd masse;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 583 620 pd masse;
+#X obj 313 580 lia2D lia 30 1 1;
+#X obj 460 579 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 732 620 pd masse;
+#X obj 609 579 lia2D lia 30 1 1;
+#N canvas 306 123 263 244 masse 0;
+#X obj 24 23 inlet;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse 10;
+#X obj 83 197 sphere 0.1;
+#X connect 0 0 7 0;
+#X connect 2 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 2;
+#X connect 7 0 1 0;
+#X connect 7 0 3 0;
+#X restore 883 617 pd masse;
+#N canvas 306 123 271 252 masse 0;
+#X obj 24 83 outlet;
+#X obj 83 138 gemhead;
+#X obj 84 85 unpack s f f;
+#X obj 83 169 translateXYZ 0 0 0;
+#X obj 129 111 / 100;
+#X obj 175 112 / 100;
+#X obj 24 55 masse2D masse2 10 300;
+#X obj 83 197 sphere 0.1;
+#X msg 26 31 reset;
+#X connect 1 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 2 5 0;
+#X connect 3 0 7 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 0 0;
+#X connect 6 0 2 0;
+#X connect 8 0 6 0;
+#X restore 1021 552 pd masse;
+#X obj 751 580 lia2D lia 30 1 1;
+#X obj 898 579 lia2D lia 30 1 1;
+#X msg 487 132 reset \, lighting 1 \, create \, 1;
+#X obj 112 43 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 170 431 361 373 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 197 505 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 349 513 pd link;
+#N canvas 170 431 363 375 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 498 516 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 655 516 pd link;
+#N canvas 170 431 361 373 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 55 505 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 796 521 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 916 516 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 51 650 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 222 652 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 375 652 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 512 654 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 675 660 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 811 657 pd link;
+#N canvas 170 431 359 371 link 0;
+#X obj 87 24 inlet;
+#X obj 162 24 inlet;
+#X obj 87 55 tLia2D lia;
+#X obj 46 207 translateXYZ;
+#X obj 162 82 unpack s f f;
+#X obj 207 112 / 100;
+#X obj 253 112 / 100;
+#X obj 46 180 gemhead;
+#X obj 46 283 sphere 1;
+#X obj 46 233 rotateXYZ;
+#X obj 46 257 scaleXYZ 0 0.1 0.1;
+#X obj 87 84 / 200;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 11 0;
+#X connect 2 2 9 3;
+#X connect 2 3 4 0;
+#X connect 3 0 9 0;
+#X connect 4 1 5 0;
+#X connect 4 2 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 1;
+#X restore 918 658 pd link;
+#X text 341 36 it's like a previus exemples \, but link are drawn according
+to a "tlink" object wich output information about the liaison (position
+\, orientation etc).;
+#X text 727 133 <- 1;
+#X connect 0 0 44 1;
+#X connect 0 0 45 0;
+#X connect 0 0 72 0;
+#X connect 0 0 76 1;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 8 0 4 0;
+#X connect 9 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 13 0 26 0;
+#X connect 14 0 5 0;
+#X connect 15 0 3 0;
+#X connect 16 0 17 0;
+#X connect 17 0 1 0;
+#X connect 17 1 2 0;
+#X connect 18 0 0 0;
+#X connect 18 0 43 0;
+#X connect 19 0 12 0;
+#X connect 20 0 13 0;
+#X connect 21 0 14 0;
+#X connect 23 0 24 0;
+#X connect 24 0 22 0;
+#X connect 25 0 3 0;
+#X connect 26 0 6 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 30 0 16 0;
+#X connect 30 1 31 0;
+#X connect 30 2 28 0;
+#X connect 30 3 19 0;
+#X connect 30 3 20 0;
+#X connect 30 3 21 0;
+#X connect 30 3 34 0;
+#X connect 31 0 32 0;
+#X connect 33 0 35 0;
+#X connect 34 0 33 0;
+#X connect 35 0 6 0;
+#X connect 36 0 44 0;
+#X connect 36 0 76 0;
+#X connect 37 0 46 0;
+#X connect 43 0 45 1;
+#X connect 43 0 48 0;
+#X connect 43 0 72 1;
+#X connect 43 0 73 0;
+#X connect 44 1 0 0;
+#X connect 45 0 0 0;
+#X connect 45 1 43 0;
+#X connect 46 0 48 1;
+#X connect 46 0 49 0;
+#X connect 46 0 74 0;
+#X connect 46 0 73 1;
+#X connect 47 0 49 1;
+#X connect 47 0 51 0;
+#X connect 47 0 75 0;
+#X connect 47 0 74 1;
+#X connect 48 0 43 0;
+#X connect 48 1 46 0;
+#X connect 49 0 46 0;
+#X connect 49 1 47 0;
+#X connect 50 0 51 1;
+#X connect 50 0 54 0;
+#X connect 50 0 75 1;
+#X connect 50 0 77 0;
+#X connect 51 0 47 0;
+#X connect 51 1 50 0;
+#X connect 52 0 54 1;
+#X connect 52 0 55 0;
+#X connect 52 0 77 1;
+#X connect 52 0 78 0;
+#X connect 53 0 55 1;
+#X connect 53 0 58 0;
+#X connect 53 0 78 1;
+#X connect 53 0 79 0;
+#X connect 54 0 50 0;
+#X connect 54 1 52 0;
+#X connect 55 0 52 0;
+#X connect 55 1 53 0;
+#X connect 56 0 58 1;
+#X connect 56 0 59 0;
+#X connect 56 0 79 1;
+#X connect 56 0 80 0;
+#X connect 57 0 59 1;
+#X connect 57 0 62 0;
+#X connect 57 0 80 1;
+#X connect 57 0 81 0;
+#X connect 58 0 53 0;
+#X connect 58 1 56 0;
+#X connect 59 0 56 0;
+#X connect 59 1 57 0;
+#X connect 60 0 62 1;
+#X connect 60 0 63 0;
+#X connect 60 0 81 1;
+#X connect 60 0 82 0;
+#X connect 61 0 63 1;
+#X connect 61 0 65 0;
+#X connect 61 0 82 1;
+#X connect 61 0 83 0;
+#X connect 62 0 57 0;
+#X connect 62 1 60 0;
+#X connect 63 0 60 0;
+#X connect 63 1 61 0;
+#X connect 64 0 65 1;
+#X connect 64 0 68 0;
+#X connect 64 0 83 1;
+#X connect 64 0 84 0;
+#X connect 65 0 61 0;
+#X connect 65 1 64 0;
+#X connect 66 0 68 1;
+#X connect 66 0 69 0;
+#X connect 66 0 84 1;
+#X connect 66 0 85 0;
+#X connect 67 0 69 1;
+#X connect 67 0 85 1;
+#X connect 68 0 64 0;
+#X connect 68 1 66 0;
+#X connect 69 0 66 0;
+#X connect 70 0 10 0;
+#X connect 71 0 30 0;
diff --git a/exemples/28_Lia.pd b/exemples/28_Lia.pd
new file mode 100755
index 0000000..970b50e
--- /dev/null
+++ b/exemples/28_Lia.pd
@@ -0,0 +1,108 @@
+#N canvas 43 52 799 551 12;
+#X obj 9 35 metro 10;
+#X obj 9 10 loadbang;
+#X obj 9 62 t b b;
+#X obj 44 87 s \$0-link;
+#X obj 9 113 s \$0-mass;
+#X obj 28 154 lia \$0-link 0 1 1;
+#X obj 28 202 lia \$0-link 0 1 1;
+#X obj 29 253 lia \$0-link 0 1 1;
+#X obj 30 304 lia \$0-link 0 1 1;
+#X obj 31 353 lia \$0-link 0 1 1;
+#X obj 31 403 lia \$0-link 0 1 1;
+#X obj 31 453 lia \$0-link 0 1 1;
+#X obj 31 502 lia \$0-link 0 1 1;
+#X obj 28 178 masse \$0-mass 30;
+#X obj 29 228 masse \$0-mass 30;
+#X obj 30 279 masse \$0-mass 30;
+#X obj 30 329 masse \$0-mass 30;
+#X obj 31 378 masse \$0-mass 30;
+#X obj 31 428 masse \$0-mass 30;
+#X obj 31 477 masse \$0-mass 30;
+#X obj 269 181 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 269 196 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 800 1;
+#X obj 269 211 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 1600 1;
+#X obj 269 226 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 2400 1;
+#X obj 269 241 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 3200 1;
+#X obj 269 256 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 4000 1;
+#X obj 269 271 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 4800 1;
+#X obj 269 286 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 5600 1;
+#X obj 269 301 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 6400 1;
+#X obj 192 130 loadbang;
+#X msg 192 154 64;
+#X text 416 177 <- move here;
+#X text 415 298 <- diferents link to this points;
+#X text 621 349 <- normal link;
+#X text 621 430 <- repulsive link;
+#X text 621 403 <- link with minimal value;
+#X msg 220 453 setLmax 300 \, setL 0 \, setLmin 0 \, setK 0 \, setD
+10;
+#X text 622 454 <- viscosity link;
+#X msg 221 349 setLmax 300 \, setL 0 \, setLmin 0 \, setK 1 \, setD
+1;
+#X msg 220 376 setLmax 30 \, setL 0 \, setLmin 0 \, setK 1 \, setD
+1;
+#X msg 220 401 setLmax 300 \, setL 30 \, setLmin 30 \, setK 1 \, setD
+1;
+#X msg 220 426 setLmax 30 \, setL 30 \, setLmin 0 \, setK 1 \, setD
+1;
+#X text 622 374 <- link can break if deformation is to big;
+#X text 319 12 This is an exemple of diferents comportement of a link
+;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 2 1 3 0;
+#X connect 5 1 13 0;
+#X connect 6 0 13 0;
+#X connect 6 1 14 0;
+#X connect 7 0 14 0;
+#X connect 7 1 15 0;
+#X connect 8 0 15 0;
+#X connect 8 1 16 0;
+#X connect 9 0 16 0;
+#X connect 9 1 17 0;
+#X connect 10 0 17 0;
+#X connect 10 1 18 0;
+#X connect 11 0 18 0;
+#X connect 11 1 19 0;
+#X connect 12 0 19 0;
+#X connect 13 0 5 1;
+#X connect 13 0 6 0;
+#X connect 13 0 21 0;
+#X connect 14 0 6 1;
+#X connect 14 0 7 0;
+#X connect 14 0 22 0;
+#X connect 15 0 7 1;
+#X connect 15 0 8 0;
+#X connect 15 0 23 0;
+#X connect 16 0 8 1;
+#X connect 16 0 9 0;
+#X connect 16 0 24 0;
+#X connect 17 0 9 1;
+#X connect 17 0 10 0;
+#X connect 17 0 25 0;
+#X connect 18 0 10 1;
+#X connect 18 0 11 0;
+#X connect 18 0 26 0;
+#X connect 19 0 11 1;
+#X connect 19 0 12 0;
+#X connect 19 0 27 0;
+#X connect 20 0 5 0;
+#X connect 28 0 12 1;
+#X connect 29 0 30 0;
+#X connect 30 0 28 0;
+#X connect 36 0 12 0;
+#X connect 38 0 12 0;
+#X connect 39 0 12 0;
+#X connect 40 0 12 0;
+#X connect 41 0 12 0;
diff --git a/exemples/29_aglom.pd b/exemples/29_aglom.pd
new file mode 100755
index 0000000..c674a29
--- /dev/null
+++ b/exemples/29_aglom.pd
@@ -0,0 +1,104 @@
+#N canvas 51 18 635 423 10;
+#X obj 18 181 t b b;
+#X obj 18 103 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 145 149 0 \, destroy;
+#X obj 111 177 gemwin;
+#X msg 111 124 reset \, create \, 1;
+#X obj 18 390 s masse;
+#X obj 266 150 s reset_masse;
+#X msg 266 128 bang;
+#X text 359 281 <- right border;
+#X text 360 303 <- left border;
+#X text 360 325 <- top border;
+#X text 360 347 <- bottom border;
+#N canvas 845 31 438 384 pool 0;
+#X obj 290 290 aglom2 29;
+#X obj 0 0 aglom2 0;
+#X obj 10 10 aglom2 1;
+#X obj 20 20 aglom2 2;
+#X obj 30 30 aglom2 3;
+#X obj 40 40 aglom2 4;
+#X obj 50 50 aglom2 5;
+#X obj 60 60 aglom2 6;
+#X obj 70 70 aglom2 7;
+#X obj 80 80 aglom2 8;
+#X obj 90 90 aglom2 9;
+#X obj 100 100 aglom2 10;
+#X obj 110 110 aglom2 11;
+#X obj 120 120 aglom2 12;
+#X obj 130 130 aglom2 13;
+#X obj 140 140 aglom2 14;
+#X obj 150 150 aglom2 15;
+#X obj 160 160 aglom2 16;
+#X obj 170 170 aglom2 17;
+#X obj 180 180 aglom2 18;
+#X obj 190 190 aglom2 19;
+#X obj 200 200 aglom2 20;
+#X obj 210 210 aglom2 21;
+#X obj 220 220 aglom2 22;
+#X obj 230 230 aglom2 23;
+#X obj 240 240 aglom2 24;
+#X obj 250 250 aglom2 25;
+#X obj 260 260 aglom2 26;
+#X obj 270 270 aglom2 27;
+#X obj 280 280 aglom2 28;
+#X restore 398 132 pd pool;
+#N canvas 860 482 315 409 creation 0;
+#X obj 43 319 s pd-new;
+#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 43 289 menuclose;
+#X obj 76 238 pack f f f;
+#X obj 43 47 sel 0 1;
+#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X obj 76 187 t f f f;
+#X obj 103 211 * 10;
+#X obj 76 211 * 10;
+#X msg 76 265 obj \$1 \$2 aglom2 \$3;
+#X obj 61 163 ch_uzi 30;
+#X connect 2 0 0 0;
+#X connect 3 0 10 0;
+#X connect 4 0 2 0;
+#X connect 4 1 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 11 0;
+#X connect 6 1 1 0;
+#X connect 7 0 9 0;
+#X connect 7 1 8 0;
+#X connect 7 2 3 2;
+#X connect 8 0 3 1;
+#X connect 9 0 3 0;
+#X connect 10 0 0 0;
+#X connect 11 1 7 0;
+#X restore 398 158 pd creation pool;
+#X obj 61 214 s link;
+#X obj 18 154 metro 5;
+#X obj 53 280 iLine2D masse 3.5 -3.5 3.5 3.5 1000 0 0 10;
+#X obj 63 304 iLine2D masse -3.5 3.5 -3.5 -3.5 1000 0 0 10;
+#X obj 78 327 iLine2D masse 3.5 3.5 -3.5 3.5 1000 0 0 10;
+#X obj 89 350 iLine2D masse -3.5 -3.5 3.5 -3.5 1000 0 0 10;
+#X text 50 100 <- begin (change the metro speed for slow computer)
+;
+#X floatatom 55 123 5 0 0 0 - - -;
+#X obj 43 260 iAmbient2D masse 0 0 0.01 0.01 1;
+#X text 359 257 <- give random speed and ambient viscosity;
+#X text 174 35 All masses got 2 circular interactors around them. This
+create a non linear interactor. this make them to atract / repuls depending
+on ther distances....;
+#X text 177 6 All masses interact each other in a way for the creation
+of small structures;
+#X connect 0 0 5 0;
+#X connect 0 1 14 0;
+#X connect 0 1 16 0;
+#X connect 0 1 17 0;
+#X connect 0 1 18 0;
+#X connect 0 1 19 0;
+#X connect 0 1 22 0;
+#X connect 1 0 15 0;
+#X connect 2 0 3 0;
+#X connect 4 0 3 0;
+#X connect 7 0 6 0;
+#X connect 15 0 0 0;
+#X connect 21 0 15 1;
diff --git a/exemples/30_falling_aglom.pd b/exemples/30_falling_aglom.pd
new file mode 100755
index 0000000..4877c30
--- /dev/null
+++ b/exemples/30_falling_aglom.pd
@@ -0,0 +1,167 @@
+#N canvas 53 34 632 373 10;
+#X obj 18 137 t b b;
+#X obj 18 48 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 146 95 0 \, destroy;
+#X obj 111 123 gemwin;
+#X obj 18 337 s masse;
+#X text 359 227 <- right border;
+#X text 360 249 <- left border;
+#X text 357 307 <- top border;
+#X text 358 276 <- bottom border;
+#N canvas 527 17 819 225 pool 0;
+#X obj 320 120 aglom3 0 11;
+#X obj 160 0 aglom3 -2 5;
+#X obj 0 0 aglom3 -4 5;
+#X obj 80 0 aglom3 -3 5;
+#X obj 240 0 aglom3 -1 5;
+#X obj 320 0 aglom3 0 5;
+#X obj 400 0 aglom3 1 5;
+#X obj 480 0 aglom3 2 5;
+#X obj 560 0 aglom3 3 5;
+#X obj 640 0 aglom3 4 5;
+#X obj 0 20 aglom3 -4 6;
+#X obj 80 20 aglom3 -3 6;
+#X obj 160 20 aglom3 -2 6;
+#X obj 240 20 aglom3 -1 6;
+#X obj 320 20 aglom3 0 6;
+#X obj 400 20 aglom3 1 6;
+#X obj 480 20 aglom3 2 6;
+#X obj 560 20 aglom3 3 6;
+#X obj 640 20 aglom3 4 6;
+#X obj 0 40 aglom3 -4 7;
+#X obj 80 40 aglom3 -3 7;
+#X obj 160 40 aglom3 -2 7;
+#X obj 240 40 aglom3 -1 7;
+#X obj 320 40 aglom3 0 7;
+#X obj 400 40 aglom3 1 7;
+#X obj 480 40 aglom3 2 7;
+#X obj 560 40 aglom3 3 7;
+#X obj 640 40 aglom3 4 7;
+#X obj 0 60 aglom3 -4 8;
+#X obj 80 60 aglom3 -3 8;
+#X obj 160 60 aglom3 -2 8;
+#X obj 240 60 aglom3 -1 8;
+#X obj 320 60 aglom3 0 8;
+#X obj 400 60 aglom3 1 8;
+#X obj 480 60 aglom3 2 8;
+#X obj 560 60 aglom3 3 8;
+#X obj 640 60 aglom3 4 8;
+#X obj 0 80 aglom3 -4 9;
+#X obj 80 80 aglom3 -3 9;
+#X obj 160 80 aglom3 -2 9;
+#X obj 240 80 aglom3 -1 9;
+#X obj 320 80 aglom3 0 9;
+#X obj 400 80 aglom3 1 9;
+#X obj 480 80 aglom3 2 9;
+#X obj 560 80 aglom3 3 9;
+#X obj 640 80 aglom3 4 9;
+#X obj 0 100 aglom3 -4 10;
+#X obj 80 100 aglom3 -3 10;
+#X obj 160 100 aglom3 -2 10;
+#X obj 240 100 aglom3 -1 10;
+#X obj 320 100 aglom3 0 10;
+#X obj 400 100 aglom3 1 10;
+#X obj 480 100 aglom3 2 10;
+#X obj 560 100 aglom3 3 10;
+#X obj 640 100 aglom3 4 10;
+#X obj 0 120 aglom3 -4 11;
+#X obj 80 120 aglom3 -3 11;
+#X obj 160 120 aglom3 -2 11;
+#X obj 240 120 aglom3 -1 11;
+#X obj 400 120 aglom3 1 11;
+#X obj 480 120 aglom3 2 11;
+#X obj 560 120 aglom3 3 11;
+#X obj 640 120 aglom3 4 11;
+#X restore 398 78 pd pool;
+#N canvas 860 482 321 415 creation 0;
+#X obj 46 380 s pd-new;
+#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 46 350 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X msg 79 325 obj \$1 \$2 aglom3 \$3 \$4;
+#X obj 79 299 pack f f f f;
+#X obj 171 259 + 5;
+#X obj 70 228 t f f;
+#X obj 107 272 * 20;
+#X obj 81 272 * 80;
+#X obj 140 240 / 1;
+#X obj 171 237 / 1;
+#X obj 143 263 - 4;
+#X obj 61 163 ch_uzi 8;
+#X obj 60 203 ch_uzi 9;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 0;
+#X connect 5 1 1 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 3;
+#X connect 9 0 11 0;
+#X connect 9 1 12 0;
+#X connect 10 0 7 1;
+#X connect 11 0 7 0;
+#X connect 12 0 14 0;
+#X connect 13 0 8 0;
+#X connect 14 0 7 2;
+#X connect 15 0 16 0;
+#X connect 15 1 10 0;
+#X connect 15 1 13 0;
+#X connect 16 1 9 0;
+#X restore 398 104 pd creation pool;
+#X obj 61 160 s link;
+#X obj 18 100 metro 5;
+#X obj 53 226 iLine2D masse 3.5 -3.5 3.5 3.5 1000 0 0 10;
+#X obj 63 250 iLine2D masse -3.5 3.5 -3.5 -3.5 1000 0 0 10;
+#X text 50 45 <- begin (change the metro speed for slow computer);
+#X floatatom 55 69 5 0 0 0 - - -;
+#X text 359 203 <- give random speed and ambient viscosity;
+#X msg 243 98 reset;
+#X obj 244 120 s masse;
+#N canvas 828 304 454 304 line 0;
+#X obj 62 28 gemhead;
+#X obj 60 82 curve 2;
+#X msg 136 58 5 8 0;
+#X obj 57 135 gemhead;
+#X obj 55 189 curve 2;
+#X msg 132 165 -5 8 0;
+#X obj 162 21 loadbang;
+#X msg 79 55 0.2 3 0;
+#X msg 74 162 -0.2 3 0;
+#X connect 0 0 1 0;
+#X connect 2 0 1 2;
+#X connect 3 0 4 0;
+#X connect 5 0 4 2;
+#X connect 6 0 7 0;
+#X connect 6 0 2 0;
+#X connect 6 0 8 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 1;
+#X connect 8 0 4 1;
+#X restore 398 131 pd line gem;
+#X obj 77 272 iLine2D masse -3.5 -7.5 3.5 -7.5 1000 0 0 10;
+#X obj 90 195 iAmbient2D masse 0 -0.0015 0 0 0.4;
+#X obj 160 317 iSeg2D masse -5 8 -0.2 3 1 0.5;
+#X obj 165 298 iSeg2D masse 0.2 3 5 8 1 0.5;
+#X msg 111 70 reset \, view 0 0 -8 0 0 0 0 1 0 \, create \, 1;
+#X text 145 10 It's the same as previus exemple \, but in a gravity
+field.;
+#X connect 0 0 4 0;
+#X connect 0 1 11 0;
+#X connect 0 1 13 0;
+#X connect 0 1 14 0;
+#X connect 0 1 21 0;
+#X connect 0 1 22 0;
+#X connect 0 1 23 0;
+#X connect 0 1 24 0;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 12 0 0 0;
+#X connect 16 0 12 1;
+#X connect 18 0 19 0;
+#X connect 25 0 3 0;
diff --git a/exemples/31_paste.pd b/exemples/31_paste.pd
new file mode 100755
index 0000000..12f30e8
--- /dev/null
+++ b/exemples/31_paste.pd
@@ -0,0 +1,206 @@
+#N canvas 36 58 602 351 10;
+#X obj 10 157 t b b;
+#X obj 10 69 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 141 115 0 \, destroy;
+#X obj 106 143 gemwin;
+#X obj 9 306 s masse;
+#X text 364 271 <- top border;
+#X text 365 240 <- bottom border;
+#N canvas 527 17 851 257 pool 0;
+#X obj 400 180 aglom4 0 15;
+#X obj 240 180 aglom4 -2 15;
+#X obj 320 160 aglom4 -1 14;
+#X obj 0 0 aglom4 -5 6;
+#X obj 80 0 aglom4 -4 6;
+#X obj 160 0 aglom4 -3 6;
+#X obj 240 0 aglom4 -2 6;
+#X obj 320 0 aglom4 -1 6;
+#X obj 400 0 aglom4 0 6;
+#X obj 480 0 aglom4 1 6;
+#X obj 560 0 aglom4 2 6;
+#X obj 640 0 aglom4 3 6;
+#X obj 720 0 aglom4 4 6;
+#X obj 800 0 aglom4 5 6;
+#X obj 0 20 aglom4 -5 7;
+#X obj 80 20 aglom4 -4 7;
+#X obj 160 20 aglom4 -3 7;
+#X obj 240 20 aglom4 -2 7;
+#X obj 320 20 aglom4 -1 7;
+#X obj 400 20 aglom4 0 7;
+#X obj 480 20 aglom4 1 7;
+#X obj 560 20 aglom4 2 7;
+#X obj 640 20 aglom4 3 7;
+#X obj 720 20 aglom4 4 7;
+#X obj 800 20 aglom4 5 7;
+#X obj 0 40 aglom4 -5 8;
+#X obj 80 40 aglom4 -4 8;
+#X obj 160 40 aglom4 -3 8;
+#X obj 240 40 aglom4 -2 8;
+#X obj 320 40 aglom4 -1 8;
+#X obj 400 40 aglom4 0 8;
+#X obj 480 40 aglom4 1 8;
+#X obj 560 40 aglom4 2 8;
+#X obj 640 40 aglom4 3 8;
+#X obj 720 40 aglom4 4 8;
+#X obj 800 40 aglom4 5 8;
+#X obj 0 60 aglom4 -5 9;
+#X obj 80 60 aglom4 -4 9;
+#X obj 160 60 aglom4 -3 9;
+#X obj 240 60 aglom4 -2 9;
+#X obj 320 60 aglom4 -1 9;
+#X obj 400 60 aglom4 0 9;
+#X obj 480 60 aglom4 1 9;
+#X obj 560 60 aglom4 2 9;
+#X obj 640 60 aglom4 3 9;
+#X obj 720 60 aglom4 4 9;
+#X obj 800 60 aglom4 5 9;
+#X obj 0 80 aglom4 -5 10;
+#X obj 80 80 aglom4 -4 10;
+#X obj 160 80 aglom4 -3 10;
+#X obj 240 80 aglom4 -2 10;
+#X obj 320 80 aglom4 -1 10;
+#X obj 400 80 aglom4 0 10;
+#X obj 480 80 aglom4 1 10;
+#X obj 560 80 aglom4 2 10;
+#X obj 640 80 aglom4 3 10;
+#X obj 720 80 aglom4 4 10;
+#X obj 800 80 aglom4 5 10;
+#X obj 0 100 aglom4 -5 11;
+#X obj 80 100 aglom4 -4 11;
+#X obj 160 100 aglom4 -3 11;
+#X obj 240 100 aglom4 -2 11;
+#X obj 320 100 aglom4 -1 11;
+#X obj 400 100 aglom4 0 11;
+#X obj 480 100 aglom4 1 11;
+#X obj 560 100 aglom4 2 11;
+#X obj 640 100 aglom4 3 11;
+#X obj 720 100 aglom4 4 11;
+#X obj 800 100 aglom4 5 11;
+#X obj 0 120 aglom4 -5 12;
+#X obj 80 120 aglom4 -4 12;
+#X obj 160 120 aglom4 -3 12;
+#X obj 240 120 aglom4 -2 12;
+#X obj 320 120 aglom4 -1 12;
+#X obj 400 120 aglom4 0 12;
+#X obj 480 120 aglom4 1 12;
+#X obj 560 120 aglom4 2 12;
+#X obj 640 120 aglom4 3 12;
+#X obj 720 120 aglom4 4 12;
+#X obj 800 120 aglom4 5 12;
+#X obj 0 140 aglom4 -5 13;
+#X obj 80 140 aglom4 -4 13;
+#X obj 160 140 aglom4 -3 13;
+#X obj 240 140 aglom4 -2 13;
+#X obj 320 140 aglom4 -1 13;
+#X obj 400 140 aglom4 0 13;
+#X obj 480 140 aglom4 1 13;
+#X obj 560 140 aglom4 2 13;
+#X obj 640 140 aglom4 3 13;
+#X obj 720 140 aglom4 4 13;
+#X obj 800 140 aglom4 5 13;
+#X obj 0 160 aglom4 -5 14;
+#X obj 80 160 aglom4 -4 14;
+#X obj 160 160 aglom4 -3 14;
+#X obj 240 160 aglom4 -2 14;
+#X obj 400 160 aglom4 0 14;
+#X obj 480 160 aglom4 1 14;
+#X obj 560 160 aglom4 2 14;
+#X obj 640 160 aglom4 3 14;
+#X obj 720 160 aglom4 4 14;
+#X obj 800 160 aglom4 5 14;
+#X obj 0 180 aglom4 -5 15;
+#X obj 80 180 aglom4 -4 15;
+#X obj 160 180 aglom4 -3 15;
+#X obj 320 180 aglom4 -1 15;
+#X obj 480 180 aglom4 1 15;
+#X obj 560 180 aglom4 2 15;
+#X obj 640 180 aglom4 3 15;
+#X obj 720 180 aglom4 4 15;
+#X obj 800 180 aglom4 5 15;
+#X restore 393 99 pd pool;
+#N canvas 860 482 327 421 creation 0;
+#X obj 46 380 s pd-new;
+#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 46 350 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X obj 79 299 pack f f f f;
+#X obj 70 228 t f f;
+#X obj 107 272 * 20;
+#X obj 81 272 * 80;
+#X msg 79 325 obj \$1 \$2 aglom4 \$3 \$4;
+#X obj 60 183 t b f;
+#X obj 171 259 + 6;
+#X obj 143 263 - 5;
+#X obj 61 163 ch_uzi 10;
+#X obj 60 203 ch_uzi 11;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 14 0;
+#X connect 5 1 1 0;
+#X connect 6 0 10 0;
+#X connect 7 0 9 0;
+#X connect 7 1 13 0;
+#X connect 8 0 6 1;
+#X connect 9 0 6 0;
+#X connect 10 0 0 0;
+#X connect 11 0 15 0;
+#X connect 11 1 8 0;
+#X connect 11 1 12 0;
+#X connect 12 0 6 3;
+#X connect 13 0 6 2;
+#X connect 14 1 11 0;
+#X connect 15 1 7 0;
+#X restore 393 125 pd creation pool;
+#X obj 56 180 s link;
+#X text 227 12 All masses interact each other;
+#X text 42 66 <- begin (change the metro speed for slow computer);
+#X floatatom 47 89 5 0 0 0 - - -;
+#X msg 238 118 reset;
+#X obj 238 140 s masse;
+#N canvas 828 304 460 310 line 0;
+#X obj 62 28 gemhead;
+#X obj 60 82 curve 2;
+#X msg 136 58 5 8 0;
+#X obj 57 135 gemhead;
+#X obj 55 189 curve 2;
+#X msg 132 165 -5 8 0;
+#X obj 162 21 loadbang;
+#X msg 79 55 0.5 3 0;
+#X msg 74 161 -0.5 3 0;
+#X connect 0 0 1 0;
+#X connect 2 0 1 2;
+#X connect 3 0 4 0;
+#X connect 5 0 4 2;
+#X connect 6 0 7 0;
+#X connect 6 0 2 0;
+#X connect 6 0 8 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 1;
+#X connect 8 0 4 1;
+#X restore 393 151 pd line gem;
+#X obj 91 239 iLine2D masse -3.5 -7.5 3.5 -7.5 1000 0 0 1;
+#X obj 73 213 iAmbient2D masse 0 -0.0015 0 0 0.04;
+#X obj 10 120 metro 10;
+#X text 366 209 <- give gravity and ambient viscosity;
+#X msg 106 90 reset \, view 0 0 -8 0 0 0 0 1 0 \, create \, 1;
+#X obj 109 263 iSeg2D masse 0.5 3 5 8 2 0.1;
+#X obj 126 284 iSeg2D masse -5 8 -0.5 3 2 0.1;
+#X text 163 25 they got a viscosity link. the global comportement is
+a bit like paste;
+#X connect 0 0 4 0;
+#X connect 0 1 9 0;
+#X connect 0 1 17 0;
+#X connect 0 1 21 0;
+#X connect 0 1 22 0;
+#X connect 1 0 18 0;
+#X connect 2 0 3 0;
+#X connect 12 0 18 1;
+#X connect 13 0 14 0;
+#X connect 18 0 0 0;
+#X connect 20 0 3 0;
diff --git a/exemples/32_Kelvin_Helmoltz_instability.pd b/exemples/32_Kelvin_Helmoltz_instability.pd
new file mode 100755
index 0000000..51c880f
--- /dev/null
+++ b/exemples/32_Kelvin_Helmoltz_instability.pd
@@ -0,0 +1,160 @@
+#N canvas 48 33 528 221 10;
+#N canvas 860 482 341 435 creation 0;
+#X obj 46 380 s pd-new;
+#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 46 350 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X obj 107 272 * 20;
+#X obj 82 272 * 20;
+#X obj 76 188 t f f;
+#X obj 79 299 pack f f f;
+#X msg 79 325 obj \$1 \$2 vortex \$3;
+#X obj 138 270 / 8;
+#X obj 136 223 - 50;
+#X obj 62 163 ch_uzi 100;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 13 0;
+#X connect 5 1 1 0;
+#X connect 6 0 9 1;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 12 0;
+#X connect 9 0 10 0;
+#X connect 10 0 0 0;
+#X connect 11 0 9 2;
+#X connect 12 0 11 0;
+#X connect 13 1 8 0;
+#X restore 391 176 pd creation pool;
+#N canvas 790 67 588 512 pool 0;
+#X obj 320 320 vortex -4.25;
+#X obj 240 240 vortex -4.75;
+#X obj 0 0 vortex -6.25;
+#X obj 20 20 vortex -6.125;
+#X obj 40 40 vortex -6;
+#X obj 60 60 vortex -5.875;
+#X obj 80 80 vortex -5.75;
+#X obj 100 100 vortex -5.625;
+#X obj 120 120 vortex -5.5;
+#X obj 140 140 vortex -5.375;
+#X obj 160 160 vortex -5.25;
+#X obj 180 180 vortex -5.125;
+#X obj 200 200 vortex -5;
+#X obj 220 220 vortex -4.875;
+#X obj 260 260 vortex -4.625;
+#X obj 280 280 vortex -4.5;
+#X obj 300 300 vortex -4.375;
+#X obj 340 340 vortex -4.125;
+#X obj 360 360 vortex -4;
+#X obj 380 380 vortex -3.875;
+#X obj 400 400 vortex -3.75;
+#X obj 420 420 vortex -3.625;
+#X obj 440 440 vortex -3.5;
+#X obj 460 460 vortex -3.375;
+#X obj 480 480 vortex -3.25;
+#X obj 500 500 vortex -3.125;
+#X obj 520 520 vortex -3;
+#X obj 540 540 vortex -2.875;
+#X obj 560 560 vortex -2.75;
+#X obj 580 580 vortex -2.625;
+#X obj 600 600 vortex -2.5;
+#X obj 620 620 vortex -2.375;
+#X obj 640 640 vortex -2.25;
+#X obj 660 660 vortex -2.125;
+#X obj 680 680 vortex -2;
+#X obj 700 700 vortex -1.875;
+#X obj 720 720 vortex -1.75;
+#X obj 740 740 vortex -1.625;
+#X obj 760 760 vortex -1.5;
+#X obj 780 780 vortex -1.375;
+#X obj 800 800 vortex -1.25;
+#X obj 820 820 vortex -1.125;
+#X obj 840 840 vortex -1;
+#X obj 860 860 vortex -0.875;
+#X obj 880 880 vortex -0.75;
+#X obj 900 900 vortex -0.625;
+#X obj 920 920 vortex -0.5;
+#X obj 940 940 vortex -0.375;
+#X obj 960 960 vortex -0.25;
+#X obj 980 980 vortex -0.125;
+#X obj 1000 1000 vortex 0;
+#X obj 1020 1020 vortex 0.125;
+#X obj 1040 1040 vortex 0.25;
+#X obj 1060 1060 vortex 0.375;
+#X obj 1080 1080 vortex 0.5;
+#X obj 1100 1100 vortex 0.625;
+#X obj 1120 1120 vortex 0.75;
+#X obj 1140 1140 vortex 0.875;
+#X obj 1160 1160 vortex 1;
+#X obj 1180 1180 vortex 1.125;
+#X obj 1200 1200 vortex 1.25;
+#X obj 1220 1220 vortex 1.375;
+#X obj 1240 1240 vortex 1.5;
+#X obj 1260 1260 vortex 1.625;
+#X obj 1280 1280 vortex 1.75;
+#X obj 1300 1300 vortex 1.875;
+#X obj 1320 1320 vortex 2;
+#X obj 1340 1340 vortex 2.125;
+#X obj 1360 1360 vortex 2.25;
+#X obj 1380 1380 vortex 2.375;
+#X obj 1400 1400 vortex 2.5;
+#X obj 1420 1420 vortex 2.625;
+#X obj 1440 1440 vortex 2.75;
+#X obj 1460 1460 vortex 2.875;
+#X obj 1480 1480 vortex 3;
+#X obj 1500 1500 vortex 3.125;
+#X obj 1520 1520 vortex 3.25;
+#X obj 1540 1540 vortex 3.375;
+#X obj 1560 1560 vortex 3.5;
+#X obj 1580 1580 vortex 3.625;
+#X obj 1600 1600 vortex 3.75;
+#X obj 1620 1620 vortex 3.875;
+#X obj 1640 1640 vortex 4;
+#X obj 1660 1660 vortex 4.125;
+#X obj 1680 1680 vortex 4.25;
+#X obj 1700 1700 vortex 4.375;
+#X obj 1720 1720 vortex 4.5;
+#X obj 1740 1740 vortex 4.625;
+#X obj 1760 1760 vortex 4.75;
+#X obj 1780 1780 vortex 4.875;
+#X obj 1800 1800 vortex 5;
+#X obj 1820 1820 vortex 5.125;
+#X obj 1840 1840 vortex 5.25;
+#X obj 1860 1860 vortex 5.375;
+#X obj 1880 1880 vortex 5.5;
+#X obj 1900 1900 vortex 5.625;
+#X obj 1920 1920 vortex 5.75;
+#X obj 1940 1940 vortex 5.875;
+#X obj 1960 1960 vortex 6;
+#X obj 1980 1980 vortex 6.125;
+#X restore 391 150 pd pool;
+#X obj 18 139 t b b;
+#X obj 18 62 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 18 183 s masse;
+#X obj 43 164 s link;
+#X text 50 59 <- begin (change the metro speed for slow computer);
+#X floatatom 61 82 5 0 0 0 - - -;
+#X obj 18 113 metro 10;
+#X msg 156 128 0 \, destroy;
+#X obj 121 156 gemwin;
+#X msg 253 131 reset;
+#X msg 121 103 reset \, view 0 0 -8 0 0 0 0 1 0 \, create \, 1;
+#X obj 253 153 s masse2;
+#X text 136 -2 Simulation of a continus line of vorticity (no damping
+fluid \, 2D mouvement);
+#X text 137 25 This create a Kevin-Helmoltz instability.;
+#X connect 2 0 4 0;
+#X connect 2 1 5 0;
+#X connect 3 0 8 0;
+#X connect 7 0 8 1;
+#X connect 8 0 2 0;
+#X connect 9 0 10 0;
+#X connect 11 0 13 0;
+#X connect 12 0 10 0;
diff --git a/exemples/33_vorticity_ellipse.pd b/exemples/33_vorticity_ellipse.pd
new file mode 100755
index 0000000..fd99bde
--- /dev/null
+++ b/exemples/33_vorticity_ellipse.pd
@@ -0,0 +1,369 @@
+#N canvas 71 37 562 212 10;
+#N canvas 860 482 333 427 creation 0;
+#X obj 46 380 s pd-new;
+#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 46 350 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X obj 107 272 * 20;
+#X obj 82 272 * 20;
+#X obj 76 188 t f f;
+#X obj 79 299 pack f f f;
+#X msg 79 325 obj \$1 \$2 vortex2 \$3;
+#X obj 63 163 ch_uzi 36;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 11 0;
+#X connect 5 1 1 0;
+#X connect 6 0 9 1;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 9 2;
+#X connect 9 0 10 0;
+#X connect 10 0 0 0;
+#X connect 11 1 8 0;
+#X restore 426 161 pd creation pool;
+#X obj 41 131 t b b;
+#X obj 41 54 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 41 175 s masse;
+#X obj 66 156 s link;
+#X text 73 51 <- begin (change the metro speed for slow computer);
+#X floatatom 90 70 5 0 0 0 - - -;
+#X msg 179 120 0 \, destroy;
+#X obj 144 148 gemwin;
+#N canvas 790 67 586 510 pool 0;
+#X obj 380 380 vortex2;
+#X obj 287 210 vortex2;
+#X obj 347 270 vortex2;
+#X obj 0 0 vortex2;
+#X obj 10 10 vortex2;
+#X obj 20 20 vortex2;
+#X obj 30 30 vortex2;
+#X obj 40 40 vortex2;
+#X obj 50 50 vortex2;
+#X obj 60 60 vortex2;
+#X obj 70 70 vortex2;
+#X obj 80 80 vortex2;
+#X obj 90 90 vortex2;
+#X obj 100 100 vortex2;
+#X obj 110 110 vortex2;
+#X obj 120 120 vortex2;
+#X obj 130 130 vortex2;
+#X obj 140 140 vortex2;
+#X obj 150 150 vortex2;
+#X obj 160 160 vortex2;
+#X obj 170 170 vortex2;
+#X obj 180 180 vortex2;
+#X obj 190 190 vortex2;
+#X obj 200 200 vortex2;
+#X obj 210 210 vortex2;
+#X obj 220 220 vortex2;
+#X obj 230 230 vortex2;
+#X obj 240 240 vortex2;
+#X obj 250 250 vortex2;
+#X obj 260 260 vortex2;
+#X obj 270 270 vortex2;
+#X obj 280 280 vortex2;
+#X obj 290 290 vortex2;
+#X obj 300 300 vortex2;
+#X obj 310 310 vortex2;
+#X obj 320 320 vortex2;
+#X obj 330 330 vortex2;
+#X obj 340 340 vortex2;
+#X obj 350 350 vortex2;
+#X obj 360 360 vortex2;
+#X obj 370 370 vortex2;
+#X obj 87 10 vortex2;
+#X obj 97 20 vortex2;
+#X obj 107 30 vortex2;
+#X obj 117 40 vortex2;
+#X obj 127 50 vortex2;
+#X obj 137 60 vortex2;
+#X obj 147 70 vortex2;
+#X obj 157 80 vortex2;
+#X obj 167 90 vortex2;
+#X obj 177 100 vortex2;
+#X obj 187 110 vortex2;
+#X obj 197 120 vortex2;
+#X obj 207 130 vortex2;
+#X obj 217 140 vortex2;
+#X obj 227 150 vortex2;
+#X obj 237 160 vortex2;
+#X obj 247 170 vortex2;
+#X obj 257 180 vortex2;
+#X obj 267 190 vortex2;
+#X obj 277 200 vortex2;
+#X obj 297 220 vortex2;
+#X obj 307 230 vortex2;
+#X obj 317 240 vortex2;
+#X obj 327 250 vortex2;
+#X obj 337 260 vortex2;
+#X obj 357 280 vortex2;
+#X obj 367 290 vortex2;
+#X obj 377 300 vortex2;
+#X obj 387 310 vortex2;
+#X obj 397 320 vortex2;
+#X obj 407 330 vortex2;
+#X obj 417 340 vortex2;
+#X obj 427 350 vortex2;
+#X obj 437 360 vortex2;
+#X obj 447 370 vortex2;
+#X obj 457 380 vortex2;
+#X obj 467 390 vortex2;
+#X obj 541 390 vortex2;
+#X obj 161 10 vortex2;
+#X obj 171 20 vortex2;
+#X obj 181 30 vortex2;
+#X obj 191 40 vortex2;
+#X obj 201 50 vortex2;
+#X obj 211 60 vortex2;
+#X obj 221 70 vortex2;
+#X obj 231 80 vortex2;
+#X obj 241 90 vortex2;
+#X obj 251 100 vortex2;
+#X obj 261 110 vortex2;
+#X obj 271 120 vortex2;
+#X obj 281 130 vortex2;
+#X obj 291 140 vortex2;
+#X obj 301 150 vortex2;
+#X obj 311 160 vortex2;
+#X obj 321 170 vortex2;
+#X obj 331 180 vortex2;
+#X obj 341 190 vortex2;
+#X obj 351 200 vortex2;
+#X obj 361 210 vortex2;
+#X obj 371 220 vortex2;
+#X obj 381 230 vortex2;
+#X obj 391 240 vortex2;
+#X obj 401 250 vortex2;
+#X obj 411 260 vortex2;
+#X obj 421 270 vortex2;
+#X obj 431 280 vortex2;
+#X obj 441 290 vortex2;
+#X obj 451 300 vortex2;
+#X obj 461 310 vortex2;
+#X obj 471 320 vortex2;
+#X obj 481 330 vortex2;
+#X obj 491 340 vortex2;
+#X obj 501 350 vortex2;
+#X obj 511 360 vortex2;
+#X obj 521 370 vortex2;
+#X obj 531 380 vortex2;
+#X obj 248 20 vortex2;
+#X obj 258 30 vortex2;
+#X obj 268 40 vortex2;
+#X obj 278 50 vortex2;
+#X obj 288 60 vortex2;
+#X obj 298 70 vortex2;
+#X obj 308 80 vortex2;
+#X obj 318 90 vortex2;
+#X obj 328 100 vortex2;
+#X obj 338 110 vortex2;
+#X obj 348 120 vortex2;
+#X obj 358 130 vortex2;
+#X obj 368 140 vortex2;
+#X obj 378 150 vortex2;
+#X obj 388 160 vortex2;
+#X obj 398 170 vortex2;
+#X obj 408 180 vortex2;
+#X obj 418 190 vortex2;
+#X obj 428 200 vortex2;
+#X obj 438 210 vortex2;
+#X obj 448 220 vortex2;
+#X obj 458 230 vortex2;
+#X obj 468 240 vortex2;
+#X obj 478 250 vortex2;
+#X obj 488 260 vortex2;
+#X obj 498 270 vortex2;
+#X obj 508 280 vortex2;
+#X obj 518 290 vortex2;
+#X obj 528 300 vortex2;
+#X obj 538 310 vortex2;
+#X obj 548 320 vortex2;
+#X obj 558 330 vortex2;
+#X obj 568 340 vortex2;
+#X obj 578 350 vortex2;
+#X obj 588 360 vortex2;
+#X obj 598 370 vortex2;
+#X obj 608 380 vortex2;
+#X obj 618 390 vortex2;
+#X obj 628 400 vortex2;
+#X obj 1126 390 vortex2;
+#X obj 1033 220 vortex2;
+#X obj 1093 280 vortex2;
+#X obj 746 10 vortex2;
+#X obj 756 20 vortex2;
+#X obj 766 30 vortex2;
+#X obj 776 40 vortex2;
+#X obj 786 50 vortex2;
+#X obj 796 60 vortex2;
+#X obj 806 70 vortex2;
+#X obj 816 80 vortex2;
+#X obj 826 90 vortex2;
+#X obj 836 100 vortex2;
+#X obj 846 110 vortex2;
+#X obj 856 120 vortex2;
+#X obj 866 130 vortex2;
+#X obj 876 140 vortex2;
+#X obj 886 150 vortex2;
+#X obj 896 160 vortex2;
+#X obj 906 170 vortex2;
+#X obj 916 180 vortex2;
+#X obj 926 190 vortex2;
+#X obj 936 200 vortex2;
+#X obj 946 210 vortex2;
+#X obj 956 220 vortex2;
+#X obj 966 230 vortex2;
+#X obj 976 240 vortex2;
+#X obj 986 250 vortex2;
+#X obj 996 260 vortex2;
+#X obj 1006 270 vortex2;
+#X obj 1016 280 vortex2;
+#X obj 1026 290 vortex2;
+#X obj 1036 300 vortex2;
+#X obj 1046 310 vortex2;
+#X obj 1056 320 vortex2;
+#X obj 1066 330 vortex2;
+#X obj 1076 340 vortex2;
+#X obj 1086 350 vortex2;
+#X obj 1096 360 vortex2;
+#X obj 1106 370 vortex2;
+#X obj 1116 380 vortex2;
+#X obj 833 20 vortex2;
+#X obj 843 30 vortex2;
+#X obj 853 40 vortex2;
+#X obj 863 50 vortex2;
+#X obj 873 60 vortex2;
+#X obj 883 70 vortex2;
+#X obj 893 80 vortex2;
+#X obj 903 90 vortex2;
+#X obj 913 100 vortex2;
+#X obj 923 110 vortex2;
+#X obj 933 120 vortex2;
+#X obj 943 130 vortex2;
+#X obj 953 140 vortex2;
+#X obj 963 150 vortex2;
+#X obj 973 160 vortex2;
+#X obj 983 170 vortex2;
+#X obj 993 180 vortex2;
+#X obj 1003 190 vortex2;
+#X obj 1013 200 vortex2;
+#X obj 1023 210 vortex2;
+#X obj 1043 230 vortex2;
+#X obj 1053 240 vortex2;
+#X obj 1063 250 vortex2;
+#X obj 1073 260 vortex2;
+#X obj 1083 270 vortex2;
+#X obj 1103 290 vortex2;
+#X obj 1113 300 vortex2;
+#X obj 1123 310 vortex2;
+#X obj 1133 320 vortex2;
+#X obj 1143 330 vortex2;
+#X obj 1153 340 vortex2;
+#X obj 1163 350 vortex2;
+#X obj 1173 360 vortex2;
+#X obj 1183 370 vortex2;
+#X obj 1193 380 vortex2;
+#X obj 1203 390 vortex2;
+#X obj 1213 400 vortex2;
+#X obj 1287 400 vortex2;
+#X obj 907 20 vortex2;
+#X obj 917 30 vortex2;
+#X obj 927 40 vortex2;
+#X obj 937 50 vortex2;
+#X obj 947 60 vortex2;
+#X obj 957 70 vortex2;
+#X obj 967 80 vortex2;
+#X obj 977 90 vortex2;
+#X obj 987 100 vortex2;
+#X obj 997 110 vortex2;
+#X obj 1007 120 vortex2;
+#X obj 1017 130 vortex2;
+#X obj 1027 140 vortex2;
+#X obj 1037 150 vortex2;
+#X obj 1047 160 vortex2;
+#X obj 1057 170 vortex2;
+#X obj 1067 180 vortex2;
+#X obj 1077 190 vortex2;
+#X obj 1087 200 vortex2;
+#X obj 1097 210 vortex2;
+#X obj 1107 220 vortex2;
+#X obj 1117 230 vortex2;
+#X obj 1127 240 vortex2;
+#X obj 1137 250 vortex2;
+#X obj 1147 260 vortex2;
+#X obj 1157 270 vortex2;
+#X obj 1167 280 vortex2;
+#X obj 1177 290 vortex2;
+#X obj 1187 300 vortex2;
+#X obj 1197 310 vortex2;
+#X obj 1207 320 vortex2;
+#X obj 1217 330 vortex2;
+#X obj 1227 340 vortex2;
+#X obj 1237 350 vortex2;
+#X obj 1247 360 vortex2;
+#X obj 1257 370 vortex2;
+#X obj 1267 380 vortex2;
+#X obj 1277 390 vortex2;
+#X obj 994 30 vortex2;
+#X obj 1004 40 vortex2;
+#X obj 1014 50 vortex2;
+#X obj 1024 60 vortex2;
+#X obj 1034 70 vortex2;
+#X obj 1044 80 vortex2;
+#X obj 1054 90 vortex2;
+#X obj 1064 100 vortex2;
+#X obj 1074 110 vortex2;
+#X obj 1084 120 vortex2;
+#X obj 1094 130 vortex2;
+#X obj 1104 140 vortex2;
+#X obj 1114 150 vortex2;
+#X obj 1124 160 vortex2;
+#X obj 1134 170 vortex2;
+#X obj 1144 180 vortex2;
+#X obj 1154 190 vortex2;
+#X obj 1164 200 vortex2;
+#X obj 1174 210 vortex2;
+#X obj 1184 220 vortex2;
+#X obj 1194 230 vortex2;
+#X obj 1204 240 vortex2;
+#X obj 1214 250 vortex2;
+#X obj 1224 260 vortex2;
+#X obj 1234 270 vortex2;
+#X obj 1244 280 vortex2;
+#X obj 1254 290 vortex2;
+#X obj 1264 300 vortex2;
+#X obj 1274 310 vortex2;
+#X obj 1284 320 vortex2;
+#X obj 1294 330 vortex2;
+#X obj 1304 340 vortex2;
+#X obj 1314 350 vortex2;
+#X obj 1324 360 vortex2;
+#X obj 1334 370 vortex2;
+#X obj 1344 380 vortex2;
+#X obj 1354 390 vortex2;
+#X obj 1364 400 vortex2;
+#X obj 1374 410 vortex2;
+#X restore 428 135 pd pool;
+#X obj 276 145 s masse2;
+#X msg 277 124 bang;
+#X msg 144 95 reset \, view 0 0 -10 0 0 0 0 1 0 \, create \, 1;
+#X obj 41 105 metro 100;
+#X text 120 -3 simulation of a continus elipse of vorticity field.
+;
+#X text 119 14 This simulation nead lot's a masses \, and lot's of
+CPU.;
+#X connect 1 0 3 0;
+#X connect 1 1 4 0;
+#X connect 2 0 13 0;
+#X connect 6 0 13 1;
+#X connect 7 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 8 0;
+#X connect 13 0 1 0;
diff --git a/exemples/34_cigarette_smoke.pd b/exemples/34_cigarette_smoke.pd
new file mode 100755
index 0000000..111e2ef
--- /dev/null
+++ b/exemples/34_cigarette_smoke.pd
@@ -0,0 +1,326 @@
+#N canvas 93 37 529 370 10;
+#N canvas 860 482 349 443 creation 0;
+#X obj 46 380 s pd-new;
+#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
+#X msg 46 350 menuclose;
+#X obj 43 47 sel 0 1;
+#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 61 72 t b b;
+#X obj 107 272 * 20;
+#X obj 82 272 * 20;
+#X obj 76 188 t f f;
+#X obj 79 299 pack f f f;
+#X obj 138 270 + 0;
+#X obj 136 223 + 0;
+#X msg 79 325 obj \$1 \$2 smoke1 \$3;
+#X obj 64 158 ch_uzi 250;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 1 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 13 0;
+#X connect 5 1 1 0;
+#X connect 6 0 9 1;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 8 1 11 0;
+#X connect 9 0 12 0;
+#X connect 10 0 9 2;
+#X connect 11 0 10 0;
+#X connect 12 0 0 0;
+#X connect 13 1 8 0;
+#X restore 405 176 pd creation pool;
+#N canvas 626 84 618 542 pool 0;
+#X obj 0 0 smoke1 0;
+#X obj 20 20 smoke1 1;
+#X obj 40 40 smoke1 2;
+#X obj 60 60 smoke1 3;
+#X obj 80 80 smoke1 4;
+#X obj 100 100 smoke1 5;
+#X obj 120 120 smoke1 6;
+#X obj 140 140 smoke1 7;
+#X obj 160 160 smoke1 8;
+#X obj 180 180 smoke1 9;
+#X obj 200 200 smoke1 10;
+#X obj 220 220 smoke1 11;
+#X obj 240 240 smoke1 12;
+#X obj 260 260 smoke1 13;
+#X obj 280 280 smoke1 14;
+#X obj 300 300 smoke1 15;
+#X obj 320 320 smoke1 16;
+#X obj 340 340 smoke1 17;
+#X obj 360 360 smoke1 18;
+#X obj 380 380 smoke1 19;
+#X obj 400 400 smoke1 20;
+#X obj 420 420 smoke1 21;
+#X obj 440 440 smoke1 22;
+#X obj 460 460 smoke1 23;
+#X obj 480 480 smoke1 24;
+#X obj 500 500 smoke1 25;
+#X obj 520 520 smoke1 26;
+#X obj 540 540 smoke1 27;
+#X obj 560 560 smoke1 28;
+#X obj 580 580 smoke1 29;
+#X obj 600 600 smoke1 30;
+#X obj 620 620 smoke1 31;
+#X obj 640 640 smoke1 32;
+#X obj 660 660 smoke1 33;
+#X obj 680 680 smoke1 34;
+#X obj 700 700 smoke1 35;
+#X obj 720 720 smoke1 36;
+#X obj 740 740 smoke1 37;
+#X obj 760 760 smoke1 38;
+#X obj 780 780 smoke1 39;
+#X obj 800 800 smoke1 40;
+#X obj 820 820 smoke1 41;
+#X obj 840 840 smoke1 42;
+#X obj 860 860 smoke1 43;
+#X obj 880 880 smoke1 44;
+#X obj 900 900 smoke1 45;
+#X obj 920 920 smoke1 46;
+#X obj 940 940 smoke1 47;
+#X obj 960 960 smoke1 48;
+#X obj 980 980 smoke1 49;
+#X obj 1000 1000 smoke1 50;
+#X obj 1020 1020 smoke1 51;
+#X obj 1040 1040 smoke1 52;
+#X obj 1060 1060 smoke1 53;
+#X obj 1080 1080 smoke1 54;
+#X obj 1100 1100 smoke1 55;
+#X obj 1120 1120 smoke1 56;
+#X obj 1140 1140 smoke1 57;
+#X obj 1160 1160 smoke1 58;
+#X obj 1180 1180 smoke1 59;
+#X obj 1200 1200 smoke1 60;
+#X obj 1220 1220 smoke1 61;
+#X obj 1240 1240 smoke1 62;
+#X obj 1260 1260 smoke1 63;
+#X obj 1280 1280 smoke1 64;
+#X obj 1300 1300 smoke1 65;
+#X obj 1320 1320 smoke1 66;
+#X obj 1340 1340 smoke1 67;
+#X obj 1360 1360 smoke1 68;
+#X obj 1380 1380 smoke1 69;
+#X obj 1400 1400 smoke1 70;
+#X obj 1420 1420 smoke1 71;
+#X obj 1440 1440 smoke1 72;
+#X obj 1460 1460 smoke1 73;
+#X obj 1480 1480 smoke1 74;
+#X obj 1500 1500 smoke1 75;
+#X obj 1520 1520 smoke1 76;
+#X obj 1540 1540 smoke1 77;
+#X obj 1560 1560 smoke1 78;
+#X obj 1580 1580 smoke1 79;
+#X obj 1600 1600 smoke1 80;
+#X obj 1620 1620 smoke1 81;
+#X obj 1640 1640 smoke1 82;
+#X obj 1660 1660 smoke1 83;
+#X obj 1680 1680 smoke1 84;
+#X obj 1700 1700 smoke1 85;
+#X obj 1720 1720 smoke1 86;
+#X obj 1740 1740 smoke1 87;
+#X obj 1760 1760 smoke1 88;
+#X obj 1780 1780 smoke1 89;
+#X obj 1800 1800 smoke1 90;
+#X obj 1820 1820 smoke1 91;
+#X obj 1840 1840 smoke1 92;
+#X obj 1860 1860 smoke1 93;
+#X obj 1880 1880 smoke1 94;
+#X obj 1900 1900 smoke1 95;
+#X obj 1920 1920 smoke1 96;
+#X obj 1940 1940 smoke1 97;
+#X obj 1960 1960 smoke1 98;
+#X obj 1980 1980 smoke1 99;
+#X obj 2000 2000 smoke1 100;
+#X obj 2020 2020 smoke1 101;
+#X obj 2040 2040 smoke1 102;
+#X obj 2060 2060 smoke1 103;
+#X obj 2080 2080 smoke1 104;
+#X obj 2100 2100 smoke1 105;
+#X obj 2120 2120 smoke1 106;
+#X obj 2140 2140 smoke1 107;
+#X obj 2160 2160 smoke1 108;
+#X obj 2180 2180 smoke1 109;
+#X obj 2200 2200 smoke1 110;
+#X obj 2220 2220 smoke1 111;
+#X obj 2240 2240 smoke1 112;
+#X obj 2260 2260 smoke1 113;
+#X obj 2280 2280 smoke1 114;
+#X obj 2300 2300 smoke1 115;
+#X obj 2320 2320 smoke1 116;
+#X obj 2340 2340 smoke1 117;
+#X obj 2360 2360 smoke1 118;
+#X obj 2380 2380 smoke1 119;
+#X obj 2400 2400 smoke1 120;
+#X obj 2420 2420 smoke1 121;
+#X obj 2440 2440 smoke1 122;
+#X obj 2460 2460 smoke1 123;
+#X obj 2480 2480 smoke1 124;
+#X obj 2500 2500 smoke1 125;
+#X obj 2520 2520 smoke1 126;
+#X obj 2540 2540 smoke1 127;
+#X obj 2560 2560 smoke1 128;
+#X obj 2580 2580 smoke1 129;
+#X obj 2600 2600 smoke1 130;
+#X obj 2620 2620 smoke1 131;
+#X obj 2640 2640 smoke1 132;
+#X obj 2660 2660 smoke1 133;
+#X obj 2680 2680 smoke1 134;
+#X obj 2700 2700 smoke1 135;
+#X obj 2720 2720 smoke1 136;
+#X obj 2740 2740 smoke1 137;
+#X obj 2760 2760 smoke1 138;
+#X obj 2780 2780 smoke1 139;
+#X obj 2800 2800 smoke1 140;
+#X obj 2820 2820 smoke1 141;
+#X obj 2840 2840 smoke1 142;
+#X obj 2860 2860 smoke1 143;
+#X obj 2880 2880 smoke1 144;
+#X obj 2900 2900 smoke1 145;
+#X obj 2920 2920 smoke1 146;
+#X obj 2940 2940 smoke1 147;
+#X obj 2960 2960 smoke1 148;
+#X obj 2980 2980 smoke1 149;
+#X obj 3000 3000 smoke1 150;
+#X obj 3020 3020 smoke1 151;
+#X obj 3040 3040 smoke1 152;
+#X obj 3060 3060 smoke1 153;
+#X obj 3080 3080 smoke1 154;
+#X obj 3100 3100 smoke1 155;
+#X obj 3120 3120 smoke1 156;
+#X obj 3140 3140 smoke1 157;
+#X obj 3160 3160 smoke1 158;
+#X obj 3180 3180 smoke1 159;
+#X obj 3200 3200 smoke1 160;
+#X obj 3220 3220 smoke1 161;
+#X obj 3240 3240 smoke1 162;
+#X obj 3260 3260 smoke1 163;
+#X obj 3280 3280 smoke1 164;
+#X obj 3300 3300 smoke1 165;
+#X obj 3320 3320 smoke1 166;
+#X obj 3340 3340 smoke1 167;
+#X obj 3360 3360 smoke1 168;
+#X obj 3380 3380 smoke1 169;
+#X obj 3400 3400 smoke1 170;
+#X obj 3420 3420 smoke1 171;
+#X obj 3440 3440 smoke1 172;
+#X obj 3460 3460 smoke1 173;
+#X obj 3480 3480 smoke1 174;
+#X obj 3500 3500 smoke1 175;
+#X obj 3520 3520 smoke1 176;
+#X obj 3540 3540 smoke1 177;
+#X obj 3560 3560 smoke1 178;
+#X obj 3580 3580 smoke1 179;
+#X obj 3600 3600 smoke1 180;
+#X obj 3620 3620 smoke1 181;
+#X obj 3640 3640 smoke1 182;
+#X obj 3660 3660 smoke1 183;
+#X obj 3680 3680 smoke1 184;
+#X obj 3700 3700 smoke1 185;
+#X obj 3720 3720 smoke1 186;
+#X obj 3740 3740 smoke1 187;
+#X obj 3760 3760 smoke1 188;
+#X obj 3780 3780 smoke1 189;
+#X obj 3800 3800 smoke1 190;
+#X obj 3820 3820 smoke1 191;
+#X obj 3840 3840 smoke1 192;
+#X obj 3860 3860 smoke1 193;
+#X obj 3880 3880 smoke1 194;
+#X obj 3900 3900 smoke1 195;
+#X obj 3920 3920 smoke1 196;
+#X obj 3940 3940 smoke1 197;
+#X obj 3960 3960 smoke1 198;
+#X obj 3980 3980 smoke1 199;
+#X obj 4000 4000 smoke1 200;
+#X obj 4020 4020 smoke1 201;
+#X obj 4040 4040 smoke1 202;
+#X obj 4060 4060 smoke1 203;
+#X obj 4080 4080 smoke1 204;
+#X obj 4100 4100 smoke1 205;
+#X obj 4120 4120 smoke1 206;
+#X obj 4140 4140 smoke1 207;
+#X obj 4160 4160 smoke1 208;
+#X obj 4180 4180 smoke1 209;
+#X obj 4200 4200 smoke1 210;
+#X obj 4220 4220 smoke1 211;
+#X obj 4240 4240 smoke1 212;
+#X obj 4260 4260 smoke1 213;
+#X obj 4280 4280 smoke1 214;
+#X obj 4300 4300 smoke1 215;
+#X obj 4320 4320 smoke1 216;
+#X obj 4340 4340 smoke1 217;
+#X obj 4360 4360 smoke1 218;
+#X obj 4380 4380 smoke1 219;
+#X obj 4400 4400 smoke1 220;
+#X obj 4420 4420 smoke1 221;
+#X obj 4440 4440 smoke1 222;
+#X obj 4460 4460 smoke1 223;
+#X obj 4480 4480 smoke1 224;
+#X obj 4500 4500 smoke1 225;
+#X obj 4520 4520 smoke1 226;
+#X obj 4540 4540 smoke1 227;
+#X obj 4560 4560 smoke1 228;
+#X obj 4580 4580 smoke1 229;
+#X obj 4600 4600 smoke1 230;
+#X obj 4620 4620 smoke1 231;
+#X obj 4640 4640 smoke1 232;
+#X obj 4660 4660 smoke1 233;
+#X obj 4680 4680 smoke1 234;
+#X obj 4700 4700 smoke1 235;
+#X obj 4720 4720 smoke1 236;
+#X obj 4740 4740 smoke1 237;
+#X obj 4760 4760 smoke1 238;
+#X obj 4780 4780 smoke1 239;
+#X obj 4800 4800 smoke1 240;
+#X obj 4820 4820 smoke1 241;
+#X obj 4840 4840 smoke1 242;
+#X obj 4860 4860 smoke1 243;
+#X obj 4880 4880 smoke1 244;
+#X obj 4900 4900 smoke1 245;
+#X obj 4920 4920 smoke1 246;
+#X obj 4940 4940 smoke1 247;
+#X obj 4960 4960 smoke1 248;
+#X obj 4980 4980 smoke1 249;
+#X restore 405 150 pd pool;
+#X obj 18 146 t b b;
+#X obj 17 69 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 18 190 s masse;
+#X obj 43 171 s link;
+#X text 50 66 <- begin (change the metro speed for slow computer);
+#X floatatom 60 89 5 0 0 0 - - -;
+#X msg 242 129 0 \, destroy;
+#X obj 209 155 gemwin;
+#X obj 100 178 s reset_smoke;
+#X obj 301 189 s reset_all;
+#X obj 301 164 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 17 121 metro 20;
+#X msg 209 109 reset \, create \, 1;
+#X obj 100 154 counter 0 249;
+#X obj 100 129 metro 50;
+#X obj 90 249 iAmbient2D masse 0 0.0007 0.0002 0.0002;
+#X obj 93 277 smoke_vortex 0.003;
+#X obj 92 297 smoke_vortex 0.003;
+#X obj 91 317 smoke_vortex 0.003;
+#X obj 205 277 smoke_vortex -0.003;
+#X obj 204 297 smoke_vortex -0.003;
+#X obj 204 317 smoke_vortex -0.003;
+#X text 150 7 Cigarettes smoke simulation;
+#X text 92 29 Each particules are in some kind of turbulent wind (vertical
+force + some random mouving vortex);
+#X text 322 108 <- create;
+#X connect 2 0 4 0;
+#X connect 2 1 5 0;
+#X connect 2 1 17 0;
+#X connect 3 0 13 0;
+#X connect 3 0 16 0;
+#X connect 7 0 13 1;
+#X connect 8 0 9 0;
+#X connect 12 0 11 0;
+#X connect 13 0 2 0;
+#X connect 14 0 9 0;
+#X connect 15 0 10 0;
+#X connect 16 0 15 0;
diff --git a/exemples/35_gravitation.pd b/exemples/35_gravitation.pd
new file mode 100755
index 0000000..6ba72e9
--- /dev/null
+++ b/exemples/35_gravitation.pd
@@ -0,0 +1,74 @@
+#N canvas 105 15 546 651 10;
+#X obj 18 139 t b b;
+#X obj 18 62 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 18 183 s masse;
+#X msg 242 122 0 \, destroy;
+#X obj 209 148 gemwin;
+#X obj 100 171 s reset_smoke;
+#X msg 209 102 reset \, create \, 1;
+#X obj 100 147 counter 0 249;
+#X obj 100 122 metro 50;
+#X obj 163 553 gemhead;
+#X obj 163 576 translateXYZ;
+#X obj 152 526 unpack s f f;
+#X obj 163 600 sphere 0.05;
+#X obj 208 317 gemhead;
+#X text 51 59 <- begin;
+#X obj 208 364 sphere 0.25;
+#X text 190 2 Gravitation exemple;
+#X obj 183 449 tSquare2D -4 4 -4 4;
+#X obj 183 472 sel 0;
+#X msg 183 495 reset;
+#X obj 152 237 loadbang;
+#X obj 152 287 iCircle2D foo -1 0 0 100;
+#X obj 208 340 translateXYZ -1 0 0;
+#X obj 350 318 gemhead;
+#X obj 350 365 sphere 0.25;
+#X obj 350 341 translateXYZ 1 0 0;
+#X obj 330 287 iCircle2D foo 1 0 0 100;
+#X obj 18 114 metro 1;
+#X obj 377 413 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 377 549 / 127;
+#X msg 377 570 reset \, setY \$1;
+#X obj 152 419 masse2D masse 1 0.1 0.9;
+#X text 139 15 1 earth and 2 suns .;
+#X text 139 31 The earth is attacted by the 2 suns. you can change
+the initial position of the earth \, to test the ensitivity of initial
+position of surch chaotic system.;
+#X text 286 598 change initial position of the masse;
+#X msg 330 260 setG -1e-006;
+#X msg 152 260 setG -1e-006;
+#X connect 0 0 2 0;
+#X connect 0 1 21 0;
+#X connect 0 1 26 0;
+#X connect 1 0 8 0;
+#X connect 1 0 27 0;
+#X connect 3 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 1 10 1;
+#X connect 11 2 10 2;
+#X connect 13 0 22 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 31 0;
+#X connect 20 0 36 0;
+#X connect 20 0 35 0;
+#X connect 21 0 31 0;
+#X connect 22 0 15 0;
+#X connect 23 0 25 0;
+#X connect 25 0 24 0;
+#X connect 26 0 31 0;
+#X connect 27 0 0 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 31 0;
+#X connect 31 0 11 0;
+#X connect 31 0 17 0;
+#X connect 35 0 26 0;
+#X connect 36 0 21 0;
diff --git a/exemples/36_3D_interactors.pd b/exemples/36_3D_interactors.pd
new file mode 100755
index 0000000..9a003ce
--- /dev/null
+++ b/exemples/36_3D_interactors.pd
@@ -0,0 +1,781 @@
+#N canvas 168 22 627 556 10;
+#X obj 22 200 t b b;
+#X obj 22 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 116 152 loadbang;
+#X msg 179 224 0 \, destroy;
+#X obj 22 238 s masse;
+#N canvas 39 357 765 474 pool 0;
+#X obj 180 180 rain;
+#X obj 491 103 rain;
+#X obj 566 50 rain;
+#X obj 499 52 rain;
+#X obj 0 0 rain;
+#X obj 10 10 rain;
+#X obj 20 20 rain;
+#X obj 30 30 rain;
+#X obj 40 40 rain;
+#X obj 50 50 rain;
+#X obj 60 60 rain;
+#X obj 70 70 rain;
+#X obj 80 80 rain;
+#X obj 90 90 rain;
+#X obj 100 100 rain;
+#X obj 110 110 rain;
+#X obj 120 120 rain;
+#X obj 130 130 rain;
+#X obj 140 140 rain;
+#X obj 150 150 rain;
+#X obj 160 160 rain;
+#X obj 170 170 rain;
+#X obj 190 190 rain;
+#X obj 200 200 rain;
+#X obj 210 210 rain;
+#X obj 220 220 rain;
+#X obj 230 230 rain;
+#X obj 240 240 rain;
+#X obj 250 250 rain;
+#X obj 260 260 rain;
+#X obj 270 270 rain;
+#X obj 280 280 rain;
+#X obj 290 290 rain;
+#X obj 300 300 rain;
+#X obj 310 310 rain;
+#X obj 320 320 rain;
+#X obj 330 330 rain;
+#X obj 340 340 rain;
+#X obj 350 350 rain;
+#X obj 360 360 rain;
+#X obj 370 370 rain;
+#X obj 380 380 rain;
+#X obj 390 390 rain;
+#X obj 400 400 rain;
+#X obj 410 410 rain;
+#X obj 420 420 rain;
+#X obj 430 430 rain;
+#X obj 58 -1 rain;
+#X obj 68 9 rain;
+#X obj 78 19 rain;
+#X obj 88 29 rain;
+#X obj 98 39 rain;
+#X obj 108 49 rain;
+#X obj 118 59 rain;
+#X obj 128 69 rain;
+#X obj 138 79 rain;
+#X obj 148 89 rain;
+#X obj 158 99 rain;
+#X obj 168 109 rain;
+#X obj 178 119 rain;
+#X obj 188 129 rain;
+#X obj 198 139 rain;
+#X obj 208 149 rain;
+#X obj 218 159 rain;
+#X obj 228 169 rain;
+#X obj 238 179 rain;
+#X obj 248 189 rain;
+#X obj 258 199 rain;
+#X obj 268 209 rain;
+#X obj 278 219 rain;
+#X obj 288 229 rain;
+#X obj 298 239 rain;
+#X obj 308 249 rain;
+#X obj 318 259 rain;
+#X obj 328 269 rain;
+#X obj 338 279 rain;
+#X obj 348 289 rain;
+#X obj 358 299 rain;
+#X obj 368 309 rain;
+#X obj 378 319 rain;
+#X obj 388 329 rain;
+#X obj 398 339 rain;
+#X obj 408 349 rain;
+#X obj 418 359 rain;
+#X obj 428 369 rain;
+#X obj 438 379 rain;
+#X obj 448 389 rain;
+#X obj 458 399 rain;
+#X obj 468 409 rain;
+#X obj 478 419 rain;
+#X obj 488 429 rain;
+#X obj 123 -11 rain;
+#X obj 133 -1 rain;
+#X obj 143 9 rain;
+#X obj 153 19 rain;
+#X obj 163 29 rain;
+#X obj 173 39 rain;
+#X obj 183 49 rain;
+#X obj 193 59 rain;
+#X obj 203 69 rain;
+#X obj 213 79 rain;
+#X obj 223 89 rain;
+#X obj 233 99 rain;
+#X obj 243 109 rain;
+#X obj 253 119 rain;
+#X obj 263 129 rain;
+#X obj 273 139 rain;
+#X obj 283 149 rain;
+#X obj 293 159 rain;
+#X obj 303 169 rain;
+#X obj 313 179 rain;
+#X obj 323 189 rain;
+#X obj 333 199 rain;
+#X obj 343 209 rain;
+#X obj 353 219 rain;
+#X obj 363 229 rain;
+#X obj 373 239 rain;
+#X obj 383 249 rain;
+#X obj 393 259 rain;
+#X obj 403 269 rain;
+#X obj 413 279 rain;
+#X obj 423 289 rain;
+#X obj 433 299 rain;
+#X obj 443 309 rain;
+#X obj 453 319 rain;
+#X obj 463 329 rain;
+#X obj 473 339 rain;
+#X obj 483 349 rain;
+#X obj 493 359 rain;
+#X obj 503 369 rain;
+#X obj 513 379 rain;
+#X obj 523 389 rain;
+#X obj 533 399 rain;
+#X obj 543 409 rain;
+#X obj 553 419 rain;
+#X obj 181 -12 rain;
+#X obj 191 -2 rain;
+#X obj 201 8 rain;
+#X obj 211 18 rain;
+#X obj 221 28 rain;
+#X obj 231 38 rain;
+#X obj 241 48 rain;
+#X obj 251 58 rain;
+#X obj 261 68 rain;
+#X obj 271 78 rain;
+#X obj 281 88 rain;
+#X obj 291 98 rain;
+#X obj 301 108 rain;
+#X obj 311 118 rain;
+#X obj 321 128 rain;
+#X obj 331 138 rain;
+#X obj 341 148 rain;
+#X obj 351 158 rain;
+#X obj 361 168 rain;
+#X obj 371 178 rain;
+#X obj 381 188 rain;
+#X obj 391 198 rain;
+#X obj 401 208 rain;
+#X obj 411 218 rain;
+#X obj 421 228 rain;
+#X obj 431 238 rain;
+#X obj 441 248 rain;
+#X obj 451 258 rain;
+#X obj 461 268 rain;
+#X obj 471 278 rain;
+#X obj 481 288 rain;
+#X obj 491 298 rain;
+#X obj 501 308 rain;
+#X obj 511 318 rain;
+#X obj 521 328 rain;
+#X obj 531 338 rain;
+#X obj 541 348 rain;
+#X obj 551 358 rain;
+#X obj 561 368 rain;
+#X obj 571 378 rain;
+#X obj 581 388 rain;
+#X obj 591 398 rain;
+#X obj 601 408 rain;
+#X obj 611 418 rain;
+#X obj 258 4 rain;
+#X obj 268 14 rain;
+#X obj 278 24 rain;
+#X obj 288 34 rain;
+#X obj 298 44 rain;
+#X obj 308 54 rain;
+#X obj 318 64 rain;
+#X obj 328 74 rain;
+#X obj 338 84 rain;
+#X obj 348 94 rain;
+#X obj 358 104 rain;
+#X obj 368 114 rain;
+#X obj 378 124 rain;
+#X obj 388 134 rain;
+#X obj 398 144 rain;
+#X obj 408 154 rain;
+#X obj 418 164 rain;
+#X obj 428 174 rain;
+#X obj 438 184 rain;
+#X obj 448 194 rain;
+#X obj 458 204 rain;
+#X obj 468 214 rain;
+#X obj 478 224 rain;
+#X obj 488 234 rain;
+#X obj 498 244 rain;
+#X obj 508 254 rain;
+#X obj 518 264 rain;
+#X obj 528 274 rain;
+#X obj 538 284 rain;
+#X obj 548 294 rain;
+#X obj 558 304 rain;
+#X obj 568 314 rain;
+#X obj 578 324 rain;
+#X obj 588 334 rain;
+#X obj 598 344 rain;
+#X obj 608 354 rain;
+#X obj 618 364 rain;
+#X obj 628 374 rain;
+#X obj 638 384 rain;
+#X obj 648 394 rain;
+#X obj 658 404 rain;
+#X obj 668 414 rain;
+#X obj 678 424 rain;
+#X obj 688 434 rain;
+#X obj 316 3 rain;
+#X obj 326 13 rain;
+#X obj 336 23 rain;
+#X obj 346 33 rain;
+#X obj 356 43 rain;
+#X obj 366 53 rain;
+#X obj 376 63 rain;
+#X obj 386 73 rain;
+#X obj 396 83 rain;
+#X obj 406 93 rain;
+#X obj 416 103 rain;
+#X obj 426 113 rain;
+#X obj 436 123 rain;
+#X obj 446 133 rain;
+#X obj 456 143 rain;
+#X obj 466 153 rain;
+#X obj 476 163 rain;
+#X obj 486 173 rain;
+#X obj 496 183 rain;
+#X obj 506 193 rain;
+#X obj 516 203 rain;
+#X obj 526 213 rain;
+#X obj 536 223 rain;
+#X obj 546 233 rain;
+#X obj 556 243 rain;
+#X obj 566 253 rain;
+#X obj 576 263 rain;
+#X obj 586 273 rain;
+#X obj 596 283 rain;
+#X obj 606 293 rain;
+#X obj 616 303 rain;
+#X obj 626 313 rain;
+#X obj 636 323 rain;
+#X obj 646 333 rain;
+#X obj 656 343 rain;
+#X obj 666 353 rain;
+#X obj 676 363 rain;
+#X obj 686 373 rain;
+#X obj 696 383 rain;
+#X obj 706 393 rain;
+#X obj 716 403 rain;
+#X obj 726 413 rain;
+#X obj 736 423 rain;
+#X obj 746 433 rain;
+#X obj 381 -7 rain;
+#X obj 391 3 rain;
+#X obj 401 13 rain;
+#X obj 411 23 rain;
+#X obj 421 33 rain;
+#X obj 431 43 rain;
+#X obj 441 53 rain;
+#X obj 451 63 rain;
+#X obj 461 73 rain;
+#X obj 471 83 rain;
+#X obj 481 93 rain;
+#X obj 501 113 rain;
+#X obj 511 123 rain;
+#X obj 521 133 rain;
+#X obj 531 143 rain;
+#X obj 541 153 rain;
+#X obj 551 163 rain;
+#X obj 561 173 rain;
+#X obj 571 183 rain;
+#X obj 581 193 rain;
+#X obj 591 203 rain;
+#X obj 601 213 rain;
+#X obj 611 223 rain;
+#X obj 621 233 rain;
+#X obj 631 243 rain;
+#X obj 641 253 rain;
+#X obj 651 263 rain;
+#X obj 661 273 rain;
+#X obj 671 283 rain;
+#X obj 681 293 rain;
+#X obj 691 303 rain;
+#X obj 701 313 rain;
+#X obj 711 323 rain;
+#X obj 721 333 rain;
+#X obj 731 343 rain;
+#X obj 741 353 rain;
+#X obj 751 363 rain;
+#X obj 761 373 rain;
+#X obj 771 383 rain;
+#X obj 781 393 rain;
+#X obj 791 403 rain;
+#X obj 801 413 rain;
+#X obj 811 423 rain;
+#X obj 439 -8 rain;
+#X obj 449 2 rain;
+#X obj 459 12 rain;
+#X obj 469 22 rain;
+#X obj 479 32 rain;
+#X obj 489 42 rain;
+#X obj 509 62 rain;
+#X obj 519 72 rain;
+#X obj 529 82 rain;
+#X obj 539 92 rain;
+#X obj 549 102 rain;
+#X obj 559 112 rain;
+#X obj 569 122 rain;
+#X obj 579 132 rain;
+#X obj 589 142 rain;
+#X obj 599 152 rain;
+#X obj 609 162 rain;
+#X obj 619 172 rain;
+#X obj 629 182 rain;
+#X obj 639 192 rain;
+#X obj 649 202 rain;
+#X obj 659 212 rain;
+#X obj 669 222 rain;
+#X obj 679 232 rain;
+#X obj 689 242 rain;
+#X obj 699 252 rain;
+#X obj 709 262 rain;
+#X obj 719 272 rain;
+#X obj 729 282 rain;
+#X obj 739 292 rain;
+#X obj 749 302 rain;
+#X obj 759 312 rain;
+#X obj 769 322 rain;
+#X obj 779 332 rain;
+#X obj 789 342 rain;
+#X obj 799 352 rain;
+#X obj 809 362 rain;
+#X obj 819 372 rain;
+#X obj 829 382 rain;
+#X obj 839 392 rain;
+#X obj 849 402 rain;
+#X obj 859 412 rain;
+#X obj 869 422 rain;
+#X obj 476 -40 rain;
+#X obj 486 -30 rain;
+#X obj 496 -20 rain;
+#X obj 506 -10 rain;
+#X obj 516 0 rain;
+#X obj 526 10 rain;
+#X obj 536 20 rain;
+#X obj 546 30 rain;
+#X obj 556 40 rain;
+#X obj 576 60 rain;
+#X obj 586 70 rain;
+#X obj 596 80 rain;
+#X obj 606 90 rain;
+#X obj 616 100 rain;
+#X obj 626 110 rain;
+#X obj 636 120 rain;
+#X obj 646 130 rain;
+#X obj 656 140 rain;
+#X obj 666 150 rain;
+#X obj 676 160 rain;
+#X obj 686 170 rain;
+#X obj 696 180 rain;
+#X obj 706 190 rain;
+#X obj 716 200 rain;
+#X obj 726 210 rain;
+#X obj 736 220 rain;
+#X obj 746 230 rain;
+#X obj 756 240 rain;
+#X obj 766 250 rain;
+#X obj 776 260 rain;
+#X obj 786 270 rain;
+#X obj 796 280 rain;
+#X obj 806 290 rain;
+#X obj 816 300 rain;
+#X obj 826 310 rain;
+#X obj 836 320 rain;
+#X obj 846 330 rain;
+#X obj 856 340 rain;
+#X obj 866 350 rain;
+#X obj 876 360 rain;
+#X obj 886 370 rain;
+#X obj 896 380 rain;
+#X obj 906 390 rain;
+#X obj 534 -41 rain;
+#X obj 544 -31 rain;
+#X obj 554 -21 rain;
+#X obj 564 -11 rain;
+#X obj 574 -1 rain;
+#X obj 584 9 rain;
+#X obj 594 19 rain;
+#X obj 604 29 rain;
+#X obj 614 39 rain;
+#X obj 624 49 rain;
+#X obj 634 59 rain;
+#X obj 644 69 rain;
+#X obj 654 79 rain;
+#X obj 664 89 rain;
+#X obj 674 99 rain;
+#X obj 684 109 rain;
+#X obj 694 119 rain;
+#X obj 704 129 rain;
+#X obj 714 139 rain;
+#X obj 724 149 rain;
+#X obj 734 159 rain;
+#X obj 744 169 rain;
+#X obj 754 179 rain;
+#X obj 764 189 rain;
+#X obj 774 199 rain;
+#X obj 784 209 rain;
+#X obj 794 219 rain;
+#X obj 804 229 rain;
+#X obj 814 239 rain;
+#X obj 824 249 rain;
+#X obj 834 259 rain;
+#X obj 844 269 rain;
+#X obj 854 279 rain;
+#X obj 864 289 rain;
+#X obj 874 299 rain;
+#X obj 884 309 rain;
+#X obj 894 319 rain;
+#X obj 904 329 rain;
+#X obj 914 339 rain;
+#X obj 924 349 rain;
+#X obj 934 359 rain;
+#X obj 944 369 rain;
+#X obj 954 379 rain;
+#X obj 964 389 rain;
+#X obj 599 -51 rain;
+#X obj 609 -41 rain;
+#X obj 619 -31 rain;
+#X obj 629 -21 rain;
+#X obj 639 -11 rain;
+#X obj 649 -1 rain;
+#X obj 659 9 rain;
+#X obj 669 19 rain;
+#X obj 679 29 rain;
+#X obj 689 39 rain;
+#X obj 699 49 rain;
+#X obj 709 59 rain;
+#X obj 719 69 rain;
+#X obj 729 79 rain;
+#X obj 739 89 rain;
+#X obj 749 99 rain;
+#X obj 759 109 rain;
+#X obj 769 119 rain;
+#X obj 779 129 rain;
+#X obj 789 139 rain;
+#X obj 799 149 rain;
+#X obj 809 159 rain;
+#X obj 819 169 rain;
+#X obj 829 179 rain;
+#X obj 839 189 rain;
+#X obj 849 199 rain;
+#X obj 859 209 rain;
+#X obj 869 219 rain;
+#X obj 879 229 rain;
+#X obj 889 239 rain;
+#X obj 899 249 rain;
+#X obj 909 259 rain;
+#X obj 919 269 rain;
+#X obj 929 279 rain;
+#X obj 939 289 rain;
+#X obj 949 299 rain;
+#X obj 959 309 rain;
+#X obj 969 319 rain;
+#X obj 979 329 rain;
+#X obj 989 339 rain;
+#X obj 999 349 rain;
+#X obj 1009 359 rain;
+#X obj 1019 369 rain;
+#X obj 1029 379 rain;
+#X obj 657 -52 rain;
+#X obj 667 -42 rain;
+#X obj 677 -32 rain;
+#X obj 687 -22 rain;
+#X obj 697 -12 rain;
+#X obj 707 -2 rain;
+#X obj 717 8 rain;
+#X obj 727 18 rain;
+#X obj 737 28 rain;
+#X obj 747 38 rain;
+#X obj 757 48 rain;
+#X obj 767 58 rain;
+#X obj 777 68 rain;
+#X obj 787 78 rain;
+#X obj 797 88 rain;
+#X obj 807 98 rain;
+#X obj 817 108 rain;
+#X obj 827 118 rain;
+#X obj 837 128 rain;
+#X obj 847 138 rain;
+#X obj 857 148 rain;
+#X obj 867 158 rain;
+#X obj 877 168 rain;
+#X obj 887 178 rain;
+#X obj 897 188 rain;
+#X obj 907 198 rain;
+#X obj 917 208 rain;
+#X obj 927 218 rain;
+#X obj 937 228 rain;
+#X obj 947 238 rain;
+#X obj 957 248 rain;
+#X obj 967 258 rain;
+#X obj 977 268 rain;
+#X obj 987 278 rain;
+#X obj 997 288 rain;
+#X obj 1007 298 rain;
+#X obj 1017 308 rain;
+#X obj 1027 318 rain;
+#X obj 1037 328 rain;
+#X obj 1047 338 rain;
+#X obj 1057 348 rain;
+#X obj 1067 358 rain;
+#X obj 1077 368 rain;
+#X obj 1087 378 rain;
+#X obj 734 -36 rain;
+#X obj 744 -26 rain;
+#X obj 754 -16 rain;
+#X obj 764 -6 rain;
+#X obj 774 4 rain;
+#X obj 784 14 rain;
+#X obj 794 24 rain;
+#X obj 804 34 rain;
+#X obj 814 44 rain;
+#X obj 824 54 rain;
+#X obj 834 64 rain;
+#X obj 844 74 rain;
+#X obj 854 84 rain;
+#X obj 864 94 rain;
+#X obj 874 104 rain;
+#X obj 884 114 rain;
+#X obj 894 124 rain;
+#X obj 904 134 rain;
+#X obj 914 144 rain;
+#X obj 924 154 rain;
+#X obj 934 164 rain;
+#X obj 944 174 rain;
+#X obj 954 184 rain;
+#X obj 964 194 rain;
+#X obj 974 204 rain;
+#X obj 984 214 rain;
+#X obj 994 224 rain;
+#X obj 1004 234 rain;
+#X obj 1014 244 rain;
+#X obj 1024 254 rain;
+#X obj 1034 264 rain;
+#X obj 1044 274 rain;
+#X obj 1054 284 rain;
+#X obj 1064 294 rain;
+#X obj 1074 304 rain;
+#X obj 1084 314 rain;
+#X obj 1094 324 rain;
+#X obj 1104 334 rain;
+#X obj 1114 344 rain;
+#X obj 1124 354 rain;
+#X obj 1134 364 rain;
+#X obj 1144 374 rain;
+#X obj 1154 384 rain;
+#X obj 1164 394 rain;
+#X obj 792 -37 rain;
+#X obj 802 -27 rain;
+#X obj 812 -17 rain;
+#X obj 822 -7 rain;
+#X obj 832 3 rain;
+#X obj 842 13 rain;
+#X obj 852 23 rain;
+#X obj 862 33 rain;
+#X obj 872 43 rain;
+#X obj 882 53 rain;
+#X obj 892 63 rain;
+#X obj 902 73 rain;
+#X obj 912 83 rain;
+#X obj 922 93 rain;
+#X obj 932 103 rain;
+#X obj 942 113 rain;
+#X obj 952 123 rain;
+#X obj 962 133 rain;
+#X obj 972 143 rain;
+#X obj 982 153 rain;
+#X obj 992 163 rain;
+#X obj 1002 173 rain;
+#X obj 1012 183 rain;
+#X obj 1022 193 rain;
+#X obj 1032 203 rain;
+#X obj 1042 213 rain;
+#X obj 1052 223 rain;
+#X obj 1062 233 rain;
+#X obj 1072 243 rain;
+#X obj 1082 253 rain;
+#X obj 1092 263 rain;
+#X obj 1102 273 rain;
+#X obj 1112 283 rain;
+#X obj 1122 293 rain;
+#X obj 1132 303 rain;
+#X obj 1142 313 rain;
+#X obj 1152 323 rain;
+#X obj 1162 333 rain;
+#X obj 1172 343 rain;
+#X obj 1182 353 rain;
+#X obj 1192 363 rain;
+#X obj 1202 373 rain;
+#X obj 1212 383 rain;
+#X obj 1222 393 rain;
+#X obj 857 -47 rain;
+#X obj 867 -37 rain;
+#X obj 877 -27 rain;
+#X obj 887 -17 rain;
+#X obj 897 -7 rain;
+#X obj 907 3 rain;
+#X obj 917 13 rain;
+#X obj 927 23 rain;
+#X obj 937 33 rain;
+#X obj 947 43 rain;
+#X obj 957 53 rain;
+#X obj 967 63 rain;
+#X obj 977 73 rain;
+#X obj 987 83 rain;
+#X obj 997 93 rain;
+#X obj 1007 103 rain;
+#X obj 1017 113 rain;
+#X obj 1027 123 rain;
+#X obj 1037 133 rain;
+#X obj 1047 143 rain;
+#X obj 1057 153 rain;
+#X obj 1067 163 rain;
+#X obj 1077 173 rain;
+#X obj 1087 183 rain;
+#X obj 1097 193 rain;
+#X obj 1107 203 rain;
+#X obj 1117 213 rain;
+#X obj 1127 223 rain;
+#X obj 1137 233 rain;
+#X obj 1147 243 rain;
+#X obj 1157 253 rain;
+#X obj 1167 263 rain;
+#X obj 1177 273 rain;
+#X obj 1187 283 rain;
+#X obj 1197 293 rain;
+#X obj 1207 303 rain;
+#X obj 1217 313 rain;
+#X obj 1227 323 rain;
+#X obj 1237 333 rain;
+#X obj 1247 343 rain;
+#X obj 1257 353 rain;
+#X obj 1267 363 rain;
+#X obj 1277 373 rain;
+#X obj 1287 383 rain;
+#X obj 915 -48 rain;
+#X obj 925 -38 rain;
+#X obj 935 -28 rain;
+#X obj 945 -18 rain;
+#X obj 955 -8 rain;
+#X obj 965 2 rain;
+#X obj 975 12 rain;
+#X obj 985 22 rain;
+#X obj 995 32 rain;
+#X obj 1005 42 rain;
+#X obj 1015 52 rain;
+#X obj 1025 62 rain;
+#X obj 1035 72 rain;
+#X obj 1045 82 rain;
+#X obj 1055 92 rain;
+#X obj 1065 102 rain;
+#X obj 1075 112 rain;
+#X obj 1085 122 rain;
+#X obj 1095 132 rain;
+#X obj 1105 142 rain;
+#X obj 1115 152 rain;
+#X obj 1125 162 rain;
+#X obj 1135 172 rain;
+#X obj 1145 182 rain;
+#X obj 1155 192 rain;
+#X obj 1165 202 rain;
+#X obj 1175 212 rain;
+#X obj 1185 222 rain;
+#X obj 1195 232 rain;
+#X obj 1205 242 rain;
+#X obj 1215 252 rain;
+#X obj 1225 262 rain;
+#X obj 1235 272 rain;
+#X obj 1245 282 rain;
+#X obj 1255 292 rain;
+#X obj 1265 302 rain;
+#X obj 1275 312 rain;
+#X obj 1285 322 rain;
+#X obj 1295 332 rain;
+#X obj 1305 342 rain;
+#X obj 1315 352 rain;
+#X obj 1325 362 rain;
+#X obj 1335 372 rain;
+#X obj 1345 382 rain;
+#X restore 469 479 pd pool;
+#X obj 116 200 s masse;
+#X obj 84 327 s link;
+#X text 43 132 <- begin (change metro speed for slow computer);
+#X obj 472 300 alpha;
+#X msg 533 406 30;
+#X obj 533 385 loadbang;
+#X obj 472 356 translateXYZ 0 -2 0;
+#X obj 22 173 metro 30;
+#X obj 472 431 sphere 1.95;
+#X floatatom 65 150 5 0 0 0 - - -;
+#X obj 48 428 gemhead;
+#X obj 48 452 color 1 0 0;
+#X obj 472 271 gemhead 55;
+#X obj 472 329 color 1 1 1 0.7;
+#X msg 170 200 reset \, view -3 3 6 0 0 0 0 4 0 \, lighting 1 \, create
+\, 1;
+#X obj 48 499 rotateXYZ 90 0 0;
+#X obj 48 523 square 6;
+#X obj 48 476 translateXYZ 0 -3.05 0;
+#X obj 267 464 gemhead 1;
+#X obj 267 489 rotateXYZ -80 0 0;
+#X obj 267 517 world_light;
+#X text 210 175 <- reset the simulation;
+#X text 194 6 infinit small particules on an elipse.;
+#X obj 46 374 iSphere3D masse 0 -2 0 0 2 0 0.1 0 0.1;
+#X obj 66 351 iAmbient3D masse 0 -0.001 0 1e-006 1e-007 1e-006 O.OOO1
+;
+#X msg 116 176 reset \, setT 1;
+#X obj 170 324 ch_gemwin;
+#X obj 189 255 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 205 279 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 222 302 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 77 62 click on the gem windows to rotate the view point (middle
+clik to set the distance to the object). You can also change the position
+of the camera with slider if mouse does not work;
+#X text 268 237 camera position;
+#X text 79 30 Masses don't interact each other. They interact with
+the sphere \, and the gravity field.;
+#X text 513 199 <- 1;
+#X connect 0 0 4 0;
+#X connect 0 1 7 0;
+#X connect 0 1 29 0;
+#X connect 0 1 30 0;
+#X connect 1 0 13 0;
+#X connect 2 0 31 0;
+#X connect 3 0 32 0;
+#X connect 9 0 19 0;
+#X connect 10 0 14 2;
+#X connect 11 0 10 0;
+#X connect 12 0 14 0;
+#X connect 13 0 0 0;
+#X connect 15 0 13 1;
+#X connect 16 0 17 0;
+#X connect 17 0 23 0;
+#X connect 18 0 9 0;
+#X connect 19 0 12 0;
+#X connect 20 0 32 0;
+#X connect 21 0 22 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 31 0 6 0;
+#X connect 33 0 32 1;
+#X connect 34 0 32 2;
+#X connect 35 0 32 3;
diff --git a/exemples/37_hollywood_planette_explosion.pd b/exemples/37_hollywood_planette_explosion.pd
new file mode 100755
index 0000000..a36c0f6
--- /dev/null
+++ b/exemples/37_hollywood_planette_explosion.pd
@@ -0,0 +1,480 @@
+#N canvas 457 291 671 403 10;
+#X obj 19 108 t b b;
+#X obj 19 42 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 177 289 loadbang;
+#X msg 323 137 0 \, destroy;
+#X obj 19 146 s masse;
+#N canvas 39 357 1063 565 pool 0;
+#X obj 294 191 explose2;
+#X obj 104 1 explose2;
+#X obj 114 11 explose2;
+#X obj 124 21 explose2;
+#X obj 134 31 explose2;
+#X obj 144 41 explose2;
+#X obj 154 51 explose2;
+#X obj 164 61 explose2;
+#X obj 174 71 explose2;
+#X obj 184 81 explose2;
+#X obj 194 91 explose2;
+#X obj 204 101 explose2;
+#X obj 214 111 explose2;
+#X obj 224 121 explose2;
+#X obj 234 131 explose2;
+#X obj 244 141 explose2;
+#X obj 254 151 explose2;
+#X obj 264 161 explose2;
+#X obj 274 171 explose2;
+#X obj 284 181 explose2;
+#X obj 304 201 explose2;
+#X obj 314 211 explose2;
+#X obj 324 221 explose2;
+#X obj 334 231 explose2;
+#X obj 344 241 explose2;
+#X obj 354 251 explose2;
+#X obj 364 261 explose2;
+#X obj 374 271 explose2;
+#X obj 459 191 explose2;
+#X obj 269 1 explose2;
+#X obj 279 11 explose2;
+#X obj 289 21 explose2;
+#X obj 299 31 explose2;
+#X obj 309 41 explose2;
+#X obj 319 51 explose2;
+#X obj 329 61 explose2;
+#X obj 339 71 explose2;
+#X obj 349 81 explose2;
+#X obj 359 91 explose2;
+#X obj 369 101 explose2;
+#X obj 379 111 explose2;
+#X obj 389 121 explose2;
+#X obj 399 131 explose2;
+#X obj 409 141 explose2;
+#X obj 419 151 explose2;
+#X obj 429 161 explose2;
+#X obj 439 171 explose2;
+#X obj 449 181 explose2;
+#X obj 469 201 explose2;
+#X obj 479 211 explose2;
+#X obj 489 221 explose2;
+#X obj 499 231 explose2;
+#X obj 509 241 explose2;
+#X obj 519 251 explose2;
+#X obj 529 261 explose2;
+#X obj 539 271 explose2;
+#X obj 638 200 explose2;
+#X obj 448 10 explose2;
+#X obj 458 20 explose2;
+#X obj 468 30 explose2;
+#X obj 478 40 explose2;
+#X obj 488 50 explose2;
+#X obj 498 60 explose2;
+#X obj 508 70 explose2;
+#X obj 518 80 explose2;
+#X obj 528 90 explose2;
+#X obj 538 100 explose2;
+#X obj 548 110 explose2;
+#X obj 558 120 explose2;
+#X obj 568 130 explose2;
+#X obj 578 140 explose2;
+#X obj 588 150 explose2;
+#X obj 598 160 explose2;
+#X obj 608 170 explose2;
+#X obj 618 180 explose2;
+#X obj 628 190 explose2;
+#X obj 648 210 explose2;
+#X obj 658 220 explose2;
+#X obj 668 230 explose2;
+#X obj 678 240 explose2;
+#X obj 688 250 explose2;
+#X obj 698 260 explose2;
+#X obj 708 270 explose2;
+#X obj 718 280 explose2;
+#X obj 803 200 explose2;
+#X obj 613 10 explose2;
+#X obj 623 20 explose2;
+#X obj 633 30 explose2;
+#X obj 643 40 explose2;
+#X obj 653 50 explose2;
+#X obj 663 60 explose2;
+#X obj 673 70 explose2;
+#X obj 683 80 explose2;
+#X obj 693 90 explose2;
+#X obj 703 100 explose2;
+#X obj 713 110 explose2;
+#X obj 723 120 explose2;
+#X obj 733 130 explose2;
+#X obj 743 140 explose2;
+#X obj 753 150 explose2;
+#X obj 763 160 explose2;
+#X obj 773 170 explose2;
+#X obj 783 180 explose2;
+#X obj 793 190 explose2;
+#X obj 813 210 explose2;
+#X obj 823 220 explose2;
+#X obj 833 230 explose2;
+#X obj 843 240 explose2;
+#X obj 853 250 explose2;
+#X obj 863 260 explose2;
+#X obj 873 270 explose2;
+#X obj 883 280 explose2;
+#X obj 321 379 explose1;
+#X obj 461 441 explose2;
+#X obj 401 381 explose2;
+#X obj 411 391 explose2;
+#X obj 421 401 explose2;
+#X obj 431 411 explose2;
+#X obj 441 421 explose2;
+#X obj 451 431 explose2;
+#X obj 471 451 explose2;
+#X obj 481 461 explose2;
+#X obj 491 471 explose2;
+#X obj 501 481 explose2;
+#X obj 511 491 explose2;
+#X obj 521 501 explose2;
+#X obj 531 511 explose2;
+#X obj 541 521 explose2;
+#X obj 626 441 explose2;
+#X obj 566 381 explose2;
+#X obj 576 391 explose2;
+#X obj 586 401 explose2;
+#X obj 596 411 explose2;
+#X obj 606 421 explose2;
+#X obj 616 431 explose2;
+#X obj 636 451 explose2;
+#X obj 646 461 explose2;
+#X obj 656 471 explose2;
+#X obj 666 481 explose2;
+#X obj 676 491 explose2;
+#X obj 686 501 explose2;
+#X obj 696 511 explose2;
+#X obj 706 521 explose2;
+#X obj 805 450 explose2;
+#X obj 735 380 explose2;
+#X obj 745 390 explose2;
+#X obj 755 400 explose2;
+#X obj 765 410 explose2;
+#X obj 775 420 explose2;
+#X obj 785 430 explose2;
+#X obj 795 440 explose2;
+#X obj 815 460 explose2;
+#X obj 825 470 explose2;
+#X obj 835 480 explose2;
+#X obj 845 490 explose2;
+#X obj 855 500 explose2;
+#X obj 865 510 explose2;
+#X obj 875 520 explose2;
+#X obj 885 530 explose2;
+#X obj 970 450 explose2;
+#X obj 900 380 explose2;
+#X obj 910 390 explose2;
+#X obj 920 400 explose2;
+#X obj 930 410 explose2;
+#X obj 940 420 explose2;
+#X obj 950 430 explose2;
+#X obj 960 440 explose2;
+#X obj 980 460 explose2;
+#X obj 990 470 explose2;
+#X obj 1000 480 explose2;
+#X obj 1010 490 explose2;
+#X obj 1020 500 explose2;
+#X obj 1030 510 explose2;
+#X obj 1040 520 explose2;
+#X obj 1050 530 explose2;
+#X obj 24 -1 explose1;
+#X obj 34 9 explose1;
+#X obj 44 19 explose1;
+#X obj 54 29 explose1;
+#X obj 64 39 explose1;
+#X obj 74 49 explose1;
+#X obj 84 59 explose1;
+#X obj 94 69 explose1;
+#X obj 104 79 explose1;
+#X obj 114 89 explose1;
+#X obj 124 99 explose1;
+#X obj 134 109 explose1;
+#X obj 144 119 explose1;
+#X obj 154 129 explose1;
+#X obj 164 139 explose1;
+#X obj 174 149 explose1;
+#X obj 184 159 explose1;
+#X obj 194 169 explose1;
+#X obj 204 179 explose1;
+#X obj 214 189 explose1;
+#X obj 224 199 explose1;
+#X obj 234 209 explose1;
+#X obj 244 219 explose1;
+#X obj 254 229 explose1;
+#X obj 264 239 explose1;
+#X obj 274 249 explose1;
+#X obj 284 259 explose1;
+#X obj 294 269 explose1;
+#X obj 304 279 explose1;
+#X obj 314 289 explose1;
+#X obj 324 299 explose1;
+#X obj 334 309 explose1;
+#X obj 344 319 explose1;
+#X obj 354 329 explose1;
+#X obj 364 339 explose1;
+#X obj 374 349 explose1;
+#X obj 384 359 explose1;
+#X obj 189 -1 explose1;
+#X obj 199 9 explose1;
+#X obj 209 19 explose1;
+#X obj 219 29 explose1;
+#X obj 229 39 explose1;
+#X obj 239 49 explose1;
+#X obj 249 59 explose1;
+#X obj 259 69 explose1;
+#X obj 269 79 explose1;
+#X obj 279 89 explose1;
+#X obj 289 99 explose1;
+#X obj 299 109 explose1;
+#X obj 309 119 explose1;
+#X obj 319 129 explose1;
+#X obj 329 139 explose1;
+#X obj 339 149 explose1;
+#X obj 349 159 explose1;
+#X obj 359 169 explose1;
+#X obj 369 179 explose1;
+#X obj 379 189 explose1;
+#X obj 389 199 explose1;
+#X obj 399 209 explose1;
+#X obj 409 219 explose1;
+#X obj 419 229 explose1;
+#X obj 429 239 explose1;
+#X obj 439 249 explose1;
+#X obj 449 259 explose1;
+#X obj 459 269 explose1;
+#X obj 469 279 explose1;
+#X obj 479 289 explose1;
+#X obj 489 299 explose1;
+#X obj 499 309 explose1;
+#X obj 509 319 explose1;
+#X obj 519 329 explose1;
+#X obj 529 339 explose1;
+#X obj 539 349 explose1;
+#X obj 549 359 explose1;
+#X obj 368 8 explose1;
+#X obj 378 18 explose1;
+#X obj 388 28 explose1;
+#X obj 398 38 explose1;
+#X obj 408 48 explose1;
+#X obj 418 58 explose1;
+#X obj 428 68 explose1;
+#X obj 438 78 explose1;
+#X obj 448 88 explose1;
+#X obj 458 98 explose1;
+#X obj 468 108 explose1;
+#X obj 478 118 explose1;
+#X obj 488 128 explose1;
+#X obj 498 138 explose1;
+#X obj 508 148 explose1;
+#X obj 518 158 explose1;
+#X obj 528 168 explose1;
+#X obj 538 178 explose1;
+#X obj 548 188 explose1;
+#X obj 558 198 explose1;
+#X obj 568 208 explose1;
+#X obj 578 218 explose1;
+#X obj 588 228 explose1;
+#X obj 598 238 explose1;
+#X obj 608 248 explose1;
+#X obj 618 258 explose1;
+#X obj 628 268 explose1;
+#X obj 638 278 explose1;
+#X obj 648 288 explose1;
+#X obj 658 298 explose1;
+#X obj 668 308 explose1;
+#X obj 678 318 explose1;
+#X obj 688 328 explose1;
+#X obj 698 338 explose1;
+#X obj 708 348 explose1;
+#X obj 718 358 explose1;
+#X obj 728 368 explose1;
+#X obj 533 8 explose1;
+#X obj 543 18 explose1;
+#X obj 553 28 explose1;
+#X obj 563 38 explose1;
+#X obj 573 48 explose1;
+#X obj 583 58 explose1;
+#X obj 593 68 explose1;
+#X obj 603 78 explose1;
+#X obj 613 88 explose1;
+#X obj 623 98 explose1;
+#X obj 633 108 explose1;
+#X obj 643 118 explose1;
+#X obj 653 128 explose1;
+#X obj 663 138 explose1;
+#X obj 673 148 explose1;
+#X obj 683 158 explose1;
+#X obj 693 168 explose1;
+#X obj 703 178 explose1;
+#X obj 713 188 explose1;
+#X obj 723 198 explose1;
+#X obj 733 208 explose1;
+#X obj 743 218 explose1;
+#X obj 753 228 explose1;
+#X obj 763 238 explose1;
+#X obj 773 248 explose1;
+#X obj 783 258 explose1;
+#X obj 793 268 explose1;
+#X obj 803 278 explose1;
+#X obj 813 288 explose1;
+#X obj 823 298 explose1;
+#X obj 833 308 explose1;
+#X obj 843 318 explose1;
+#X obj 853 328 explose1;
+#X obj 863 338 explose1;
+#X obj 873 348 explose1;
+#X obj 883 358 explose1;
+#X obj 893 368 explose1;
+#X obj 331 389 explose1;
+#X obj 341 399 explose1;
+#X obj 351 409 explose1;
+#X obj 361 419 explose1;
+#X obj 371 429 explose1;
+#X obj 381 439 explose1;
+#X obj 391 449 explose1;
+#X obj 401 459 explose1;
+#X obj 411 469 explose1;
+#X obj 421 479 explose1;
+#X obj 431 489 explose1;
+#X obj 441 499 explose1;
+#X obj 451 509 explose1;
+#X obj 461 519 explose1;
+#X obj 471 529 explose1;
+#X obj 481 539 explose1;
+#X obj 491 549 explose1;
+#X obj 501 559 explose1;
+#X obj 511 569 explose1;
+#X obj 521 579 explose1;
+#X obj 531 589 explose1;
+#X obj 541 599 explose1;
+#X obj 551 609 explose1;
+#X obj 486 379 explose1;
+#X obj 496 389 explose1;
+#X obj 506 399 explose1;
+#X obj 516 409 explose1;
+#X obj 526 419 explose1;
+#X obj 536 429 explose1;
+#X obj 546 439 explose1;
+#X obj 556 449 explose1;
+#X obj 566 459 explose1;
+#X obj 576 469 explose1;
+#X obj 586 479 explose1;
+#X obj 596 489 explose1;
+#X obj 606 499 explose1;
+#X obj 616 509 explose1;
+#X obj 626 519 explose1;
+#X obj 636 529 explose1;
+#X obj 646 539 explose1;
+#X obj 656 549 explose1;
+#X obj 666 559 explose1;
+#X obj 676 569 explose1;
+#X obj 686 579 explose1;
+#X obj 696 589 explose1;
+#X obj 706 599 explose1;
+#X obj 716 609 explose1;
+#X obj 655 378 explose1;
+#X obj 665 388 explose1;
+#X obj 675 398 explose1;
+#X obj 685 408 explose1;
+#X obj 695 418 explose1;
+#X obj 705 428 explose1;
+#X obj 715 438 explose1;
+#X obj 725 448 explose1;
+#X obj 735 458 explose1;
+#X obj 745 468 explose1;
+#X obj 755 478 explose1;
+#X obj 765 488 explose1;
+#X obj 775 498 explose1;
+#X obj 785 508 explose1;
+#X obj 795 518 explose1;
+#X obj 805 528 explose1;
+#X obj 815 538 explose1;
+#X obj 825 548 explose1;
+#X obj 835 558 explose1;
+#X obj 845 568 explose1;
+#X obj 855 578 explose1;
+#X obj 865 588 explose1;
+#X obj 875 598 explose1;
+#X obj 885 608 explose1;
+#X obj 895 618 explose1;
+#X obj 820 378 explose1;
+#X obj 830 388 explose1;
+#X obj 840 398 explose1;
+#X obj 850 408 explose1;
+#X obj 860 418 explose1;
+#X obj 870 428 explose1;
+#X obj 880 438 explose1;
+#X obj 890 448 explose1;
+#X obj 900 458 explose1;
+#X obj 910 468 explose1;
+#X obj 920 478 explose1;
+#X obj 930 488 explose1;
+#X obj 940 498 explose1;
+#X obj 950 508 explose1;
+#X obj 960 518 explose1;
+#X obj 970 528 explose1;
+#X obj 980 538 explose1;
+#X obj 990 548 explose1;
+#X obj 1000 558 explose1;
+#X obj 1010 568 explose1;
+#X obj 1020 578 explose1;
+#X obj 1030 588 explose1;
+#X obj 1040 598 explose1;
+#X obj 1050 608 explose1;
+#X obj 1060 618 explose1;
+#X restore 26 330 pd pool;
+#X msg 177 313 reset;
+#X obj 177 337 s masse;
+#X obj 65 146 s link;
+#X text 42 39 <- begin (change metro speed for slow computer);
+#X obj 27 245 gemhead 1;
+#X obj 27 270 rotateXYZ -80 0 0;
+#X obj 27 298 world_light;
+#X obj 154 77 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X obj 154 106 t b b b b;
+#X obj 32 170 s masse2;
+#X obj 192 355 s masse2;
+#X obj 305 231 delay 200;
+#X obj 303 297 iCylinder3D masse2 0 1 0 0 0 0 0 1 0 0.05;
+#X obj 305 252 iSphere3D masse 0 3 0 0 1 0 0.03;
+#X msg 292 114 reset \, view -3 4 6 0 0 0 2 4 0 \, lighting 1 \, create
+\, 1;
+#X obj 19 82 metro 25;
+#X floatatom 62 65 5 0 0 0 - - -;
+#X text 179 76 <- explosion;
+#X text 184 7 planette explosion \, hollywood style!;
+#X obj 277 78 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 296 77 <- reset;
+#X obj 304 274 iAmbient3D masse2 0 0 0 0.01 0 0.01;
+#X obj 305 208 iAmbient3D masse 0 0 0 0.001 0.001 0.001 O.OOO1;
+#X text 625 115 <- 1;
+#X obj 292 166 gemwin;
+#X connect 0 0 4 0;
+#X connect 0 0 15 0;
+#X connect 0 1 8 0;
+#X connect 1 0 21 0;
+#X connect 2 0 6 0;
+#X connect 3 0 30 0;
+#X connect 6 0 7 0;
+#X connect 6 0 16 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 13 0 14 0;
+#X connect 14 0 17 0;
+#X connect 14 0 18 0;
+#X connect 14 1 4 0;
+#X connect 14 1 15 0;
+#X connect 14 2 27 0;
+#X connect 14 2 28 0;
+#X connect 14 3 6 0;
+#X connect 17 0 19 0;
+#X connect 20 0 30 0;
+#X connect 21 0 0 0;
+#X connect 22 0 21 1;
+#X connect 25 0 6 0;
diff --git a/exemples/38_elastique_membrane_on_a_sphere.pd b/exemples/38_elastique_membrane_on_a_sphere.pd
new file mode 100755
index 0000000..2ca904c
--- /dev/null
+++ b/exemples/38_elastique_membrane_on_a_sphere.pd
@@ -0,0 +1,1413 @@
+#N canvas 67 33 711 552 10;
+#X obj 31 35 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 68 188 s masse;
+#X msg 364 476 setK \$1;
+#X msg 481 476 setM \$1;
+#X obj 481 504 s masse;
+#X msg 228 105 0 \, destroy;
+#X floatatom 364 452 5 0 0 0 - - -;
+#X floatatom 419 452 5 0 0 0 - - -;
+#X floatatom 481 453 5 0 0 0 - - -;
+#X obj 606 475 world_light;
+#X obj 606 452 gemhead;
+#X msg 419 475 setD2 \$1;
+#X obj 453 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 511 199 loadbang;
+#X obj 477 224 t b b b;
+#X msg 514 254 reset;
+#X msg 477 351 resetF;
+#X obj 529 282 s masse;
+#X msg 420 427 0.03;
+#X obj 364 407 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 477 373 s link;
+#X obj 41 256 s lia;
+#X obj 495 329 s r_lia;
+#X obj 514 306 s masse2;
+#X msg 219 81 lighting 1 \, create \, 1;
+#X obj 66 214 s masse3;
+#X obj 31 140 t b b b;
+#X msg 481 429 1;
+#X obj 313 503 s link;
+#X obj 219 226 ch_gemwin;
+#X obj 49 235 s masse2;
+#X text 481 86 <- reset;
+#X floatatom 74 68 5 0 0 0 - - -;
+#N canvas 0 80 1142 764 array 0;
+#X obj 30 39 mass_link2 -1 -1 0;
+#X obj 1571 718 mass_link2 16 16 0;
+#X obj 21 725 mass_link2 -1 16 0;
+#X obj 1540 58 mass_link2 16 -1 0;
+#X obj 622 82 mass_link 6 0 0;
+#X obj 526 320 mass_link 5 6 0;
+#X obj 321 321 mass_link 3 6 0;
+#X obj 523 371 mass_link 5 7 0;
+#X obj 430 361 mass_link 4 7 0;
+#X obj 531 445 mass_link 5 9 0;
+#X obj 30 75 mass_link 0 0 0;
+#X obj 130 118 mass_link 1 1 0;
+#X obj 123 74 mass_link 1 0 0;
+#X obj 330 79 mass_link 3 0 0;
+#X obj 125 165 mass_link 1 2 0;
+#X obj 28 113 mass_link 0 1 0;
+#X obj 30 313 mass_link 0 6 0;
+#X obj 35 197 mass_link 0 3 0;
+#X obj 31 156 mass_link 0 2 0;
+#X obj 33 231 mass_link 0 4 0;
+#X obj 30 270 mass_link 0 5 0;
+#X obj 30 357 mass_link 0 7 0;
+#X obj 127 203 mass_link 1 3 0;
+#X obj 126 235 mass_link 1 4 0;
+#X obj 126 275 mass_link 1 5 0;
+#X obj 126 316 mass_link 1 6 0;
+#X obj 123 367 mass_link 1 7 0;
+#X obj 222 78 mass_link 2 0 0;
+#X obj 227 116 mass_link 2 1 0;
+#X obj 228 163 mass_link 2 2 0;
+#X obj 220 208 mass_link 2 3 0;
+#X obj 224 238 mass_link 2 4 0;
+#X obj 223 280 mass_link 2 5 0;
+#X obj 222 321 mass_link 2 6 0;
+#X obj 220 363 mass_link 2 7 0;
+#X obj 323 117 mass_link 3 1 0;
+#X obj 327 161 mass_link 3 2 0;
+#X obj 324 201 mass_link 3 3 0;
+#X obj 321 238 mass_link 3 4 0;
+#X obj 323 276 mass_link 3 5 0;
+#X obj 321 365 mass_link 3 7 0;
+#X obj 430 79 mass_link 4 0 0;
+#X obj 428 117 mass_link 4 1 0;
+#X obj 432 160 mass_link 4 2 0;
+#X obj 435 201 mass_link 4 3 0;
+#X obj 433 235 mass_link 4 4 0;
+#X obj 430 275 mass_link 4 5 0;
+#X obj 430 317 mass_link 4 6 0;
+#X obj 523 78 mass_link 5 0 0;
+#X obj 530 122 mass_link 5 1 0;
+#X obj 525 169 mass_link 5 2 0;
+#X obj 527 207 mass_link 5 3 0;
+#X obj 526 239 mass_link 5 4 0;
+#X obj 526 279 mass_link 5 5 0;
+#X obj 627 120 mass_link 6 1 0;
+#X obj 628 167 mass_link 6 2 0;
+#X obj 621 212 mass_link 6 3 0;
+#X obj 624 242 mass_link 6 4 0;
+#X obj 623 284 mass_link 6 5 0;
+#X obj 622 325 mass_link 6 6 0;
+#X obj 620 367 mass_link 6 7 0;
+#X obj 730 83 mass_link 7 0 0;
+#X obj 723 121 mass_link 7 1 0;
+#X obj 728 166 mass_link 7 2 0;
+#X obj 724 205 mass_link 7 3 0;
+#X obj 721 242 mass_link 7 4 0;
+#X obj 723 280 mass_link 7 5 0;
+#X obj 721 324 mass_link 7 6 0;
+#X obj 721 369 mass_link 7 7 0;
+#X obj 839 82 mass_link 8 0 0;
+#X obj 837 120 mass_link 8 1 0;
+#X obj 840 163 mass_link 8 2 0;
+#X obj 844 204 mass_link 8 3 0;
+#X obj 842 238 mass_link 8 4 0;
+#X obj 839 277 mass_link 8 5 0;
+#X obj 839 320 mass_link 8 6 0;
+#X obj 839 365 mass_link 8 7 0;
+#X obj 932 81 mass_link 9 0 0;
+#X obj 939 125 mass_link 9 1 0;
+#X obj 934 172 mass_link 9 2 0;
+#X obj 936 210 mass_link 9 3 0;
+#X obj 936 242 mass_link 9 4 0;
+#X obj 935 281 mass_link 9 5 0;
+#X obj 935 323 mass_link 9 6 0;
+#X obj 932 375 mass_link 9 7 0;
+#X obj 1031 85 mass_link 10 0 0;
+#X obj 1036 123 mass_link 10 1 0;
+#X obj 1040 169 mass_link 10 2 0;
+#X obj 1029 215 mass_link 10 3 0;
+#X obj 1033 245 mass_link 10 4 0;
+#X obj 1032 287 mass_link 10 5 0;
+#X obj 1031 328 mass_link 10 6 0;
+#X obj 1029 370 mass_link 10 7 0;
+#X obj 1139 86 mass_link 11 0 0;
+#X obj 1132 125 mass_link 11 1 0;
+#X obj 1137 168 mass_link 11 2 0;
+#X obj 1133 208 mass_link 11 3 0;
+#X obj 1130 245 mass_link 11 4 0;
+#X obj 1132 283 mass_link 11 5 0;
+#X obj 1130 328 mass_link 11 6 0;
+#X obj 1130 372 mass_link 11 7 0;
+#X obj 1239 88 mass_link 12 0 0;
+#X obj 1237 124 mass_link 12 1 0;
+#X obj 1241 167 mass_link 12 2 0;
+#X obj 1244 208 mass_link 12 3 0;
+#X obj 1242 242 mass_link 12 4 0;
+#X obj 1239 282 mass_link 12 5 0;
+#X obj 1240 324 mass_link 12 6 0;
+#X obj 1239 369 mass_link 12 7 0;
+#X obj 1333 86 mass_link 13 0 0;
+#X obj 1339 129 mass_link 13 1 0;
+#X obj 1334 176 mass_link 13 2 0;
+#X obj 1340 242 mass_link 13 4 0;
+#X obj 1335 286 mass_link 13 5 0;
+#X obj 1336 327 mass_link 13 6 0;
+#X obj 1333 371 mass_link 13 7 0;
+#X obj 1431 89 mass_link 14 0 0;
+#X obj 1437 127 mass_link 14 1 0;
+#X obj 1437 174 mass_link 14 2 0;
+#X obj 1430 219 mass_link 14 3 0;
+#X obj 1433 249 mass_link 14 4 0;
+#X obj 1432 291 mass_link 14 5 0;
+#X obj 1431 332 mass_link 14 6 0;
+#X obj 1429 374 mass_link 14 7 0;
+#X obj 1540 90 mass_link 15 0 0;
+#X obj 1532 128 mass_link 15 1 0;
+#X obj 1536 172 mass_link 15 2 0;
+#X obj 1533 212 mass_link 15 3 0;
+#X obj 1530 249 mass_link 15 4 0;
+#X obj 1532 287 mass_link 15 5 0;
+#X obj 1530 331 mass_link 15 6 0;
+#X obj 1530 378 mass_link 15 7 0;
+#X obj 32 398 mass_link 0 8 0;
+#X obj 29 436 mass_link 0 9 0;
+#X obj 32 479 mass_link 0 10 0;
+#X obj 37 520 mass_link 0 11 0;
+#X obj 34 554 mass_link 0 12 0;
+#X obj 31 594 mass_link 0 13 0;
+#X obj 31 636 mass_link 0 14 0;
+#X obj 31 680 mass_link 0 15 0;
+#X obj 124 690 mass_link 1 15 0;
+#X obj 221 685 mass_link 2 15 0;
+#X obj 323 688 mass_link 3 15 0;
+#X obj 432 684 mass_link 4 15 0;
+#X obj 524 694 mass_link 5 15 0;
+#X obj 622 690 mass_link 6 15 0;
+#X obj 722 692 mass_link 7 15 0;
+#X obj 837 687 mass_link 8 15 0;
+#X obj 933 698 mass_link 9 15 0;
+#X obj 1030 693 mass_link 10 15 0;
+#X obj 1132 695 mass_link 11 15 0;
+#X obj 1241 692 mass_link 12 15 0;
+#X obj 1334 694 mass_link 13 15 0;
+#X obj 1430 697 mass_link 14 15 0;
+#X obj 1532 701 mass_link 15 15 0;
+#X obj 1531 654 mass_link 15 14 0;
+#X obj 1432 655 mass_link 14 14 0;
+#X obj 1337 650 mass_link 13 14 0;
+#X obj 1242 647 mass_link 12 14 0;
+#X obj 1131 651 mass_link 11 14 0;
+#X obj 1033 651 mass_link 10 14 0;
+#X obj 936 646 mass_link 9 14 0;
+#X obj 842 644 mass_link 8 14 0;
+#X obj 722 647 mass_link 7 14 0;
+#X obj 624 648 mass_link 6 14 0;
+#X obj 527 643 mass_link 5 14 0;
+#X obj 432 641 mass_link 4 14 0;
+#X obj 322 644 mass_link 3 14 0;
+#X obj 223 644 mass_link 2 14 0;
+#X obj 127 639 mass_link 1 14 0;
+#X obj 127 598 mass_link 1 13 0;
+#X obj 224 603 mass_link 2 13 0;
+#X obj 324 599 mass_link 3 13 0;
+#X obj 431 598 mass_link 4 13 0;
+#X obj 526 602 mass_link 5 13 0;
+#X obj 624 607 mass_link 6 13 0;
+#X obj 724 602 mass_link 7 13 0;
+#X obj 840 600 mass_link 8 13 0;
+#X obj 936 604 mass_link 9 13 0;
+#X obj 1033 610 mass_link 10 13 0;
+#X obj 1133 606 mass_link 11 13 0;
+#X obj 1240 605 mass_link 12 13 0;
+#X obj 1336 609 mass_link 13 13 0;
+#X obj 1433 614 mass_link 14 13 0;
+#X obj 1534 610 mass_link 15 13 0;
+#X obj 1530 573 mass_link 15 12 0;
+#X obj 1429 572 mass_link 14 12 0;
+#X obj 1337 569 mass_link 13 12 0;
+#X obj 1243 565 mass_link 12 12 0;
+#X obj 1131 568 mass_link 11 12 0;
+#X obj 1034 568 mass_link 10 12 0;
+#X obj 937 565 mass_link 9 12 0;
+#X obj 843 561 mass_link 8 12 0;
+#X obj 722 565 mass_link 7 12 0;
+#X obj 625 565 mass_link 6 12 0;
+#X obj 527 562 mass_link 5 12 0;
+#X obj 434 558 mass_link 4 12 0;
+#X obj 322 561 mass_link 3 12 0;
+#X obj 225 561 mass_link 2 12 0;
+#X obj 127 558 mass_link 1 12 0;
+#X obj 128 526 mass_link 1 11 0;
+#X obj 221 531 mass_link 2 11 0;
+#X obj 326 524 mass_link 3 11 0;
+#X obj 436 524 mass_link 4 11 0;
+#X obj 525 531 mass_link 5 11 0;
+#X obj 622 536 mass_link 6 11 0;
+#X obj 725 528 mass_link 7 11 0;
+#X obj 845 527 mass_link 8 11 0;
+#X obj 938 533 mass_link 9 11 0;
+#X obj 1030 538 mass_link 10 11 0;
+#X obj 1134 531 mass_link 11 11 0;
+#X obj 1245 531 mass_link 12 11 0;
+#X obj 1431 542 mass_link 14 11 0;
+#X obj 1533 536 mass_link 15 11 0;
+#X obj 1533 451 mass_link 15 9 0;
+#X obj 1443 451 mass_link 14 9 0;
+#X obj 1340 452 mass_link 13 9 0;
+#X obj 1238 447 mass_link 12 9 0;
+#X obj 1133 448 mass_link 11 9 0;
+#X obj 1037 446 mass_link 10 9 0;
+#X obj 940 448 mass_link 9 9 0;
+#X obj 839 443 mass_link 8 9 0;
+#X obj 724 444 mass_link 7 9 0;
+#X obj 628 443 mass_link 6 9 0;
+#X obj 430 440 mass_link 4 9 0;
+#X obj 325 440 mass_link 3 9 0;
+#X obj 228 439 mass_link 2 9 0;
+#X obj 131 441 mass_link 1 9 0;
+#X obj 124 396 mass_link 1 8 0;
+#X obj 223 401 mass_link 2 8 0;
+#X obj 331 403 mass_link 3 8 0;
+#X obj 430 405 mass_link 4 8 0;
+#X obj 524 401 mass_link 5 8 0;
+#X obj 623 405 mass_link 6 8 0;
+#X obj 731 406 mass_link 7 8 0;
+#X obj 841 405 mass_link 8 8 0;
+#X obj 933 406 mass_link 9 8 0;
+#X obj 1034 408 mass_link 10 8 0;
+#X obj 1140 409 mass_link 11 8 0;
+#X obj 1241 411 mass_link 12 8 0;
+#X obj 1336 410 mass_link 13 8 0;
+#X obj 1432 412 mass_link 14 8 0;
+#X obj 1545 413 mass_link 15 8 0;
+#X obj 126 488 mass_link 1 10 0;
+#X obj 230 486 mass_link 2 10 0;
+#X obj 328 484 mass_link 3 10 0;
+#X obj 437 484 mass_link 4 10 0;
+#X obj 526 492 mass_link 5 10 0;
+#X obj 629 490 mass_link 6 10 0;
+#X obj 729 489 mass_link 7 10 0;
+#X obj 841 486 mass_link 8 10 0;
+#X obj 936 496 mass_link 9 10 0;
+#X obj 1042 492 mass_link 10 10 0;
+#X obj 1139 491 mass_link 11 10 0;
+#X obj 1242 490 mass_link 12 10 0;
+#X obj 1335 499 mass_link 13 10 0;
+#X obj 1438 497 mass_link 14 10 0;
+#X obj 1537 495 mass_link 15 10 0;
+#X obj 1336 216 mass_link 13 3 0;
+#X obj 1338 537 mass_link 13 11 0;
+#X connect 0 0 10 0;
+#X connect 1 0 154 0;
+#X connect 2 0 139 0;
+#X connect 3 0 124 0;
+#X connect 4 0 48 0;
+#X connect 4 0 54 0;
+#X connect 4 0 61 0;
+#X connect 5 0 7 0;
+#X connect 5 0 47 0;
+#X connect 5 0 53 0;
+#X connect 5 0 59 0;
+#X connect 6 0 33 0;
+#X connect 6 0 39 0;
+#X connect 6 0 40 0;
+#X connect 6 0 47 0;
+#X connect 7 0 5 0;
+#X connect 7 0 8 0;
+#X connect 7 0 60 0;
+#X connect 7 0 232 0;
+#X connect 8 0 7 0;
+#X connect 8 0 40 0;
+#X connect 8 0 47 0;
+#X connect 8 0 231 0;
+#X connect 9 0 223 0;
+#X connect 9 0 224 0;
+#X connect 9 0 232 0;
+#X connect 9 0 247 0;
+#X connect 10 0 12 0;
+#X connect 10 0 15 0;
+#X connect 11 0 12 0;
+#X connect 11 0 14 0;
+#X connect 11 0 15 0;
+#X connect 11 0 28 0;
+#X connect 12 0 10 0;
+#X connect 12 0 11 0;
+#X connect 12 0 27 0;
+#X connect 13 0 27 0;
+#X connect 13 0 35 0;
+#X connect 13 0 41 0;
+#X connect 14 0 11 0;
+#X connect 14 0 18 0;
+#X connect 14 0 22 0;
+#X connect 14 0 29 0;
+#X connect 15 0 10 0;
+#X connect 15 0 11 0;
+#X connect 15 0 18 0;
+#X connect 16 0 20 0;
+#X connect 16 0 21 0;
+#X connect 16 0 25 0;
+#X connect 17 0 18 0;
+#X connect 17 0 19 0;
+#X connect 17 0 22 0;
+#X connect 18 0 14 0;
+#X connect 18 0 15 0;
+#X connect 18 0 17 0;
+#X connect 19 0 17 0;
+#X connect 19 0 20 0;
+#X connect 19 0 23 0;
+#X connect 20 0 16 0;
+#X connect 20 0 19 0;
+#X connect 20 0 24 0;
+#X connect 21 0 16 0;
+#X connect 21 0 26 0;
+#X connect 21 0 132 0;
+#X connect 22 0 14 0;
+#X connect 22 0 17 0;
+#X connect 22 0 23 0;
+#X connect 22 0 30 0;
+#X connect 23 0 19 0;
+#X connect 23 0 22 0;
+#X connect 23 0 24 0;
+#X connect 23 0 31 0;
+#X connect 24 0 20 0;
+#X connect 24 0 23 0;
+#X connect 24 0 25 0;
+#X connect 24 0 32 0;
+#X connect 25 0 16 0;
+#X connect 25 0 24 0;
+#X connect 25 0 26 0;
+#X connect 25 0 33 0;
+#X connect 26 0 21 0;
+#X connect 26 0 25 0;
+#X connect 26 0 34 0;
+#X connect 26 0 228 0;
+#X connect 27 0 12 0;
+#X connect 27 0 13 0;
+#X connect 27 0 28 0;
+#X connect 28 0 11 0;
+#X connect 28 0 27 0;
+#X connect 28 0 29 0;
+#X connect 28 0 35 0;
+#X connect 29 0 14 0;
+#X connect 29 0 28 0;
+#X connect 29 0 30 0;
+#X connect 29 0 36 0;
+#X connect 30 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 31 0;
+#X connect 30 0 37 0;
+#X connect 31 0 23 0;
+#X connect 31 0 30 0;
+#X connect 31 0 32 0;
+#X connect 31 0 38 0;
+#X connect 32 0 24 0;
+#X connect 32 0 31 0;
+#X connect 32 0 33 0;
+#X connect 32 0 39 0;
+#X connect 33 0 6 0;
+#X connect 33 0 25 0;
+#X connect 33 0 32 0;
+#X connect 33 0 34 0;
+#X connect 34 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 40 0;
+#X connect 34 0 229 0;
+#X connect 35 0 13 0;
+#X connect 35 0 28 0;
+#X connect 35 0 36 0;
+#X connect 35 0 42 0;
+#X connect 36 0 29 0;
+#X connect 36 0 35 0;
+#X connect 36 0 37 0;
+#X connect 36 0 43 0;
+#X connect 37 0 30 0;
+#X connect 37 0 36 0;
+#X connect 37 0 38 0;
+#X connect 37 0 44 0;
+#X connect 38 0 31 0;
+#X connect 38 0 37 0;
+#X connect 38 0 39 0;
+#X connect 38 0 45 0;
+#X connect 39 0 6 0;
+#X connect 39 0 32 0;
+#X connect 39 0 38 0;
+#X connect 39 0 46 0;
+#X connect 40 0 6 0;
+#X connect 40 0 8 0;
+#X connect 40 0 34 0;
+#X connect 40 0 230 0;
+#X connect 41 0 13 0;
+#X connect 41 0 42 0;
+#X connect 41 0 48 0;
+#X connect 42 0 35 0;
+#X connect 42 0 41 0;
+#X connect 42 0 43 0;
+#X connect 42 0 49 0;
+#X connect 43 0 36 0;
+#X connect 43 0 42 0;
+#X connect 43 0 44 0;
+#X connect 43 0 50 0;
+#X connect 44 0 37 0;
+#X connect 44 0 43 0;
+#X connect 44 0 45 0;
+#X connect 44 0 51 0;
+#X connect 45 0 38 0;
+#X connect 45 0 44 0;
+#X connect 45 0 46 0;
+#X connect 45 0 52 0;
+#X connect 46 0 39 0;
+#X connect 46 0 45 0;
+#X connect 46 0 47 0;
+#X connect 46 0 53 0;
+#X connect 47 0 5 0;
+#X connect 47 0 6 0;
+#X connect 47 0 8 0;
+#X connect 47 0 46 0;
+#X connect 48 0 4 0;
+#X connect 48 0 41 0;
+#X connect 48 0 49 0;
+#X connect 49 0 42 0;
+#X connect 49 0 48 0;
+#X connect 49 0 50 0;
+#X connect 49 0 54 0;
+#X connect 50 0 43 0;
+#X connect 50 0 49 0;
+#X connect 50 0 51 0;
+#X connect 50 0 55 0;
+#X connect 51 0 44 0;
+#X connect 51 0 50 0;
+#X connect 51 0 52 0;
+#X connect 51 0 56 0;
+#X connect 52 0 45 0;
+#X connect 52 0 51 0;
+#X connect 52 0 53 0;
+#X connect 52 0 57 0;
+#X connect 53 0 5 0;
+#X connect 53 0 46 0;
+#X connect 53 0 52 0;
+#X connect 53 0 58 0;
+#X connect 54 0 4 0;
+#X connect 54 0 49 0;
+#X connect 54 0 55 0;
+#X connect 54 0 62 0;
+#X connect 55 0 50 0;
+#X connect 55 0 54 0;
+#X connect 55 0 56 0;
+#X connect 55 0 63 0;
+#X connect 56 0 51 0;
+#X connect 56 0 55 0;
+#X connect 56 0 57 0;
+#X connect 56 0 64 0;
+#X connect 57 0 52 0;
+#X connect 57 0 56 0;
+#X connect 57 0 58 0;
+#X connect 57 0 65 0;
+#X connect 58 0 53 0;
+#X connect 58 0 57 0;
+#X connect 58 0 59 0;
+#X connect 58 0 66 0;
+#X connect 59 0 5 0;
+#X connect 59 0 58 0;
+#X connect 59 0 60 0;
+#X connect 59 0 67 0;
+#X connect 60 0 7 0;
+#X connect 60 0 59 0;
+#X connect 60 0 68 0;
+#X connect 60 0 233 0;
+#X connect 61 0 4 0;
+#X connect 61 0 62 0;
+#X connect 61 0 69 0;
+#X connect 62 0 54 0;
+#X connect 62 0 61 0;
+#X connect 62 0 63 0;
+#X connect 62 0 70 0;
+#X connect 63 0 55 0;
+#X connect 63 0 62 0;
+#X connect 63 0 64 0;
+#X connect 63 0 71 0;
+#X connect 64 0 56 0;
+#X connect 64 0 63 0;
+#X connect 64 0 65 0;
+#X connect 64 0 72 0;
+#X connect 65 0 57 0;
+#X connect 65 0 64 0;
+#X connect 65 0 66 0;
+#X connect 65 0 73 0;
+#X connect 66 0 58 0;
+#X connect 66 0 65 0;
+#X connect 66 0 67 0;
+#X connect 66 0 74 0;
+#X connect 67 0 59 0;
+#X connect 67 0 66 0;
+#X connect 67 0 68 0;
+#X connect 67 0 75 0;
+#X connect 68 0 60 0;
+#X connect 68 0 67 0;
+#X connect 68 0 76 0;
+#X connect 68 0 234 0;
+#X connect 69 0 61 0;
+#X connect 69 0 70 0;
+#X connect 69 0 77 0;
+#X connect 70 0 62 0;
+#X connect 70 0 69 0;
+#X connect 70 0 71 0;
+#X connect 70 0 78 0;
+#X connect 71 0 63 0;
+#X connect 71 0 70 0;
+#X connect 71 0 72 0;
+#X connect 71 0 79 0;
+#X connect 72 0 64 0;
+#X connect 72 0 71 0;
+#X connect 72 0 73 0;
+#X connect 72 0 80 0;
+#X connect 73 0 65 0;
+#X connect 73 0 72 0;
+#X connect 73 0 74 0;
+#X connect 73 0 81 0;
+#X connect 74 0 66 0;
+#X connect 74 0 73 0;
+#X connect 74 0 75 0;
+#X connect 74 0 82 0;
+#X connect 75 0 67 0;
+#X connect 75 0 74 0;
+#X connect 75 0 76 0;
+#X connect 75 0 83 0;
+#X connect 76 0 68 0;
+#X connect 76 0 75 0;
+#X connect 76 0 84 0;
+#X connect 76 0 235 0;
+#X connect 77 0 69 0;
+#X connect 77 0 78 0;
+#X connect 77 0 85 0;
+#X connect 78 0 70 0;
+#X connect 78 0 77 0;
+#X connect 78 0 79 0;
+#X connect 78 0 86 0;
+#X connect 79 0 71 0;
+#X connect 79 0 78 0;
+#X connect 79 0 80 0;
+#X connect 79 0 87 0;
+#X connect 80 0 72 0;
+#X connect 80 0 79 0;
+#X connect 80 0 81 0;
+#X connect 80 0 88 0;
+#X connect 81 0 73 0;
+#X connect 81 0 80 0;
+#X connect 81 0 82 0;
+#X connect 81 0 89 0;
+#X connect 82 0 74 0;
+#X connect 82 0 81 0;
+#X connect 82 0 83 0;
+#X connect 82 0 90 0;
+#X connect 83 0 75 0;
+#X connect 83 0 82 0;
+#X connect 83 0 84 0;
+#X connect 83 0 91 0;
+#X connect 84 0 76 0;
+#X connect 84 0 83 0;
+#X connect 84 0 92 0;
+#X connect 84 0 236 0;
+#X connect 85 0 77 0;
+#X connect 85 0 86 0;
+#X connect 85 0 93 0;
+#X connect 86 0 78 0;
+#X connect 86 0 85 0;
+#X connect 86 0 87 0;
+#X connect 86 0 94 0;
+#X connect 87 0 79 0;
+#X connect 87 0 86 0;
+#X connect 87 0 88 0;
+#X connect 87 0 95 0;
+#X connect 88 0 80 0;
+#X connect 88 0 87 0;
+#X connect 88 0 89 0;
+#X connect 88 0 96 0;
+#X connect 89 0 81 0;
+#X connect 89 0 88 0;
+#X connect 89 0 90 0;
+#X connect 89 0 97 0;
+#X connect 90 0 82 0;
+#X connect 90 0 89 0;
+#X connect 90 0 91 0;
+#X connect 90 0 98 0;
+#X connect 91 0 83 0;
+#X connect 91 0 90 0;
+#X connect 91 0 92 0;
+#X connect 91 0 99 0;
+#X connect 92 0 84 0;
+#X connect 92 0 91 0;
+#X connect 92 0 100 0;
+#X connect 92 0 237 0;
+#X connect 93 0 85 0;
+#X connect 93 0 94 0;
+#X connect 93 0 101 0;
+#X connect 94 0 86 0;
+#X connect 94 0 93 0;
+#X connect 94 0 95 0;
+#X connect 94 0 102 0;
+#X connect 95 0 87 0;
+#X connect 95 0 94 0;
+#X connect 95 0 96 0;
+#X connect 95 0 103 0;
+#X connect 96 0 88 0;
+#X connect 96 0 95 0;
+#X connect 96 0 97 0;
+#X connect 96 0 104 0;
+#X connect 97 0 89 0;
+#X connect 97 0 96 0;
+#X connect 97 0 98 0;
+#X connect 97 0 105 0;
+#X connect 98 0 90 0;
+#X connect 98 0 97 0;
+#X connect 98 0 99 0;
+#X connect 98 0 106 0;
+#X connect 99 0 91 0;
+#X connect 99 0 98 0;
+#X connect 99 0 100 0;
+#X connect 99 0 107 0;
+#X connect 100 0 92 0;
+#X connect 100 0 99 0;
+#X connect 100 0 108 0;
+#X connect 100 0 238 0;
+#X connect 101 0 93 0;
+#X connect 101 0 102 0;
+#X connect 101 0 109 0;
+#X connect 102 0 94 0;
+#X connect 102 0 101 0;
+#X connect 102 0 103 0;
+#X connect 102 0 110 0;
+#X connect 103 0 95 0;
+#X connect 103 0 102 0;
+#X connect 103 0 104 0;
+#X connect 103 0 111 0;
+#X connect 104 0 96 0;
+#X connect 104 0 103 0;
+#X connect 104 0 105 0;
+#X connect 104 0 258 0;
+#X connect 105 0 97 0;
+#X connect 105 0 104 0;
+#X connect 105 0 106 0;
+#X connect 105 0 112 0;
+#X connect 106 0 98 0;
+#X connect 106 0 105 0;
+#X connect 106 0 107 0;
+#X connect 106 0 113 0;
+#X connect 107 0 99 0;
+#X connect 107 0 106 0;
+#X connect 107 0 108 0;
+#X connect 107 0 114 0;
+#X connect 108 0 100 0;
+#X connect 108 0 107 0;
+#X connect 108 0 115 0;
+#X connect 108 0 239 0;
+#X connect 109 0 101 0;
+#X connect 109 0 110 0;
+#X connect 109 0 116 0;
+#X connect 110 0 102 0;
+#X connect 110 0 109 0;
+#X connect 110 0 111 0;
+#X connect 110 0 117 0;
+#X connect 111 0 103 0;
+#X connect 111 0 110 0;
+#X connect 111 0 118 0;
+#X connect 111 0 258 0;
+#X connect 112 0 105 0;
+#X connect 112 0 113 0;
+#X connect 112 0 120 0;
+#X connect 112 0 258 0;
+#X connect 113 0 106 0;
+#X connect 113 0 112 0;
+#X connect 113 0 114 0;
+#X connect 113 0 121 0;
+#X connect 114 0 107 0;
+#X connect 114 0 113 0;
+#X connect 114 0 115 0;
+#X connect 114 0 122 0;
+#X connect 115 0 108 0;
+#X connect 115 0 114 0;
+#X connect 115 0 123 0;
+#X connect 115 0 240 0;
+#X connect 116 0 109 0;
+#X connect 116 0 117 0;
+#X connect 116 0 124 0;
+#X connect 117 0 110 0;
+#X connect 117 0 116 0;
+#X connect 117 0 118 0;
+#X connect 117 0 125 0;
+#X connect 118 0 111 0;
+#X connect 118 0 117 0;
+#X connect 118 0 119 0;
+#X connect 118 0 126 0;
+#X connect 119 0 118 0;
+#X connect 119 0 120 0;
+#X connect 119 0 127 0;
+#X connect 119 0 258 0;
+#X connect 120 0 112 0;
+#X connect 120 0 119 0;
+#X connect 120 0 121 0;
+#X connect 120 0 128 0;
+#X connect 121 0 113 0;
+#X connect 121 0 120 0;
+#X connect 121 0 122 0;
+#X connect 121 0 129 0;
+#X connect 122 0 114 0;
+#X connect 122 0 121 0;
+#X connect 122 0 123 0;
+#X connect 122 0 130 0;
+#X connect 123 0 115 0;
+#X connect 123 0 122 0;
+#X connect 123 0 131 0;
+#X connect 123 0 241 0;
+#X connect 124 0 116 0;
+#X connect 124 0 125 0;
+#X connect 125 0 117 0;
+#X connect 125 0 124 0;
+#X connect 125 0 126 0;
+#X connect 126 0 118 0;
+#X connect 126 0 125 0;
+#X connect 126 0 127 0;
+#X connect 127 0 119 0;
+#X connect 127 0 126 0;
+#X connect 127 0 128 0;
+#X connect 128 0 120 0;
+#X connect 128 0 127 0;
+#X connect 128 0 129 0;
+#X connect 129 0 121 0;
+#X connect 129 0 128 0;
+#X connect 129 0 130 0;
+#X connect 130 0 122 0;
+#X connect 130 0 129 0;
+#X connect 130 0 131 0;
+#X connect 131 0 123 0;
+#X connect 131 0 130 0;
+#X connect 131 0 242 0;
+#X connect 132 0 21 0;
+#X connect 132 0 133 0;
+#X connect 132 0 228 0;
+#X connect 133 0 132 0;
+#X connect 133 0 134 0;
+#X connect 133 0 227 0;
+#X connect 134 0 133 0;
+#X connect 134 0 135 0;
+#X connect 134 0 243 0;
+#X connect 135 0 134 0;
+#X connect 135 0 136 0;
+#X connect 135 0 200 0;
+#X connect 136 0 135 0;
+#X connect 136 0 137 0;
+#X connect 136 0 199 0;
+#X connect 137 0 136 0;
+#X connect 137 0 138 0;
+#X connect 137 0 170 0;
+#X connect 138 0 137 0;
+#X connect 138 0 139 0;
+#X connect 138 0 169 0;
+#X connect 139 0 138 0;
+#X connect 139 0 140 0;
+#X connect 140 0 139 0;
+#X connect 140 0 141 0;
+#X connect 140 0 169 0;
+#X connect 141 0 140 0;
+#X connect 141 0 142 0;
+#X connect 141 0 168 0;
+#X connect 142 0 141 0;
+#X connect 142 0 143 0;
+#X connect 142 0 167 0;
+#X connect 143 0 142 0;
+#X connect 143 0 144 0;
+#X connect 143 0 166 0;
+#X connect 144 0 143 0;
+#X connect 144 0 145 0;
+#X connect 144 0 165 0;
+#X connect 145 0 144 0;
+#X connect 145 0 146 0;
+#X connect 145 0 164 0;
+#X connect 146 0 145 0;
+#X connect 146 0 147 0;
+#X connect 146 0 163 0;
+#X connect 147 0 146 0;
+#X connect 147 0 148 0;
+#X connect 147 0 162 0;
+#X connect 148 0 147 0;
+#X connect 148 0 149 0;
+#X connect 148 0 161 0;
+#X connect 149 0 148 0;
+#X connect 149 0 150 0;
+#X connect 149 0 160 0;
+#X connect 150 0 149 0;
+#X connect 150 0 151 0;
+#X connect 150 0 159 0;
+#X connect 151 0 150 0;
+#X connect 151 0 152 0;
+#X connect 151 0 158 0;
+#X connect 152 0 151 0;
+#X connect 152 0 153 0;
+#X connect 152 0 157 0;
+#X connect 153 0 152 0;
+#X connect 153 0 154 0;
+#X connect 153 0 156 0;
+#X connect 154 0 153 0;
+#X connect 154 0 155 0;
+#X connect 155 0 154 0;
+#X connect 155 0 156 0;
+#X connect 155 0 184 0;
+#X connect 156 0 153 0;
+#X connect 156 0 155 0;
+#X connect 156 0 157 0;
+#X connect 156 0 183 0;
+#X connect 157 0 152 0;
+#X connect 157 0 156 0;
+#X connect 157 0 158 0;
+#X connect 157 0 182 0;
+#X connect 158 0 151 0;
+#X connect 158 0 157 0;
+#X connect 158 0 159 0;
+#X connect 158 0 181 0;
+#X connect 159 0 150 0;
+#X connect 159 0 158 0;
+#X connect 159 0 160 0;
+#X connect 159 0 180 0;
+#X connect 160 0 149 0;
+#X connect 160 0 159 0;
+#X connect 160 0 161 0;
+#X connect 160 0 179 0;
+#X connect 161 0 148 0;
+#X connect 161 0 160 0;
+#X connect 161 0 162 0;
+#X connect 161 0 178 0;
+#X connect 162 0 147 0;
+#X connect 162 0 161 0;
+#X connect 162 0 163 0;
+#X connect 162 0 177 0;
+#X connect 163 0 146 0;
+#X connect 163 0 162 0;
+#X connect 163 0 164 0;
+#X connect 163 0 176 0;
+#X connect 164 0 145 0;
+#X connect 164 0 163 0;
+#X connect 164 0 165 0;
+#X connect 164 0 175 0;
+#X connect 165 0 144 0;
+#X connect 165 0 164 0;
+#X connect 165 0 166 0;
+#X connect 165 0 174 0;
+#X connect 166 0 143 0;
+#X connect 166 0 165 0;
+#X connect 166 0 167 0;
+#X connect 166 0 173 0;
+#X connect 167 0 142 0;
+#X connect 167 0 166 0;
+#X connect 167 0 168 0;
+#X connect 167 0 172 0;
+#X connect 168 0 141 0;
+#X connect 168 0 167 0;
+#X connect 168 0 169 0;
+#X connect 168 0 171 0;
+#X connect 169 0 138 0;
+#X connect 169 0 140 0;
+#X connect 169 0 168 0;
+#X connect 169 0 170 0;
+#X connect 170 0 137 0;
+#X connect 170 0 169 0;
+#X connect 170 0 171 0;
+#X connect 170 0 199 0;
+#X connect 171 0 168 0;
+#X connect 171 0 170 0;
+#X connect 171 0 172 0;
+#X connect 171 0 198 0;
+#X connect 172 0 167 0;
+#X connect 172 0 171 0;
+#X connect 172 0 173 0;
+#X connect 172 0 197 0;
+#X connect 173 0 166 0;
+#X connect 173 0 172 0;
+#X connect 173 0 174 0;
+#X connect 173 0 196 0;
+#X connect 174 0 165 0;
+#X connect 174 0 173 0;
+#X connect 174 0 175 0;
+#X connect 174 0 195 0;
+#X connect 175 0 164 0;
+#X connect 175 0 174 0;
+#X connect 175 0 176 0;
+#X connect 175 0 194 0;
+#X connect 176 0 163 0;
+#X connect 176 0 175 0;
+#X connect 176 0 177 0;
+#X connect 176 0 193 0;
+#X connect 177 0 162 0;
+#X connect 177 0 176 0;
+#X connect 177 0 178 0;
+#X connect 177 0 192 0;
+#X connect 178 0 161 0;
+#X connect 178 0 177 0;
+#X connect 178 0 179 0;
+#X connect 178 0 191 0;
+#X connect 179 0 160 0;
+#X connect 179 0 178 0;
+#X connect 179 0 180 0;
+#X connect 179 0 190 0;
+#X connect 180 0 159 0;
+#X connect 180 0 179 0;
+#X connect 180 0 181 0;
+#X connect 180 0 189 0;
+#X connect 181 0 158 0;
+#X connect 181 0 180 0;
+#X connect 181 0 182 0;
+#X connect 181 0 188 0;
+#X connect 182 0 157 0;
+#X connect 182 0 181 0;
+#X connect 182 0 183 0;
+#X connect 182 0 187 0;
+#X connect 183 0 156 0;
+#X connect 183 0 182 0;
+#X connect 183 0 184 0;
+#X connect 183 0 186 0;
+#X connect 184 0 155 0;
+#X connect 184 0 183 0;
+#X connect 184 0 185 0;
+#X connect 185 0 184 0;
+#X connect 185 0 186 0;
+#X connect 185 0 213 0;
+#X connect 186 0 183 0;
+#X connect 186 0 185 0;
+#X connect 186 0 187 0;
+#X connect 186 0 212 0;
+#X connect 187 0 182 0;
+#X connect 187 0 186 0;
+#X connect 187 0 188 0;
+#X connect 187 0 259 0;
+#X connect 188 0 181 0;
+#X connect 188 0 187 0;
+#X connect 188 0 189 0;
+#X connect 188 0 211 0;
+#X connect 189 0 180 0;
+#X connect 189 0 188 0;
+#X connect 189 0 190 0;
+#X connect 189 0 210 0;
+#X connect 190 0 179 0;
+#X connect 190 0 189 0;
+#X connect 190 0 191 0;
+#X connect 190 0 209 0;
+#X connect 191 0 178 0;
+#X connect 191 0 190 0;
+#X connect 191 0 192 0;
+#X connect 191 0 208 0;
+#X connect 192 0 177 0;
+#X connect 192 0 191 0;
+#X connect 192 0 193 0;
+#X connect 192 0 207 0;
+#X connect 193 0 176 0;
+#X connect 193 0 192 0;
+#X connect 193 0 194 0;
+#X connect 193 0 206 0;
+#X connect 194 0 175 0;
+#X connect 194 0 193 0;
+#X connect 194 0 195 0;
+#X connect 194 0 205 0;
+#X connect 195 0 174 0;
+#X connect 195 0 194 0;
+#X connect 195 0 196 0;
+#X connect 195 0 204 0;
+#X connect 196 0 173 0;
+#X connect 196 0 195 0;
+#X connect 196 0 197 0;
+#X connect 196 0 203 0;
+#X connect 197 0 172 0;
+#X connect 197 0 196 0;
+#X connect 197 0 198 0;
+#X connect 197 0 202 0;
+#X connect 198 0 171 0;
+#X connect 198 0 197 0;
+#X connect 198 0 199 0;
+#X connect 198 0 201 0;
+#X connect 199 0 136 0;
+#X connect 199 0 170 0;
+#X connect 199 0 198 0;
+#X connect 199 0 200 0;
+#X connect 200 0 135 0;
+#X connect 200 0 199 0;
+#X connect 200 0 201 0;
+#X connect 200 0 243 0;
+#X connect 201 0 198 0;
+#X connect 201 0 200 0;
+#X connect 201 0 202 0;
+#X connect 201 0 244 0;
+#X connect 202 0 197 0;
+#X connect 202 0 201 0;
+#X connect 202 0 203 0;
+#X connect 202 0 245 0;
+#X connect 203 0 196 0;
+#X connect 203 0 202 0;
+#X connect 203 0 204 0;
+#X connect 203 0 246 0;
+#X connect 204 0 195 0;
+#X connect 204 0 203 0;
+#X connect 204 0 205 0;
+#X connect 204 0 247 0;
+#X connect 205 0 194 0;
+#X connect 205 0 204 0;
+#X connect 205 0 206 0;
+#X connect 205 0 248 0;
+#X connect 206 0 193 0;
+#X connect 206 0 205 0;
+#X connect 206 0 207 0;
+#X connect 206 0 249 0;
+#X connect 207 0 192 0;
+#X connect 207 0 206 0;
+#X connect 207 0 208 0;
+#X connect 207 0 250 0;
+#X connect 208 0 191 0;
+#X connect 208 0 207 0;
+#X connect 208 0 209 0;
+#X connect 208 0 251 0;
+#X connect 209 0 190 0;
+#X connect 209 0 208 0;
+#X connect 209 0 210 0;
+#X connect 209 0 252 0;
+#X connect 210 0 189 0;
+#X connect 210 0 209 0;
+#X connect 210 0 211 0;
+#X connect 210 0 253 0;
+#X connect 211 0 188 0;
+#X connect 211 0 210 0;
+#X connect 211 0 254 0;
+#X connect 211 0 259 0;
+#X connect 212 0 186 0;
+#X connect 212 0 213 0;
+#X connect 212 0 256 0;
+#X connect 212 0 259 0;
+#X connect 213 0 185 0;
+#X connect 213 0 212 0;
+#X connect 213 0 257 0;
+#X connect 214 0 215 0;
+#X connect 214 0 242 0;
+#X connect 214 0 257 0;
+#X connect 215 0 214 0;
+#X connect 215 0 216 0;
+#X connect 215 0 241 0;
+#X connect 215 0 256 0;
+#X connect 216 0 215 0;
+#X connect 216 0 217 0;
+#X connect 216 0 240 0;
+#X connect 216 0 255 0;
+#X connect 217 0 216 0;
+#X connect 217 0 218 0;
+#X connect 217 0 239 0;
+#X connect 217 0 254 0;
+#X connect 218 0 217 0;
+#X connect 218 0 219 0;
+#X connect 218 0 238 0;
+#X connect 218 0 253 0;
+#X connect 219 0 218 0;
+#X connect 219 0 220 0;
+#X connect 219 0 237 0;
+#X connect 219 0 252 0;
+#X connect 220 0 219 0;
+#X connect 220 0 221 0;
+#X connect 220 0 236 0;
+#X connect 220 0 251 0;
+#X connect 221 0 220 0;
+#X connect 221 0 222 0;
+#X connect 221 0 235 0;
+#X connect 221 0 250 0;
+#X connect 222 0 221 0;
+#X connect 222 0 223 0;
+#X connect 222 0 234 0;
+#X connect 222 0 249 0;
+#X connect 223 0 9 0;
+#X connect 223 0 222 0;
+#X connect 223 0 233 0;
+#X connect 223 0 248 0;
+#X connect 224 0 9 0;
+#X connect 224 0 225 0;
+#X connect 224 0 231 0;
+#X connect 224 0 246 0;
+#X connect 225 0 224 0;
+#X connect 225 0 226 0;
+#X connect 225 0 230 0;
+#X connect 225 0 245 0;
+#X connect 226 0 225 0;
+#X connect 226 0 227 0;
+#X connect 226 0 229 0;
+#X connect 226 0 244 0;
+#X connect 227 0 133 0;
+#X connect 227 0 226 0;
+#X connect 227 0 228 0;
+#X connect 227 0 243 0;
+#X connect 228 0 26 0;
+#X connect 228 0 132 0;
+#X connect 228 0 227 0;
+#X connect 228 0 229 0;
+#X connect 229 0 34 0;
+#X connect 229 0 226 0;
+#X connect 229 0 228 0;
+#X connect 229 0 230 0;
+#X connect 230 0 40 0;
+#X connect 230 0 225 0;
+#X connect 230 0 229 0;
+#X connect 230 0 231 0;
+#X connect 231 0 8 0;
+#X connect 231 0 224 0;
+#X connect 231 0 230 0;
+#X connect 231 0 232 0;
+#X connect 232 0 7 0;
+#X connect 232 0 9 0;
+#X connect 232 0 231 0;
+#X connect 232 0 233 0;
+#X connect 233 0 60 0;
+#X connect 233 0 223 0;
+#X connect 233 0 232 0;
+#X connect 233 0 234 0;
+#X connect 234 0 68 0;
+#X connect 234 0 222 0;
+#X connect 234 0 233 0;
+#X connect 234 0 235 0;
+#X connect 235 0 76 0;
+#X connect 235 0 221 0;
+#X connect 235 0 234 0;
+#X connect 235 0 236 0;
+#X connect 236 0 84 0;
+#X connect 236 0 220 0;
+#X connect 236 0 235 0;
+#X connect 236 0 237 0;
+#X connect 237 0 92 0;
+#X connect 237 0 219 0;
+#X connect 237 0 236 0;
+#X connect 237 0 238 0;
+#X connect 238 0 100 0;
+#X connect 238 0 218 0;
+#X connect 238 0 237 0;
+#X connect 238 0 239 0;
+#X connect 239 0 108 0;
+#X connect 239 0 217 0;
+#X connect 239 0 238 0;
+#X connect 239 0 240 0;
+#X connect 240 0 115 0;
+#X connect 240 0 216 0;
+#X connect 240 0 239 0;
+#X connect 240 0 241 0;
+#X connect 241 0 123 0;
+#X connect 241 0 215 0;
+#X connect 241 0 240 0;
+#X connect 241 0 242 0;
+#X connect 242 0 131 0;
+#X connect 242 0 214 0;
+#X connect 242 0 241 0;
+#X connect 243 0 134 0;
+#X connect 243 0 200 0;
+#X connect 243 0 227 0;
+#X connect 243 0 244 0;
+#X connect 244 0 201 0;
+#X connect 244 0 226 0;
+#X connect 244 0 243 0;
+#X connect 244 0 245 0;
+#X connect 245 0 202 0;
+#X connect 245 0 225 0;
+#X connect 245 0 244 0;
+#X connect 245 0 246 0;
+#X connect 246 0 203 0;
+#X connect 246 0 224 0;
+#X connect 246 0 245 0;
+#X connect 246 0 247 0;
+#X connect 247 0 9 0;
+#X connect 247 0 204 0;
+#X connect 247 0 246 0;
+#X connect 247 0 248 0;
+#X connect 248 0 205 0;
+#X connect 248 0 223 0;
+#X connect 248 0 247 0;
+#X connect 248 0 249 0;
+#X connect 249 0 206 0;
+#X connect 249 0 222 0;
+#X connect 249 0 248 0;
+#X connect 249 0 250 0;
+#X connect 250 0 207 0;
+#X connect 250 0 221 0;
+#X connect 250 0 249 0;
+#X connect 250 0 251 0;
+#X connect 251 0 208 0;
+#X connect 251 0 220 0;
+#X connect 251 0 250 0;
+#X connect 251 0 252 0;
+#X connect 252 0 209 0;
+#X connect 252 0 219 0;
+#X connect 252 0 251 0;
+#X connect 252 0 253 0;
+#X connect 253 0 210 0;
+#X connect 253 0 218 0;
+#X connect 253 0 252 0;
+#X connect 253 0 254 0;
+#X connect 254 0 211 0;
+#X connect 254 0 217 0;
+#X connect 254 0 253 0;
+#X connect 254 0 255 0;
+#X connect 255 0 216 0;
+#X connect 255 0 254 0;
+#X connect 255 0 256 0;
+#X connect 255 0 259 0;
+#X connect 256 0 212 0;
+#X connect 256 0 215 0;
+#X connect 256 0 255 0;
+#X connect 256 0 257 0;
+#X connect 257 0 213 0;
+#X connect 257 0 214 0;
+#X connect 257 0 256 0;
+#X connect 258 0 104 0;
+#X connect 258 0 111 0;
+#X connect 258 0 112 0;
+#X connect 258 0 119 0;
+#X connect 259 0 187 0;
+#X connect 259 0 211 0;
+#X connect 259 0 212 0;
+#X connect 259 0 255 0;
+#X restore 606 498 pd array;
+#X obj 364 384 loadbang;
+#X msg 364 428 0.45;
+#X msg 313 476 setL \$1;
+#X msg 81 165 force3D 0 0 -0.0031;
+#X msg 42 489 setZ \$1;
+#X floatatom 42 342 5 0 0 0 - - -;
+#X obj 31 512 iSphere3D masse 7.5 7.5 -12 0 9 0 1;
+#X msg 266 425 0.4;
+#X msg 313 358 1.3;
+#X msg 42 318 -10;
+#X obj 31 115 metro 20;
+#X msg 290 404 0.8;
+#X obj 42 387 line;
+#X msg 42 362 \$1 100;
+#X obj 477 116 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 477 136 t b b;
+#X msg 127 462 -3;
+#X obj 536 115 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 536 135 t b b;
+#X text 337 7 elastic membrane on a sphere;
+#X floatatom 313 453 5 0 0 0 - - -;
+#X obj 42 293 loadbang;
+#X msg 77 461 -7;
+#X obj 502 161 s anim1;
+#X obj 561 161 s anim2;
+#X obj 77 437 r anim2;
+#X obj 127 438 r anim1;
+#X obj 313 334 r anim1;
+#X obj 290 382 r anim2;
+#X obj 51 413 s position;
+#X text 63 34 <- begin (change metro speed if to much;
+#X text 86 341 <- change red ball position;
+#X obj 238 155 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 254 178 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 271 203 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 267 133 camera position;
+#X text 359 79 <- 1;
+#N canvas 0 0 545 312 spheres 0;
+#X obj 44 101 r gemhead;
+#X obj 44 122 separator;
+#X obj 44 174 color 1 0 0;
+#X msg 87 219 30;
+#X obj 87 198 loadbang;
+#X msg 132 104 7.5;
+#X obj 132 127 / 3;
+#X obj 44 239 sphere 3;
+#X obj 44 151 translateXYZ 7.5 7.5 -4;
+#X obj 177 128 / 3;
+#X obj 132 79 loadbang;
+#X msg 228 105 -7;
+#X msg 197 83 -3;
+#X obj 228 84 r anim2;
+#X obj 197 59 r anim1;
+#X obj 177 36 r position;
+#X obj 323 92 gemhead;
+#X obj 323 156 rotateXYZ;
+#X obj 323 182 s gemhead;
+#X floatatom 369 110 5 0 0 0 - - -;
+#X floatatom 415 109 5 0 0 0 - - -;
+#X floatatom 462 109 5 0 0 0 - - -;
+#X obj 323 131 translateXYZ -2.5 -2.5 2;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 7 2;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 2;
+#X connect 6 0 8 1;
+#X connect 8 0 2 0;
+#X connect 9 0 8 3;
+#X connect 10 0 5 0;
+#X connect 11 0 9 0;
+#X connect 12 0 9 0;
+#X connect 13 0 11 0;
+#X connect 14 0 12 0;
+#X connect 15 0 9 0;
+#X connect 16 0 22 0;
+#X connect 17 0 18 0;
+#X connect 19 0 22 1;
+#X connect 20 0 22 2;
+#X connect 21 0 22 3;
+#X connect 22 0 17 0;
+#X restore 608 428 pd spheres;
+#X connect 0 0 44 0;
+#X connect 2 0 28 0;
+#X connect 3 0 4 0;
+#X connect 5 0 29 0;
+#X connect 6 0 2 0;
+#X connect 7 0 11 0;
+#X connect 8 0 3 0;
+#X connect 10 0 9 0;
+#X connect 11 0 28 0;
+#X connect 12 0 14 0;
+#X connect 13 0 14 0;
+#X connect 14 0 16 0;
+#X connect 14 1 22 0;
+#X connect 14 2 15 0;
+#X connect 15 0 17 0;
+#X connect 15 0 23 0;
+#X connect 16 0 20 0;
+#X connect 18 0 7 0;
+#X connect 19 0 35 0;
+#X connect 19 0 18 0;
+#X connect 19 0 27 0;
+#X connect 24 0 29 0;
+#X connect 26 0 21 0;
+#X connect 26 0 37 0;
+#X connect 26 0 40 0;
+#X connect 26 1 25 0;
+#X connect 26 1 30 0;
+#X connect 26 2 1 0;
+#X connect 27 0 8 0;
+#X connect 32 0 44 1;
+#X connect 34 0 19 0;
+#X connect 35 0 6 0;
+#X connect 36 0 28 0;
+#X connect 37 0 1 0;
+#X connect 38 0 40 0;
+#X connect 39 0 47 0;
+#X connect 41 0 54 0;
+#X connect 42 0 54 0;
+#X connect 43 0 39 0;
+#X connect 44 0 26 0;
+#X connect 45 0 54 0;
+#X connect 46 0 38 0;
+#X connect 46 0 63 0;
+#X connect 47 0 46 0;
+#X connect 48 0 49 0;
+#X connect 49 0 14 0;
+#X connect 49 1 57 0;
+#X connect 50 0 38 0;
+#X connect 51 0 52 0;
+#X connect 52 0 14 0;
+#X connect 52 1 58 0;
+#X connect 54 0 36 0;
+#X connect 55 0 43 0;
+#X connect 56 0 38 0;
+#X connect 59 0 56 0;
+#X connect 60 0 50 0;
+#X connect 61 0 42 0;
+#X connect 62 0 45 0;
+#X connect 66 0 29 1;
+#X connect 67 0 29 2;
+#X connect 68 0 29 3;
diff --git a/exemples/39_blob.pd b/exemples/39_blob.pd
new file mode 100755
index 0000000..299ffb5
--- /dev/null
+++ b/exemples/39_blob.pd
@@ -0,0 +1,696 @@
+#N canvas 184 131 697 488 10;
+#N canvas 289 242 849 567 array 0;
+#X obj 401 247 blob 62 1.39556 1 0;
+#X obj 28 386 lia3D link2 1 1 0 0.5;
+#X obj 203 382 lia3D link2 1 1 0 0.5;
+#X obj 393 385 lia3D link2 1 1 0 0.5;
+#X obj 576 387 lia3D link2 1 1 0 0.5;
+#X obj 793 385 lia3D link2 1 1 0 0.5;
+#X obj 988 387 lia3D link2 1 1 0 0.5;
+#X obj 1190 385 lia3D link2 1 1 0 0.5;
+#X obj 1391 387 lia3D link2 1 1 0 0.5;
+#X obj 1593 382 lia3D link2 1 1 0 0.5;
+#X obj 217 66 lia3D link2 1 1 0 0.5;
+#X obj 407 70 lia3D link2 1 1 0 0.5;
+#X obj 603 72 lia3D link2 1 1 0 0.5;
+#X obj 807 70 lia3D link2 1 1 0 0.5;
+#X obj 1002 72 lia3D link2 1 1 0 0.5;
+#X obj 1204 70 lia3D link2 1 1 0 0.5;
+#X obj 1405 72 lia3D link2 1 1 0 0.5;
+#X obj 1607 67 lia3D link2 1 1 0 0.5;
+#X obj 711 461 / 10;
+#X msg 751 489 setZ \$1 \, bang;
+#X obj 1089 353 mass3D foo 1 0 0 5;
+#X obj 1105 28 mass3D foo 1 0 0 -5;
+#X obj 848 464 * -1;
+#X msg 851 492 setZ \$1 \, bang;
+#X obj 999 481 translateXYZ 0 0 0;
+#X obj 999 509 sphere 0.3;
+#X obj 1009 448 unpack s f f f;
+#X obj 1128 480 translateXYZ 0 0 0;
+#X obj 1128 508 sphere 0.3;
+#X obj 1136 449 unpack s f f f;
+#X obj 932 408 r gemhead;
+#X obj 932 432 separator;
+#X obj 1017 426 separator;
+#X obj 42 71 lia3D link2 1 1 0 0.5;
+#X msg 40 34 setK 0.5 \, setL 0;
+#X obj 25 314 blob 99 6.28 3 0;
+#X obj 406 314 blob 92 1.39556 3 0;
+#X obj 1600 315 blob 98 5.58222 3 0;
+#X obj 1400 315 blob 97 4.88444 3 0;
+#X obj 1202 311 blob 96 4.18667 3 0;
+#X obj 1002 311 blob 95 3.48889 3 0;
+#X obj 802 311 blob 94 2.79111 3 0;
+#X obj 216 314 blob 91 0.697778 3 0;
+#X obj 26 286 blob 89 6.28 2.33333 0;
+#X obj 1601 287 blob 88 5.58222 2.33333 0;
+#X obj 1401 287 blob 87 4.88444 2.33333 0;
+#X obj 1201 287 blob 86 4.18667 2.33333 0;
+#X obj 1001 287 blob 85 3.48889 2.33333 0;
+#X obj 801 287 blob 84 2.79111 2.33333 0;
+#X obj 601 290 blob 83 2.09333 2.33333 0;
+#X obj 401 287 blob 82 1.39556 2.33333 0;
+#X obj 201 287 blob 81 0.697778 2.33333 0;
+#X obj 26 266 blob 79 6.28 1.66667 0;
+#X obj 1601 267 blob 78 5.58222 1.66667 0;
+#X obj 1401 267 blob 77 4.88444 1.66667 0;
+#X obj 1201 267 blob 76 4.18667 1.66667 0;
+#X obj 1001 267 blob 75 3.48889 1.66667 0;
+#X obj 801 267 blob 74 2.79111 1.66667 0;
+#X obj 601 267 blob 73 2.09333 1.66667 0;
+#X obj 401 267 blob 72 1.39556 1.66667 0;
+#X obj 198 267 blob 71 0.697778 1.66667 0;
+#X obj 26 246 blob 69 6.28 1 0;
+#X obj 1601 247 blob 68 5.58222 1 0;
+#X obj 1401 247 blob 67 4.88444 1 0;
+#X obj 1201 247 blob 66 4.18667 1 0;
+#X obj 1001 247 blob 65 3.48889 1 0;
+#X obj 801 247 blob 64 2.79111 1 0;
+#X obj 601 247 blob 63 2.09333 1 0;
+#X obj 201 247 blob 61 0.697778 1 0;
+#X obj 26 226 blob 59 6.28 0.333333 0;
+#X obj 1601 227 blob 58 5.58222 0.333333 0;
+#X obj 1401 227 blob 57 4.88444 0.333333 0;
+#X obj 1201 227 blob 56 4.18667 0.333333 0;
+#X obj 1001 227 blob 55 3.48889 0.333333 0;
+#X obj 801 227 blob 54 2.79111 0.333333 0;
+#X obj 601 227 blob 53 2.09333 0.333333 0;
+#X obj 401 227 blob 52 1.39556 0.333333 0;
+#X obj 202 228 blob 51 0.697778 0.333333 0;
+#X obj 26 206 blob 49 6.28 -0.333333 0;
+#X obj 1601 207 blob 48 5.58222 -0.333333 0;
+#X obj 1401 207 blob 47 4.88444 -0.333333 0;
+#X obj 1201 207 blob 46 4.18667 -0.333333 0;
+#X obj 1001 207 blob 45 3.48889 -0.333333 0;
+#X obj 801 207 blob 44 2.79111 -0.333333 0;
+#X obj 601 207 blob 43 2.09333 -0.333333 0;
+#X obj 401 207 blob 42 1.39556 -0.333333 0;
+#X obj 201 207 blob 41 0.697778 -0.333333 0;
+#X obj 26 186 blob 39 6.28 -1 0;
+#X obj 1601 187 blob 38 5.58222 -1 0;
+#X obj 1401 187 blob 37 4.88444 -1 0;
+#X obj 1201 187 blob 36 4.18667 -1 0;
+#X obj 1001 187 blob 35 3.48889 -1 0;
+#X obj 801 187 blob 34 2.79111 -1 0;
+#X obj 601 187 blob 33 2.09333 -1 0;
+#X obj 401 187 blob 32 1.39556 -1 0;
+#X obj 201 187 blob 31 0.697778 -1 0;
+#X obj 26 166 blob 29 6.28 -1.66667 0;
+#X obj 1601 167 blob 28 5.58222 -1.66667 0;
+#X obj 1401 167 blob 27 4.88444 -1.66667 0;
+#X obj 1201 167 blob 26 4.18667 -1.66667 0;
+#X obj 1001 167 blob 25 3.48889 -1.66667 0;
+#X obj 801 167 blob 24 2.79111 -1.66667 0;
+#X obj 601 167 blob 23 2.09333 -1.66667 0;
+#X obj 401 167 blob 22 1.39556 -1.66667 0;
+#X obj 201 167 blob 21 0.697778 -1.66667 0;
+#X obj 26 146 blob 19 6.28 -2.33333 0;
+#X obj 1601 147 blob 18 5.58222 -2.33333 0;
+#X obj 1401 147 blob 17 4.88444 -2.33333 0;
+#X obj 1201 147 blob 16 4.18667 -2.33333 0;
+#X obj 1001 147 blob 15 3.48889 -2.33333 0;
+#X obj 801 147 blob 14 2.79111 -2.33333 0;
+#X obj 601 147 blob 13 2.09333 -2.33333 0;
+#X obj 401 147 blob 12 1.39556 -2.33333 0;
+#X obj 201 147 blob 11 0.697778 -2.33333 0;
+#X obj 26 126 blob 9 6.28 -3 0;
+#X obj 1601 127 blob 8 5.58222 -3 0;
+#X obj 1401 127 blob 7 4.88444 -3 0;
+#X obj 1201 127 blob 6 4.18667 -3 0;
+#X obj 1001 127 blob 5 3.48889 -3 0;
+#X obj 801 127 blob 4 2.79111 -3 0;
+#X obj 601 127 blob 3 2.09333 -3 0;
+#X obj 401 127 blob 2 1.39556 -3 0;
+#X obj 201 127 blob 1 0.697778 -3 0;
+#X obj 598 322 blob 93 2.09333 3 0;
+#X obj 38 12 loadbang;
+#X obj 242 18 inlet;
+#X connect 0 0 59 0;
+#X connect 0 0 67 0;
+#X connect 0 0 68 0;
+#X connect 0 0 76 0;
+#X connect 1 0 35 1;
+#X connect 2 0 42 1;
+#X connect 3 0 36 1;
+#X connect 4 0 123 1;
+#X connect 5 0 41 1;
+#X connect 6 0 40 1;
+#X connect 7 0 39 1;
+#X connect 8 0 38 1;
+#X connect 9 0 37 1;
+#X connect 10 0 122 1;
+#X connect 11 0 121 1;
+#X connect 12 0 120 1;
+#X connect 13 0 119 1;
+#X connect 14 0 118 1;
+#X connect 15 0 117 1;
+#X connect 16 0 116 1;
+#X connect 17 0 115 1;
+#X connect 18 0 19 0;
+#X connect 18 0 22 0;
+#X connect 19 0 20 0;
+#X connect 20 0 3 1;
+#X connect 20 0 2 1;
+#X connect 20 0 1 1;
+#X connect 20 0 4 1;
+#X connect 20 0 5 1;
+#X connect 20 0 6 1;
+#X connect 20 0 7 1;
+#X connect 20 0 8 1;
+#X connect 20 0 9 1;
+#X connect 20 0 26 0;
+#X connect 21 0 11 1;
+#X connect 21 0 10 1;
+#X connect 21 0 12 1;
+#X connect 21 0 13 1;
+#X connect 21 0 14 1;
+#X connect 21 0 15 1;
+#X connect 21 0 16 1;
+#X connect 21 0 17 1;
+#X connect 21 0 29 0;
+#X connect 21 0 33 1;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 26 1 24 1;
+#X connect 26 2 24 2;
+#X connect 26 3 24 3;
+#X connect 27 0 28 0;
+#X connect 29 1 27 1;
+#X connect 29 2 27 2;
+#X connect 29 3 27 3;
+#X connect 30 0 31 0;
+#X connect 30 0 32 0;
+#X connect 31 0 24 0;
+#X connect 32 0 27 0;
+#X connect 33 0 114 1;
+#X connect 34 0 33 0;
+#X connect 34 0 10 0;
+#X connect 34 0 11 0;
+#X connect 34 0 12 0;
+#X connect 34 0 13 0;
+#X connect 34 0 14 0;
+#X connect 34 0 15 0;
+#X connect 34 0 16 0;
+#X connect 34 0 17 0;
+#X connect 34 0 1 0;
+#X connect 34 0 2 0;
+#X connect 34 0 3 0;
+#X connect 34 0 4 0;
+#X connect 34 0 5 0;
+#X connect 34 0 6 0;
+#X connect 34 0 7 0;
+#X connect 34 0 8 0;
+#X connect 34 0 9 0;
+#X connect 35 0 1 0;
+#X connect 35 0 37 0;
+#X connect 35 0 42 0;
+#X connect 35 0 43 0;
+#X connect 36 0 3 0;
+#X connect 36 0 42 0;
+#X connect 36 0 50 0;
+#X connect 36 0 123 0;
+#X connect 37 0 9 0;
+#X connect 37 0 35 0;
+#X connect 37 0 38 0;
+#X connect 37 0 44 0;
+#X connect 38 0 8 0;
+#X connect 38 0 37 0;
+#X connect 38 0 39 0;
+#X connect 38 0 45 0;
+#X connect 39 0 7 0;
+#X connect 39 0 38 0;
+#X connect 39 0 40 0;
+#X connect 39 0 46 0;
+#X connect 40 0 6 0;
+#X connect 40 0 39 0;
+#X connect 40 0 41 0;
+#X connect 40 0 47 0;
+#X connect 41 0 5 0;
+#X connect 41 0 40 0;
+#X connect 41 0 48 0;
+#X connect 41 0 123 0;
+#X connect 42 0 2 0;
+#X connect 42 0 35 0;
+#X connect 42 0 36 0;
+#X connect 42 0 51 0;
+#X connect 43 0 35 0;
+#X connect 43 0 44 0;
+#X connect 43 0 51 0;
+#X connect 43 0 52 0;
+#X connect 44 0 37 0;
+#X connect 44 0 43 0;
+#X connect 44 0 45 0;
+#X connect 44 0 53 0;
+#X connect 45 0 38 0;
+#X connect 45 0 44 0;
+#X connect 45 0 46 0;
+#X connect 45 0 54 0;
+#X connect 46 0 39 0;
+#X connect 46 0 45 0;
+#X connect 46 0 47 0;
+#X connect 46 0 55 0;
+#X connect 47 0 40 0;
+#X connect 47 0 46 0;
+#X connect 47 0 48 0;
+#X connect 47 0 56 0;
+#X connect 48 0 41 0;
+#X connect 48 0 47 0;
+#X connect 48 0 49 0;
+#X connect 48 0 57 0;
+#X connect 49 0 48 0;
+#X connect 49 0 50 0;
+#X connect 49 0 58 0;
+#X connect 49 0 123 0;
+#X connect 50 0 36 0;
+#X connect 50 0 49 0;
+#X connect 50 0 51 0;
+#X connect 50 0 59 0;
+#X connect 51 0 42 0;
+#X connect 51 0 43 0;
+#X connect 51 0 50 0;
+#X connect 51 0 60 0;
+#X connect 52 0 43 0;
+#X connect 52 0 53 0;
+#X connect 52 0 60 0;
+#X connect 52 0 61 0;
+#X connect 53 0 44 0;
+#X connect 53 0 52 0;
+#X connect 53 0 54 0;
+#X connect 53 0 62 0;
+#X connect 54 0 45 0;
+#X connect 54 0 53 0;
+#X connect 54 0 55 0;
+#X connect 54 0 63 0;
+#X connect 55 0 46 0;
+#X connect 55 0 54 0;
+#X connect 55 0 56 0;
+#X connect 55 0 64 0;
+#X connect 56 0 47 0;
+#X connect 56 0 55 0;
+#X connect 56 0 57 0;
+#X connect 56 0 65 0;
+#X connect 57 0 48 0;
+#X connect 57 0 56 0;
+#X connect 57 0 58 0;
+#X connect 57 0 66 0;
+#X connect 58 0 49 0;
+#X connect 58 0 57 0;
+#X connect 58 0 59 0;
+#X connect 58 0 67 0;
+#X connect 59 0 0 0;
+#X connect 59 0 50 0;
+#X connect 59 0 58 0;
+#X connect 59 0 60 0;
+#X connect 60 0 51 0;
+#X connect 60 0 52 0;
+#X connect 60 0 59 0;
+#X connect 60 0 68 0;
+#X connect 61 0 52 0;
+#X connect 61 0 62 0;
+#X connect 61 0 68 0;
+#X connect 61 0 69 0;
+#X connect 62 0 53 0;
+#X connect 62 0 61 0;
+#X connect 62 0 63 0;
+#X connect 62 0 70 0;
+#X connect 63 0 54 0;
+#X connect 63 0 62 0;
+#X connect 63 0 64 0;
+#X connect 63 0 71 0;
+#X connect 64 0 55 0;
+#X connect 64 0 63 0;
+#X connect 64 0 65 0;
+#X connect 64 0 72 0;
+#X connect 65 0 56 0;
+#X connect 65 0 64 0;
+#X connect 65 0 66 0;
+#X connect 65 0 73 0;
+#X connect 66 0 57 0;
+#X connect 66 0 65 0;
+#X connect 66 0 67 0;
+#X connect 66 0 74 0;
+#X connect 67 0 0 0;
+#X connect 67 0 58 0;
+#X connect 67 0 66 0;
+#X connect 67 0 75 0;
+#X connect 68 0 0 0;
+#X connect 68 0 60 0;
+#X connect 68 0 61 0;
+#X connect 68 0 77 0;
+#X connect 69 0 61 0;
+#X connect 69 0 70 0;
+#X connect 69 0 77 0;
+#X connect 69 0 78 0;
+#X connect 70 0 62 0;
+#X connect 70 0 69 0;
+#X connect 70 0 71 0;
+#X connect 70 0 79 0;
+#X connect 71 0 63 0;
+#X connect 71 0 70 0;
+#X connect 71 0 72 0;
+#X connect 71 0 80 0;
+#X connect 72 0 64 0;
+#X connect 72 0 71 0;
+#X connect 72 0 73 0;
+#X connect 72 0 81 0;
+#X connect 73 0 65 0;
+#X connect 73 0 72 0;
+#X connect 73 0 74 0;
+#X connect 73 0 82 0;
+#X connect 74 0 66 0;
+#X connect 74 0 73 0;
+#X connect 74 0 75 0;
+#X connect 74 0 83 0;
+#X connect 75 0 67 0;
+#X connect 75 0 74 0;
+#X connect 75 0 76 0;
+#X connect 75 0 84 0;
+#X connect 76 0 0 0;
+#X connect 76 0 75 0;
+#X connect 76 0 77 0;
+#X connect 76 0 85 0;
+#X connect 77 0 68 0;
+#X connect 77 0 69 0;
+#X connect 77 0 76 0;
+#X connect 77 0 86 0;
+#X connect 78 0 69 0;
+#X connect 78 0 79 0;
+#X connect 78 0 86 0;
+#X connect 78 0 87 0;
+#X connect 79 0 70 0;
+#X connect 79 0 78 0;
+#X connect 79 0 80 0;
+#X connect 79 0 88 0;
+#X connect 80 0 71 0;
+#X connect 80 0 79 0;
+#X connect 80 0 81 0;
+#X connect 80 0 89 0;
+#X connect 81 0 72 0;
+#X connect 81 0 80 0;
+#X connect 81 0 82 0;
+#X connect 81 0 90 0;
+#X connect 82 0 73 0;
+#X connect 82 0 81 0;
+#X connect 82 0 83 0;
+#X connect 82 0 91 0;
+#X connect 83 0 74 0;
+#X connect 83 0 82 0;
+#X connect 83 0 84 0;
+#X connect 83 0 92 0;
+#X connect 84 0 75 0;
+#X connect 84 0 83 0;
+#X connect 84 0 85 0;
+#X connect 84 0 93 0;
+#X connect 85 0 76 0;
+#X connect 85 0 84 0;
+#X connect 85 0 86 0;
+#X connect 85 0 94 0;
+#X connect 86 0 77 0;
+#X connect 86 0 78 0;
+#X connect 86 0 85 0;
+#X connect 86 0 95 0;
+#X connect 87 0 78 0;
+#X connect 87 0 88 0;
+#X connect 87 0 95 0;
+#X connect 87 0 96 0;
+#X connect 88 0 79 0;
+#X connect 88 0 87 0;
+#X connect 88 0 89 0;
+#X connect 88 0 97 0;
+#X connect 89 0 80 0;
+#X connect 89 0 88 0;
+#X connect 89 0 90 0;
+#X connect 89 0 98 0;
+#X connect 90 0 81 0;
+#X connect 90 0 89 0;
+#X connect 90 0 91 0;
+#X connect 90 0 99 0;
+#X connect 91 0 82 0;
+#X connect 91 0 90 0;
+#X connect 91 0 92 0;
+#X connect 91 0 100 0;
+#X connect 92 0 83 0;
+#X connect 92 0 91 0;
+#X connect 92 0 93 0;
+#X connect 92 0 101 0;
+#X connect 93 0 84 0;
+#X connect 93 0 92 0;
+#X connect 93 0 94 0;
+#X connect 93 0 102 0;
+#X connect 94 0 85 0;
+#X connect 94 0 93 0;
+#X connect 94 0 95 0;
+#X connect 94 0 103 0;
+#X connect 95 0 86 0;
+#X connect 95 0 87 0;
+#X connect 95 0 94 0;
+#X connect 95 0 104 0;
+#X connect 96 0 87 0;
+#X connect 96 0 97 0;
+#X connect 96 0 104 0;
+#X connect 96 0 105 0;
+#X connect 97 0 88 0;
+#X connect 97 0 96 0;
+#X connect 97 0 98 0;
+#X connect 97 0 106 0;
+#X connect 98 0 89 0;
+#X connect 98 0 97 0;
+#X connect 98 0 99 0;
+#X connect 98 0 107 0;
+#X connect 99 0 90 0;
+#X connect 99 0 98 0;
+#X connect 99 0 100 0;
+#X connect 99 0 108 0;
+#X connect 100 0 91 0;
+#X connect 100 0 99 0;
+#X connect 100 0 101 0;
+#X connect 100 0 109 0;
+#X connect 101 0 92 0;
+#X connect 101 0 100 0;
+#X connect 101 0 102 0;
+#X connect 101 0 110 0;
+#X connect 102 0 93 0;
+#X connect 102 0 101 0;
+#X connect 102 0 103 0;
+#X connect 102 0 111 0;
+#X connect 103 0 94 0;
+#X connect 103 0 102 0;
+#X connect 103 0 104 0;
+#X connect 103 0 112 0;
+#X connect 104 0 95 0;
+#X connect 104 0 96 0;
+#X connect 104 0 103 0;
+#X connect 104 0 113 0;
+#X connect 105 0 96 0;
+#X connect 105 0 106 0;
+#X connect 105 0 113 0;
+#X connect 105 0 114 0;
+#X connect 106 0 97 0;
+#X connect 106 0 105 0;
+#X connect 106 0 107 0;
+#X connect 106 0 115 0;
+#X connect 107 0 98 0;
+#X connect 107 0 106 0;
+#X connect 107 0 108 0;
+#X connect 107 0 116 0;
+#X connect 108 0 99 0;
+#X connect 108 0 107 0;
+#X connect 108 0 109 0;
+#X connect 108 0 117 0;
+#X connect 109 0 100 0;
+#X connect 109 0 108 0;
+#X connect 109 0 110 0;
+#X connect 109 0 118 0;
+#X connect 110 0 101 0;
+#X connect 110 0 109 0;
+#X connect 110 0 111 0;
+#X connect 110 0 119 0;
+#X connect 111 0 102 0;
+#X connect 111 0 110 0;
+#X connect 111 0 112 0;
+#X connect 111 0 120 0;
+#X connect 112 0 103 0;
+#X connect 112 0 111 0;
+#X connect 112 0 113 0;
+#X connect 112 0 121 0;
+#X connect 113 0 104 0;
+#X connect 113 0 105 0;
+#X connect 113 0 112 0;
+#X connect 113 0 122 0;
+#X connect 114 0 33 0;
+#X connect 114 0 105 0;
+#X connect 114 0 115 0;
+#X connect 114 0 122 0;
+#X connect 115 0 17 0;
+#X connect 115 0 106 0;
+#X connect 115 0 114 0;
+#X connect 115 0 116 0;
+#X connect 116 0 16 0;
+#X connect 116 0 107 0;
+#X connect 116 0 115 0;
+#X connect 116 0 117 0;
+#X connect 117 0 15 0;
+#X connect 117 0 108 0;
+#X connect 117 0 116 0;
+#X connect 117 0 118 0;
+#X connect 118 0 14 0;
+#X connect 118 0 109 0;
+#X connect 118 0 117 0;
+#X connect 118 0 119 0;
+#X connect 119 0 13 0;
+#X connect 119 0 110 0;
+#X connect 119 0 118 0;
+#X connect 119 0 120 0;
+#X connect 120 0 12 0;
+#X connect 120 0 111 0;
+#X connect 120 0 119 0;
+#X connect 120 0 121 0;
+#X connect 121 0 11 0;
+#X connect 121 0 112 0;
+#X connect 121 0 120 0;
+#X connect 121 0 122 0;
+#X connect 122 0 10 0;
+#X connect 122 0 113 0;
+#X connect 122 0 114 0;
+#X connect 122 0 121 0;
+#X connect 123 0 4 0;
+#X connect 123 0 36 0;
+#X connect 123 0 41 0;
+#X connect 123 0 49 0;
+#X connect 124 0 34 0;
+#X connect 125 0 18 0;
+#X restore 51 367 pd array;
+#X obj 31 35 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 106 226 s masse;
+#X msg 426 100 0 \, destroy;
+#X obj 187 69 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 203 95 loadbang;
+#X msg 344 153 reset;
+#X msg 140 150 resetF;
+#X obj 140 174 s link;
+#X obj 58 159 s lia;
+#X obj 239 152 s r_lia;
+#X msg 415 75 lighting 1 \, create \, 1;
+#X obj 74 180 s masse3;
+#X obj 31 106 t b b b;
+#X obj 415 227 ch_gemwin;
+#X obj 89 204 s masse2;
+#X text 213 68 <- reset;
+#X text 61 34 <- begin (change metro speed if to much);
+#X floatatom 74 57 5 0 0 0 - - -;
+#X obj 344 176 s masse2;
+#X obj 42 136 s link2;
+#X msg 187 151 resetF;
+#X obj 187 174 s link2;
+#X msg 291 153 bang;
+#X obj 291 176 s masse3;
+#X obj 44 258 iAmbient3D masse 0 0 0 0 0 0 0.113;
+#X obj 50 408 / 100;
+#X obj 31 80 metro 40;
+#X obj 31 456 iCylinder3D masse 0 0 1 0 0 -6 0 1.5 0 0.6;
+#X obj 54 347 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 4500 1;
+#X msg 51 322 45;
+#X text 293 9 "Blob" simulation;
+#X obj 187 120 trigger bang bang bang bang;
+#X text 566 76 <- create GEM windows;
+#X obj 51 298 loadbang;
+#X obj 53 388 hsl 128 15 20 100 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 202 347 <- play here (change length of the blob);
+#X text 203 384 <- play here (change radius);
+#X msg 50 431 setKN \$1;
+#X obj 467 204 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 450 181 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 434 156 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 457 137 change camera position;
+#N canvas 0 0 454 304 gem 0;
+#X obj 21 73 world_light;
+#X obj 21 45 gemhead;
+#X obj 241 34 gemhead;
+#X obj 241 83 s gemhead;
+#X obj 241 58 color 1 1 1;
+#X obj 107 81 world_light;
+#X obj 107 35 gemhead;
+#X obj 107 57 rotateXYZ 30 150 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X restore 513 318 pd gem;
+#N canvas 0 0 376 283 init 0;
+#X msg 28 80 0.5;
+#X msg 28 126 setK \$1;
+#X msg 209 125 setM \$1;
+#X obj 209 149 s masse;
+#X floatatom 28 104 5 0 0 0 - - -;
+#X floatatom 141 103 5 0 0 0 - - -;
+#X floatatom 209 104 5 0 0 0 - - -;
+#X msg 141 125 setD2 \$1;
+#X floatatom 85 104 5 0 0 0 - - -;
+#X msg 85 125 setD \$1;
+#X msg 141 79 0.03;
+#X obj 141 50 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 85 79 0;
+#X obj 85 150 s link;
+#X obj 141 26 loadbang;
+#X msg 209 80 10;
+#X connect 0 0 4 0;
+#X connect 1 0 13 0;
+#X connect 2 0 3 0;
+#X connect 4 0 1 0;
+#X connect 5 0 7 0;
+#X connect 6 0 2 0;
+#X connect 7 0 13 0;
+#X connect 8 0 9 0;
+#X connect 9 0 13 0;
+#X connect 10 0 5 0;
+#X connect 11 0 12 0;
+#X connect 11 0 10 0;
+#X connect 11 0 15 0;
+#X connect 11 0 0 0;
+#X connect 12 0 8 0;
+#X connect 14 0 11 0;
+#X connect 15 0 6 0;
+#X restore 512 292 pd init;
+#X connect 1 0 27 0;
+#X connect 3 0 14 0;
+#X connect 4 0 32 0;
+#X connect 5 0 32 0;
+#X connect 6 0 19 0;
+#X connect 7 0 8 0;
+#X connect 11 0 14 0;
+#X connect 13 0 9 0;
+#X connect 13 0 20 0;
+#X connect 13 0 25 0;
+#X connect 13 0 28 0;
+#X connect 13 1 12 0;
+#X connect 13 1 15 0;
+#X connect 13 2 2 0;
+#X connect 18 0 27 1;
+#X connect 21 0 22 0;
+#X connect 23 0 24 0;
+#X connect 26 0 38 0;
+#X connect 27 0 13 0;
+#X connect 29 0 0 0;
+#X connect 30 0 29 0;
+#X connect 32 0 7 0;
+#X connect 32 0 21 0;
+#X connect 32 1 10 0;
+#X connect 32 2 23 0;
+#X connect 32 3 6 0;
+#X connect 34 0 30 0;
+#X connect 35 0 26 0;
+#X connect 38 0 28 0;
+#X connect 39 0 14 3;
+#X connect 40 0 14 2;
+#X connect 41 0 14 1;
diff --git a/exemples/40_i3D.pd b/exemples/40_i3D.pd
new file mode 100755
index 0000000..34b88cd
--- /dev/null
+++ b/exemples/40_i3D.pd
@@ -0,0 +1,214 @@
+#N canvas 136 11 692 589 10;
+#X obj 33 84 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 419 150 0 \, destroy;
+#X obj 431 424 world_light;
+#X obj 431 396 gemhead;
+#X obj 141 110 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 157 136 loadbang;
+#X msg 354 188 reset;
+#X msg 407 125 lighting 1 \, create \, 1;
+#X obj 33 155 t b b b;
+#X obj 407 262 ch_gemwin;
+#X text 167 109 <- reset;
+#X text 63 83 <- begin (change metro speed if to much);
+#X floatatom 76 106 5 0 0 0 - - -;
+#X obj 33 129 metro 40;
+#X obj 511 447 world_light;
+#X obj 511 401 gemhead;
+#X obj 511 423 rotateXYZ 30 150 0;
+#X text 549 125 <- create GEM windows;
+#X obj 141 161 t b b;
+#X obj 33 186 s link;
+#X obj 427 482 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#N canvas 0 0 967 703 array 0;
+#X obj 860 780 i3D 119 2 1 2;
+#X obj 0 0 i3D 0 -2 -2 -2;
+#X obj 200 0 i3D 1 -1 -2 -2;
+#X obj 400 0 i3D 2 0 -2 -2;
+#X obj 600 0 i3D 3 1 -2 -2;
+#X obj 800 0 i3D 4 2 -2 -2;
+#X obj 20 20 i3D 5 -2 -1 -2;
+#X obj 220 20 i3D 6 -1 -1 -2;
+#X obj 420 20 i3D 7 0 -1 -2;
+#X obj 620 20 i3D 8 1 -1 -2;
+#X obj 820 20 i3D 9 2 -1 -2;
+#X obj 40 40 i3D 10 -2 0 -2;
+#X obj 240 40 i3D 11 -1 0 -2;
+#X obj 440 40 i3D 12 0 0 -2;
+#X obj 640 40 i3D 13 1 0 -2;
+#X obj 840 40 i3D 14 2 0 -2;
+#X obj 60 60 i3D 15 -2 1 -2;
+#X obj 260 60 i3D 16 -1 1 -2;
+#X obj 460 60 i3D 17 0 1 -2;
+#X obj 660 60 i3D 18 1 1 -2;
+#X obj 860 60 i3D 19 2 1 -2;
+#X obj 80 80 i3D 20 -2 2 -2;
+#X obj 280 80 i3D 21 -1 2 -2;
+#X obj 480 80 i3D 22 0 2 -2;
+#X obj 680 80 i3D 23 1 2 -2;
+#X obj 880 80 i3D 24 2 2 -2;
+#X obj 0 180 i3D 25 -2 -2 -1;
+#X obj 200 180 i3D 26 -1 -2 -1;
+#X obj 400 180 i3D 27 0 -2 -1;
+#X obj 600 180 i3D 28 1 -2 -1;
+#X obj 800 180 i3D 29 2 -2 -1;
+#X obj 20 200 i3D 30 -2 -1 -1;
+#X obj 220 200 i3D 31 -1 -1 -1;
+#X obj 420 200 i3D 32 0 -1 -1;
+#X obj 620 200 i3D 33 1 -1 -1;
+#X obj 820 200 i3D 34 2 -1 -1;
+#X obj 40 220 i3D 35 -2 0 -1;
+#X obj 240 220 i3D 36 -1 0 -1;
+#X obj 440 220 i3D 37 0 0 -1;
+#X obj 640 220 i3D 38 1 0 -1;
+#X obj 840 220 i3D 39 2 0 -1;
+#X obj 60 240 i3D 40 -2 1 -1;
+#X obj 260 240 i3D 41 -1 1 -1;
+#X obj 460 240 i3D 42 0 1 -1;
+#X obj 660 240 i3D 43 1 1 -1;
+#X obj 860 240 i3D 44 2 1 -1;
+#X obj 80 260 i3D 45 -2 2 -1;
+#X obj 280 260 i3D 46 -1 2 -1;
+#X obj 480 260 i3D 47 0 2 -1;
+#X obj 680 260 i3D 48 1 2 -1;
+#X obj 880 260 i3D 49 2 2 -1;
+#X obj 0 360 i3D 50 -2 -2 0;
+#X obj 200 360 i3D 51 -1 -2 0;
+#X obj 400 360 i3D 52 0 -2 0;
+#X obj 600 360 i3D 53 1 -2 0;
+#X obj 800 360 i3D 54 2 -2 0;
+#X obj 20 380 i3D 55 -2 -1 0;
+#X obj 220 380 i3D 56 -1 -1 0;
+#X obj 420 380 i3D 57 0 -1 0;
+#X obj 620 380 i3D 58 1 -1 0;
+#X obj 820 380 i3D 59 2 -1 0;
+#X obj 40 400 i3D 60 -2 0 0;
+#X obj 240 400 i3D 61 -1 0 0;
+#X obj 440 400 i3D 62 0 0 0;
+#X obj 640 400 i3D 63 1 0 0;
+#X obj 840 400 i3D 64 2 0 0;
+#X obj 60 420 i3D 65 -2 1 0;
+#X obj 260 420 i3D 66 -1 1 0;
+#X obj 460 420 i3D 67 0 1 0;
+#X obj 660 420 i3D 68 1 1 0;
+#X obj 860 420 i3D 69 2 1 0;
+#X obj 80 440 i3D 70 -2 2 0;
+#X obj 280 440 i3D 71 -1 2 0;
+#X obj 480 440 i3D 72 0 2 0;
+#X obj 680 440 i3D 73 1 2 0;
+#X obj 880 440 i3D 74 2 2 0;
+#X obj 0 540 i3D 75 -2 -2 1;
+#X obj 200 540 i3D 76 -1 -2 1;
+#X obj 400 540 i3D 77 0 -2 1;
+#X obj 600 540 i3D 78 1 -2 1;
+#X obj 800 540 i3D 79 2 -2 1;
+#X obj 20 560 i3D 80 -2 -1 1;
+#X obj 220 560 i3D 81 -1 -1 1;
+#X obj 420 560 i3D 82 0 -1 1;
+#X obj 620 560 i3D 83 1 -1 1;
+#X obj 820 560 i3D 84 2 -1 1;
+#X obj 40 580 i3D 85 -2 0 1;
+#X obj 240 580 i3D 86 -1 0 1;
+#X obj 440 580 i3D 87 0 0 1;
+#X obj 640 580 i3D 88 1 0 1;
+#X obj 840 580 i3D 89 2 0 1;
+#X obj 60 600 i3D 90 -2 1 1;
+#X obj 260 600 i3D 91 -1 1 1;
+#X obj 460 600 i3D 92 0 1 1;
+#X obj 660 600 i3D 93 1 1 1;
+#X obj 860 600 i3D 94 2 1 1;
+#X obj 80 620 i3D 95 -2 2 1;
+#X obj 280 620 i3D 96 -1 2 1;
+#X obj 480 620 i3D 97 0 2 1;
+#X obj 680 620 i3D 98 1 2 1;
+#X obj 880 620 i3D 99 2 2 1;
+#X obj 0 720 i3D 100 -2 -2 2;
+#X obj 200 720 i3D 101 -1 -2 2;
+#X obj 400 720 i3D 102 0 -2 2;
+#X obj 600 720 i3D 103 1 -2 2;
+#X obj 800 720 i3D 104 2 -2 2;
+#X obj 20 740 i3D 105 -2 -1 2;
+#X obj 220 740 i3D 106 -1 -1 2;
+#X obj 420 740 i3D 107 0 -1 2;
+#X obj 620 740 i3D 108 1 -1 2;
+#X obj 820 740 i3D 109 2 -1 2;
+#X obj 40 760 i3D 110 -2 0 2;
+#X obj 240 760 i3D 111 -1 0 2;
+#X obj 440 760 i3D 112 0 0 2;
+#X obj 640 760 i3D 113 1 0 2;
+#X obj 840 760 i3D 114 2 0 2;
+#X obj 60 780 i3D 115 -2 1 2;
+#X obj 260 780 i3D 116 -1 1 2;
+#X obj 460 780 i3D 117 0 1 2;
+#X obj 660 780 i3D 118 1 1 2;
+#X obj 80 800 i3D 120 -2 2 2;
+#X obj 280 800 i3D 121 -1 2 2;
+#X obj 480 800 i3D 122 0 2 2;
+#X obj 680 800 i3D 123 1 2 2;
+#X obj 880 800 i3D 124 2 2 2;
+#X restore 431 448 pd array;
+#X obj 427 502 constructor 5 5 5 -2 2 -2 2 -2 2 i3D;
+#X obj 70 186 s mass;
+#X obj 354 211 s mass;
+#X obj 141 211 s link;
+#X obj 43 296 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 59 311 iAmbient3D mass 0 0 0 1 1 1;
+#X obj 42 341 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 43 387 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 42 434 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 42 482 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 141 187 resetF \, setK 0.1 \, setD 1 \, setD2 1;
+#X text 287 9 interactors on a masse field;
+#X obj 58 497 iSphere3D mass 0 0 0 0.1 5 0 1;
+#X obj 42 528 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 59 402 iCylinder3D mass 1 1 1 0 0 0 0.1 5 0 0 0 0 0 -10 10 0
+0.5;
+#X obj 58 356 iCylinder3D mass 1 1 1 0 0 0 0.1 2 0 2;
+#X obj 58 449 iCircle3D mass 1 1 1 2 2 2 0.1 2 0 0 0 4 0 0.3;
+#X obj 58 543 iPlane3D mass 1 1 1 0 0 0 0 1;
+#X text 28 263 you can test the action of the interactor in a 3D space
+;
+#X text 213 32 this patch allows to see the displacement due to interactors
+in 3D;
+#X obj 426 187 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 442 211 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 459 234 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 505 169 camera position;
+#X connect 0 0 13 0;
+#X connect 1 0 9 0;
+#X connect 3 0 2 0;
+#X connect 4 0 18 0;
+#X connect 5 0 18 0;
+#X connect 6 0 24 0;
+#X connect 7 0 9 0;
+#X connect 8 0 19 0;
+#X connect 8 2 23 0;
+#X connect 12 0 13 1;
+#X connect 13 0 8 0;
+#X connect 15 0 16 0;
+#X connect 16 0 14 0;
+#X connect 18 0 32 0;
+#X connect 18 1 6 0;
+#X connect 20 0 22 0;
+#X connect 26 0 27 0;
+#X connect 28 0 37 0;
+#X connect 29 0 36 0;
+#X connect 30 0 38 0;
+#X connect 31 0 34 0;
+#X connect 32 0 25 0;
+#X connect 35 0 39 0;
+#X connect 42 0 9 1;
+#X connect 43 0 9 2;
+#X connect 44 0 9 3;
diff --git a/exemples/41_morfing.pd b/exemples/41_morfing.pd
new file mode 100755
index 0000000..4840f2c
--- /dev/null
+++ b/exemples/41_morfing.pd
@@ -0,0 +1,265 @@
+#N canvas 204 50 605 681 10;
+#X obj 34 71 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 153 131 0 \, destroy;
+#X obj 334 481 world_light;
+#X obj 334 453 gemhead;
+#X obj 349 204 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 365 230 loadbang;
+#X msg 144 109 lighting 1 \, create \, 1;
+#X obj 33 139 t b b b;
+#X obj 144 244 ch_gemwin;
+#X text 375 203 <- reset;
+#X text 64 70 <- begin (change metro speed if to much);
+#X floatatom 77 93 5 0 0 0 - - -;
+#X obj 34 116 metro 40;
+#X obj 414 504 world_light;
+#X obj 414 458 gemhead;
+#X obj 414 480 rotateXYZ 30 150 0;
+#X text 294 108 <- create GEM windows;
+#X obj 334 547 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#N canvas 243 141 997 733 array 0;
+#X obj 220 380 i3D2 56 -1 -1 0;
+#X obj 80 80 i3D2 20 -2 2 -2;
+#X obj 400 360 i3D2 52 0 -2 0;
+#X obj 240 400 i3D2 61 -1 0 0;
+#X obj 20 20 i3D2 5 -2 -1 -2;
+#X obj 600 540 i3D2 78 1 -2 1;
+#X obj 480 440 i3D2 72 0 2 0;
+#X obj 200 180 i3D2 26 -1 -2 -1;
+#X obj 0 0 i3D2 0 -2 -2 -2;
+#X obj 200 0 i3D2 1 -1 -2 -2;
+#X obj 400 0 i3D2 2 0 -2 -2;
+#X obj 600 0 i3D2 3 1 -2 -2;
+#X obj 800 0 i3D2 4 2 -2 -2;
+#X obj 220 20 i3D2 6 -1 -1 -2;
+#X obj 420 20 i3D2 7 0 -1 -2;
+#X obj 620 20 i3D2 8 1 -1 -2;
+#X obj 820 20 i3D2 9 2 -1 -2;
+#X obj 40 40 i3D2 10 -2 0 -2;
+#X obj 240 40 i3D2 11 -1 0 -2;
+#X obj 440 40 i3D2 12 0 0 -2;
+#X obj 640 40 i3D2 13 1 0 -2;
+#X obj 840 40 i3D2 14 2 0 -2;
+#X obj 60 60 i3D2 15 -2 1 -2;
+#X obj 260 60 i3D2 16 -1 1 -2;
+#X obj 460 60 i3D2 17 0 1 -2;
+#X obj 660 60 i3D2 18 1 1 -2;
+#X obj 860 60 i3D2 19 2 1 -2;
+#X obj 280 80 i3D2 21 -1 2 -2;
+#X obj 480 80 i3D2 22 0 2 -2;
+#X obj 680 80 i3D2 23 1 2 -2;
+#X obj 880 80 i3D2 24 2 2 -2;
+#X obj 0 180 i3D2 25 -2 -2 -1;
+#X obj 400 180 i3D2 27 0 -2 -1;
+#X obj 600 180 i3D2 28 1 -2 -1;
+#X obj 800 180 i3D2 29 2 -2 -1;
+#X obj 20 200 i3D2 30 -2 -1 -1;
+#X obj 220 200 i3D2 31 -1 -1 -1;
+#X obj 420 200 i3D2 32 0 -1 -1;
+#X obj 620 200 i3D2 33 1 -1 -1;
+#X obj 820 200 i3D2 34 2 -1 -1;
+#X obj 40 220 i3D2 35 -2 0 -1;
+#X obj 240 220 i3D2 36 -1 0 -1;
+#X obj 440 220 i3D2 37 0 0 -1;
+#X obj 640 220 i3D2 38 1 0 -1;
+#X obj 840 220 i3D2 39 2 0 -1;
+#X obj 60 240 i3D2 40 -2 1 -1;
+#X obj 260 240 i3D2 41 -1 1 -1;
+#X obj 460 240 i3D2 42 0 1 -1;
+#X obj 660 240 i3D2 43 1 1 -1;
+#X obj 860 240 i3D2 44 2 1 -1;
+#X obj 80 260 i3D2 45 -2 2 -1;
+#X obj 280 260 i3D2 46 -1 2 -1;
+#X obj 480 260 i3D2 47 0 2 -1;
+#X obj 680 260 i3D2 48 1 2 -1;
+#X obj 880 260 i3D2 49 2 2 -1;
+#X obj 0 360 i3D2 50 -2 -2 0;
+#X obj 200 360 i3D2 51 -1 -2 0;
+#X obj 600 360 i3D2 53 1 -2 0;
+#X obj 800 360 i3D2 54 2 -2 0;
+#X obj 20 380 i3D2 55 -2 -1 0;
+#X obj 420 380 i3D2 57 0 -1 0;
+#X obj 620 380 i3D2 58 1 -1 0;
+#X obj 820 380 i3D2 59 2 -1 0;
+#X obj 40 400 i3D2 60 -2 0 0;
+#X obj 440 400 i3D2 62 0 0 0;
+#X obj 640 400 i3D2 63 1 0 0;
+#X obj 840 400 i3D2 64 2 0 0;
+#X obj 60 420 i3D2 65 -2 1 0;
+#X obj 260 420 i3D2 66 -1 1 0;
+#X obj 460 420 i3D2 67 0 1 0;
+#X obj 660 420 i3D2 68 1 1 0;
+#X obj 860 420 i3D2 69 2 1 0;
+#X obj 80 440 i3D2 70 -2 2 0;
+#X obj 280 440 i3D2 71 -1 2 0;
+#X obj 680 440 i3D2 73 1 2 0;
+#X obj 880 440 i3D2 74 2 2 0;
+#X obj 0 540 i3D2 75 -2 -2 1;
+#X obj 200 540 i3D2 76 -1 -2 1;
+#X obj 400 540 i3D2 77 0 -2 1;
+#X obj 800 540 i3D2 79 2 -2 1;
+#X obj 20 560 i3D2 80 -2 -1 1;
+#X obj 220 560 i3D2 81 -1 -1 1;
+#X obj 420 560 i3D2 82 0 -1 1;
+#X obj 620 560 i3D2 83 1 -1 1;
+#X obj 820 560 i3D2 84 2 -1 1;
+#X obj 40 580 i3D2 85 -2 0 1;
+#X obj 240 580 i3D2 86 -1 0 1;
+#X obj 440 580 i3D2 87 0 0 1;
+#X obj 640 580 i3D2 88 1 0 1;
+#X obj 840 580 i3D2 89 2 0 1;
+#X obj 60 600 i3D2 90 -2 1 1;
+#X obj 260 600 i3D2 91 -1 1 1;
+#X obj 460 600 i3D2 92 0 1 1;
+#X obj 660 600 i3D2 93 1 1 1;
+#X obj 860 600 i3D2 94 2 1 1;
+#X obj 80 620 i3D2 95 -2 2 1;
+#X obj 280 620 i3D2 96 -1 2 1;
+#X obj 480 620 i3D2 97 0 2 1;
+#X obj 680 620 i3D2 98 1 2 1;
+#X obj 880 620 i3D2 99 2 2 1;
+#X obj 0 720 i3D2 100 -2 -2 2;
+#X obj 200 720 i3D2 101 -1 -2 2;
+#X obj 400 720 i3D2 102 0 -2 2;
+#X obj 600 720 i3D2 103 1 -2 2;
+#X obj 800 720 i3D2 104 2 -2 2;
+#X obj 20 740 i3D2 105 -2 -1 2;
+#X obj 220 740 i3D2 106 -1 -1 2;
+#X obj 420 740 i3D2 107 0 -1 2;
+#X obj 620 740 i3D2 108 1 -1 2;
+#X obj 820 740 i3D2 109 2 -1 2;
+#X obj 40 760 i3D2 110 -2 0 2;
+#X obj 240 760 i3D2 111 -1 0 2;
+#X obj 440 760 i3D2 112 0 0 2;
+#X obj 640 760 i3D2 113 1 0 2;
+#X obj 840 760 i3D2 114 2 0 2;
+#X obj 60 780 i3D2 115 -2 1 2;
+#X obj 260 780 i3D2 116 -1 1 2;
+#X obj 460 780 i3D2 117 0 1 2;
+#X obj 660 780 i3D2 118 1 1 2;
+#X obj 860 780 i3D2 119 2 1 2;
+#X obj 80 800 i3D2 120 -2 2 2;
+#X obj 280 800 i3D2 121 -1 2 2;
+#X obj 480 800 i3D2 122 0 2 2;
+#X obj 680 800 i3D2 123 1 2 2;
+#X obj 880 800 i3D2 124 2 2 2;
+#X restore 334 505 pd array;
+#X obj 71 173 s mass;
+#X obj 349 351 s mass;
+#X obj 334 567 constructor 5 5 5 -2 2 -2 2 -2 2 i3D2;
+#X obj 366 307 s link1;
+#X obj 414 307 s link2;
+#X obj 39 652 s link1;
+#X msg 39 626 setK \$1;
+#X floatatom 39 605 5 0 0 0 - - -;
+#X msg 95 627 setK \$1;
+#X floatatom 95 606 5 0 0 0 - - -;
+#X obj 95 653 s link2;
+#X obj 29 208 s link1;
+#X obj 38 230 s link2;
+#X msg 157 627 setK \$1;
+#X floatatom 157 606 5 0 0 0 - - -;
+#X msg 213 628 setK \$1;
+#X floatatom 213 607 5 0 0 0 - - -;
+#X obj 461 307 s link3;
+#X obj 511 307 s link4;
+#X obj 157 653 s link3;
+#X obj 213 654 s link4;
+#X obj 49 252 s link3;
+#X obj 58 274 s link4;
+#X obj 39 577 unpack f f f f;
+#X msg 48 321 1 0 0 0;
+#X msg 68 366 0 1 0 0;
+#X msg 39 300 0 0 1 0;
+#X msg 59 342 0 0 0 1;
+#X msg 349 328 resetF;
+#X msg 365 279 setK 0 \, setD 1 \, setD2 1 \, resetF \, bang;
+#X msg 91 413 0 1 0 1;
+#X msg 101 435 0 0 0.1 3;
+#X obj 349 255 t b b b;
+#X msg 395 329 reset;
+#X msg 113 455 2 3 0 3;
+#X msg 81 390 0.1 0 0 0.1;
+#X text 301 6 morfing;
+#X text 128 21 each masses are link to 4 diferents point \, among diferents
+shapes. depending of the rigidity of the link \, the diferents shapes
+an be show;
+#X text 220 379 <- select diferents rigidity (and diferents shape)
+;
+#X obj 163 166 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 179 190 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 196 213 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 242 148 camera position;
+#X obj 125 549 pack f f f f;
+#X floatatom 125 497 5 0 0 0 - - -;
+#X floatatom 160 497 5 0 0 0 - - -;
+#X floatatom 195 497 5 0 0 0 - - -;
+#X floatatom 230 498 5 0 0 0 - - -;
+#X obj 160 517 t b f;
+#X obj 195 517 t b f;
+#X obj 230 517 t b f;
+#X connect 0 0 12 0;
+#X connect 1 0 8 0;
+#X connect 3 0 2 0;
+#X connect 4 0 51 0;
+#X connect 5 0 51 0;
+#X connect 6 0 8 0;
+#X connect 7 0 30 0;
+#X connect 7 0 31 0;
+#X connect 7 0 40 0;
+#X connect 7 0 41 0;
+#X connect 7 2 19 0;
+#X connect 11 0 12 1;
+#X connect 12 0 7 0;
+#X connect 14 0 15 0;
+#X connect 15 0 13 0;
+#X connect 17 0 21 0;
+#X connect 25 0 24 0;
+#X connect 26 0 25 0;
+#X connect 27 0 29 0;
+#X connect 28 0 27 0;
+#X connect 32 0 38 0;
+#X connect 33 0 32 0;
+#X connect 34 0 39 0;
+#X connect 35 0 34 0;
+#X connect 42 0 26 0;
+#X connect 42 1 28 0;
+#X connect 42 2 33 0;
+#X connect 42 3 35 0;
+#X connect 43 0 42 0;
+#X connect 44 0 42 0;
+#X connect 45 0 42 0;
+#X connect 46 0 42 0;
+#X connect 47 0 20 0;
+#X connect 48 0 22 0;
+#X connect 48 0 23 0;
+#X connect 48 0 36 0;
+#X connect 48 0 37 0;
+#X connect 49 0 42 0;
+#X connect 50 0 42 0;
+#X connect 51 0 47 0;
+#X connect 51 1 48 0;
+#X connect 51 2 52 0;
+#X connect 52 0 20 0;
+#X connect 53 0 42 0;
+#X connect 54 0 42 0;
+#X connect 58 0 8 1;
+#X connect 59 0 8 2;
+#X connect 60 0 8 3;
+#X connect 62 0 42 0;
+#X connect 63 0 62 0;
+#X connect 64 0 67 0;
+#X connect 65 0 68 0;
+#X connect 66 0 69 0;
+#X connect 67 0 62 0;
+#X connect 67 1 62 1;
+#X connect 68 0 62 0;
+#X connect 68 1 62 2;
+#X connect 69 0 62 0;
+#X connect 69 1 62 3;
diff --git a/exemples/42_tentacule.pd b/exemples/42_tentacule.pd
new file mode 100755
index 0000000..03bf052
--- /dev/null
+++ b/exemples/42_tentacule.pd
@@ -0,0 +1,453 @@
+#N canvas 165 113 638 442 10;
+#N canvas 20 38 1340 956 tentacule 0;
+#X obj 482 749 gemhead;
+#X obj 114 173 mass3D M 1 1 -0.6 0;
+#X obj 277 123 mass3D M 1 0 -0.6 0;
+#X obj 364 170 mass3D M 1 -1 -0.6 0;
+#X obj 283 231 mass3D M 1 0 1.13 0;
+#X obj 115 402 mass3D M 1 1 -0.6 1;
+#X obj 305 370 mass3D M 1 0 -0.6 1;
+#X obj 414 402 mass3D M 1 -1 -0.6 1;
+#X obj 310 479 mass3D M 1 0 1.13 1;
+#X obj 351 448 link3D L 0 1;
+#X obj 245 446 link3D L 0 1;
+#X obj 250 400 link3D L 0 1;
+#X obj 324 401 link3D L 0 1;
+#X obj 348 336 link3D L2 0 1;
+#X obj 280 309 link3D L2 0 1;
+#X obj 263 247 link3D L2 0 1;
+#X obj 179 332 link3D L2 0 1;
+#X obj 77 266 link3D L2 0 1;
+#X obj 175 253 link3D L2 0 1;
+#X obj 354 258 link3D L2 0 1;
+#X obj 395 298 link3D L2 0 1;
+#X obj 306 201 link3D L 0 1;
+#X obj 218 198 link3D L 0 1;
+#X obj 222 152 link3D L 0 1;
+#X obj 297 152 link3D L 0 1;
+#X obj 838 302 link3D L2 0 1;
+#X obj 906 268 link3D L2 0 1;
+#X obj 1026 212 link3D L 0 1;
+#X obj 949 213 link3D L 0 1;
+#X obj 953 167 link3D L 0 1;
+#X obj 1028 167 link3D L 0 1;
+#X obj 696 325 link3D L2 0 1;
+#X obj 617 379 link3D L2 0 1;
+#X obj 618 175 link3D L2 0 1;
+#X obj 588 296 link3D L2 0 1;
+#X obj 496 245 link3D L2 0 1;
+#X obj 575 217 link3D L2 0 1;
+#X obj 750 232 link3D L2 0 1;
+#X obj 770 269 link3D L2 0 1;
+#X obj 287 44 link3D L 0 1;
+#X obj 431 96 link3D L 0 1;
+#X obj 506 147 link3D L 0 1;
+#X obj 84 119 link3D L 0 1;
+#X msg 88 91 position3D 1 -0.6 0;
+#X msg 529 29 position3D -1 -0.6 0;
+#X msg 577 122 position3D 0 1.13 0;
+#X msg 301 16 position3D 0 -0.6 0;
+#X obj 722 46 r M2;
+#X obj 722 72 route reset;
+#X obj 1003 361 link3D L3 0 1;
+#X obj 1051 316 link3D L3 0 1;
+#X obj 1108 283 link3D L3 0 1;
+#X obj 991 405 link3D L3 0 1;
+#X obj 1209 370 r M2;
+#X obj 1109 190 mass3D M 1 -0.5 -0.3 1.5;
+#X obj 1009 138 mass3D M 1 0 -0.3 1.5;
+#X obj 822 188 mass3D M 1 0.5 -0.3 1.5;
+#X obj 984 274 mass3D M 1 0 0.58 1.5;
+#X obj 465 776 curve3d 5 5;
+#X msg 198 573 set 0 1 \$1 \$2 \$3;
+#X msg 218 604 set 1 1 \$1 \$2 \$3;
+#X msg 239 621 set 2 1 \$1 \$2 \$3;
+#X msg 261 644 set 3 1 \$1 \$2 \$3;
+#X msg 278 666 set 4 1 \$1 \$2 \$3;
+#X msg 395 580 set 0 2 \$1 \$2 \$3;
+#X msg 417 606 set 1 2 \$1 \$2 \$3;
+#X msg 436 628 set 2 2 \$1 \$2 \$3;
+#X msg 458 651 set 3 2 \$1 \$2 \$3;
+#X msg 475 673 set 4 2 \$1 \$2 \$3;
+#X msg 666 580 set 0 3 \$1 \$2 \$3;
+#X msg 686 611 set 1 3 \$1 \$2 \$3;
+#X msg 706 628 set 2 3 \$1 \$2 \$3;
+#X msg 730 651 set 3 3 \$1 \$2 \$3;
+#X msg 746 673 set 4 3 \$1 \$2 \$3;
+#X msg 863 587 set 0 4 \$1 \$2 \$3;
+#X msg 884 613 set 1 4 \$1 \$2 \$3;
+#X msg 903 635 set 2 4 \$1 \$2 \$3;
+#X msg 926 658 set 3 4 \$1 \$2 \$3;
+#X msg 944 681 set 4 4 \$1 \$2 \$3;
+#X obj 43 568 loadbang;
+#X msg 88 649 set 2 0 0 -0.3 0;
+#X msg 106 687 set 3 0 0 -0.3 0;
+#X msg 53 596 set 0 0 0 -0.3 0;
+#X msg 70 628 set 1 0 0 -0.3 0;
+#X msg 123 709 set 4 0 0 -0.3 0;
+#X obj 1152 421 mass3D M 4 0 0 2;
+#X msg 6 64 setM \$1;
+#X obj 4 40 inlet;
+#X msg 148 42 setM \$1;
+#X obj 146 18 inlet;
+#X obj 836 40 inlet;
+#X connect 0 0 58 0;
+#X connect 1 0 13 0;
+#X connect 1 0 17 1;
+#X connect 1 0 22 0;
+#X connect 1 0 23 0;
+#X connect 1 0 62 0;
+#X connect 1 0 42 1;
+#X connect 2 0 15 0;
+#X connect 2 0 18 1;
+#X connect 2 0 23 1;
+#X connect 2 0 24 0;
+#X connect 2 0 59 0;
+#X connect 2 0 63 0;
+#X connect 2 0 39 0;
+#X connect 3 0 16 1;
+#X connect 3 0 20 0;
+#X connect 3 0 21 1;
+#X connect 3 0 24 1;
+#X connect 3 0 60 0;
+#X connect 3 0 40 0;
+#X connect 4 0 14 0;
+#X connect 4 0 19 0;
+#X connect 4 0 21 0;
+#X connect 4 0 22 1;
+#X connect 4 0 61 0;
+#X connect 4 0 41 0;
+#X connect 5 0 10 0;
+#X connect 5 0 11 0;
+#X connect 5 0 16 0;
+#X connect 5 0 17 0;
+#X connect 5 0 67 0;
+#X connect 5 0 35 0;
+#X connect 5 0 34 0;
+#X connect 6 0 11 1;
+#X connect 6 0 12 0;
+#X connect 6 0 15 1;
+#X connect 6 0 19 1;
+#X connect 6 0 64 0;
+#X connect 6 0 68 0;
+#X connect 6 0 33 0;
+#X connect 6 0 31 0;
+#X connect 7 0 9 1;
+#X connect 7 0 12 1;
+#X connect 7 0 13 1;
+#X connect 7 0 20 1;
+#X connect 7 0 65 0;
+#X connect 7 0 38 0;
+#X connect 7 0 36 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 1;
+#X connect 8 0 14 1;
+#X connect 8 0 18 0;
+#X connect 8 0 66 0;
+#X connect 8 0 32 0;
+#X connect 8 0 37 1;
+#X connect 9 0 8 0;
+#X connect 9 1 7 0;
+#X connect 10 0 5 0;
+#X connect 10 1 8 0;
+#X connect 11 0 5 0;
+#X connect 11 1 6 0;
+#X connect 12 0 6 0;
+#X connect 12 1 7 0;
+#X connect 13 0 1 0;
+#X connect 13 1 7 0;
+#X connect 14 0 4 0;
+#X connect 14 1 8 0;
+#X connect 15 0 2 0;
+#X connect 15 1 6 0;
+#X connect 16 0 5 0;
+#X connect 16 1 3 0;
+#X connect 17 0 5 0;
+#X connect 17 1 1 0;
+#X connect 18 0 8 0;
+#X connect 18 1 2 0;
+#X connect 19 0 4 0;
+#X connect 19 1 6 0;
+#X connect 20 0 3 0;
+#X connect 20 1 7 0;
+#X connect 21 0 4 0;
+#X connect 21 1 3 0;
+#X connect 22 0 1 0;
+#X connect 22 1 4 0;
+#X connect 23 0 1 0;
+#X connect 23 1 2 0;
+#X connect 24 0 2 0;
+#X connect 24 1 3 0;
+#X connect 25 1 56 0;
+#X connect 26 1 55 0;
+#X connect 27 0 57 0;
+#X connect 27 1 54 0;
+#X connect 28 0 56 0;
+#X connect 28 1 57 0;
+#X connect 29 0 56 0;
+#X connect 29 1 55 0;
+#X connect 30 0 55 0;
+#X connect 30 1 54 0;
+#X connect 31 0 6 0;
+#X connect 31 1 57 0;
+#X connect 32 0 8 0;
+#X connect 32 1 57 0;
+#X connect 33 0 6 0;
+#X connect 33 1 55 0;
+#X connect 34 0 5 0;
+#X connect 34 1 54 0;
+#X connect 35 0 5 0;
+#X connect 35 1 56 0;
+#X connect 36 0 7 0;
+#X connect 36 1 56 0;
+#X connect 37 0 55 0;
+#X connect 37 1 8 0;
+#X connect 38 0 7 0;
+#X connect 38 1 54 0;
+#X connect 39 0 2 0;
+#X connect 40 0 3 0;
+#X connect 41 0 4 0;
+#X connect 42 1 1 0;
+#X connect 43 0 42 0;
+#X connect 44 0 40 1;
+#X connect 45 0 41 1;
+#X connect 46 0 39 1;
+#X connect 47 0 48 0;
+#X connect 48 0 44 0;
+#X connect 48 0 45 0;
+#X connect 48 0 46 0;
+#X connect 48 0 43 0;
+#X connect 49 0 55 0;
+#X connect 49 1 85 0;
+#X connect 50 0 54 0;
+#X connect 50 1 85 0;
+#X connect 51 0 57 0;
+#X connect 51 1 85 0;
+#X connect 52 0 56 0;
+#X connect 52 1 85 0;
+#X connect 53 0 85 0;
+#X connect 54 0 27 1;
+#X connect 54 0 30 1;
+#X connect 54 0 70 0;
+#X connect 54 0 38 1;
+#X connect 54 0 34 1;
+#X connect 54 0 50 0;
+#X connect 55 0 26 1;
+#X connect 55 0 29 1;
+#X connect 55 0 30 0;
+#X connect 55 0 69 0;
+#X connect 55 0 73 0;
+#X connect 55 0 33 1;
+#X connect 55 0 37 0;
+#X connect 55 0 49 0;
+#X connect 56 0 25 1;
+#X connect 56 0 28 0;
+#X connect 56 0 29 0;
+#X connect 56 0 72 0;
+#X connect 56 0 35 1;
+#X connect 56 0 36 1;
+#X connect 56 0 52 0;
+#X connect 57 0 27 0;
+#X connect 57 0 28 1;
+#X connect 57 0 71 0;
+#X connect 57 0 32 1;
+#X connect 57 0 31 1;
+#X connect 57 0 51 0;
+#X connect 59 0 58 0;
+#X connect 60 0 58 0;
+#X connect 61 0 58 0;
+#X connect 62 0 58 0;
+#X connect 63 0 58 0;
+#X connect 64 0 58 0;
+#X connect 65 0 58 0;
+#X connect 66 0 58 0;
+#X connect 67 0 58 0;
+#X connect 68 0 58 0;
+#X connect 69 0 58 0;
+#X connect 70 0 58 0;
+#X connect 71 0 58 0;
+#X connect 72 0 58 0;
+#X connect 73 0 58 0;
+#X connect 74 0 58 0;
+#X connect 75 0 58 0;
+#X connect 76 0 58 0;
+#X connect 77 0 58 0;
+#X connect 78 0 58 0;
+#X connect 79 0 82 0;
+#X connect 79 0 83 0;
+#X connect 79 0 80 0;
+#X connect 79 0 81 0;
+#X connect 79 0 84 0;
+#X connect 80 0 58 0;
+#X connect 81 0 58 0;
+#X connect 82 0 58 0;
+#X connect 83 0 58 0;
+#X connect 84 0 58 0;
+#X connect 85 0 74 0;
+#X connect 85 0 78 0;
+#X connect 85 0 49 1;
+#X connect 85 0 50 1;
+#X connect 85 0 51 1;
+#X connect 85 0 52 1;
+#X connect 85 0 75 0;
+#X connect 85 0 76 0;
+#X connect 85 0 77 0;
+#X connect 86 0 17 0;
+#X connect 86 0 35 0;
+#X connect 86 0 52 0;
+#X connect 87 0 86 0;
+#X connect 88 0 15 0;
+#X connect 88 0 33 0;
+#X connect 88 0 49 0;
+#X connect 89 0 88 0;
+#X connect 90 0 58 0;
+#X restore 51 405 pd tentacule;
+#X msg 17 56 create \, 1;
+#X msg 27 77 0 \, destroy;
+#X msg 36 121 lighting 1;
+#X obj 367 144 t b b;
+#X obj 392 169 s M;
+#X obj 398 201 s L;
+#X obj 380 220 s L2;
+#X obj 480 101 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 500 143 t b b b;
+#X obj 566 213 s M;
+#X msg 566 190 reset;
+#X obj 528 222 s L;
+#X obj 510 241 s L2;
+#X msg 518 188 resetL;
+#X msg 500 167 resetF;
+#X obj 593 214 s M2;
+#X obj 500 263 s L3;
+#X obj 367 242 s L3;
+#X obj 17 238 ch_gemwin 50;
+#X obj 367 120 gemhead;
+#X obj 121 309 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 121 333 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 51 359 / 150;
+#X obj 84 359 / 150;
+#X obj 84 383 + 0.6;
+#X obj 51 383 + 0.6;
+#X msg 136 356 draw control_line;
+#X msg 136 385 draw fill;
+#X obj 36 98 loadbang;
+#N canvas 0 0 452 302 light 0;
+#X obj 43 70 gemhead;
+#X obj 43 114 world_light;
+#X obj 43 25 gemhead;
+#X obj 43 49 world_light;
+#X obj 43 92 rotateXYZ 230 0 80;
+#X connect 0 0 4 0;
+#X connect 2 0 3 0;
+#X connect 4 0 1 0;
+#X restore 272 222 pd light;
+#X obj 500 119 loadbang;
+#N canvas 0 0 547 274 init 0;
+#X obj 11 125 s M;
+#X msg 11 102 setM \$1;
+#X msg 17 58 13;
+#X msg 91 109 setD \$1;
+#X obj 91 138 s L;
+#X floatatom 90 86 5 0 0 0 - - -;
+#X obj 153 137 s L;
+#X floatatom 152 85 5 0 0 0 - - -;
+#X msg 153 108 setK \$1;
+#X msg 93 59 2;
+#X msg 216 109 setD \$1;
+#X floatatom 215 86 5 0 0 0 - - -;
+#X floatatom 277 85 5 0 0 0 - - -;
+#X msg 278 108 setK \$1;
+#X msg 218 59 2;
+#X obj 216 138 s L2;
+#X obj 278 137 s L2;
+#X msg 165 55 5;
+#X msg 290 55 0.7;
+#X msg 343 108 setD \$1;
+#X floatatom 342 85 5 0 0 0 - - -;
+#X floatatom 416 89 5 0 0 0 - - -;
+#X msg 417 112 setK \$1;
+#X obj 343 137 s L3;
+#X obj 417 141 s L3;
+#X msg 429 59 1;
+#X msg 345 58 3;
+#X obj 84 -14 loadbang;
+#X floatatom 9 79 5 0 0 0 - - -;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 9 0 3 0;
+#X connect 10 0 15 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 16 0;
+#X connect 14 0 10 0;
+#X connect 17 0 8 0;
+#X connect 18 0 13 0;
+#X connect 19 0 23 0;
+#X connect 20 0 19 0;
+#X connect 21 0 22 0;
+#X connect 22 0 24 0;
+#X connect 25 0 22 0;
+#X connect 26 0 19 0;
+#X connect 27 0 9 0;
+#X connect 27 0 17 0;
+#X connect 27 0 14 0;
+#X connect 27 0 18 0;
+#X connect 27 0 26 0;
+#X connect 27 0 25 0;
+#X connect 27 0 2 0;
+#X connect 28 0 1 0;
+#X restore 272 247 pd init;
+#X text 522 98 <- reset;
+#X text 280 319 <- change lenght of some link to distord the structure
+;
+#X text 283 10 muscle exemples;
+#X text 158 26 you can change the lengh of some like to distord the
+structure;
+#X obj 42 154 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 64 178 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 87 201 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 129 136 camera position;
+#X connect 1 0 19 0;
+#X connect 2 0 19 0;
+#X connect 3 0 19 0;
+#X connect 4 0 6 0;
+#X connect 4 0 7 0;
+#X connect 4 0 18 0;
+#X connect 4 1 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 15 0;
+#X connect 9 1 14 0;
+#X connect 9 2 11 0;
+#X connect 11 0 10 0;
+#X connect 11 0 16 0;
+#X connect 14 0 12 0;
+#X connect 14 0 13 0;
+#X connect 14 0 17 0;
+#X connect 15 0 10 0;
+#X connect 15 0 13 0;
+#X connect 15 0 12 0;
+#X connect 15 0 17 0;
+#X connect 20 0 4 0;
+#X connect 21 0 23 0;
+#X connect 22 0 24 0;
+#X connect 23 0 26 0;
+#X connect 24 0 25 0;
+#X connect 25 0 0 1;
+#X connect 26 0 0 0;
+#X connect 27 0 0 2;
+#X connect 28 0 0 2;
+#X connect 29 0 3 0;
+#X connect 31 0 9 0;
+#X connect 37 0 19 1;
+#X connect 38 0 19 2;
+#X connect 39 0 19 3;
diff --git a/exemples/43_game.pd b/exemples/43_game.pd
new file mode 100755
index 0000000..b16acfb
--- /dev/null
+++ b/exemples/43_game.pd
@@ -0,0 +1,1251 @@
+#N canvas 161 34 536 536 10;
+#X obj 32 137 t b b;
+#X obj 32 89 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 260 176 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 283 198 loadbang;
+#X obj 57 160 s \$0-lia;
+#X obj 32 187 s \$0-masse;
+#X msg 308 269 reset;
+#X msg 283 316 resetF;
+#X msg 168 137 0 \, destroy;
+#X obj 134 165 gemwin;
+#N canvas 1361 275 872 665 space_ship 0;
+#X obj 89 18 r \$0-lia;
+#X obj 13 18 r \$0-masse;
+#X obj 323 371 gemhead;
+#X obj 323 435 translateXYZ;
+#X obj 311 406 unpack s f f;
+#X obj 200 377 gemhead;
+#X obj 200 441 translateXYZ;
+#X obj 188 412 unpack s f f;
+#X obj 70 383 gemhead;
+#X obj 74 456 translateXYZ;
+#X obj 58 418 unpack s f f;
+#X obj 406 380 gemhead;
+#X obj 406 444 translateXYZ;
+#X obj 394 415 unpack s f f;
+#X obj 68 239 link2D ship 0.6 0.1 0.1;
+#X obj 388 234 link2D ship 0.6 0.1 0.1;
+#X obj 392 285 link2D ship 0.3 0.1 0.1;
+#X obj 71 291 link2D ship 0.3 0.1 0.1;
+#X obj 69 341 mass2D ship_rearL 1 0.15 -0.3;
+#X obj 400 341 mass2D ship_rearR 1 -0.15 -0.3;
+#X obj 408 528 sphere 0.05;
+#X obj 71 535 sphere 0.05;
+#X obj 326 466 sphere 0.05;
+#X obj 135 116 tLia2D;
+#X obj 199 467 rotateXYZ;
+#X obj 71 510 scaleXYZ 2 1 1;
+#X obj 408 494 scaleXYZ 2 1 1;
+#X obj 74 485 rotateXYZ;
+#X obj 409 468 rotateXYZ;
+#X obj 206 545 sphere 0.2;
+#X msg 530 445 25;
+#X obj 528 421 loadbang;
+#X obj 234 23 mass2D ship_front 2 0 0.3;
+#X obj 199 514 ambientRGB 0 1 0;
+#X msg 673 120 setXY \$1 \$2;
+#X obj 697 28 inlet;
+#X msg 687 202 setXY \$1 \$2;
+#X obj 231 166 mass2D ship_body 3 0 0;
+#X obj 643 25 inlet;
+#X msg 601 325 setXY \$1 \$2;
+#X obj 201 492 scaleXYZ 1.5 0.5 0.5;
+#X obj 520 21 inlet;
+#N canvas 654 146 482 495 8_bulet 0;
+#X obj 170 34 inlet;
+#X obj 301 33 inlet;
+#X obj 36 22 inlet;
+#N canvas 0 0 474 556 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 36 22 inlet;
+#X obj 240 278 gemhead;
+#X obj 228 350 translateXYZ;
+#X obj 220 307 unpack s f f;
+#X obj 222 384 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 119 283 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 252 360 pd bullet;
+#N canvas 497 321 480 418 bullet 0;
+#X obj 142 24 inlet;
+#X obj 139 278 gemhead;
+#X obj 140 328 translateXYZ;
+#X obj 123 304 unpack s f f;
+#X obj 130 357 sphere 0.03;
+#X obj 220 24 inlet;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 22 inlet;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 211 283 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 10 0;
+#X connect 8 0 9 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 3 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 146 193 pd bullet;
+#N canvas 0 0 468 318 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 36 22 inlet;
+#X obj 139 278 gemhead;
+#X obj 207 329 translateXYZ;
+#X obj 182 304 unpack s f f;
+#X obj 232 354 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 72 273 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 161 217 pd bullet;
+#N canvas 0 0 468 318 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 33 19 inlet;
+#X obj 139 278 gemhead;
+#X obj 201 331 translateXYZ;
+#X obj 173 305 unpack s f f;
+#X obj 219 360 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 204 268 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 177 241 pd bullet;
+#N canvas 0 0 466 370 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 36 22 inlet;
+#X obj 206 281 gemhead;
+#X obj 230 335 translateXYZ;
+#X obj 185 302 unpack s f f;
+#X obj 243 365 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 119 283 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 189 265 pd bullet;
+#N canvas 0 0 468 377 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 36 22 inlet;
+#X obj 179 278 gemhead;
+#X obj 205 330 translateXYZ;
+#X obj 182 303 unpack s f f;
+#X obj 209 356 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 119 283 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 205 289 pd bullet;
+#N canvas 0 0 464 453 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 36 22 inlet;
+#X obj 228 277 gemhead;
+#X obj 195 336 translateXYZ;
+#X obj 199 305 unpack s f f;
+#X obj 185 366 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 119 283 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 220 313 pd bullet;
+#N canvas 0 0 464 454 bullet 0;
+#X obj 142 24 inlet;
+#X obj 220 24 inlet;
+#X obj 36 22 inlet;
+#X obj 220 283 gemhead;
+#X obj 202 337 translateXYZ;
+#X obj 201 308 unpack s f f;
+#X obj 186 364 sphere 0.03;
+#X msg 220 173 setXY \$1 \$2;
+#X obj 143 202 r \$0-masse;
+#X obj 36 44 t b b;
+#X obj 129 238 mass2D bulet 1 10 10;
+#X obj 142 49 unpack s f f;
+#X obj 136 131 pack f f;
+#X obj 134 106 f;
+#X msg 133 154 setXY \$1 \$2;
+#X obj 119 283 s bulletpos;
+#X obj 220 203 iCircle2D foo 0 0 0 1 0 0 0.04;
+#X connect 0 0 11 0;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 1 4 1;
+#X connect 5 2 4 2;
+#X connect 7 0 16 0;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 13 0;
+#X connect 10 0 5 0;
+#X connect 10 0 15 0;
+#X connect 11 1 13 1;
+#X connect 11 2 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 16 0 10 0;
+#X restore 236 337 pd bullet;
+#X obj 36 94 % 8;
+#X obj 36 125 sel 0 1 2 3 4 5 6 7;
+#X obj 36 71 + 1;
+#X msg 36 45 1;
+#X connect 0 0 3 1;
+#X connect 0 0 4 1;
+#X connect 0 0 5 1;
+#X connect 0 0 6 1;
+#X connect 0 0 7 1;
+#X connect 0 0 8 1;
+#X connect 0 0 9 1;
+#X connect 0 0 10 1;
+#X connect 1 0 3 2;
+#X connect 1 0 4 2;
+#X connect 1 0 5 2;
+#X connect 1 0 6 2;
+#X connect 1 0 7 2;
+#X connect 1 0 8 2;
+#X connect 1 0 9 2;
+#X connect 1 0 10 2;
+#X connect 2 0 14 0;
+#X connect 11 0 12 0;
+#X connect 11 0 13 1;
+#X connect 12 0 3 0;
+#X connect 12 1 10 0;
+#X connect 12 2 9 0;
+#X connect 12 3 8 0;
+#X connect 12 4 7 0;
+#X connect 12 5 6 0;
+#X connect 12 6 5 0;
+#X connect 12 7 4 0;
+#X connect 13 0 11 0;
+#X connect 14 0 13 0;
+#X restore 218 583 pd 8_bulet;
+#X obj 458 18 inlet;
+#X msg 610 392 setXY \$1 \$2;
+#X obj 585 22 inlet;
+#X obj 318 559 s space_ship;
+#X obj 673 150 iCircle2D foo 0 0 0 1 0 0.003;
+#X obj 693 229 iCircle2D foo 0 0 0 1 0 -0.003;
+#X obj 600 353 iCircle2D foo 0 0 0 1 -0.03;
+#X obj 611 430 iCircle2D foo 0 0 0 1 0.03;
+#X msg 689 87 dXY 0.1 0;
+#X msg 654 60 dXY -0.1 0;
+#X obj 228 313 link2D ship 0.2 0.1 0.1;
+#X obj 237 64 link2D ship 0.3 0.1 0.1;
+#X connect 0 0 14 0;
+#X connect 0 0 15 0;
+#X connect 0 0 16 0;
+#X connect 0 0 17 0;
+#X connect 0 0 23 0;
+#X connect 0 0 53 0;
+#X connect 0 0 54 0;
+#X connect 1 0 18 0;
+#X connect 1 0 19 0;
+#X connect 1 0 32 0;
+#X connect 1 0 37 0;
+#X connect 2 0 3 0;
+#X connect 3 0 22 0;
+#X connect 4 1 3 1;
+#X connect 4 2 3 2;
+#X connect 5 0 6 0;
+#X connect 6 0 24 0;
+#X connect 7 1 6 1;
+#X connect 7 2 6 2;
+#X connect 8 0 9 0;
+#X connect 9 0 27 0;
+#X connect 10 1 9 1;
+#X connect 10 2 9 2;
+#X connect 11 0 12 0;
+#X connect 12 0 28 0;
+#X connect 13 1 12 1;
+#X connect 13 2 12 2;
+#X connect 14 0 18 0;
+#X connect 14 1 32 0;
+#X connect 15 0 32 0;
+#X connect 15 1 19 0;
+#X connect 16 0 37 0;
+#X connect 16 1 19 0;
+#X connect 17 0 18 0;
+#X connect 17 1 37 0;
+#X connect 18 0 10 0;
+#X connect 18 0 14 0;
+#X connect 18 0 17 0;
+#X connect 18 0 46 0;
+#X connect 18 0 53 0;
+#X connect 19 0 13 0;
+#X connect 19 0 15 1;
+#X connect 19 0 16 1;
+#X connect 19 0 46 0;
+#X connect 19 0 53 1;
+#X connect 23 2 24 3;
+#X connect 23 2 27 3;
+#X connect 23 2 28 3;
+#X connect 24 0 40 0;
+#X connect 25 0 21 0;
+#X connect 26 0 20 0;
+#X connect 27 0 25 0;
+#X connect 28 0 26 0;
+#X connect 30 0 20 2;
+#X connect 30 0 29 2;
+#X connect 30 0 22 2;
+#X connect 30 0 21 2;
+#X connect 31 0 30 0;
+#X connect 32 0 4 0;
+#X connect 32 0 14 1;
+#X connect 32 0 15 0;
+#X connect 32 0 23 0;
+#X connect 32 0 39 0;
+#X connect 32 0 42 1;
+#X connect 32 0 44 0;
+#X connect 32 0 46 0;
+#X connect 32 0 54 0;
+#X connect 33 0 29 0;
+#X connect 34 0 47 0;
+#X connect 35 0 51 0;
+#X connect 36 0 48 0;
+#X connect 37 0 7 0;
+#X connect 37 0 16 0;
+#X connect 37 0 17 1;
+#X connect 37 0 23 1;
+#X connect 37 0 34 0;
+#X connect 37 0 36 0;
+#X connect 37 0 42 2;
+#X connect 37 0 46 0;
+#X connect 37 0 54 1;
+#X connect 38 0 52 0;
+#X connect 39 0 49 0;
+#X connect 40 0 33 0;
+#X connect 41 0 49 0;
+#X connect 43 0 42 0;
+#X connect 44 0 50 0;
+#X connect 45 0 50 0;
+#X connect 47 0 32 0;
+#X connect 47 0 19 0;
+#X connect 47 0 18 0;
+#X connect 48 0 32 0;
+#X connect 48 0 18 0;
+#X connect 48 0 19 0;
+#X connect 49 0 37 0;
+#X connect 50 0 37 0;
+#X connect 51 0 19 0;
+#X connect 51 0 37 0;
+#X connect 51 0 32 0;
+#X connect 51 0 18 0;
+#X connect 52 0 37 0;
+#X connect 52 0 32 0;
+#X connect 52 0 19 0;
+#X connect 52 0 18 0;
+#X connect 53 0 18 0;
+#X connect 53 1 19 0;
+#X connect 54 0 32 0;
+#X connect 54 1 37 0;
+#X restore 47 477 pd space_ship;
+#X obj 382 399 world_light;
+#X obj 382 377 gemhead 1;
+#X msg 134 114 reset \, lighting 1 \, create \, 1;
+#X obj 120 417 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 104 433 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 136 433 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 47 434 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 120 449 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 73 312 keyname;
+#X obj 73 333 pack f s;
+#X obj 73 355 route 1;
+#X obj 47 394 key;
+#X obj 47 415 sel 32;
+#X obj 73 376 route Up Down Left Right;
+#N canvas 213 219 1094 659 border 0;
+#X text 268 11 This is the first exemple of physical modeling;
+#X text 268 33 this is an elastic string;
+#X text 158 95 <- metronome send bangs to mass and link and gives the
+general computation speed;
+#X obj 47 198 lia \$0-link 0 1 1;
+#X obj 63 251 lia \$0-link 0 1 1;
+#X obj 89 307 lia \$0-link 0 1 1;
+#X obj 108 364 lia \$0-link 0 1 1;
+#X obj 138 420 lia \$0-link 0 1 1;
+#X obj 165 477 lia \$0-link 0 1 1;
+#X obj 42 174 masse \$0-mass 30;
+#X obj 57 226 masse \$0-mass 30;
+#X obj 84 283 masse \$0-mass 30;
+#X obj 104 340 masse \$0-mass 30;
+#X obj 134 395 masse \$0-mass 30;
+#X obj 163 452 masse \$0-mass 30;
+#X text 160 132 masses and link has to be compute one after the other.
+;
+#X obj 27 148 lia \$0-link 0 0 5;
+#X obj 354 214 lia \$0-link 0 1 1;
+#X obj 370 267 lia \$0-link 0 1 1;
+#X obj 396 323 lia \$0-link 0 1 1;
+#X obj 415 380 lia \$0-link 0 1 1;
+#X obj 445 436 lia \$0-link 0 1 1;
+#X obj 472 493 lia \$0-link 0 1 1;
+#X obj 349 190 masse \$0-mass 30;
+#X obj 364 242 masse \$0-mass 30;
+#X obj 374 293 masse \$0-mass 30;
+#X obj 411 356 masse \$0-mass 30;
+#X obj 435 408 masse \$0-mass 30;
+#X obj 470 468 masse \$0-mass 30;
+#X obj 615 210 lia \$0-link 0 1 1;
+#X obj 631 263 lia \$0-link 0 1 1;
+#X obj 657 319 lia \$0-link 0 1 1;
+#X obj 676 376 lia \$0-link 0 1 1;
+#X obj 706 432 lia \$0-link 0 1 1;
+#X obj 610 186 masse \$0-mass 30;
+#X obj 625 238 masse \$0-mass 30;
+#X obj 652 295 masse \$0-mass 30;
+#X obj 672 352 masse \$0-mass 30;
+#X obj 702 407 masse \$0-mass 30;
+#X obj 731 464 masse \$0-mass 30;
+#X obj 919 270 + 10;
+#X obj 919 202 loadbang;
+#X obj 919 225 metro 600;
+#X obj 921 292 / 10;
+#X obj 734 489 lia \$0-link 0 0.01 2;
+#X obj 919 250 random 20;
+#X obj 62 41 r \$0-link;
+#X obj 869 481 game_line 4;
+#X obj 60 66 s bounce;
+#X obj 615 503 game_line 1;
+#X obj 759 221 game_line 1.5;
+#X obj 511 237 game_line -1;
+#X obj 203 229 game_line -4;
+#X obj 849 445 game_line 3.5;
+#X obj 804 388 game_line 3;
+#X obj 790 336 game_line 2.5;
+#X obj 774 273 game_line 2;
+#X obj 591 450 game_line 0.5;
+#X obj 568 391 game_line 0;
+#X obj 531 310 game_line -0.5;
+#X obj 324 466 game_line -1.5;
+#X obj 331 422 game_line -2;
+#X obj 272 381 game_line -2.5;
+#X obj 257 333 game_line -3;
+#X obj 223 286 game_line -3.5;
+#X connect 3 0 9 0;
+#X connect 3 1 10 0;
+#X connect 4 0 10 0;
+#X connect 4 1 11 0;
+#X connect 5 0 11 0;
+#X connect 5 1 12 0;
+#X connect 6 0 12 0;
+#X connect 6 1 13 0;
+#X connect 7 0 13 0;
+#X connect 7 1 14 0;
+#X connect 8 0 14 0;
+#X connect 8 1 23 0;
+#X connect 9 0 3 0;
+#X connect 9 0 16 1;
+#X connect 9 0 52 1;
+#X connect 10 0 3 1;
+#X connect 10 0 4 0;
+#X connect 10 0 52 0;
+#X connect 10 0 64 1;
+#X connect 11 0 4 1;
+#X connect 11 0 5 0;
+#X connect 11 0 63 1;
+#X connect 11 0 64 0;
+#X connect 12 0 5 1;
+#X connect 12 0 6 0;
+#X connect 12 0 62 1;
+#X connect 12 0 63 0;
+#X connect 13 0 6 1;
+#X connect 13 0 7 0;
+#X connect 13 0 61 1;
+#X connect 13 0 62 0;
+#X connect 14 0 7 1;
+#X connect 14 0 8 0;
+#X connect 14 0 60 1;
+#X connect 14 0 61 0;
+#X connect 16 1 9 0;
+#X connect 17 0 23 0;
+#X connect 17 1 24 0;
+#X connect 18 0 24 0;
+#X connect 18 1 25 0;
+#X connect 19 0 25 0;
+#X connect 19 1 26 0;
+#X connect 20 0 26 0;
+#X connect 20 1 27 0;
+#X connect 21 0 27 0;
+#X connect 21 1 28 0;
+#X connect 22 0 28 0;
+#X connect 22 1 34 0;
+#X connect 23 0 17 0;
+#X connect 23 0 8 1;
+#X connect 23 0 51 1;
+#X connect 23 0 60 0;
+#X connect 24 0 17 1;
+#X connect 24 0 18 0;
+#X connect 24 0 51 0;
+#X connect 24 0 59 1;
+#X connect 25 0 18 1;
+#X connect 25 0 19 0;
+#X connect 25 0 58 1;
+#X connect 25 0 59 0;
+#X connect 26 0 19 1;
+#X connect 26 0 20 0;
+#X connect 26 0 57 1;
+#X connect 26 0 58 0;
+#X connect 27 0 20 1;
+#X connect 27 0 21 0;
+#X connect 27 0 49 1;
+#X connect 27 0 57 0;
+#X connect 28 0 21 1;
+#X connect 28 0 22 0;
+#X connect 28 0 49 0;
+#X connect 28 0 50 1;
+#X connect 29 0 34 0;
+#X connect 29 1 35 0;
+#X connect 30 0 35 0;
+#X connect 30 1 36 0;
+#X connect 31 0 36 0;
+#X connect 31 0 37 0;
+#X connect 31 1 37 0;
+#X connect 32 0 37 0;
+#X connect 32 1 38 0;
+#X connect 33 0 38 0;
+#X connect 33 1 39 0;
+#X connect 34 0 29 0;
+#X connect 34 0 22 1;
+#X connect 34 0 50 0;
+#X connect 34 0 56 1;
+#X connect 35 0 29 1;
+#X connect 35 0 30 0;
+#X connect 35 0 55 1;
+#X connect 35 0 56 0;
+#X connect 36 0 30 1;
+#X connect 36 0 31 0;
+#X connect 36 0 54 1;
+#X connect 36 0 55 0;
+#X connect 37 0 31 1;
+#X connect 37 0 32 0;
+#X connect 37 0 53 1;
+#X connect 37 0 54 0;
+#X connect 38 0 32 1;
+#X connect 38 0 33 0;
+#X connect 38 0 47 1;
+#X connect 38 0 53 0;
+#X connect 39 0 33 1;
+#X connect 39 0 44 0;
+#X connect 39 0 47 0;
+#X connect 40 0 43 0;
+#X connect 41 0 42 0;
+#X connect 42 0 45 0;
+#X connect 43 0 44 1;
+#X connect 44 0 39 0;
+#X connect 45 0 40 0;
+#X connect 46 0 48 0;
+#X restore 382 421 pd border;
+#N canvas 819 401 251 318 bombs 0;
+#X obj 45 108 % 8;
+#X obj 45 85 + 1;
+#X obj 44 13 loadbang;
+#X msg 45 60 1;
+#X obj 45 36 metro 1200;
+#X obj 104 11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 510 387 653 468 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 45 167 pd bomb;
+#X obj 45 140 sel 0 1 2 3 4 5 6 7;
+#N canvas 510 387 653 468 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 55 177 pd bomb;
+#N canvas 510 387 653 468 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 65 187 pd bomb;
+#N canvas 510 387 653 468 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 75 197 pd bomb;
+#N canvas 510 387 653 468 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 85 207 pd bomb;
+#N canvas 510 387 653 468 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 95 217 pd bomb;
+#N canvas 510 387 655 470 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X msg 80 123 setXY 0 5;
+#X obj 34 86 iAmbient2D foo 0 -1 0.2 0;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 22 0;
+#X connect 6 1 21 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 105 227 pd bomb;
+#N canvas 510 387 657 472 bomb 0;
+#X obj 36 22 inlet;
+#X obj 82 242 gemhead;
+#X obj 85 272 translateXYZ;
+#X obj 84 215 unpack s f f;
+#X obj 104 153 r \$0-masse;
+#X obj 86 294 color 1 0 0;
+#X obj 36 44 t b b b;
+#X msg 154 122 reset;
+#X obj 87 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 272 271 r space_ship;
+#X msg 261 240 setXY \$1 \$2;
+#X obj 262 294 tCircle2D 0 0 0 0.2;
+#X obj 262 316 sel 1;
+#X obj 86 316 sphere 0.2;
+#X obj 429 263 r bulletpos;
+#X obj 435 319 sel 1;
+#X obj 261 341 s space_inside;
+#X obj 430 292 tCircle2D 0 0 0 0.15;
+#X obj 463 382 s points;
+#X obj 85 186 mass2D bomb 100 1000 1000;
+#X msg 439 351 reset \, setXY 1000 1000;
+#X obj 34 86 iAmbient2D foo -0.1 -1 0.2 0;
+#X msg 80 123 setXY 0 5;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 1 2 1;
+#X connect 3 2 2 2;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 6 0 21 0;
+#X connect 6 1 22 0;
+#X connect 6 2 7 0;
+#X connect 7 0 19 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 16 0;
+#X connect 14 0 17 0;
+#X connect 15 0 20 0;
+#X connect 15 0 18 0;
+#X connect 17 0 15 0;
+#X connect 19 0 3 0;
+#X connect 19 0 10 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 19 0;
+#X restore 115 237 pd bomb;
+#X connect 0 0 1 1;
+#X connect 0 0 7 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 7 0 6 0;
+#X connect 7 1 8 0;
+#X connect 7 2 9 0;
+#X connect 7 3 10 0;
+#X connect 7 4 11 0;
+#X connect 7 5 12 0;
+#X connect 7 6 13 0;
+#X connect 7 7 14 0;
+#X restore 382 443 pd bombs;
+#X obj 32 68 loadbang;
+#X obj 283 339 s \$0-lia;
+#X obj 308 294 s \$0-masse;
+#X obj 339 319 s rbombs;
+#X obj 32 110 metro 10;
+#X obj 283 246 t b b b b;
+#X text 187 433 <- move the ship;
+#X obj 367 269 s init;
+#N canvas 0 0 148 173 points 0;
+#X obj 53 36 r points;
+#X obj 58 108 + 1;
+#X obj 57 84 f;
+#X msg 24 60 -1;
+#X obj 24 16 r init;
+#X obj 57 135 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 1 0 5 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X restore 383 465 pd points;
+#X floatatom 383 488 5 0 0 0 - - -;
+#X text 181 448 (use arraw key to);
+#N canvas 265 590 255 308 init 0;
+#X obj 94 85 r bomb_in;
+#X obj 50 189 spigot;
+#X obj 95 146 delay 1000;
+#X msg 95 169 1;
+#X obj 64 35 r space_inside;
+#X obj 73 59 r inside;
+#X obj 51 230 outlet;
+#X obj 95 119 r init;
+#X msg 127 171 0;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 7 0 8 0;
+#X connect 7 0 2 0;
+#X connect 8 0 1 1;
+#X restore 299 222 pd init;
+#X text 286 172 <- reset;
+#X text 444 482 <- points;
+#X obj 19 210 t b b;
+#X obj 54 235 s \$0-link;
+#X obj 19 261 s \$0-mass;
+#X text 226 10 space-ship game;
+#X text 131 37 use the arrow key to displace the "space ship". space
+for fire. you should stay in the tunnel \, and shoot the red bombs
+;
+#X text 133 80 game restart if you hit the tunnel \, or a red bomb
+;
+#X connect 0 0 5 0;
+#X connect 0 1 4 0;
+#X connect 1 0 31 0;
+#X connect 2 0 32 0;
+#X connect 3 0 32 0;
+#X connect 6 0 29 0;
+#X connect 7 0 28 0;
+#X connect 8 0 9 0;
+#X connect 12 0 11 0;
+#X connect 13 0 9 0;
+#X connect 14 0 10 1;
+#X connect 15 0 10 3;
+#X connect 16 0 10 4;
+#X connect 17 0 10 0;
+#X connect 18 0 10 2;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 21 0;
+#X connect 21 0 24 0;
+#X connect 22 0 23 0;
+#X connect 23 0 17 0;
+#X connect 24 0 14 0;
+#X connect 24 1 18 0;
+#X connect 24 2 15 0;
+#X connect 24 3 16 0;
+#X connect 27 0 1 0;
+#X connect 31 0 0 0;
+#X connect 31 0 41 0;
+#X connect 32 0 7 0;
+#X connect 32 1 6 0;
+#X connect 32 2 30 0;
+#X connect 32 3 34 0;
+#X connect 35 0 36 0;
+#X connect 38 0 32 0;
+#X connect 41 0 43 0;
+#X connect 41 1 42 0;
diff --git a/exemples/44_flag.pd b/exemples/44_flag.pd
new file mode 100755
index 0000000..54819bd
--- /dev/null
+++ b/exemples/44_flag.pd
@@ -0,0 +1,806 @@
+#N canvas 178 45 497 616 10;
+#N canvas 529 347 774 319 array 0;
+#X obj 200 0 mass_link3 1 -3 -4 0;
+#X obj 400 0 mass_link3 2 -2 -4 0;
+#X obj 600 0 mass_link3 3 -1 -4 0;
+#X obj 800 0 mass_link3 4 0 -4 0;
+#X obj 1000 0 mass_link3 5 1 -4 0;
+#X obj 1200 0 mass_link3 6 2 -4 0;
+#X obj 1400 0 mass_link3 7 3 -4 0;
+#X obj 1600 0 mass_link3 8 4 -4 0;
+#X obj 20 20 mass_link3 9 -4 -3 0;
+#X obj 220 20 mass_link3 10 -3 -3 0;
+#X obj 420 20 mass_link3 11 -2 -3 0;
+#X obj 620 20 mass_link3 12 -1 -3 0;
+#X obj 820 20 mass_link3 13 0 -3 0;
+#X obj 1020 20 mass_link3 14 1 -3 0;
+#X obj 1220 20 mass_link3 15 2 -3 0;
+#X obj 1420 20 mass_link3 16 3 -3 0;
+#X obj 1620 20 mass_link3 17 4 -3 0;
+#X obj 40 40 mass_link3 18 -4 -2 0;
+#X obj 240 40 mass_link3 19 -3 -2 0;
+#X obj 440 40 mass_link3 20 -2 -2 0;
+#X obj 640 40 mass_link3 21 -1 -2 0;
+#X obj 840 40 mass_link3 22 0 -2 0;
+#X obj 1040 40 mass_link3 23 1 -2 0;
+#X obj 1240 40 mass_link3 24 2 -2 0;
+#X obj 1440 40 mass_link3 25 3 -2 0;
+#X obj 1640 40 mass_link3 26 4 -2 0;
+#X obj 60 60 mass_link3 27 -4 -1 0;
+#X obj 260 60 mass_link3 28 -3 -1 0;
+#X obj 460 60 mass_link3 29 -2 -1 0;
+#X obj 660 60 mass_link3 30 -1 -1 0;
+#X obj 860 60 mass_link3 31 0 -1 0;
+#X obj 1060 60 mass_link3 32 1 -1 0;
+#X obj 1260 60 mass_link3 33 2 -1 0;
+#X obj 1460 60 mass_link3 34 3 -1 0;
+#X obj 1660 60 mass_link3 35 4 -1 0;
+#X obj 80 80 mass_link3 36 -4 0 0;
+#X obj 280 80 mass_link3 37 -3 0 0;
+#X obj 480 80 mass_link3 38 -2 0 0;
+#X obj 680 80 mass_link3 39 -1 0 0;
+#X obj 880 80 mass_link3 40 0 0 0;
+#X obj 1080 80 mass_link3 41 1 0 0;
+#X obj 1280 80 mass_link3 42 2 0 0;
+#X obj 1480 80 mass_link3 43 3 0 0;
+#X obj 1680 80 mass_link3 44 4 0 0;
+#X obj 100 100 mass_link3 45 -4 1 0;
+#X obj 300 100 mass_link3 46 -3 1 0;
+#X obj 500 100 mass_link3 47 -2 1 0;
+#X obj 700 100 mass_link3 48 -1 1 0;
+#X obj 900 100 mass_link3 49 0 1 0;
+#X obj 1100 100 mass_link3 50 1 1 0;
+#X obj 1300 100 mass_link3 51 2 1 0;
+#X obj 1500 100 mass_link3 52 3 1 0;
+#X obj 1700 100 mass_link3 53 4 1 0;
+#X obj 120 120 mass_link3 54 -4 2 0;
+#X obj 320 120 mass_link3 55 -3 2 0;
+#X obj 520 120 mass_link3 56 -2 2 0;
+#X obj 720 120 mass_link3 57 -1 2 0;
+#X obj 920 120 mass_link3 58 0 2 0;
+#X obj 1120 120 mass_link3 59 1 2 0;
+#X obj 1320 120 mass_link3 60 2 2 0;
+#X obj 1520 120 mass_link3 61 3 2 0;
+#X obj 1720 120 mass_link3 62 4 2 0;
+#X obj 140 140 mass_link3 63 -4 3 0;
+#X obj 340 140 mass_link3 64 -3 3 0;
+#X obj 540 140 mass_link3 65 -2 3 0;
+#X obj 740 140 mass_link3 66 -1 3 0;
+#X obj 940 140 mass_link3 67 0 3 0;
+#X obj 1140 140 mass_link3 68 1 3 0;
+#X obj 1340 140 mass_link3 69 2 3 0;
+#X obj 1540 140 mass_link3 70 3 3 0;
+#X obj 1740 140 mass_link3 71 4 3 0;
+#X obj 360 160 mass_link3 73 -3 4 0;
+#X obj 560 160 mass_link3 74 -2 4 0;
+#X obj 760 160 mass_link3 75 -1 4 0;
+#X obj 960 160 mass_link3 76 0 4 0;
+#X obj 1160 160 mass_link3 77 1 4 0;
+#X obj 1360 160 mass_link3 78 2 4 0;
+#X obj 1560 160 mass_link3 79 3 4 0;
+#X obj 1760 160 mass_link3 80 4 4 0;
+#X obj 7 -1 mass_link2 -4 -4 0;
+#X obj 163 166 mass_link2 -4 4 0;
+#X connect 0 0 1 0;
+#X connect 0 0 9 0;
+#X connect 0 0 10 1;
+#X connect 0 0 8 1;
+#X connect 1 0 2 0;
+#X connect 1 0 0 0;
+#X connect 1 0 10 0;
+#X connect 1 0 11 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 1;
+#X connect 2 0 10 1;
+#X connect 3 0 4 0;
+#X connect 3 0 2 0;
+#X connect 3 0 12 0;
+#X connect 3 0 13 1;
+#X connect 3 0 11 1;
+#X connect 4 0 5 0;
+#X connect 4 0 3 0;
+#X connect 4 0 13 0;
+#X connect 4 0 14 1;
+#X connect 4 0 12 1;
+#X connect 5 0 6 0;
+#X connect 5 0 4 0;
+#X connect 5 0 14 0;
+#X connect 5 0 15 1;
+#X connect 5 0 13 1;
+#X connect 6 0 7 0;
+#X connect 6 0 5 0;
+#X connect 6 0 15 0;
+#X connect 6 0 16 1;
+#X connect 6 0 14 1;
+#X connect 7 0 6 0;
+#X connect 7 0 16 0;
+#X connect 7 0 15 1;
+#X connect 8 0 9 0;
+#X connect 8 0 17 0;
+#X connect 8 0 18 1;
+#X connect 8 0 0 1;
+#X connect 9 0 10 0;
+#X connect 9 0 8 0;
+#X connect 9 0 18 0;
+#X connect 9 0 0 0;
+#X connect 9 0 19 1;
+#X connect 9 0 17 1;
+#X connect 9 0 1 1;
+#X connect 10 0 11 0;
+#X connect 10 0 9 0;
+#X connect 10 0 19 0;
+#X connect 10 0 1 0;
+#X connect 10 0 20 1;
+#X connect 10 0 18 1;
+#X connect 10 0 0 1;
+#X connect 10 0 2 1;
+#X connect 11 0 12 0;
+#X connect 11 0 10 0;
+#X connect 11 0 20 0;
+#X connect 11 0 2 0;
+#X connect 11 0 21 1;
+#X connect 11 0 19 1;
+#X connect 11 0 1 1;
+#X connect 11 0 3 1;
+#X connect 12 0 13 0;
+#X connect 12 0 11 0;
+#X connect 12 0 21 0;
+#X connect 12 0 3 0;
+#X connect 12 0 22 1;
+#X connect 12 0 20 1;
+#X connect 12 0 2 1;
+#X connect 12 0 4 1;
+#X connect 13 0 14 0;
+#X connect 13 0 12 0;
+#X connect 13 0 22 0;
+#X connect 13 0 4 0;
+#X connect 13 0 23 1;
+#X connect 13 0 21 1;
+#X connect 13 0 3 1;
+#X connect 13 0 5 1;
+#X connect 14 0 15 0;
+#X connect 14 0 13 0;
+#X connect 14 0 23 0;
+#X connect 14 0 5 0;
+#X connect 14 0 24 1;
+#X connect 14 0 22 1;
+#X connect 14 0 4 1;
+#X connect 14 0 6 1;
+#X connect 15 0 16 0;
+#X connect 15 0 14 0;
+#X connect 15 0 24 0;
+#X connect 15 0 6 0;
+#X connect 15 0 25 1;
+#X connect 15 0 23 1;
+#X connect 15 0 5 1;
+#X connect 15 0 7 1;
+#X connect 16 0 15 0;
+#X connect 16 0 25 0;
+#X connect 16 0 7 0;
+#X connect 16 0 24 1;
+#X connect 16 0 6 1;
+#X connect 17 0 18 0;
+#X connect 17 0 26 0;
+#X connect 17 0 8 0;
+#X connect 17 0 27 1;
+#X connect 17 0 9 1;
+#X connect 18 0 19 0;
+#X connect 18 0 17 0;
+#X connect 18 0 27 0;
+#X connect 18 0 9 0;
+#X connect 18 0 28 1;
+#X connect 18 0 26 1;
+#X connect 18 0 8 1;
+#X connect 18 0 10 1;
+#X connect 19 0 20 0;
+#X connect 19 0 18 0;
+#X connect 19 0 28 0;
+#X connect 19 0 10 0;
+#X connect 19 0 29 1;
+#X connect 19 0 27 1;
+#X connect 19 0 9 1;
+#X connect 19 0 11 1;
+#X connect 20 0 21 0;
+#X connect 20 0 19 0;
+#X connect 20 0 29 0;
+#X connect 20 0 11 0;
+#X connect 20 0 30 1;
+#X connect 20 0 28 1;
+#X connect 20 0 10 1;
+#X connect 20 0 12 1;
+#X connect 21 0 22 0;
+#X connect 21 0 20 0;
+#X connect 21 0 30 0;
+#X connect 21 0 12 0;
+#X connect 21 0 31 1;
+#X connect 21 0 29 1;
+#X connect 21 0 11 1;
+#X connect 21 0 13 1;
+#X connect 22 0 23 0;
+#X connect 22 0 21 0;
+#X connect 22 0 31 0;
+#X connect 22 0 13 0;
+#X connect 22 0 32 1;
+#X connect 22 0 30 1;
+#X connect 22 0 12 1;
+#X connect 22 0 14 1;
+#X connect 23 0 24 0;
+#X connect 23 0 22 0;
+#X connect 23 0 32 0;
+#X connect 23 0 14 0;
+#X connect 23 0 33 1;
+#X connect 23 0 31 1;
+#X connect 23 0 13 1;
+#X connect 23 0 15 1;
+#X connect 24 0 25 0;
+#X connect 24 0 23 0;
+#X connect 24 0 33 0;
+#X connect 24 0 15 0;
+#X connect 24 0 34 1;
+#X connect 24 0 32 1;
+#X connect 24 0 14 1;
+#X connect 24 0 16 1;
+#X connect 25 0 24 0;
+#X connect 25 0 34 0;
+#X connect 25 0 16 0;
+#X connect 25 0 33 1;
+#X connect 25 0 15 1;
+#X connect 26 0 27 0;
+#X connect 26 0 35 0;
+#X connect 26 0 17 0;
+#X connect 26 0 36 1;
+#X connect 26 0 18 1;
+#X connect 27 0 28 0;
+#X connect 27 0 26 0;
+#X connect 27 0 36 0;
+#X connect 27 0 18 0;
+#X connect 27 0 37 1;
+#X connect 27 0 35 1;
+#X connect 27 0 17 1;
+#X connect 27 0 19 1;
+#X connect 28 0 29 0;
+#X connect 28 0 27 0;
+#X connect 28 0 37 0;
+#X connect 28 0 19 0;
+#X connect 28 0 38 1;
+#X connect 28 0 36 1;
+#X connect 28 0 18 1;
+#X connect 28 0 20 1;
+#X connect 29 0 30 0;
+#X connect 29 0 28 0;
+#X connect 29 0 38 0;
+#X connect 29 0 20 0;
+#X connect 29 0 39 1;
+#X connect 29 0 37 1;
+#X connect 29 0 19 1;
+#X connect 29 0 21 1;
+#X connect 30 0 31 0;
+#X connect 30 0 29 0;
+#X connect 30 0 39 0;
+#X connect 30 0 21 0;
+#X connect 30 0 40 1;
+#X connect 30 0 38 1;
+#X connect 30 0 20 1;
+#X connect 30 0 22 1;
+#X connect 31 0 32 0;
+#X connect 31 0 30 0;
+#X connect 31 0 40 0;
+#X connect 31 0 22 0;
+#X connect 31 0 41 1;
+#X connect 31 0 39 1;
+#X connect 31 0 21 1;
+#X connect 31 0 23 1;
+#X connect 32 0 33 0;
+#X connect 32 0 31 0;
+#X connect 32 0 41 0;
+#X connect 32 0 23 0;
+#X connect 32 0 42 1;
+#X connect 32 0 40 1;
+#X connect 32 0 22 1;
+#X connect 32 0 24 1;
+#X connect 33 0 34 0;
+#X connect 33 0 32 0;
+#X connect 33 0 42 0;
+#X connect 33 0 24 0;
+#X connect 33 0 43 1;
+#X connect 33 0 41 1;
+#X connect 33 0 23 1;
+#X connect 33 0 25 1;
+#X connect 34 0 33 0;
+#X connect 34 0 43 0;
+#X connect 34 0 25 0;
+#X connect 34 0 42 1;
+#X connect 34 0 24 1;
+#X connect 35 0 36 0;
+#X connect 35 0 44 0;
+#X connect 35 0 26 0;
+#X connect 35 0 45 1;
+#X connect 35 0 27 1;
+#X connect 36 0 37 0;
+#X connect 36 0 35 0;
+#X connect 36 0 45 0;
+#X connect 36 0 27 0;
+#X connect 36 0 46 1;
+#X connect 36 0 44 1;
+#X connect 36 0 26 1;
+#X connect 36 0 28 1;
+#X connect 37 0 38 0;
+#X connect 37 0 36 0;
+#X connect 37 0 46 0;
+#X connect 37 0 28 0;
+#X connect 37 0 47 1;
+#X connect 37 0 45 1;
+#X connect 37 0 27 1;
+#X connect 37 0 29 1;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 47 0;
+#X connect 38 0 29 0;
+#X connect 38 0 48 1;
+#X connect 38 0 46 1;
+#X connect 38 0 28 1;
+#X connect 38 0 30 1;
+#X connect 39 0 40 0;
+#X connect 39 0 38 0;
+#X connect 39 0 48 0;
+#X connect 39 0 30 0;
+#X connect 39 0 49 1;
+#X connect 39 0 47 1;
+#X connect 39 0 29 1;
+#X connect 39 0 31 1;
+#X connect 40 0 41 0;
+#X connect 40 0 39 0;
+#X connect 40 0 49 0;
+#X connect 40 0 31 0;
+#X connect 40 0 50 1;
+#X connect 40 0 48 1;
+#X connect 40 0 30 1;
+#X connect 40 0 32 1;
+#X connect 41 0 42 0;
+#X connect 41 0 40 0;
+#X connect 41 0 50 0;
+#X connect 41 0 32 0;
+#X connect 41 0 51 1;
+#X connect 41 0 49 1;
+#X connect 41 0 31 1;
+#X connect 41 0 33 1;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 51 0;
+#X connect 42 0 33 0;
+#X connect 42 0 52 1;
+#X connect 42 0 50 1;
+#X connect 42 0 32 1;
+#X connect 42 0 34 1;
+#X connect 43 0 42 0;
+#X connect 43 0 52 0;
+#X connect 43 0 34 0;
+#X connect 43 0 51 1;
+#X connect 43 0 33 1;
+#X connect 44 0 45 0;
+#X connect 44 0 53 0;
+#X connect 44 0 35 0;
+#X connect 44 0 54 1;
+#X connect 44 0 36 1;
+#X connect 45 0 46 0;
+#X connect 45 0 44 0;
+#X connect 45 0 54 0;
+#X connect 45 0 36 0;
+#X connect 45 0 55 1;
+#X connect 45 0 53 1;
+#X connect 45 0 35 1;
+#X connect 45 0 37 1;
+#X connect 46 0 47 0;
+#X connect 46 0 45 0;
+#X connect 46 0 55 0;
+#X connect 46 0 37 0;
+#X connect 46 0 56 1;
+#X connect 46 0 54 1;
+#X connect 46 0 36 1;
+#X connect 46 0 38 1;
+#X connect 47 0 48 0;
+#X connect 47 0 46 0;
+#X connect 47 0 56 0;
+#X connect 47 0 38 0;
+#X connect 47 0 57 1;
+#X connect 47 0 55 1;
+#X connect 47 0 37 1;
+#X connect 47 0 39 1;
+#X connect 48 0 49 0;
+#X connect 48 0 47 0;
+#X connect 48 0 57 0;
+#X connect 48 0 39 0;
+#X connect 48 0 58 1;
+#X connect 48 0 56 1;
+#X connect 48 0 38 1;
+#X connect 48 0 40 1;
+#X connect 49 0 50 0;
+#X connect 49 0 48 0;
+#X connect 49 0 58 0;
+#X connect 49 0 40 0;
+#X connect 49 0 59 1;
+#X connect 49 0 57 1;
+#X connect 49 0 39 1;
+#X connect 49 0 41 1;
+#X connect 50 0 51 0;
+#X connect 50 0 49 0;
+#X connect 50 0 59 0;
+#X connect 50 0 41 0;
+#X connect 50 0 60 1;
+#X connect 50 0 58 1;
+#X connect 50 0 40 1;
+#X connect 50 0 42 1;
+#X connect 51 0 52 0;
+#X connect 51 0 50 0;
+#X connect 51 0 60 0;
+#X connect 51 0 42 0;
+#X connect 51 0 61 1;
+#X connect 51 0 59 1;
+#X connect 51 0 41 1;
+#X connect 51 0 43 1;
+#X connect 52 0 51 0;
+#X connect 52 0 61 0;
+#X connect 52 0 43 0;
+#X connect 52 0 60 1;
+#X connect 52 0 42 1;
+#X connect 53 0 54 0;
+#X connect 53 0 62 0;
+#X connect 53 0 44 0;
+#X connect 53 0 63 1;
+#X connect 53 0 45 1;
+#X connect 54 0 55 0;
+#X connect 54 0 53 0;
+#X connect 54 0 63 0;
+#X connect 54 0 45 0;
+#X connect 54 0 64 1;
+#X connect 54 0 62 1;
+#X connect 54 0 44 1;
+#X connect 54 0 46 1;
+#X connect 55 0 56 0;
+#X connect 55 0 54 0;
+#X connect 55 0 64 0;
+#X connect 55 0 46 0;
+#X connect 55 0 65 1;
+#X connect 55 0 63 1;
+#X connect 55 0 45 1;
+#X connect 55 0 47 1;
+#X connect 56 0 57 0;
+#X connect 56 0 55 0;
+#X connect 56 0 65 0;
+#X connect 56 0 47 0;
+#X connect 56 0 66 1;
+#X connect 56 0 64 1;
+#X connect 56 0 46 1;
+#X connect 56 0 48 1;
+#X connect 57 0 58 0;
+#X connect 57 0 56 0;
+#X connect 57 0 66 0;
+#X connect 57 0 48 0;
+#X connect 57 0 67 1;
+#X connect 57 0 65 1;
+#X connect 57 0 47 1;
+#X connect 57 0 49 1;
+#X connect 58 0 59 0;
+#X connect 58 0 57 0;
+#X connect 58 0 67 0;
+#X connect 58 0 49 0;
+#X connect 58 0 68 1;
+#X connect 58 0 66 1;
+#X connect 58 0 48 1;
+#X connect 58 0 50 1;
+#X connect 59 0 60 0;
+#X connect 59 0 58 0;
+#X connect 59 0 68 0;
+#X connect 59 0 50 0;
+#X connect 59 0 69 1;
+#X connect 59 0 67 1;
+#X connect 59 0 49 1;
+#X connect 59 0 51 1;
+#X connect 60 0 61 0;
+#X connect 60 0 59 0;
+#X connect 60 0 69 0;
+#X connect 60 0 51 0;
+#X connect 60 0 70 1;
+#X connect 60 0 68 1;
+#X connect 60 0 50 1;
+#X connect 60 0 52 1;
+#X connect 61 0 60 0;
+#X connect 61 0 70 0;
+#X connect 61 0 52 0;
+#X connect 61 0 69 1;
+#X connect 61 0 51 1;
+#X connect 62 0 63 0;
+#X connect 62 0 53 0;
+#X connect 62 0 71 1;
+#X connect 62 0 54 1;
+#X connect 63 0 64 0;
+#X connect 63 0 62 0;
+#X connect 63 0 71 0;
+#X connect 63 0 54 0;
+#X connect 63 0 72 1;
+#X connect 63 0 53 1;
+#X connect 63 0 55 1;
+#X connect 64 0 65 0;
+#X connect 64 0 63 0;
+#X connect 64 0 72 0;
+#X connect 64 0 55 0;
+#X connect 64 0 73 1;
+#X connect 64 0 71 1;
+#X connect 64 0 54 1;
+#X connect 64 0 56 1;
+#X connect 65 0 66 0;
+#X connect 65 0 64 0;
+#X connect 65 0 73 0;
+#X connect 65 0 56 0;
+#X connect 65 0 74 1;
+#X connect 65 0 72 1;
+#X connect 65 0 55 1;
+#X connect 65 0 57 1;
+#X connect 66 0 67 0;
+#X connect 66 0 65 0;
+#X connect 66 0 74 0;
+#X connect 66 0 57 0;
+#X connect 66 0 75 1;
+#X connect 66 0 73 1;
+#X connect 66 0 56 1;
+#X connect 66 0 58 1;
+#X connect 67 0 68 0;
+#X connect 67 0 66 0;
+#X connect 67 0 75 0;
+#X connect 67 0 58 0;
+#X connect 67 0 76 1;
+#X connect 67 0 74 1;
+#X connect 67 0 57 1;
+#X connect 67 0 59 1;
+#X connect 68 0 69 0;
+#X connect 68 0 67 0;
+#X connect 68 0 76 0;
+#X connect 68 0 59 0;
+#X connect 68 0 77 1;
+#X connect 68 0 75 1;
+#X connect 68 0 58 1;
+#X connect 68 0 60 1;
+#X connect 69 0 70 0;
+#X connect 69 0 68 0;
+#X connect 69 0 77 0;
+#X connect 69 0 60 0;
+#X connect 69 0 78 1;
+#X connect 69 0 76 1;
+#X connect 69 0 59 1;
+#X connect 69 0 61 1;
+#X connect 70 0 69 0;
+#X connect 70 0 78 0;
+#X connect 70 0 61 0;
+#X connect 70 0 77 1;
+#X connect 70 0 60 1;
+#X connect 71 0 72 0;
+#X connect 71 0 63 0;
+#X connect 71 0 62 1;
+#X connect 71 0 64 1;
+#X connect 72 0 73 0;
+#X connect 72 0 71 0;
+#X connect 72 0 64 0;
+#X connect 72 0 63 1;
+#X connect 72 0 65 1;
+#X connect 73 0 74 0;
+#X connect 73 0 72 0;
+#X connect 73 0 65 0;
+#X connect 73 0 64 1;
+#X connect 73 0 66 1;
+#X connect 74 0 75 0;
+#X connect 74 0 73 0;
+#X connect 74 0 66 0;
+#X connect 74 0 65 1;
+#X connect 74 0 67 1;
+#X connect 75 0 76 0;
+#X connect 75 0 74 0;
+#X connect 75 0 67 0;
+#X connect 75 0 66 1;
+#X connect 75 0 68 1;
+#X connect 76 0 77 0;
+#X connect 76 0 75 0;
+#X connect 76 0 68 0;
+#X connect 76 0 67 1;
+#X connect 76 0 69 1;
+#X connect 77 0 78 0;
+#X connect 77 0 76 0;
+#X connect 77 0 69 0;
+#X connect 77 0 68 1;
+#X connect 77 0 70 1;
+#X connect 78 0 77 0;
+#X connect 78 0 70 0;
+#X connect 78 0 69 1;
+#X connect 79 0 0 0;
+#X connect 79 0 8 0;
+#X connect 79 0 9 1;
+#X connect 80 0 71 0;
+#X connect 80 0 62 0;
+#X connect 80 0 63 1;
+#X restore 169 500 pd array;
+#X obj 23 31 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 60 155 s masse;
+#X obj 33 223 s lia;
+#X obj 58 181 s masse3;
+#X obj 23 107 t b b b;
+#X obj 41 202 s masse2;
+#X floatatom 60 57 5 0 0 0 - - -;
+#X msg 163 112 0 \, destroy;
+#X msg 154 88 lighting 1 \, create \, 1;
+#X obj 166 234 ch_gemwin;
+#X obj 185 163 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 201 186 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 218 211 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 214 141 camera position;
+#X obj 27 361 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 61 391 loadbang;
+#X obj 27 416 t b b b;
+#X msg 64 446 reset;
+#X msg 27 561 resetF;
+#X obj 79 492 s masse;
+#X obj 27 583 s link;
+#X obj 45 539 s r_lia;
+#X obj 64 516 s masse2;
+#X text 55 361 <- reset;
+#X obj 23 250 s lia2;
+#X obj 23 82 metro 5;
+#N canvas 0 0 452 302 init 0;
+#X msg 240 131 setK \$1;
+#X msg 357 131 setM \$1;
+#X obj 357 159 s masse;
+#X floatatom 240 107 5 0 0 0 - - -;
+#X floatatom 295 107 5 0 0 0 - - -;
+#X floatatom 357 108 5 0 0 0 - - -;
+#X msg 295 130 setD2 \$1;
+#X obj 240 62 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 189 158 s link;
+#X obj 240 39 loadbang;
+#X msg 189 131 setL \$1;
+#X floatatom 189 108 5 0 0 0 - - -;
+#X msg 62 153 setK \$1;
+#X floatatom 62 129 5 0 0 0 - - -;
+#X floatatom 117 129 5 0 0 0 - - -;
+#X msg 117 152 setD2 \$1;
+#X obj 62 84 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 62 61 loadbang;
+#X msg 11 153 setL \$1;
+#X floatatom 11 130 5 0 0 0 - - -;
+#X obj 11 180 s link2;
+#X msg 62 105 1;
+#X msg 240 83 1;
+#X msg 118 104 0;
+#X msg 297 81 1;
+#X msg 357 84 10;
+#X msg 189 84 1;
+#X msg 13 102 1.4;
+#X connect 0 0 8 0;
+#X connect 1 0 2 0;
+#X connect 3 0 0 0;
+#X connect 4 0 6 0;
+#X connect 5 0 1 0;
+#X connect 6 0 8 0;
+#X connect 7 0 22 0;
+#X connect 7 0 24 0;
+#X connect 7 0 25 0;
+#X connect 7 0 26 0;
+#X connect 9 0 7 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 20 0;
+#X connect 13 0 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 20 0;
+#X connect 16 0 21 0;
+#X connect 16 0 23 0;
+#X connect 16 0 27 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 21 0 13 0;
+#X connect 22 0 3 0;
+#X connect 23 0 14 0;
+#X connect 24 0 4 0;
+#X connect 25 0 5 0;
+#X connect 26 0 11 0;
+#X connect 27 0 19 0;
+#X restore 169 551 pd init physical properties;
+#N canvas 0 0 452 302 gem 0;
+#X obj 15 213 world_light;
+#X obj 15 190 gemhead;
+#X obj 19 29 gemhead;
+#X obj 19 93 rotateXYZ;
+#X obj 19 119 s gemhead;
+#X floatatom 65 47 5 0 0 0 - - -;
+#X floatatom 111 46 5 0 0 0 - - -;
+#X floatatom 158 46 5 0 0 0 - - -;
+#X obj 19 68 translateXYZ 0 0 0;
+#X connect 1 0 0 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 5 0 8 1;
+#X connect 6 0 8 2;
+#X connect 7 0 8 3;
+#X connect 8 0 3 0;
+#X restore 169 527 pd gem;
+#N canvas 0 0 452 302 constructor 0;
+#X obj 10 161 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 216 13 1 0 0 1 1;
+#X msg 227 35 -1 0 0 1 1;
+#X msg 249 77 0 -1 0 1 1;
+#X msg 239 56 0 1 0 1 1;
+#X msg 259 97 1 1 0 1 2;
+#X msg 270 119 -1 1 0 1 2;
+#X msg 282 140 -1 -1 0 1 2;
+#X msg 292 161 1 -1 0 1 2;
+#X obj 10 188 constructor 9 9 1 -4 4 -4 4 0 0 mass_link3;
+#X connect 0 0 9 0;
+#X connect 1 0 9 1;
+#X connect 2 0 9 1;
+#X connect 3 0 9 1;
+#X connect 4 0 9 1;
+#X connect 5 0 9 1;
+#X connect 6 0 9 1;
+#X connect 7 0 9 1;
+#X connect 8 0 9 1;
+#X restore 169 575 pd constructor of the array;
+#X text 55 30 <- begin (change metro speed if to much);
+#X obj 169 472 s masse;
+#X msg 169 448 force3D \$1 -0.03 \$2;
+#X obj 169 425 pack f f;
+#X obj 169 266 random 100;
+#X obj 242 267 random 100;
+#X obj 169 340 / 1000;
+#X obj 242 293 - 50;
+#X obj 242 317 / 300;
+#X obj 71 133 s mass;
+#X obj 354 361 mass mass 1000;
+#X obj 90 472 s mass;
+#X obj 242 340 link lia 0 1 0 10;
+#X text 317 267 random wind speed;
+#X text 253 381 filter to get a smooth wind movment;
+#X text 204 11 flag in the wind;
+#X connect 1 0 26 0;
+#X connect 5 0 3 0;
+#X connect 5 0 25 0;
+#X connect 5 0 34 0;
+#X connect 5 0 35 0;
+#X connect 5 1 4 0;
+#X connect 5 1 6 0;
+#X connect 5 2 2 0;
+#X connect 5 2 39 0;
+#X connect 7 0 26 1;
+#X connect 8 0 10 0;
+#X connect 9 0 10 0;
+#X connect 11 0 10 1;
+#X connect 12 0 10 2;
+#X connect 13 0 10 3;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
+#X connect 17 0 19 0;
+#X connect 17 1 22 0;
+#X connect 17 2 18 0;
+#X connect 18 0 20 0;
+#X connect 18 0 23 0;
+#X connect 18 0 41 0;
+#X connect 19 0 21 0;
+#X connect 26 0 5 0;
+#X connect 32 0 31 0;
+#X connect 33 0 32 0;
+#X connect 34 0 36 0;
+#X connect 35 0 37 0;
+#X connect 36 0 33 0;
+#X connect 37 0 38 0;
+#X connect 38 0 42 0;
+#X connect 40 0 33 1;
+#X connect 40 0 42 1;
+#X connect 42 1 40 0;
diff --git a/exemples/45_newWave.pd b/exemples/45_newWave.pd
new file mode 100755
index 0000000..57d7614
--- /dev/null
+++ b/exemples/45_newWave.pd
@@ -0,0 +1,775 @@
+#N canvas 82 67 713 498 10;
+#N canvas 150 74 785 554 array 0;
+#X obj 0 0 mountain 0 -5 0 -5;
+#X obj 200 0 mountain 1 -4 0 -5;
+#X obj 400 0 mountain 2 -3 0 -5;
+#X obj 600 0 mountain 3 -2 0 -5;
+#X obj 800 0 mountain 4 -1 0 -5;
+#X obj 1000 0 mountain 5 0 0 -5;
+#X obj 1200 0 mountain 6 1 0 -5;
+#X obj 1400 0 mountain 7 2 0 -5;
+#X obj 1600 0 mountain 8 3 0 -5;
+#X obj 1800 0 mountain 9 4 0 -5;
+#X obj 2000 0 mountain 10 5 0 -5;
+#X obj 0 100 mountain 11 -5 0 -4;
+#X obj 200 100 mountain 12 -4 0 -4;
+#X obj 400 100 mountain 13 -3 0 -4;
+#X obj 600 100 mountain 14 -2 0 -4;
+#X obj 800 100 mountain 15 -1 0 -4;
+#X obj 1000 100 mountain 16 0 0 -4;
+#X obj 1200 100 mountain 17 1 0 -4;
+#X obj 1400 100 mountain 18 2 0 -4;
+#X obj 1600 100 mountain 19 3 0 -4;
+#X obj 1800 100 mountain 20 4 0 -4;
+#X obj 2000 100 mountain 21 5 0 -4;
+#X obj 0 200 mountain 22 -5 0 -3;
+#X obj 200 200 mountain 23 -4 0 -3;
+#X obj 400 200 mountain 24 -3 0 -3;
+#X obj 600 200 mountain 25 -2 0 -3;
+#X obj 800 200 mountain 26 -1 0 -3;
+#X obj 1000 200 mountain 27 0 0 -3;
+#X obj 1200 200 mountain 28 1 0 -3;
+#X obj 1400 200 mountain 29 2 0 -3;
+#X obj 1600 200 mountain 30 3 0 -3;
+#X obj 1800 200 mountain 31 4 0 -3;
+#X obj 2000 200 mountain 32 5 0 -3;
+#X obj 0 300 mountain 33 -5 0 -2;
+#X obj 200 300 mountain 34 -4 0 -2;
+#X obj 400 300 mountain 35 -3 0 -2;
+#X obj 600 300 mountain 36 -2 0 -2;
+#X obj 800 300 mountain 37 -1 0 -2;
+#X obj 1000 300 mountain 38 0 0 -2;
+#X obj 1200 300 mountain 39 1 0 -2;
+#X obj 1400 300 mountain 40 2 0 -2;
+#X obj 1600 300 mountain 41 3 0 -2;
+#X obj 1800 300 mountain 42 4 0 -2;
+#X obj 2000 300 mountain 43 5 0 -2;
+#X obj 0 400 mountain 44 -5 0 -1;
+#X obj 200 400 mountain 45 -4 0 -1;
+#X obj 400 400 mountain 46 -3 0 -1;
+#X obj 600 400 mountain 47 -2 0 -1;
+#X obj 800 400 mountain 48 -1 0 -1;
+#X obj 1000 400 mountain 49 0 0 -1;
+#X obj 1200 400 mountain 50 1 0 -1;
+#X obj 1400 400 mountain 51 2 0 -1;
+#X obj 1600 400 mountain 52 3 0 -1;
+#X obj 1800 400 mountain 53 4 0 -1;
+#X obj 2000 400 mountain 54 5 0 -1;
+#X obj 0 500 mountain 55 -5 0 0;
+#X obj 200 500 mountain 56 -4 0 0;
+#X obj 400 500 mountain 57 -3 0 0;
+#X obj 600 500 mountain 58 -2 0 0;
+#X obj 800 500 mountain 59 -1 0 0;
+#X obj 1000 500 mountain 60 0 0 0;
+#X obj 1200 500 mountain 61 1 0 0;
+#X obj 1400 500 mountain 62 2 0 0;
+#X obj 1600 500 mountain 63 3 0 0;
+#X obj 1800 500 mountain 64 4 0 0;
+#X obj 2000 500 mountain 65 5 0 0;
+#X obj 0 600 mountain 66 -5 0 1;
+#X obj 200 600 mountain 67 -4 0 1;
+#X obj 400 600 mountain 68 -3 0 1;
+#X obj 600 600 mountain 69 -2 0 1;
+#X obj 800 600 mountain 70 -1 0 1;
+#X obj 1000 600 mountain 71 0 0 1;
+#X obj 1200 600 mountain 72 1 0 1;
+#X obj 1400 600 mountain 73 2 0 1;
+#X obj 1600 600 mountain 74 3 0 1;
+#X obj 1800 600 mountain 75 4 0 1;
+#X obj 2000 600 mountain 76 5 0 1;
+#X obj 0 700 mountain 77 -5 0 2;
+#X obj 200 700 mountain 78 -4 0 2;
+#X obj 400 700 mountain 79 -3 0 2;
+#X obj 600 700 mountain 80 -2 0 2;
+#X obj 800 700 mountain 81 -1 0 2;
+#X obj 1000 700 mountain 82 0 0 2;
+#X obj 1200 700 mountain 83 1 0 2;
+#X obj 1400 700 mountain 84 2 0 2;
+#X obj 1600 700 mountain 85 3 0 2;
+#X obj 1800 700 mountain 86 4 0 2;
+#X obj 2000 700 mountain 87 5 0 2;
+#X obj 0 800 mountain 88 -5 0 3;
+#X obj 200 800 mountain 89 -4 0 3;
+#X obj 400 800 mountain 90 -3 0 3;
+#X obj 600 800 mountain 91 -2 0 3;
+#X obj 800 800 mountain 92 -1 0 3;
+#X obj 1000 800 mountain 93 0 0 3;
+#X obj 1200 800 mountain 94 1 0 3;
+#X obj 1400 800 mountain 95 2 0 3;
+#X obj 1600 800 mountain 96 3 0 3;
+#X obj 1800 800 mountain 97 4 0 3;
+#X obj 2000 800 mountain 98 5 0 3;
+#X obj 0 900 mountain 99 -5 0 4;
+#X obj 200 900 mountain 100 -4 0 4;
+#X obj 400 900 mountain 101 -3 0 4;
+#X obj 600 900 mountain 102 -2 0 4;
+#X obj 800 900 mountain 103 -1 0 4;
+#X obj 1000 900 mountain 104 0 0 4;
+#X obj 1200 900 mountain 105 1 0 4;
+#X obj 1400 900 mountain 106 2 0 4;
+#X obj 1600 900 mountain 107 3 0 4;
+#X obj 1800 900 mountain 108 4 0 4;
+#X obj 2000 900 mountain 109 5 0 4;
+#X obj 0 1000 mountain 110 -5 0 5;
+#X obj 200 1000 mountain 111 -4 0 5;
+#X obj 400 1000 mountain 112 -3 0 5;
+#X obj 600 1000 mountain 113 -2 0 5;
+#X obj 800 1000 mountain 114 -1 0 5;
+#X obj 1000 1000 mountain 115 0 0 5;
+#X obj 1200 1000 mountain 116 1 0 5;
+#X obj 1400 1000 mountain 117 2 0 5;
+#X obj 1600 1000 mountain 118 3 0 5;
+#X obj 1800 1000 mountain 119 4 0 5;
+#X obj 2000 1000 mountain 120 5 0 5;
+#X obj 1945 970 outlet;
+#X connect 0 0 1 1;
+#X connect 0 0 11 2;
+#X connect 0 0 12 3;
+#X connect 1 0 2 1;
+#X connect 1 0 12 2;
+#X connect 1 0 13 3;
+#X connect 1 1 0 0;
+#X connect 2 0 3 1;
+#X connect 2 0 13 2;
+#X connect 2 0 14 3;
+#X connect 2 1 1 0;
+#X connect 3 0 4 1;
+#X connect 3 0 14 2;
+#X connect 3 0 15 3;
+#X connect 3 1 2 0;
+#X connect 4 0 5 1;
+#X connect 4 0 15 2;
+#X connect 4 0 16 3;
+#X connect 4 1 3 0;
+#X connect 5 0 6 1;
+#X connect 5 0 16 2;
+#X connect 5 0 17 3;
+#X connect 5 1 4 0;
+#X connect 6 0 7 1;
+#X connect 6 0 17 2;
+#X connect 6 0 18 3;
+#X connect 6 1 5 0;
+#X connect 7 0 8 1;
+#X connect 7 0 18 2;
+#X connect 7 0 19 3;
+#X connect 7 1 6 0;
+#X connect 8 0 9 1;
+#X connect 8 0 19 2;
+#X connect 8 0 20 3;
+#X connect 8 1 7 0;
+#X connect 9 0 10 1;
+#X connect 9 0 20 2;
+#X connect 9 0 21 3;
+#X connect 9 1 8 0;
+#X connect 10 0 21 2;
+#X connect 10 1 9 0;
+#X connect 11 0 12 1;
+#X connect 11 0 22 2;
+#X connect 11 0 23 3;
+#X connect 11 2 0 0;
+#X connect 12 0 13 1;
+#X connect 12 0 23 2;
+#X connect 12 0 24 3;
+#X connect 12 1 11 0;
+#X connect 12 2 1 0;
+#X connect 13 0 14 1;
+#X connect 13 0 24 2;
+#X connect 13 0 25 3;
+#X connect 13 1 12 0;
+#X connect 13 2 2 0;
+#X connect 14 0 15 1;
+#X connect 14 0 25 2;
+#X connect 14 0 26 3;
+#X connect 14 1 13 0;
+#X connect 14 2 3 0;
+#X connect 15 0 16 1;
+#X connect 15 0 26 2;
+#X connect 15 0 27 3;
+#X connect 15 1 14 0;
+#X connect 15 2 4 0;
+#X connect 16 0 17 1;
+#X connect 16 0 27 2;
+#X connect 16 0 28 3;
+#X connect 16 1 15 0;
+#X connect 16 2 5 0;
+#X connect 17 0 18 1;
+#X connect 17 0 28 2;
+#X connect 17 0 29 3;
+#X connect 17 1 16 0;
+#X connect 17 2 6 0;
+#X connect 18 0 19 1;
+#X connect 18 0 29 2;
+#X connect 18 0 30 3;
+#X connect 18 1 17 0;
+#X connect 18 2 7 0;
+#X connect 19 0 20 1;
+#X connect 19 0 30 2;
+#X connect 19 0 31 3;
+#X connect 19 1 18 0;
+#X connect 19 2 8 0;
+#X connect 20 0 21 1;
+#X connect 20 0 31 2;
+#X connect 20 0 32 3;
+#X connect 20 1 19 0;
+#X connect 20 2 9 0;
+#X connect 21 0 32 2;
+#X connect 21 1 20 0;
+#X connect 21 2 10 0;
+#X connect 22 0 23 1;
+#X connect 22 0 33 2;
+#X connect 22 0 34 3;
+#X connect 22 2 11 0;
+#X connect 23 0 24 1;
+#X connect 23 0 34 2;
+#X connect 23 0 35 3;
+#X connect 23 1 22 0;
+#X connect 23 2 12 0;
+#X connect 24 0 25 1;
+#X connect 24 0 35 2;
+#X connect 24 0 36 3;
+#X connect 24 1 23 0;
+#X connect 24 2 13 0;
+#X connect 25 0 26 1;
+#X connect 25 0 36 2;
+#X connect 25 0 37 3;
+#X connect 25 1 24 0;
+#X connect 25 2 14 0;
+#X connect 26 0 27 1;
+#X connect 26 0 37 2;
+#X connect 26 0 38 3;
+#X connect 26 1 25 0;
+#X connect 26 2 15 0;
+#X connect 27 0 28 1;
+#X connect 27 0 38 2;
+#X connect 27 0 39 3;
+#X connect 27 1 26 0;
+#X connect 27 2 16 0;
+#X connect 28 0 29 1;
+#X connect 28 0 39 2;
+#X connect 28 0 40 3;
+#X connect 28 1 27 0;
+#X connect 28 2 17 0;
+#X connect 29 0 30 1;
+#X connect 29 0 40 2;
+#X connect 29 0 41 3;
+#X connect 29 1 28 0;
+#X connect 29 2 18 0;
+#X connect 30 0 31 1;
+#X connect 30 0 41 2;
+#X connect 30 0 42 3;
+#X connect 30 1 29 0;
+#X connect 30 2 19 0;
+#X connect 31 0 32 1;
+#X connect 31 0 42 2;
+#X connect 31 0 43 3;
+#X connect 31 1 30 0;
+#X connect 31 2 20 0;
+#X connect 32 0 43 2;
+#X connect 32 1 31 0;
+#X connect 32 2 21 0;
+#X connect 33 0 34 1;
+#X connect 33 0 44 2;
+#X connect 33 0 45 3;
+#X connect 33 2 22 0;
+#X connect 34 0 35 1;
+#X connect 34 0 45 2;
+#X connect 34 0 46 3;
+#X connect 34 1 33 0;
+#X connect 34 2 23 0;
+#X connect 35 0 36 1;
+#X connect 35 0 46 2;
+#X connect 35 0 47 3;
+#X connect 35 1 34 0;
+#X connect 35 2 24 0;
+#X connect 36 0 37 1;
+#X connect 36 0 47 2;
+#X connect 36 0 48 3;
+#X connect 36 1 35 0;
+#X connect 36 2 25 0;
+#X connect 37 0 38 1;
+#X connect 37 0 48 2;
+#X connect 37 0 49 3;
+#X connect 37 1 36 0;
+#X connect 37 2 26 0;
+#X connect 38 0 39 1;
+#X connect 38 0 49 2;
+#X connect 38 0 50 3;
+#X connect 38 1 37 0;
+#X connect 38 2 27 0;
+#X connect 39 0 40 1;
+#X connect 39 0 50 2;
+#X connect 39 0 51 3;
+#X connect 39 1 38 0;
+#X connect 39 2 28 0;
+#X connect 40 0 41 1;
+#X connect 40 0 51 2;
+#X connect 40 0 52 3;
+#X connect 40 1 39 0;
+#X connect 40 2 29 0;
+#X connect 41 0 42 1;
+#X connect 41 0 52 2;
+#X connect 41 0 53 3;
+#X connect 41 1 40 0;
+#X connect 41 2 30 0;
+#X connect 42 0 43 1;
+#X connect 42 0 53 2;
+#X connect 42 0 54 3;
+#X connect 42 1 41 0;
+#X connect 42 2 31 0;
+#X connect 43 0 54 2;
+#X connect 43 1 42 0;
+#X connect 43 2 32 0;
+#X connect 44 0 45 1;
+#X connect 44 0 55 2;
+#X connect 44 0 56 3;
+#X connect 44 2 33 0;
+#X connect 45 0 46 1;
+#X connect 45 0 56 2;
+#X connect 45 0 57 3;
+#X connect 45 1 44 0;
+#X connect 45 2 34 0;
+#X connect 46 0 47 1;
+#X connect 46 0 57 2;
+#X connect 46 0 58 3;
+#X connect 46 1 45 0;
+#X connect 46 2 35 0;
+#X connect 47 0 48 1;
+#X connect 47 0 58 2;
+#X connect 47 0 59 3;
+#X connect 47 1 46 0;
+#X connect 47 2 36 0;
+#X connect 48 0 49 1;
+#X connect 48 0 59 2;
+#X connect 48 0 60 3;
+#X connect 48 1 47 0;
+#X connect 48 2 37 0;
+#X connect 49 0 50 1;
+#X connect 49 0 60 2;
+#X connect 49 0 61 3;
+#X connect 49 1 48 0;
+#X connect 49 2 38 0;
+#X connect 50 0 51 1;
+#X connect 50 0 61 2;
+#X connect 50 0 62 3;
+#X connect 50 1 49 0;
+#X connect 50 2 39 0;
+#X connect 51 0 52 1;
+#X connect 51 0 62 2;
+#X connect 51 0 63 3;
+#X connect 51 1 50 0;
+#X connect 51 2 40 0;
+#X connect 52 0 53 1;
+#X connect 52 0 63 2;
+#X connect 52 0 64 3;
+#X connect 52 1 51 0;
+#X connect 52 2 41 0;
+#X connect 53 0 54 1;
+#X connect 53 0 64 2;
+#X connect 53 0 65 3;
+#X connect 53 1 52 0;
+#X connect 53 2 42 0;
+#X connect 54 0 65 2;
+#X connect 54 1 53 0;
+#X connect 54 2 43 0;
+#X connect 55 0 56 1;
+#X connect 55 0 66 2;
+#X connect 55 0 67 3;
+#X connect 55 2 44 0;
+#X connect 56 0 57 1;
+#X connect 56 0 67 2;
+#X connect 56 0 68 3;
+#X connect 56 1 55 0;
+#X connect 56 2 45 0;
+#X connect 57 0 58 1;
+#X connect 57 0 68 2;
+#X connect 57 0 69 3;
+#X connect 57 1 56 0;
+#X connect 57 2 46 0;
+#X connect 58 0 59 1;
+#X connect 58 0 69 2;
+#X connect 58 0 70 3;
+#X connect 58 1 57 0;
+#X connect 58 2 47 0;
+#X connect 59 0 60 1;
+#X connect 59 0 70 2;
+#X connect 59 0 71 3;
+#X connect 59 1 58 0;
+#X connect 59 2 48 0;
+#X connect 60 0 61 1;
+#X connect 60 0 71 2;
+#X connect 60 0 72 3;
+#X connect 60 1 59 0;
+#X connect 60 2 49 0;
+#X connect 61 0 62 1;
+#X connect 61 0 72 2;
+#X connect 61 0 73 3;
+#X connect 61 1 60 0;
+#X connect 61 2 50 0;
+#X connect 62 0 63 1;
+#X connect 62 0 73 2;
+#X connect 62 0 74 3;
+#X connect 62 1 61 0;
+#X connect 62 2 51 0;
+#X connect 63 0 64 1;
+#X connect 63 0 74 2;
+#X connect 63 0 75 3;
+#X connect 63 1 62 0;
+#X connect 63 2 52 0;
+#X connect 64 0 65 1;
+#X connect 64 0 75 2;
+#X connect 64 0 76 3;
+#X connect 64 1 63 0;
+#X connect 64 2 53 0;
+#X connect 65 0 76 2;
+#X connect 65 1 64 0;
+#X connect 65 2 54 0;
+#X connect 66 0 67 1;
+#X connect 66 0 77 2;
+#X connect 66 0 78 3;
+#X connect 66 2 55 0;
+#X connect 67 0 68 1;
+#X connect 67 0 78 2;
+#X connect 67 0 79 3;
+#X connect 67 1 66 0;
+#X connect 67 2 56 0;
+#X connect 68 0 69 1;
+#X connect 68 0 79 2;
+#X connect 68 0 80 3;
+#X connect 68 1 67 0;
+#X connect 68 2 57 0;
+#X connect 69 0 70 1;
+#X connect 69 0 80 2;
+#X connect 69 0 81 3;
+#X connect 69 1 68 0;
+#X connect 69 2 58 0;
+#X connect 70 0 71 1;
+#X connect 70 0 81 2;
+#X connect 70 0 82 3;
+#X connect 70 1 69 0;
+#X connect 70 2 59 0;
+#X connect 71 0 72 1;
+#X connect 71 0 82 2;
+#X connect 71 0 83 3;
+#X connect 71 1 70 0;
+#X connect 71 2 60 0;
+#X connect 72 0 73 1;
+#X connect 72 0 83 2;
+#X connect 72 0 84 3;
+#X connect 72 1 71 0;
+#X connect 72 2 61 0;
+#X connect 73 0 74 1;
+#X connect 73 0 84 2;
+#X connect 73 0 85 3;
+#X connect 73 1 72 0;
+#X connect 73 2 62 0;
+#X connect 74 0 75 1;
+#X connect 74 0 85 2;
+#X connect 74 0 86 3;
+#X connect 74 1 73 0;
+#X connect 74 2 63 0;
+#X connect 75 0 76 1;
+#X connect 75 0 86 2;
+#X connect 75 0 87 3;
+#X connect 75 1 74 0;
+#X connect 75 2 64 0;
+#X connect 76 0 87 2;
+#X connect 76 1 75 0;
+#X connect 76 2 65 0;
+#X connect 77 0 78 1;
+#X connect 77 0 88 2;
+#X connect 77 0 89 3;
+#X connect 77 2 66 0;
+#X connect 78 0 79 1;
+#X connect 78 0 89 2;
+#X connect 78 0 90 3;
+#X connect 78 1 77 0;
+#X connect 78 2 67 0;
+#X connect 79 0 80 1;
+#X connect 79 0 90 2;
+#X connect 79 0 91 3;
+#X connect 79 1 78 0;
+#X connect 79 2 68 0;
+#X connect 80 0 81 1;
+#X connect 80 0 91 2;
+#X connect 80 0 92 3;
+#X connect 80 1 79 0;
+#X connect 80 2 69 0;
+#X connect 81 0 82 1;
+#X connect 81 0 92 2;
+#X connect 81 0 93 3;
+#X connect 81 1 80 0;
+#X connect 81 2 70 0;
+#X connect 82 0 83 1;
+#X connect 82 0 93 2;
+#X connect 82 0 94 3;
+#X connect 82 1 81 0;
+#X connect 82 2 71 0;
+#X connect 83 0 84 1;
+#X connect 83 0 94 2;
+#X connect 83 0 95 3;
+#X connect 83 1 82 0;
+#X connect 83 2 72 0;
+#X connect 84 0 85 1;
+#X connect 84 0 95 2;
+#X connect 84 0 96 3;
+#X connect 84 1 83 0;
+#X connect 84 2 73 0;
+#X connect 85 0 86 1;
+#X connect 85 0 96 2;
+#X connect 85 0 97 3;
+#X connect 85 1 84 0;
+#X connect 85 2 74 0;
+#X connect 86 0 87 1;
+#X connect 86 0 97 2;
+#X connect 86 0 98 3;
+#X connect 86 1 85 0;
+#X connect 86 2 75 0;
+#X connect 87 0 98 2;
+#X connect 87 1 86 0;
+#X connect 87 2 76 0;
+#X connect 88 0 89 1;
+#X connect 88 0 99 2;
+#X connect 88 0 100 3;
+#X connect 88 2 77 0;
+#X connect 89 0 90 1;
+#X connect 89 0 100 2;
+#X connect 89 0 101 3;
+#X connect 89 1 88 0;
+#X connect 89 2 78 0;
+#X connect 90 0 91 1;
+#X connect 90 0 101 2;
+#X connect 90 0 102 3;
+#X connect 90 1 89 0;
+#X connect 90 2 79 0;
+#X connect 91 0 92 1;
+#X connect 91 0 102 2;
+#X connect 91 0 103 3;
+#X connect 91 1 90 0;
+#X connect 91 2 80 0;
+#X connect 92 0 93 1;
+#X connect 92 0 103 2;
+#X connect 92 0 104 3;
+#X connect 92 1 91 0;
+#X connect 92 2 81 0;
+#X connect 93 0 94 1;
+#X connect 93 0 104 2;
+#X connect 93 0 105 3;
+#X connect 93 1 92 0;
+#X connect 93 2 82 0;
+#X connect 94 0 95 1;
+#X connect 94 0 105 2;
+#X connect 94 0 106 3;
+#X connect 94 1 93 0;
+#X connect 94 2 83 0;
+#X connect 95 0 96 1;
+#X connect 95 0 106 2;
+#X connect 95 0 107 3;
+#X connect 95 1 94 0;
+#X connect 95 2 84 0;
+#X connect 96 0 97 1;
+#X connect 96 0 107 2;
+#X connect 96 0 108 3;
+#X connect 96 1 95 0;
+#X connect 96 2 85 0;
+#X connect 97 0 98 1;
+#X connect 97 0 108 2;
+#X connect 97 0 109 3;
+#X connect 97 1 96 0;
+#X connect 97 2 86 0;
+#X connect 98 0 109 2;
+#X connect 98 1 97 0;
+#X connect 98 2 87 0;
+#X connect 99 0 100 1;
+#X connect 99 0 110 2;
+#X connect 99 0 111 3;
+#X connect 99 2 88 0;
+#X connect 100 0 101 1;
+#X connect 100 0 111 2;
+#X connect 100 0 112 3;
+#X connect 100 1 99 0;
+#X connect 100 2 89 0;
+#X connect 101 0 102 1;
+#X connect 101 0 112 2;
+#X connect 101 0 113 3;
+#X connect 101 1 100 0;
+#X connect 101 2 90 0;
+#X connect 102 0 103 1;
+#X connect 102 0 113 2;
+#X connect 102 0 114 3;
+#X connect 102 1 101 0;
+#X connect 102 2 91 0;
+#X connect 103 0 104 1;
+#X connect 103 0 114 2;
+#X connect 103 0 115 3;
+#X connect 103 1 102 0;
+#X connect 103 2 92 0;
+#X connect 104 0 105 1;
+#X connect 104 0 115 2;
+#X connect 104 0 116 3;
+#X connect 104 1 103 0;
+#X connect 104 2 93 0;
+#X connect 105 0 106 1;
+#X connect 105 0 116 2;
+#X connect 105 0 117 3;
+#X connect 105 1 104 0;
+#X connect 105 2 94 0;
+#X connect 106 0 107 1;
+#X connect 106 0 117 2;
+#X connect 106 0 118 3;
+#X connect 106 1 105 0;
+#X connect 106 2 95 0;
+#X connect 107 0 108 1;
+#X connect 107 0 118 2;
+#X connect 107 0 119 3;
+#X connect 107 1 106 0;
+#X connect 107 2 96 0;
+#X connect 108 0 109 1;
+#X connect 108 0 119 2;
+#X connect 108 0 120 3;
+#X connect 108 1 107 0;
+#X connect 108 2 97 0;
+#X connect 109 0 120 2;
+#X connect 109 1 108 0;
+#X connect 109 2 98 0;
+#X connect 110 0 111 1;
+#X connect 110 2 99 0;
+#X connect 111 0 112 1;
+#X connect 111 1 110 0;
+#X connect 111 2 100 0;
+#X connect 112 0 113 1;
+#X connect 112 1 111 0;
+#X connect 112 2 101 0;
+#X connect 113 0 114 1;
+#X connect 113 1 112 0;
+#X connect 113 2 102 0;
+#X connect 114 0 115 1;
+#X connect 114 1 113 0;
+#X connect 114 2 103 0;
+#X connect 115 0 116 1;
+#X connect 115 1 114 0;
+#X connect 115 2 104 0;
+#X connect 116 0 117 1;
+#X connect 116 1 115 0;
+#X connect 116 2 105 0;
+#X connect 117 0 118 1;
+#X connect 117 1 116 0;
+#X connect 117 2 106 0;
+#X connect 118 0 119 1;
+#X connect 118 1 117 0;
+#X connect 118 2 107 0;
+#X connect 119 0 120 1;
+#X connect 119 1 118 0;
+#X connect 119 2 108 0;
+#X connect 120 0 121 0;
+#X connect 120 1 119 0;
+#X connect 120 2 109 0;
+#X restore 15 366 pd array;
+#X obj 16 122 t b b;
+#X obj 16 48 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X msg 160 112 0 \, destroy;
+#X floatatom 59 64 5 0 0 0 - - -;
+#X text 432 110 <- reset the simulation;
+#X obj 151 212 ch_gemwin;
+#X obj 170 143 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 186 167 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 203 190 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 9600 1;
+#X text 249 125 camera position;
+#X msg 151 87 reset \, lighting 1 \, create \, 1;
+#X obj 604 138 gemhead 1;
+#X obj 604 187 world_light;
+#X obj 604 163 rotateXYZ 0 0 0;
+#X obj 403 112 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 404 137 s init;
+#X obj 41 144 s L;
+#X obj 16 144 s M;
+#X floatatom 544 137 5 0 0 0 - - -;
+#X obj 544 159 s size;
+#X msg 490 135 reset;
+#X obj 490 159 s M;
+#X obj 16 95 metro 50;
+#X obj 388 91 loadbang;
+#X text 321 10 newWave;
+#X text 203 23 this exemple is a bit like Gem native object : newWave.
+;
+#N canvas 0 0 458 308 constructor 0;
+#X obj 20 124 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 20 146 constructor 11 1 11 -5 5 0 0 -5 5 mountain;
+#X msg 265 17 1 0 0 1 2;
+#X msg 274 38 -1 0 0 2 1;
+#X msg 288 60 0 0 1 1 3;
+#X msg 297 81 0 0 -1 3 1;
+#X msg 309 109 1 0 1 1 4;
+#X connect 0 0 1 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 1;
+#X connect 4 0 1 1;
+#X connect 5 0 1 1;
+#X connect 6 0 1 1;
+#X restore 490 181 pd constructor;
+#X obj 436 458 dac~;
+#X obj 436 412 line~;
+#X obj 435 435 tabread4~ toto;
+#N canvas 0 0 456 306 graph1 0;
+#X array toto 100000 float 0;
+#X coords 0 1 99999 -1 200 140 1;
+#X restore 198 321 graph;
+#X obj 15 410 tabwrite toto;
+#X obj 88 388 + 1;
+#X obj 88 361 f;
+#X msg 117 360 0;
+#X obj 117 336 r init;
+#X obj 88 290 r L;
+#X obj 388 190 s L;
+#X msg 388 163 setD2 0;
+#X obj 88 314 route bang;
+#X obj 15 388 / 10;
+#X msg 451 383 0 \, 100000 10000;
+#X msg 442 359 0 \, 100000 4000;
+#X msg 436 336 0 \, 100000 1000;
+#X text 151 244 you can record the position of a mass in a array. This
+array can be read at audio rate...;
+#X text 443 315 play the sound at various frequency;
+#X text 37 46 <- begin (change metro speed for slow computer);
+#X text 151 273 you can accelerate trhe simulation if the CPU allows
+you \, to accelerate the computing of the array.;
+#X obj 436 296 loadbang;
+#X connect 0 0 41 0;
+#X connect 1 0 18 0;
+#X connect 1 1 17 0;
+#X connect 2 0 23 0;
+#X connect 3 0 6 0;
+#X connect 4 0 23 1;
+#X connect 7 0 6 1;
+#X connect 8 0 6 2;
+#X connect 9 0 6 3;
+#X connect 11 0 6 0;
+#X connect 12 0 14 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 23 0 1 0;
+#X connect 24 0 16 0;
+#X connect 24 0 39 0;
+#X connect 29 0 30 0;
+#X connect 30 0 28 0;
+#X connect 30 0 28 1;
+#X connect 33 0 34 1;
+#X connect 33 0 32 1;
+#X connect 34 0 33 0;
+#X connect 35 0 33 0;
+#X connect 36 0 35 0;
+#X connect 37 0 40 0;
+#X connect 39 0 38 0;
+#X connect 40 0 34 0;
+#X connect 41 0 32 0;
+#X connect 42 0 29 0;
+#X connect 43 0 29 0;
+#X connect 44 0 29 0;
+#X connect 49 0 44 0;
diff --git a/exemples/46_non_linear.pd b/exemples/46_non_linear.pd
new file mode 100755
index 0000000..df5a915
--- /dev/null
+++ b/exemples/46_non_linear.pd
@@ -0,0 +1,191 @@
+#N canvas 42 51 885 658 12;
+#X obj 144 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 6988 1;
+#X obj 162 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7419 1;
+#X obj 180 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7655 1;
+#X obj 198 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7806 1;
+#X obj 216 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7830 1;
+#X obj 234 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7834 1;
+#X obj 19 148 metro 10;
+#X obj 252 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7746 1;
+#X obj 19 175 t b b;
+#X obj 54 200 s \$0-link;
+#X obj 19 226 s \$0-mass;
+#X obj 19 401 lia \$0-link 0 1 1;
+#X obj 167 401 lia \$0-link 0 1 1;
+#X obj 316 401 lia \$0-link 0 1 1;
+#X obj 480 403 lia \$0-link 0 1 1;
+#X obj 630 403 lia \$0-link 0 1 1;
+#X obj 778 403 lia \$0-link 0 1 1;
+#X obj 927 403 lia \$0-link 0 1 1;
+#X obj 1073 402 lia \$0-link 0 1 1;
+#X msg 19 376 64;
+#X obj 19 349 loadbang;
+#X obj 568 213 moses 0;
+#X obj 568 139 lia \$0-link 0 0 1;
+#X obj 568 238 * -1;
+#X obj 17 460 lia \$0-link 0 1 1;
+#X obj 166 460 lia \$0-link 0 1 1;
+#X obj 315 460 lia \$0-link 0 1 1;
+#X obj 472 459 lia \$0-link 0 1 1;
+#X obj 620 459 lia \$0-link 0 1 1;
+#X obj 769 459 lia \$0-link 0 1 1;
+#X msg 928 458 64;
+#X obj 927 436 loadbang;
+#X obj 271 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7562 1;
+#X obj 289 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7336 1;
+#X obj 307 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7115 1;
+#X obj 325 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 6917 1;
+#X obj 343 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 6738 1;
+#X obj 361 508 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 6567 1;
+#X obj 19 120 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 568 163 * 40;
+#X obj 568 188 + 35;
+#X obj 568 292 * -16;
+#X obj 619 317 * 16;
+#X obj 162 377 masse \$0-mass 30 64;
+#X obj 313 378 masse \$0-mass 30 64;
+#X obj 475 379 masse \$0-mass 30 64;
+#X obj 626 379 masse \$0-mass 30 64;
+#X obj 774 378 masse \$0-mass 30 64;
+#X obj 925 378 masse \$0-mass 30 64;
+#X obj 1069 377 masse \$0-mass 30 64;
+#X obj 12 434 masse \$0-mass 30 64;
+#X obj 163 437 masse \$0-mass 30 64;
+#X obj 310 436 masse \$0-mass 30 64;
+#X obj 468 435 masse \$0-mass 30 64;
+#X obj 616 434 masse \$0-mass 30 64;
+#X obj 767 434 masse \$0-mass 30 64;
+#N canvas 0 0 450 300 graph2 0;
+#X array force_speed 127 float 1;
+#A 0 -0.0133335 0.126668 0.413337 0.740006 0.993341 0.886674 0.83334
+0.780006 0.746673 0.700005 0.686672 0.640005 0.600005 0.573338 0.546671
+0.520004 0.48667 0.460004 0.453337 0.42667 0.420003 0.400003 0.38667
+0.380003 0.366669 0.353336 0.340003 0.320002 0.320002 0.306669 0.293336
+0.286669 0.273335 0.260002 0.253335 0.253335 0.240002 0.226668 0.226668
+0.220002 0.213335 0.206668 0.200001 0.193335 0.186668 0.186668 0.186668
+0.180001 0.180001 0.173335 0.160001 0.160001 0.153334 0.140001 0.133334
+0.126668 0.120001 0.120001 0.113334 0.113334 0.106667 0.100001 0.093334
+0.0866672 0.0866672 0.0800005 0.0733338 0.0666671 0.0666671 0.0600004
+0.0600004 0.0533336 0.0533336 0.0533336 0.0533336 0.0466669 0.0466669
+0.0466669 0.0466669 0.0466669 0.0466669 0.0466669 0.0466669 0.0466669
+0.0466669 0.0466669 0.0466669 0.0400002 0.0400002 0.0400002 0.0400002
+0.0400002 0.0400002 0.0400002 0.0400002 0.0333335 0.0333335 0.0266668
+0.0266668 0.0266668 0.0266668 0.0266668 0.0266668 0.0266668 0.0266668
+0.0266668 0.0266668 0.0266668 0.0266668 0.0266668 0.0266668 0.0266668
+0.0266668 0.0266668 0.0266668 0.0266668 0.0200001 0.0200001 0.0200001
+0.0200001 0.0266668 0.0266668 0.0266668 0.0266668 0.0266668 0.0266668
+0.0200001;
+#X coords 0 1 126 -1 200 100 1;
+#X restore 214 142 graph;
+#X obj 568 265 tabread4 force_speed;
+#X obj 619 292 tabread4 force_speed;
+#X text 105 5 This is an exemple of non linear link;
+#X text 105 26 a table is used to store the relation between deformation
+speed and force;
+#X text 611 188 bow speed;
+#X text 610 164 adjust curve size;
+#X text 463 338 use the same curve for positive or negative force;
+#X text 520 120 non linear exitation of a sigle mass;
+#X text 27 273 the speed / force relation is like a bow on a string
+interaction;
+#X text 103 65 this simulation provide a continus exitation \, like
+in a violon string exited with a bow.;
+#X text 49 117 <- 1;
+#X connect 6 0 8 0;
+#X connect 8 0 10 0;
+#X connect 8 1 9 0;
+#X connect 11 1 43 0;
+#X connect 12 0 43 0;
+#X connect 12 1 44 0;
+#X connect 13 0 44 0;
+#X connect 13 1 45 0;
+#X connect 14 0 45 0;
+#X connect 14 1 46 0;
+#X connect 15 0 46 0;
+#X connect 15 1 47 0;
+#X connect 16 0 47 0;
+#X connect 16 1 48 0;
+#X connect 17 0 48 0;
+#X connect 17 1 49 0;
+#X connect 18 0 49 0;
+#X connect 18 1 50 0;
+#X connect 19 0 11 0;
+#X connect 20 0 19 0;
+#X connect 21 0 23 0;
+#X connect 21 1 58 0;
+#X connect 22 0 39 0;
+#X connect 23 0 57 0;
+#X connect 24 0 50 0;
+#X connect 24 1 51 0;
+#X connect 25 0 51 0;
+#X connect 25 1 52 0;
+#X connect 26 0 52 0;
+#X connect 26 1 53 0;
+#X connect 27 0 53 0;
+#X connect 27 1 54 0;
+#X connect 28 0 54 0;
+#X connect 28 1 55 0;
+#X connect 29 0 55 0;
+#X connect 30 0 29 1;
+#X connect 31 0 30 0;
+#X connect 38 0 6 0;
+#X connect 39 0 40 0;
+#X connect 40 0 21 0;
+#X connect 41 0 46 0;
+#X connect 42 0 46 0;
+#X connect 43 0 0 0;
+#X connect 43 0 11 1;
+#X connect 43 0 12 0;
+#X connect 44 0 1 0;
+#X connect 44 0 12 1;
+#X connect 44 0 13 0;
+#X connect 45 0 2 0;
+#X connect 45 0 13 1;
+#X connect 45 0 14 0;
+#X connect 46 0 3 0;
+#X connect 46 0 14 1;
+#X connect 46 0 15 0;
+#X connect 46 0 22 0;
+#X connect 47 0 4 0;
+#X connect 47 0 15 1;
+#X connect 47 0 16 0;
+#X connect 48 0 5 0;
+#X connect 48 0 16 1;
+#X connect 48 0 17 0;
+#X connect 49 0 7 0;
+#X connect 49 0 17 1;
+#X connect 49 0 18 0;
+#X connect 50 0 24 0;
+#X connect 50 0 18 1;
+#X connect 50 0 32 0;
+#X connect 51 0 24 1;
+#X connect 51 0 25 0;
+#X connect 51 0 33 0;
+#X connect 52 0 25 1;
+#X connect 52 0 26 0;
+#X connect 52 0 34 0;
+#X connect 53 0 26 1;
+#X connect 53 0 27 0;
+#X connect 53 0 35 0;
+#X connect 54 0 27 1;
+#X connect 54 0 28 0;
+#X connect 54 0 36 0;
+#X connect 55 0 28 1;
+#X connect 55 0 29 0;
+#X connect 55 0 37 0;
+#X connect 57 0 41 0;
+#X connect 58 0 42 0;
diff --git a/exemples/aglom.pd b/exemples/aglom.pd
new file mode 100755
index 0000000..753b21f
--- /dev/null
+++ b/exemples/aglom.pd
@@ -0,0 +1,43 @@
+#N canvas 598 312 416 470 10;
+#X msg 36 169 setXY \$1 \$2;
+#X obj 36 22 loadbang;
+#X obj 36 144 pack f f;
+#X obj 36 46 t b b;
+#X obj 57 246 gemhead;
+#X obj 57 269 translateXYZ;
+#X obj 46 219 unpack s f f;
+#X obj 143 24 r reset_masse;
+#X msg 36 355 setX \$1 \, setY \$2;
+#X obj 36 70 random 20;
+#X obj 36 116 / 4;
+#X obj 102 69 random 20;
+#X obj 102 115 / 4;
+#X obj 36 93 - 10;
+#X obj 102 91 - 10;
+#X obj 12 332 r link;
+#X obj 36 195 masse2D masse 100;
+#X obj 57 293 sphere 0.1;
+#X obj 38 382 iCircle2D masse 0 0 0.0001 0.3 0 0 0.1 0 0 0 1 1;
+#X obj 51 405 iCircle2D masse 0 0 0.3 0.7 0 0 -0.1 0 0 0 1 1;
+#X connect 0 0 16 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 9 0;
+#X connect 3 1 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 17 0;
+#X connect 6 1 5 1;
+#X connect 6 2 5 2;
+#X connect 7 0 3 0;
+#X connect 8 0 18 0;
+#X connect 8 0 19 0;
+#X connect 9 0 13 0;
+#X connect 10 0 2 0;
+#X connect 11 0 14 0;
+#X connect 12 0 2 1;
+#X connect 13 0 10 0;
+#X connect 14 0 12 0;
+#X connect 15 0 18 0;
+#X connect 15 0 19 0;
+#X connect 16 0 6 0;
+#X connect 16 0 8 0;
diff --git a/exemples/aglom2.pd b/exemples/aglom2.pd
new file mode 100755
index 0000000..775f7a5
--- /dev/null
+++ b/exemples/aglom2.pd
@@ -0,0 +1,43 @@
+#N canvas 151 425 338 461 10;
+#X msg 36 169 setXY \$1 \$2;
+#X obj 36 22 loadbang;
+#X obj 36 144 pack f f;
+#X obj 36 46 t b b;
+#X obj 57 246 gemhead;
+#X obj 57 269 translateXYZ;
+#X obj 46 219 unpack s f f;
+#X obj 143 24 r reset_masse;
+#X msg 36 355 setX \$1 \, setY \$2;
+#X obj 36 70 random 20;
+#X obj 36 116 / 4;
+#X obj 102 69 random 20;
+#X obj 102 115 / 4;
+#X obj 36 93 - 10;
+#X obj 102 91 - 10;
+#X obj 12 332 r link;
+#X obj 36 195 masse2D masse 100;
+#X obj 57 293 sphere 0.1;
+#X obj 36 415 iCircle2D masse 0 0 1e-006 0.6 0 0 -0.1;
+#X obj 50 383 iCircle2D masse 0 0 1e-006 0.3 0 0 1;
+#X connect 0 0 16 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 9 0;
+#X connect 3 1 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 17 0;
+#X connect 6 1 5 1;
+#X connect 6 2 5 2;
+#X connect 7 0 3 0;
+#X connect 8 0 18 0;
+#X connect 8 0 19 0;
+#X connect 9 0 13 0;
+#X connect 10 0 2 0;
+#X connect 11 0 14 0;
+#X connect 12 0 2 1;
+#X connect 13 0 10 0;
+#X connect 14 0 12 0;
+#X connect 15 0 18 0;
+#X connect 15 0 19 0;
+#X connect 16 0 6 0;
+#X connect 16 0 8 0;
diff --git a/exemples/aglom3.pd b/exemples/aglom3.pd
new file mode 100755
index 0000000..61c310e
--- /dev/null
+++ b/exemples/aglom3.pd
@@ -0,0 +1,23 @@
+#N canvas 594 454 446 333 10;
+#X obj 61 77 gemhead;
+#X obj 61 100 translateXYZ;
+#X obj 50 50 unpack s f f;
+#X msg 40 185 setX \$1 \, setY \$2;
+#X obj 17 155 r link;
+#X obj 61 124 sphere 0.1;
+#X obj 54 214 iCircle2D masse 0 0 1e-006 0.3 0 0 1;
+#X obj 40 26 masse2D masse 100 \$1 \$2;
+#X obj 40 246 iCircle2D masse 0 0 1e-006 0.6 0 0 -0.1;
+#X obj 27 275 iCircle2D masse 0 0 1e-006 0.9 0 0 0.01;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 3 0 6 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 6 0;
+#X connect 4 0 8 0;
+#X connect 4 0 9 0;
+#X connect 7 0 2 0;
+#X connect 7 0 3 0;
diff --git a/exemples/aglom4.pd b/exemples/aglom4.pd
new file mode 100755
index 0000000..47c329a
--- /dev/null
+++ b/exemples/aglom4.pd
@@ -0,0 +1,24 @@
+#N canvas 822 26 480 367 10;
+#X obj 82 144 gemhead;
+#X obj 82 167 translateXYZ;
+#X obj 71 117 unpack s f f;
+#X msg 61 252 setX \$1 \, setY \$2;
+#X obj 28 229 r link;
+#X obj 61 93 masse2D masse 100 \$1 \$2;
+#X obj 61 46 loadbang;
+#X msg 61 70 setYmin -7.5;
+#X obj 82 191 sphere 0.3;
+#X obj 83 290 iCircle2D masse 0 0 1e-006 0.5 0 0 5;
+#X obj 60 315 iCircle2D masse 0 0 1e-006 1 0 0 0 0 0 0 0 0 0 0 2;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 3 0 9 0;
+#X connect 3 0 10 0;
+#X connect 4 0 9 0;
+#X connect 4 0 10 0;
+#X connect 5 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
diff --git a/exemples/blob.pd b/exemples/blob.pd
new file mode 100755
index 0000000..7b8e96f
--- /dev/null
+++ b/exemples/blob.pd
@@ -0,0 +1,105 @@
+#N canvas 44 276 674 587 10;
+#X obj 245 408 translateXYZ 0 0 0;
+#X obj 245 436 sphere 0.3;
+#X obj 254 353 unpack s f f f;
+#X obj 14 24 inlet;
+#X obj 14 45 t b a;
+#X obj 149 527 outlet;
+#X obj 276 118 unpack s f f f;
+#X obj 307 142 + 0;
+#X obj 307 166 f;
+#X obj 291 192 f;
+#X obj 340 143 + 0;
+#X obj 340 167 f;
+#X obj 324 193 f;
+#X obj 372 146 + 0;
+#X obj 372 170 f;
+#X obj 361 194 f;
+#X obj 252 226 pack f f f;
+#X msg 253 257 force3D \$1 \$2 \$3;
+#X obj 262 28 r lia;
+#X obj 401 43 r r_lia;
+#X obj 264 53 t b b b;
+#X msg 401 117 0 0;
+#X obj 144 426 r masse3;
+#X obj 145 467 pack 0 f f f;
+#X msg 142 497 position3D \$2 \$3 \$4;
+#X obj 139 326 r gemhead;
+#X obj 139 350 separator;
+#X msg 472 288 setXYZ \$1 \$2 \$3;
+#X obj 472 263 pack f f \$3;
+#X obj 255 330 masse3D masse 1;
+#X obj 476 158 loadbang;
+#X obj 473 241 cos;
+#X obj 501 238 sin;
+#X obj 474 190 t b b b;
+#X obj 472 220 \$2;
+#X obj 496 214 \$2;
+#X obj 534 218 \$3;
+#X obj 511 44 r masse2;
+#X obj 510 65 route reset;
+#X obj 508 92 t b b;
+#X msg 473 125 reset;
+#X obj 154 33 inlet;
+#X obj 14 72 lia3D link 0.5 1 0 0.5;
+#X connect 0 0 1 0;
+#X connect 2 1 0 1;
+#X connect 2 1 23 1;
+#X connect 2 2 0 2;
+#X connect 2 2 23 2;
+#X connect 2 3 0 3;
+#X connect 2 3 23 3;
+#X connect 3 0 4 0;
+#X connect 4 0 42 0;
+#X connect 4 1 42 0;
+#X connect 6 1 7 0;
+#X connect 6 2 10 0;
+#X connect 6 3 13 0;
+#X connect 7 0 8 0;
+#X connect 8 0 7 1;
+#X connect 8 0 9 1;
+#X connect 9 0 16 0;
+#X connect 10 0 11 0;
+#X connect 11 0 10 1;
+#X connect 11 0 12 1;
+#X connect 12 0 16 1;
+#X connect 13 0 14 0;
+#X connect 14 0 13 1;
+#X connect 14 0 15 1;
+#X connect 15 0 16 2;
+#X connect 16 0 17 0;
+#X connect 17 0 29 0;
+#X connect 18 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 21 0;
+#X connect 20 1 9 0;
+#X connect 20 2 15 0;
+#X connect 20 2 12 0;
+#X connect 21 0 13 0;
+#X connect 21 0 10 0;
+#X connect 21 0 7 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 5 0;
+#X connect 25 0 26 0;
+#X connect 26 0 0 0;
+#X connect 27 0 29 0;
+#X connect 28 0 27 0;
+#X connect 29 0 2 0;
+#X connect 29 0 42 1;
+#X connect 30 0 33 0;
+#X connect 31 0 28 0;
+#X connect 32 0 28 1;
+#X connect 33 0 34 0;
+#X connect 33 1 35 0;
+#X connect 33 2 36 0;
+#X connect 34 0 31 0;
+#X connect 35 0 32 0;
+#X connect 36 0 28 2;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 39 0 33 0;
+#X connect 39 1 40 0;
+#X connect 40 0 29 0;
+#X connect 41 0 29 0;
+#X connect 42 1 6 0;
diff --git a/exemples/ch_gemwin.pd b/exemples/ch_gemwin.pd
new file mode 100755
index 0000000..1ebbb42
--- /dev/null
+++ b/exemples/ch_gemwin.pd
@@ -0,0 +1,170 @@
+#N canvas 0 0 796 617 10;
+#X obj 285 171 f;
+#X obj 206 152 spigot;
+#X obj 267 143 sel 0 1;
+#X obj 237 124 t f f;
+#X obj 206 200 -;
+#X obj 206 249 +;
+#X obj 267 213 f;
+#X obj 159 168 f;
+#X obj 80 149 spigot;
+#X obj 141 140 sel 0 1;
+#X obj 111 121 t f f;
+#X obj 80 200 -;
+#X obj 80 249 +;
+#X obj 141 210 f;
+#X obj 406 162 f;
+#X obj 327 146 spigot;
+#X obj 388 137 sel 0 1;
+#X obj 358 118 t f f;
+#X obj 327 197 -;
+#X obj 388 207 f;
+#X obj 80 465 * 4;
+#X obj 135 467 * 4;
+#X obj 156 308 t b f;
+#X obj 94 372 cos;
+#X obj 106 430 * 1;
+#X obj 80 430 * 1;
+#X obj 132 373 sin;
+#X obj 107 466 * 4;
+#X obj 94 394 t b f;
+#X obj 94 348 / 200;
+#X obj 80 491 pack f f f;
+#X obj 458 49 gemmouse;
+#X obj 515 135 t b f;
+#X obj 515 164 |;
+#X obj 487 240 gemhead;
+#X obj 491 193 loadbang;
+#X msg 487 215 0;
+#X obj 487 315 curve 2;
+#X obj 487 266 color 1 0 0;
+#X obj 571 240 gemhead;
+#X obj 571 315 curve 2;
+#X obj 651 242 gemhead;
+#X obj 651 317 curve 2;
+#X msg 524 289 3 0 0;
+#X msg 608 289 0 3 0;
+#X msg 688 291 0 0 3;
+#X msg 80 516 view \$1 \$2 \$3 0 0 0 0 1 0;
+#X obj 571 266 color 0 1 0;
+#X obj 651 268 color 0 0 1;
+#X obj 80 308 sin;
+#X obj 106 309 cos;
+#X obj 327 246 + 200;
+#X obj 157 282 / 50;
+#X obj 80 283 / -200;
+#X obj 18 12 inlet;
+#X obj 20 579 outlet;
+#X obj 21 551 gemwin \$1;
+#X obj 60 14 inlet;
+#X obj 215 19 inlet;
+#X obj 132 15 inlet;
+#X obj 213 44 * 5;
+#X obj 59 82 / 127;
+#X obj 60 61 * 400;
+#X obj 131 82 / 127;
+#X obj 131 58 * 200;
+#X obj 131 36 * -3.14;
+#X obj 60 37 * 3.14;
+#X connect 0 0 4 1;
+#X connect 1 0 4 0;
+#X connect 2 0 6 0;
+#X connect 2 1 0 0;
+#X connect 3 0 1 1;
+#X connect 3 1 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 5 0 29 0;
+#X connect 6 0 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 11 0;
+#X connect 9 0 13 0;
+#X connect 9 1 7 0;
+#X connect 10 0 8 1;
+#X connect 10 1 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 1;
+#X connect 12 0 53 0;
+#X connect 13 0 12 1;
+#X connect 14 0 18 1;
+#X connect 15 0 18 0;
+#X connect 16 0 19 0;
+#X connect 16 1 14 0;
+#X connect 17 0 15 1;
+#X connect 17 1 16 0;
+#X connect 18 0 51 0;
+#X connect 19 0 51 1;
+#X connect 20 0 30 0;
+#X connect 21 0 30 2;
+#X connect 22 0 21 0;
+#X connect 22 0 20 0;
+#X connect 22 0 27 0;
+#X connect 22 1 21 1;
+#X connect 22 1 20 1;
+#X connect 22 1 27 1;
+#X connect 23 0 28 0;
+#X connect 24 0 21 0;
+#X connect 25 0 20 0;
+#X connect 26 0 27 0;
+#X connect 27 0 30 1;
+#X connect 28 0 24 0;
+#X connect 28 0 25 0;
+#X connect 28 1 24 1;
+#X connect 28 1 25 1;
+#X connect 29 0 23 0;
+#X connect 29 0 26 0;
+#X connect 30 0 46 0;
+#X connect 31 0 8 0;
+#X connect 31 0 7 1;
+#X connect 31 1 1 0;
+#X connect 31 1 0 1;
+#X connect 31 1 14 1;
+#X connect 31 1 15 0;
+#X connect 31 2 3 0;
+#X connect 31 2 10 0;
+#X connect 31 2 33 0;
+#X connect 31 3 17 0;
+#X connect 31 3 32 0;
+#X connect 32 0 33 0;
+#X connect 32 1 33 1;
+#X connect 33 0 34 0;
+#X connect 33 0 39 0;
+#X connect 33 0 41 0;
+#X connect 34 0 38 0;
+#X connect 35 0 36 0;
+#X connect 35 0 43 0;
+#X connect 35 0 44 0;
+#X connect 35 0 45 0;
+#X connect 35 0 53 0;
+#X connect 35 0 51 0;
+#X connect 36 0 34 0;
+#X connect 36 0 39 0;
+#X connect 36 0 41 0;
+#X connect 38 0 37 0;
+#X connect 39 0 47 0;
+#X connect 41 0 48 0;
+#X connect 43 0 37 2;
+#X connect 44 0 40 2;
+#X connect 45 0 42 2;
+#X connect 46 0 56 0;
+#X connect 47 0 40 0;
+#X connect 48 0 42 0;
+#X connect 49 0 25 0;
+#X connect 50 0 24 0;
+#X connect 51 0 19 1;
+#X connect 51 0 52 0;
+#X connect 52 0 22 0;
+#X connect 53 0 49 0;
+#X connect 53 0 50 0;
+#X connect 54 0 56 0;
+#X connect 56 0 55 0;
+#X connect 57 0 66 0;
+#X connect 58 0 60 0;
+#X connect 59 0 65 0;
+#X connect 60 0 52 0;
+#X connect 61 0 53 0;
+#X connect 62 0 61 0;
+#X connect 63 0 29 0;
+#X connect 64 0 63 0;
+#X connect 65 0 64 0;
+#X connect 66 0 62 0;
diff --git a/exemples/ch_uzi.pd b/exemples/ch_uzi.pd
new file mode 100755
index 0000000..43b450d
--- /dev/null
+++ b/exemples/ch_uzi.pd
@@ -0,0 +1,22 @@
+#N canvas 0 0 450 300 10;
+#X obj 82 155 moses \$1;
+#X obj 81 102 0;
+#X obj 82 126 + 1;
+#X obj 81 182 t b;
+#X msg 78 78 0;
+#X obj 33 236 outlet;
+#X obj 91 237 outlet;
+#X obj 153 239 outlet;
+#X msg 153 196 bang;
+#X obj 62 24 inlet;
+#X connect 0 0 3 0;
+#X connect 0 0 6 0;
+#X connect 0 1 8 0;
+#X connect 1 0 2 0;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 8 0 7 0;
+#X connect 9 0 4 0;
diff --git a/exemples/constructor.pd b/exemples/constructor.pd
new file mode 100755
index 0000000..0e1aa28
--- /dev/null
+++ b/exemples/constructor.pd
@@ -0,0 +1,773 @@
+#N canvas 182 111 694 704 10;
+#X obj 139 340 symbol \$10;
+#X obj 18 177 inlet;
+#X obj 18 202 sel 0 1;
+#X obj 36 227 t b b;
+#X msg 18 413 menuclose;
+#X obj 18 595 s pd-array;
+#X obj 36 361 pack f f f f f f s;
+#X msg 36 388 obj \$1 \$2 \$7 \$3 \$4 \$5 \$6;
+#N canvas 672 57 395 809 generator 0;
+#X obj 24 21 inlet;
+#X obj 24 747 outlet;
+#X obj 24 688 pack f f f f f f;
+#X obj 65 45 \$1;
+#X text 40 708 posX \, posY \, number \, valueX \, valueY \, valueZ
+;
+#N canvas 587 356 209 245 uzi 0;
+#X obj 41 91 0;
+#X obj 42 115 + 1;
+#X obj 41 202 outlet;
+#X obj 41 16 inlet;
+#X obj 42 140 moses 1;
+#X obj 41 42 t b f;
+#X msg 41 68 -1;
+#X obj 41 167 delay 0;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 0 0 1;
+#X connect 3 0 5 0;
+#X connect 4 0 2 0;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 5 1 4 1;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X restore 24 145 pd uzi;
+#X obj 65 21 loadbang;
+#X obj 65 91 * \$3;
+#X obj 65 67 * \$2;
+#X obj 24 121 f;
+#X obj 24 193 % \$1;
+#X obj 24 169 t f f f f;
+#X text 54 193 X;
+#X obj 133 24 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 67 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 40 275 % \$2;
+#X text 76 277 Y;
+#X obj 56 306 / \$2;
+#X obj 56 351 % \$3;
+#X obj 40 252 / \$1;
+#X obj 56 328 / \$1;
+#X text 91 351 Z;
+#X obj 24 420 +;
+#X obj 40 570 +;
+#X obj 40 400 * 20;
+#X obj 56 542 * 50;
+#X obj 24 218 t f f;
+#N canvas 724 448 176 188 valeurX 0;
+#X obj 15 11 inlet;
+#X obj 15 146 outlet;
+#X obj 25 34 loadbang;
+#N canvas 0 0 315 417 range 0;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 125 218 /;
+#X obj 154 264 *;
+#X obj 186 306 +;
+#X obj 154 77 t b f f;
+#X obj 186 337 outlet;
+#X obj 63 76 t f f;
+#X obj 15 107 f;
+#X connect 0 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 13 1 7 1;
+#X connect 13 2 12 1;
+#X connect 15 0 16 1;
+#X connect 15 1 5 0;
+#X connect 16 0 8 0;
+#X restore 15 121 pd range;
+#X msg 25 67 0;
+#X obj 53 67 \$1;
+#X obj 53 91 - 1;
+#X obj 82 67 \$4;
+#X obj 113 67 \$5;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 6 0 3 2;
+#X connect 7 0 3 3;
+#X connect 8 0 3 4;
+#X restore 78 607 pd valeurX;
+#X obj 75 454 \$2;
+#X obj 75 429 loadbang;
+#X obj 75 476 - 1;
+#X obj 75 498 * 20;
+#X obj 75 521 + 100;
+#X obj 24 378 * 200;
+#N canvas 724 448 180 192 valeurY 0;
+#X obj 15 11 inlet;
+#X obj 15 146 outlet;
+#X obj 25 34 loadbang;
+#N canvas 0 0 315 417 range 0;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 109 193 /;
+#X obj 138 239 *;
+#X obj 170 281 +;
+#X obj 154 77 t b f f;
+#X obj 170 312 outlet;
+#X obj 63 76 t f f;
+#X obj 13 112 f;
+#X connect 0 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 13 1 7 1;
+#X connect 13 2 12 1;
+#X connect 15 0 16 1;
+#X connect 15 1 5 0;
+#X connect 16 0 8 0;
+#X restore 15 121 pd range;
+#X msg 25 67 0;
+#X obj 53 91 - 1;
+#X obj 53 67 \$2;
+#X obj 82 67 \$6;
+#X obj 113 67 \$7;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 5 0;
+#X connect 7 0 3 3;
+#X connect 8 0 3 4;
+#X restore 96 627 pd valeurY;
+#N canvas 724 448 178 190 valeurZ 0;
+#X obj 15 11 inlet;
+#X obj 15 146 outlet;
+#X obj 25 34 loadbang;
+#N canvas 352 24 315 417 range 0;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 109 202 /;
+#X obj 138 248 *;
+#X obj 170 290 +;
+#X obj 154 77 t b f f;
+#X obj 170 321 outlet;
+#X obj 63 76 t f f;
+#X obj 15 110 f;
+#X connect 0 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 13 1 7 1;
+#X connect 13 2 12 1;
+#X connect 15 0 16 1;
+#X connect 15 1 5 0;
+#X connect 16 0 8 0;
+#X restore 15 121 pd range;
+#X msg 25 67 0;
+#X obj 53 91 - 1;
+#X obj 53 67 \$3;
+#X obj 82 67 \$8;
+#X obj 114 67 \$9;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 5 0;
+#X connect 7 0 3 3;
+#X connect 8 0 3 4;
+#X restore 115 648 pd valeurZ;
+#X connect 0 0 9 0;
+#X connect 2 0 1 0;
+#X connect 3 0 8 0;
+#X connect 5 0 11 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 1;
+#X connect 8 0 7 0;
+#X connect 9 0 5 0;
+#X connect 10 0 26 0;
+#X connect 11 0 10 0;
+#X connect 11 1 19 0;
+#X connect 11 2 17 0;
+#X connect 11 3 2 2;
+#X connect 13 0 3 0;
+#X connect 14 0 9 0;
+#X connect 15 0 24 0;
+#X connect 15 0 34 0;
+#X connect 17 0 20 0;
+#X connect 18 0 25 0;
+#X connect 18 0 35 0;
+#X connect 19 0 15 0;
+#X connect 20 0 18 0;
+#X connect 22 0 2 0;
+#X connect 23 0 2 1;
+#X connect 24 0 22 1;
+#X connect 24 0 23 0;
+#X connect 25 0 23 1;
+#X connect 26 0 33 0;
+#X connect 26 1 27 0;
+#X connect 27 0 2 3;
+#X connect 28 0 30 0;
+#X connect 29 0 28 0;
+#X connect 30 0 31 0;
+#X connect 31 0 32 0;
+#X connect 32 0 25 1;
+#X connect 33 0 22 0;
+#X connect 34 0 2 4;
+#X connect 35 0 2 5;
+#X restore 36 334 pd generator;
+#X obj 139 315 loadbang;
+#X obj 248 233 inlet;
+#N canvas 417 47 606 869 connect 0;
+#X obj 18 4 inlet;
+#X obj 154 785 outlet;
+#X text 27 35 offsetX \, offestY \, offsetZ \, outlet \, inlet;
+#X obj 127 201 - \$1;
+#X obj 127 223 * -1;
+#X obj 18 175 moses 0;
+#X msg 55 199 0;
+#X obj 18 199 abs;
+#X obj 89 222 \$1;
+#X msg 89 199 bang;
+#X obj 88 175 moses 0;
+#X obj 280 264 * -1;
+#X obj 171 213 moses 0;
+#X msg 208 237 0;
+#X obj 171 237 abs;
+#X msg 242 237 bang;
+#X obj 241 213 moses 0;
+#X obj 428 326 * -1;
+#X obj 319 275 moses 0;
+#X msg 356 299 0;
+#X obj 319 299 abs;
+#X msg 390 299 bang;
+#X obj 389 275 moses 0;
+#X obj 154 762 pack f f f f;
+#X msg 89 12 1 2 1 1 1;
+#X obj 505 320 - 1;
+#X obj 556 332 - 1;
+#X obj 280 239 - \$2;
+#X obj 242 258 \$2;
+#X obj 428 301 - \$3;
+#X obj 390 320 \$3;
+#X text 54 232 Xmin;
+#X text 201 269 Ymin;
+#X text 120 249 Xmax;
+#X text 279 293 Ymax;
+#X text 349 332 Zmin;
+#X text 414 354 Zmax;
+#X text 502 300 outlet;
+#X text 565 305 inlet;
+#N canvas 220 47 314 643 generator 0;
+#X obj 37 38 inlet;
+#X obj 38 536 outlet;
+#X obj 84 138 \$1;
+#N canvas 587 356 211 247 uzi 0;
+#X obj 41 91 0;
+#X obj 42 115 + 1;
+#X obj 41 202 outlet;
+#X obj 41 16 inlet;
+#X obj 42 140 moses 1;
+#X obj 41 42 t b f;
+#X msg 41 68 -1;
+#X obj 41 167 delay 0;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 0 0 1;
+#X connect 3 0 5 0;
+#X connect 4 0 2 0;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 5 1 4 1;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X restore 38 230 pd uzi;
+#X obj 84 184 * \$3;
+#X obj 84 160 * \$2;
+#X obj 38 206 f;
+#X obj 38 278 % \$1;
+#X obj 38 254 t f f f f;
+#X text 68 278 X;
+#X obj 54 328 % \$2;
+#X text 90 330 Y;
+#X obj 70 356 / \$2;
+#X obj 70 401 % \$3;
+#X obj 54 305 / \$1;
+#X obj 70 378 / \$1;
+#X text 105 401 Z;
+#N canvas 524 397 238 191 valeurZ 0;
+#X obj 31 29 inlet;
+#X obj 31 164 outlet;
+#X obj 41 52 loadbang;
+#N canvas 0 0 315 417 range 0;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 125 218 /;
+#X obj 154 264 *;
+#X obj 186 306 +;
+#X obj 154 77 t b f f;
+#X obj 186 337 outlet;
+#X obj 63 76 t f f;
+#X obj 16 113 f;
+#X connect 0 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 13 1 7 1;
+#X connect 13 2 12 1;
+#X connect 15 0 16 1;
+#X connect 15 1 5 0;
+#X connect 16 0 8 0;
+#X restore 31 139 pd range;
+#X msg 41 85 0;
+#X obj 69 109 - 1;
+#X obj 103 31 inlet;
+#X obj 142 31 inlet;
+#X obj 182 31 inlet;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 5 0;
+#X connect 7 0 3 3;
+#X connect 8 0 3 4;
+#X restore 70 425 pd valeurZ;
+#X obj 38 509 pack f f f;
+#X text 90 541 valueX \, valueY \, valueZ;
+#X obj 37 66 t b l;
+#X obj 87 92 unpack f f f f f f f f f;
+#N canvas 366 669 236 189 valeurY 0;
+#X obj 31 29 inlet;
+#X obj 31 164 outlet;
+#X obj 41 52 loadbang;
+#N canvas 326 5 317 419 range 0;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 125 218 /;
+#X obj 154 264 *;
+#X obj 186 306 +;
+#X obj 154 77 t b f f;
+#X obj 186 337 outlet;
+#X obj 63 76 t f f;
+#X obj 15 119 f;
+#X connect 0 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 13 1 7 1;
+#X connect 13 2 12 1;
+#X connect 15 0 16 1;
+#X connect 15 1 5 0;
+#X connect 16 0 8 0;
+#X restore 31 139 pd range;
+#X msg 41 85 0;
+#X obj 69 109 - 1;
+#X obj 103 31 inlet;
+#X obj 142 31 inlet;
+#X obj 182 31 inlet;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 5 0;
+#X connect 7 0 3 3;
+#X connect 8 0 3 4;
+#X restore 56 447 pd valeurY;
+#N canvas 671 661 240 193 valeurX 0;
+#X obj 31 29 inlet;
+#X obj 31 164 outlet;
+#X obj 41 52 loadbang;
+#N canvas 0 0 321 423 range 0;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 125 218 /;
+#X obj 154 264 *;
+#X obj 186 306 +;
+#X obj 157 76 t b f f;
+#X obj 186 337 outlet;
+#X obj 63 76 t f f;
+#X obj 16 143 f;
+#X connect 0 0 9 0;
+#X connect 1 0 15 0;
+#X connect 2 0 6 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 1;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 11 1;
+#X connect 8 0 10 0;
+#X connect 9 0 16 0;
+#X connect 9 1 8 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 13 1 7 1;
+#X connect 13 2 12 1;
+#X connect 15 0 16 1;
+#X connect 15 1 5 0;
+#X connect 16 0 8 0;
+#X restore 31 139 pd range;
+#X msg 41 85 0;
+#X obj 69 109 - 1;
+#X obj 103 31 inlet;
+#X obj 142 31 inlet;
+#X obj 182 31 inlet;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 2;
+#X connect 6 0 5 0;
+#X connect 7 0 3 3;
+#X connect 8 0 3 4;
+#X restore 38 475 pd valeurX;
+#X connect 0 0 20 0;
+#X connect 2 0 5 0;
+#X connect 3 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
+#X connect 7 0 23 0;
+#X connect 8 0 7 0;
+#X connect 8 1 14 0;
+#X connect 8 2 12 0;
+#X connect 10 0 22 0;
+#X connect 12 0 15 0;
+#X connect 13 0 17 0;
+#X connect 14 0 10 0;
+#X connect 15 0 13 0;
+#X connect 17 0 18 2;
+#X connect 18 0 1 0;
+#X connect 20 0 6 0;
+#X connect 20 1 21 0;
+#X connect 21 0 2 0;
+#X connect 21 0 7 1;
+#X connect 21 0 14 1;
+#X connect 21 0 12 1;
+#X connect 21 0 23 1;
+#X connect 21 1 5 1;
+#X connect 21 1 10 1;
+#X connect 21 1 15 1;
+#X connect 21 1 22 1;
+#X connect 21 2 4 1;
+#X connect 21 2 13 1;
+#X connect 21 2 17 1;
+#X connect 21 3 23 2;
+#X connect 21 4 23 3;
+#X connect 21 5 22 2;
+#X connect 21 6 22 3;
+#X connect 21 7 17 2;
+#X connect 21 8 17 3;
+#X connect 22 0 18 1;
+#X connect 23 0 18 0;
+#X restore 154 489 pd generator;
+#X obj 18 108 t f f;
+#X obj 171 184 t f f;
+#X obj 319 245 t f f;
+#X obj 18 56 unpack f f f f f;
+#X obj 18 306 -;
+#X obj 154 464 pack f f f f f f f f f;
+#X obj 89 249 f;
+#X obj 171 267 f;
+#X obj 242 291 f;
+#X obj 319 331 f;
+#X obj 390 354 f;
+#X obj 171 340 -;
+#X obj 18 230 t f f;
+#X obj 319 377 -;
+#X obj 154 547 unpack f f f;
+#X obj 260 552 unpack f f f;
+#X obj 293 598 * \$1;
+#X obj 327 598 * \$2;
+#X obj 154 513 t l l;
+#X obj 260 574 +;
+#X obj 293 575 +;
+#X obj 327 575 +;
+#X obj 18 329 * -1;
+#X obj 171 365 * -1;
+#X obj 319 399 * -1;
+#X obj 171 386 + 1;
+#X obj 319 422 + 1;
+#X obj 90 272 - 1;
+#X obj 242 314 - 1;
+#X obj 392 374 - 1;
+#X obj 20 351 + 1;
+#X obj 187 598 * \$1;
+#X obj 221 598 * \$2;
+#X obj 221 619 * \$1;
+#X obj 187 644 +;
+#X obj 327 620 * \$1;
+#X obj 293 647 +;
+#X obj 154 671 +;
+#X obj 260 670 +;
+#X connect 0 0 43 0;
+#X connect 3 0 4 0;
+#X connect 4 0 46 0;
+#X connect 5 0 7 0;
+#X connect 5 1 6 0;
+#X connect 6 0 52 0;
+#X connect 7 0 52 0;
+#X connect 8 0 46 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 10 1 3 0;
+#X connect 11 0 48 0;
+#X connect 12 0 14 0;
+#X connect 12 1 13 0;
+#X connect 13 0 47 0;
+#X connect 14 0 47 0;
+#X connect 15 0 28 0;
+#X connect 16 0 15 0;
+#X connect 16 1 27 0;
+#X connect 17 0 50 0;
+#X connect 18 0 20 0;
+#X connect 18 1 19 0;
+#X connect 19 0 49 0;
+#X connect 20 0 49 0;
+#X connect 21 0 30 0;
+#X connect 22 0 21 0;
+#X connect 22 1 29 0;
+#X connect 23 0 1 0;
+#X connect 24 0 43 0;
+#X connect 25 0 23 1;
+#X connect 26 0 23 3;
+#X connect 27 0 11 0;
+#X connect 28 0 48 0;
+#X connect 29 0 17 0;
+#X connect 30 0 50 0;
+#X connect 39 0 58 0;
+#X connect 40 0 5 0;
+#X connect 40 1 10 0;
+#X connect 40 1 59 1;
+#X connect 41 0 12 0;
+#X connect 41 1 16 0;
+#X connect 42 0 18 0;
+#X connect 42 1 22 0;
+#X connect 43 0 40 0;
+#X connect 43 1 41 0;
+#X connect 43 1 60 1;
+#X connect 43 2 42 0;
+#X connect 43 2 61 1;
+#X connect 43 3 25 0;
+#X connect 43 4 26 0;
+#X connect 44 0 62 0;
+#X connect 45 0 39 0;
+#X connect 46 0 67 0;
+#X connect 47 0 45 5;
+#X connect 47 0 51 0;
+#X connect 48 0 68 0;
+#X connect 49 0 45 7;
+#X connect 49 0 53 0;
+#X connect 50 0 69 0;
+#X connect 51 0 63 0;
+#X connect 52 0 44 0;
+#X connect 52 1 45 3;
+#X connect 53 0 64 0;
+#X connect 54 0 77 0;
+#X connect 54 1 71 0;
+#X connect 54 2 72 0;
+#X connect 55 0 59 0;
+#X connect 55 1 60 0;
+#X connect 55 2 61 0;
+#X connect 56 0 76 0;
+#X connect 57 0 75 0;
+#X connect 58 0 54 0;
+#X connect 58 1 55 0;
+#X connect 59 0 78 0;
+#X connect 60 0 56 0;
+#X connect 61 0 57 0;
+#X connect 62 0 70 0;
+#X connect 63 0 65 0;
+#X connect 64 0 66 0;
+#X connect 65 0 45 1;
+#X connect 66 0 45 2;
+#X connect 67 0 44 1;
+#X connect 67 0 45 4;
+#X connect 68 0 45 6;
+#X connect 68 0 51 1;
+#X connect 69 0 45 8;
+#X connect 69 0 53 1;
+#X connect 70 0 45 0;
+#X connect 71 0 74 0;
+#X connect 72 0 73 0;
+#X connect 73 0 74 1;
+#X connect 74 0 77 1;
+#X connect 75 0 76 1;
+#X connect 76 0 78 1;
+#X connect 77 0 23 0;
+#X connect 78 0 23 2;
+#X restore 248 515 pd connect;
+#X msg 248 544 connect \$1 \$2 \$3 \$4;
+#X text 12 35 args : [x] [y] [z] [Xmin] [Xmax] [Ymin] [Ymax] [Zmin]
+[Zmax] [abstraction];
+#X text 14 67 inlet 1 : 1 to create the array of abstraction;
+#X text 13 88 inlet 2 : create connection beetween abstraction : send
+a liste ([offsetX] [offsetY] [offsetZ] [outlet num] [inlet num]);
+#X msg 61 254 \; pd-array vis 1 \, selectall \; pd-array cut \; pd-array
+vis 0 \;;
+#X text 242 137 Ben Bogart & ch;
+#X text 14 5 create a X Y Z matrix of abstraction. create connection
+beetween them.;
+#X text 289 233 <- connect object from the array;
+#X text 291 254 comment;
+#X obj 267 487 pack f f f f f;
+#X floatatom 267 381 5 0 0 0 - - -;
+#X floatatom 286 403 5 0 0 0 - - -;
+#X floatatom 306 424 5 0 0 0 - - -;
+#X floatatom 326 445 5 0 0 0 - - -;
+#X floatatom 346 466 5 0 0 0 - - -;
+#X text 266 353 create a connection beetween the objects of the array
+;
+#X text 309 378 X offset from the 1st object to the secont object to
+link;
+#X text 326 401 Y offset from the 1st object to the secont object to
+link;
+#X text 345 422 Z offset from the 1st object to the secont object to
+link;
+#X text 368 443 oultet of the 1st object number;
+#X text 386 465 inlet of the 2nd object number;
+#X text 73 176 <- 0/1 : fill the array. You sould have create a "pd
+array" somwhere;
+#X text 24 620 the argument feed to the created abstraction are : abstraction
+number (unique) \, X position \, Y position \, Z position;
+#X connect 0 0 6 6;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 2 1 3 0;
+#X connect 3 0 8 0;
+#X connect 3 1 16 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 9 0 0 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 5 0;
+#X connect 21 0 11 0;
+#X connect 22 0 21 0;
+#X connect 23 0 21 1;
+#X connect 24 0 21 2;
+#X connect 25 0 21 3;
+#X connect 26 0 21 4;
diff --git a/exemples/explose1.pd b/exemples/explose1.pd
new file mode 100755
index 0000000..131d5df
--- /dev/null
+++ b/exemples/explose1.pd
@@ -0,0 +1,12 @@
+#N canvas 571 315 268 263 10;
+#X obj 30 113 gemhead;
+#X obj 30 139 translateXYZ;
+#X obj 22 60 unpack s f f f;
+#X obj 22 37 masse3D masse 1 0 3;
+#X obj 31 163 sphere 0.1;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 2 3 1 3;
+#X connect 3 0 2 0;
diff --git a/exemples/explose2.pd b/exemples/explose2.pd
new file mode 100755
index 0000000..d89be81
--- /dev/null
+++ b/exemples/explose2.pd
@@ -0,0 +1,12 @@
+#N canvas 571 315 270 265 10;
+#X obj 30 113 gemhead;
+#X obj 30 139 translateXYZ;
+#X obj 22 60 unpack s f f f;
+#X obj 30 163 sphere 0.05;
+#X obj 22 37 masse3D masse2 1 0 3;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 2 3 1 3;
+#X connect 4 0 2 0;
diff --git a/exemples/fluide_masse.pd b/exemples/fluide_masse.pd
new file mode 100755
index 0000000..f8bfa11
--- /dev/null
+++ b/exemples/fluide_masse.pd
@@ -0,0 +1,34 @@
+#N canvas 598 312 244 340 10;
+#X msg 39 180 setXY \$1 \$2;
+#X obj 38 26 loadbang;
+#X obj 38 155 pack f f;
+#X obj 36 46 t b b;
+#X obj 57 256 gemhead;
+#X obj 59 318 sphere 0.3;
+#X obj 57 289 translateXYZ;
+#X obj 37 229 unpack s f f;
+#X obj 40 206 masse2D masse 10;
+#X obj 143 24 r reset_masse;
+#X obj 36 70 random 60;
+#X obj 94 70 random 60;
+#X obj 35 90 - 30;
+#X obj 94 96 - 30;
+#X obj 35 119 / 10;
+#X obj 86 123 / 10;
+#X connect 0 0 8 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 10 0;
+#X connect 3 1 11 0;
+#X connect 4 0 6 0;
+#X connect 6 0 5 0;
+#X connect 7 1 6 1;
+#X connect 7 2 6 2;
+#X connect 8 0 7 0;
+#X connect 9 0 3 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 15 0;
+#X connect 14 0 2 0;
+#X connect 15 0 2 1;
diff --git a/exemples/fluide_masse2.pd b/exemples/fluide_masse2.pd
new file mode 100755
index 0000000..dee927b
--- /dev/null
+++ b/exemples/fluide_masse2.pd
@@ -0,0 +1,138 @@
+#N canvas 120 313 686 433 10;
+#X msg 38 179 setXY \$1 \$2;
+#X obj 396 15 loadbang;
+#X obj 38 155 pack f f;
+#X obj 38 65 t b b;
+#X obj 49 262 gemhead;
+#X obj 49 288 translateXYZ;
+#X obj 38 228 unpack s f f;
+#X obj 38 205 masse2D masse 10;
+#X obj 452 16 r reset_masse;
+#X msg 81 131 0;
+#X obj 49 313 sphere 0.03;
+#X obj 38 88 \$1;
+#X obj 38 110 / 10;
+#X obj 38 132 - 3;
+#X msg 151 180 setXY \$1 \$2;
+#X obj 151 156 pack f f;
+#X obj 151 66 t b b;
+#X obj 162 263 gemhead;
+#X obj 162 289 translateXYZ;
+#X obj 151 229 unpack s f f;
+#X obj 151 206 masse2D masse 10;
+#X obj 162 314 sphere 0.03;
+#X obj 151 89 \$1;
+#X obj 151 111 / 10;
+#X obj 151 133 - 3;
+#X msg 262 180 setXY \$1 \$2;
+#X obj 262 156 pack f f;
+#X obj 262 66 t b b;
+#X obj 273 263 gemhead;
+#X obj 273 289 translateXYZ;
+#X obj 262 229 unpack s f f;
+#X obj 262 206 masse2D masse 10;
+#X obj 273 314 sphere 0.03;
+#X obj 262 89 \$1;
+#X obj 262 111 / 10;
+#X obj 262 133 - 3;
+#X msg 194 132 -1;
+#X msg 305 132 1;
+#X msg 397 184 setXY \$1 \$2;
+#X obj 397 160 pack f f;
+#X obj 397 70 t b b;
+#X obj 408 267 gemhead;
+#X obj 408 293 translateXYZ;
+#X obj 397 233 unpack s f f;
+#X obj 397 210 masse2D masse 10;
+#X obj 408 318 sphere 0.03;
+#X obj 397 93 \$1;
+#X obj 397 115 / 10;
+#X obj 397 137 - 3;
+#X msg 508 184 setXY \$1 \$2;
+#X obj 508 160 pack f f;
+#X obj 508 70 t b b;
+#X obj 519 267 gemhead;
+#X obj 519 293 translateXYZ;
+#X obj 508 233 unpack s f f;
+#X obj 508 210 masse2D masse 10;
+#X obj 519 318 sphere 0.03;
+#X obj 508 93 \$1;
+#X obj 508 115 / 10;
+#X obj 508 137 - 3;
+#X msg 440 136 -0.5;
+#X msg 552 136 0.5;
+#X connect 0 0 7 0;
+#X connect 1 0 3 0;
+#X connect 1 0 16 0;
+#X connect 1 0 27 0;
+#X connect 1 0 40 0;
+#X connect 1 0 51 0;
+#X connect 2 0 0 0;
+#X connect 3 0 11 0;
+#X connect 3 1 9 0;
+#X connect 4 0 5 0;
+#X connect 5 0 10 0;
+#X connect 6 1 5 1;
+#X connect 6 2 5 2;
+#X connect 7 0 6 0;
+#X connect 8 0 3 0;
+#X connect 8 0 16 0;
+#X connect 8 0 27 0;
+#X connect 8 0 40 0;
+#X connect 8 0 51 0;
+#X connect 9 0 2 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 2 0;
+#X connect 14 0 20 0;
+#X connect 15 0 14 0;
+#X connect 16 0 22 0;
+#X connect 16 1 36 0;
+#X connect 17 0 18 0;
+#X connect 18 0 21 0;
+#X connect 19 1 18 1;
+#X connect 19 2 18 2;
+#X connect 20 0 19 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 15 0;
+#X connect 25 0 31 0;
+#X connect 26 0 25 0;
+#X connect 27 0 33 0;
+#X connect 27 1 37 0;
+#X connect 28 0 29 0;
+#X connect 29 0 32 0;
+#X connect 30 1 29 1;
+#X connect 30 2 29 2;
+#X connect 31 0 30 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 26 0;
+#X connect 36 0 15 1;
+#X connect 37 0 26 1;
+#X connect 38 0 44 0;
+#X connect 39 0 38 0;
+#X connect 40 0 46 0;
+#X connect 40 1 60 0;
+#X connect 41 0 42 0;
+#X connect 42 0 45 0;
+#X connect 43 1 42 1;
+#X connect 43 2 42 2;
+#X connect 44 0 43 0;
+#X connect 46 0 47 0;
+#X connect 47 0 48 0;
+#X connect 48 0 39 0;
+#X connect 49 0 55 0;
+#X connect 50 0 49 0;
+#X connect 51 0 57 0;
+#X connect 51 1 61 0;
+#X connect 52 0 53 0;
+#X connect 53 0 56 0;
+#X connect 54 1 53 1;
+#X connect 54 2 53 2;
+#X connect 55 0 54 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 50 0;
+#X connect 60 0 39 1;
+#X connect 61 0 50 1;
diff --git a/exemples/fluide_masse3.pd b/exemples/fluide_masse3.pd
new file mode 100755
index 0000000..f339fab
--- /dev/null
+++ b/exemples/fluide_masse3.pd
@@ -0,0 +1,17 @@
+#N canvas 598 312 379 296 10;
+#X obj 40 94 gemhead;
+#X obj 40 120 translateXYZ;
+#X obj 20 60 unpack s f f;
+#X obj 40 146 sphere 0.03;
+#X obj 127 88 sel 1;
+#X msg 127 112 \; masse reset \;;
+#X obj 127 65 tSquare2D 6 10 -4 4;
+#X obj 20 37 masse2D masse 100 \$1 \$2;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 4 0 5 0;
+#X connect 6 0 4 0;
+#X connect 7 0 2 0;
+#X connect 7 0 6 0;
diff --git a/exemples/fluide_masse4.pd b/exemples/fluide_masse4.pd
new file mode 100755
index 0000000..60c1d9f
--- /dev/null
+++ b/exemples/fluide_masse4.pd
@@ -0,0 +1,30 @@
+#N canvas 598 312 252 348 10;
+#X msg 39 180 setXY \$1 \$2;
+#X obj 38 26 loadbang;
+#X obj 38 155 pack f f;
+#X obj 36 46 t b b;
+#X obj 57 256 gemhead;
+#X obj 57 289 translateXYZ;
+#X obj 37 229 unpack s f f;
+#X obj 40 206 masse2D masse 10;
+#X obj 143 24 r reset_masse;
+#X msg 92 111 -1;
+#X obj 59 318 sphere 0.03;
+#X obj 36 70 random 10;
+#X obj 38 91 - 5;
+#X obj 36 119 / 2;
+#X connect 0 0 7 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 11 0;
+#X connect 3 1 9 0;
+#X connect 4 0 5 0;
+#X connect 5 0 10 0;
+#X connect 6 1 5 1;
+#X connect 6 2 5 2;
+#X connect 7 0 6 0;
+#X connect 8 0 3 0;
+#X connect 9 0 2 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 2 0;
diff --git a/exemples/fluide_masse5.pd b/exemples/fluide_masse5.pd
new file mode 100755
index 0000000..b2bc219
--- /dev/null
+++ b/exemples/fluide_masse5.pd
@@ -0,0 +1,66 @@
+#N canvas 598 312 512 564 10;
+#X msg 36 169 setXY \$1 \$2;
+#X obj 36 22 loadbang;
+#X obj 36 144 pack f f;
+#X obj 36 46 t b b;
+#X obj 57 246 gemhead;
+#X obj 57 269 translateXYZ;
+#X obj 46 219 unpack s f f;
+#X obj 143 24 r reset_masse;
+#X msg 36 355 setX \$1 \, setY \$2;
+#X obj 36 70 random 20;
+#X obj 36 116 / 4;
+#X obj 102 69 random 20;
+#X obj 102 115 / 4;
+#X obj 36 93 - 10;
+#X obj 102 91 - 10;
+#X obj 12 332 r link;
+#X obj 36 195 masse2D masse 100;
+#X obj 57 293 sphere 0.1;
+#X obj 37 382 iCircle2D masse 0 0 0.0001 0.3 0 0 1;
+#X obj 267 184 unpack s f f f;
+#X obj 389 293 osc~;
+#X obj 389 268 mtof;
+#X obj 389 185 loadbang;
+#X obj 347 357 *~;
+#X obj 346 293 line~;
+#X obj 347 387 dac~;
+#X obj 346 243 *;
+#X obj 389 212 random 60;
+#X msg 346 268 \$1 5;
+#X obj 346 212 * 1;
+#X obj 389 243 + 20;
+#X connect 0 0 16 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 9 0;
+#X connect 3 1 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 17 0;
+#X connect 6 1 5 1;
+#X connect 6 2 5 2;
+#X connect 7 0 3 0;
+#X connect 8 0 18 0;
+#X connect 9 0 13 0;
+#X connect 10 0 2 0;
+#X connect 11 0 14 0;
+#X connect 12 0 2 1;
+#X connect 13 0 10 0;
+#X connect 14 0 12 0;
+#X connect 15 0 18 0;
+#X connect 16 0 6 0;
+#X connect 16 0 8 0;
+#X connect 16 1 19 0;
+#X connect 19 3 29 0;
+#X connect 20 0 23 1;
+#X connect 21 0 20 0;
+#X connect 22 0 27 0;
+#X connect 23 0 25 0;
+#X connect 23 0 25 1;
+#X connect 24 0 23 0;
+#X connect 26 0 28 0;
+#X connect 27 0 30 0;
+#X connect 28 0 24 0;
+#X connect 29 0 26 0;
+#X connect 29 0 26 1;
+#X connect 30 0 21 0;
diff --git a/exemples/fluide_masse6.pd b/exemples/fluide_masse6.pd
new file mode 100755
index 0000000..1cf6a9a
--- /dev/null
+++ b/exemples/fluide_masse6.pd
@@ -0,0 +1,17 @@
+#N canvas 598 312 379 296 10;
+#X obj 40 94 gemhead;
+#X obj 40 120 translateXYZ;
+#X obj 20 60 unpack s f f;
+#X obj 40 146 sphere 0.03;
+#X obj 127 88 sel 1;
+#X msg 127 112 \; masse reset \;;
+#X obj 127 65 tSquare2D 6 10 -4 4;
+#X obj 20 37 masse2D masse 0 \$1 \$2;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 4 0 5 0;
+#X connect 6 0 4 0;
+#X connect 7 0 2 0;
+#X connect 7 0 6 0;
diff --git a/exemples/game_line.pd b/exemples/game_line.pd
new file mode 100755
index 0000000..ee29813
--- /dev/null
+++ b/exemples/game_line.pd
@@ -0,0 +1,70 @@
+#N canvas 734 65 656 713 10;
+#X obj 43 227 gemhead;
+#X obj 43 257 curve 2;
+#X obj 70 28 inlet;
+#X obj 100 123 \$1;
+#X obj 108 94 loadbang;
+#X obj 65 195 pack f f 0;
+#X obj 196 33 inlet;
+#X obj 191 200 pack f f 0;
+#X obj 182 160 - 0.5;
+#X obj 280 243 gemhead;
+#X obj 280 273 curve 2;
+#X obj 337 139 \$1;
+#X obj 345 110 loadbang;
+#X obj 292 207 pack f f 0;
+#X obj 428 216 pack f f 0;
+#X obj 460 185 - 0.5;
+#X msg 67 339 setX1 \$1 \, setY1 \$2;
+#X msg 89 364 setX2 \$1 \, setY2 \$2;
+#X msg 329 331 setX1 \$1 \, setY1 \$2;
+#X msg 368 364 setX2 \$1 \, setY2 \$2;
+#X obj 83 464 s inside;
+#X obj 224 366 r space_ship;
+#X obj 78 441 sel 1;
+#X obj 79 407 tSeg2D 0 0 0 0 3;
+#X obj 341 399 tSeg2D 0 0 0 0 3;
+#X obj 290 168 - 3;
+#X obj 469 129 - 3;
+#X obj 231 475 r bounce;
+#X obj 400 542 iSeg2D bomb 0 0 0 0 3 1;
+#X obj 191 544 iSeg2D bomb 0 0 0 0 3 1;
+#X connect 0 0 1 0;
+#X connect 2 0 5 0;
+#X connect 2 0 25 0;
+#X connect 3 0 8 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 1 1;
+#X connect 5 0 17 0;
+#X connect 6 0 7 0;
+#X connect 6 0 26 0;
+#X connect 7 0 1 2;
+#X connect 7 0 16 0;
+#X connect 8 0 7 1;
+#X connect 9 0 10 0;
+#X connect 11 0 15 0;
+#X connect 11 0 13 1;
+#X connect 12 0 11 0;
+#X connect 13 0 10 1;
+#X connect 13 0 18 0;
+#X connect 14 0 10 2;
+#X connect 14 0 19 0;
+#X connect 15 0 14 1;
+#X connect 16 0 23 0;
+#X connect 16 0 29 0;
+#X connect 17 0 23 0;
+#X connect 17 0 29 0;
+#X connect 18 0 24 0;
+#X connect 18 0 28 0;
+#X connect 19 0 24 0;
+#X connect 19 0 28 0;
+#X connect 21 0 23 0;
+#X connect 21 0 24 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 24 0 22 0;
+#X connect 25 0 13 0;
+#X connect 26 0 14 0;
+#X connect 27 0 28 0;
+#X connect 27 0 29 0;
diff --git a/exemples/gemLia.pd b/exemples/gemLia.pd
new file mode 100755
index 0000000..1a5b710
--- /dev/null
+++ b/exemples/gemLia.pd
@@ -0,0 +1,21 @@
+#N canvas 0 0 397 255 12;
+#X obj 249 24 inlet;
+#X obj 249 77 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X msg 123 111 \$1 \$2 \$3;
+#X msg 271 106 \$1 \$2 \$3;
+#X obj 98 202 curve 2;
+#X obj 86 51 lia3D lia \$1 \$2 \$3 \$4;
+#X obj 98 145 r gemhead;
+#X obj 98 174 separator;
+#X connect 0 0 5 0;
+#X connect 0 0 7 1;
+#X connect 2 0 4 0;
+#X connect 2 0 7 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 2;
+#X connect 7 0 3 0;
+#X connect 7 1 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 6 0;
diff --git a/exemples/gemLia2.pd b/exemples/gemLia2.pd
new file mode 100755
index 0000000..a53071d
--- /dev/null
+++ b/exemples/gemLia2.pd
@@ -0,0 +1,10 @@
+#N canvas 0 0 401 259 12;
+#X obj 249 24 inlet;
+#X obj 249 77 outlet;
+#X obj 86 23 inlet;
+#X obj 86 78 outlet;
+#X obj 86 51 lia3D lia \$1 \$2 \$3 \$4;
+#X connect 0 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
diff --git a/exemples/gemMasse.pd b/exemples/gemMasse.pd
new file mode 100755
index 0000000..9fa5f08
--- /dev/null
+++ b/exemples/gemMasse.pd
@@ -0,0 +1,18 @@
+#N canvas 615 387 345 312 12;
+#X obj 25 38 inlet;
+#X obj 26 100 outlet;
+#X obj 75 228 translateXYZ 0 0 0;
+#X obj 75 256 sphere 0.3;
+#X obj 75 168 r gemhead;
+#X obj 75 197 separator;
+#X obj 86 100 unpack s f f f;
+#X obj 26 70 masse3D masse \$1 \$2 \$3 \$4;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 6 1 2 1;
+#X connect 6 2 2 2;
+#X connect 6 3 2 3;
+#X connect 7 0 1 0;
+#X connect 7 0 6 0;
diff --git a/exemples/gemMasse2.pd b/exemples/gemMasse2.pd
new file mode 100755
index 0000000..3bca778
--- /dev/null
+++ b/exemples/gemMasse2.pd
@@ -0,0 +1,12 @@
+#N canvas 705 218 349 316 12;
+#X obj 25 38 inlet;
+#X obj 25 100 outlet;
+#X obj 86 100 unpack s f f f;
+#X obj 25 70 masse3D masse2 \$1 \$2 \$3 \$4;
+#X obj 121 131 pack f f f \$2 \$3;
+#X connect 0 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 2 4 1;
+#X connect 2 3 4 2;
+#X connect 3 0 1 0;
+#X connect 3 0 2 0;
diff --git a/exemples/gemMasse3.pd b/exemples/gemMasse3.pd
new file mode 100755
index 0000000..2e44a2e
--- /dev/null
+++ b/exemples/gemMasse3.pd
@@ -0,0 +1,27 @@
+#N canvas 615 387 353 320 12;
+#X obj 26 39 inlet;
+#X obj 26 100 outlet;
+#X obj 86 100 unpack s f f f;
+#X obj 26 70 masse3D masse \$1 \$2 \$3 \$4;
+#X msg 121 156 set \$4 \$5 \$1 \$2 \$3;
+#X obj 121 185 send curve3d;
+#X obj 248 64 - 1;
+#X obj 121 129 pack f f f f f;
+#X obj 248 38 \$2;
+#X obj 248 12 loadbang;
+#X obj 283 65 - 1;
+#X obj 283 39 \$3;
+#X connect 0 0 3 0;
+#X connect 2 1 7 0;
+#X connect 2 2 7 1;
+#X connect 2 3 7 2;
+#X connect 3 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 3;
+#X connect 7 0 4 0;
+#X connect 8 0 6 0;
+#X connect 9 0 8 0;
+#X connect 9 0 11 0;
+#X connect 10 0 7 4;
+#X connect 11 0 10 0;
diff --git a/exemples/i3D.pd b/exemples/i3D.pd
new file mode 100755
index 0000000..e65eef4
--- /dev/null
+++ b/exemples/i3D.pd
@@ -0,0 +1,21 @@
+#N canvas 693 514 332 321 10;
+#X obj 54 109 link3D link 0;
+#X obj 54 60 pack \$2 \$3 \$4;
+#X obj 145 109 mass3D mass 10 \$2 \$3 \$4;
+#X obj 54 36 loadbang;
+#X obj 148 166 gemhead;
+#X obj 145 138 unpack s f f f;
+#X obj 148 192 translateXYZ;
+#X obj 148 217 sphere 0.1;
+#X msg 54 84 position3D \$1 \$2 \$3;
+#X connect 0 1 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 0 1;
+#X connect 2 0 5 0;
+#X connect 3 0 1 0;
+#X connect 4 0 6 0;
+#X connect 5 1 6 1;
+#X connect 5 2 6 2;
+#X connect 5 3 6 3;
+#X connect 6 0 7 0;
+#X connect 8 0 0 0;
diff --git a/exemples/i3D2.pd b/exemples/i3D2.pd
new file mode 100755
index 0000000..5966eb5
--- /dev/null
+++ b/exemples/i3D2.pd
@@ -0,0 +1,83 @@
+#N canvas 404 182 802 500 10;
+#X obj 613 302 mass3D mass 10 \$2 \$3 \$4;
+#X obj 54 36 loadbang;
+#X obj 616 359 gemhead;
+#X obj 613 331 unpack s f f f;
+#X obj 616 385 translateXYZ;
+#X obj 619 421 sphere 0.1;
+#X obj 190 36 loadbang;
+#X obj 321 38 loadbang;
+#X msg 320 247 position3D \$1 \$2 \$3;
+#X obj 453 32 loadbang;
+#X msg 452 241 position3D \$1 \$2 \$3;
+#X obj 53 270 link3D link1 0;
+#X obj 189 270 link3D link2 0;
+#X obj 320 272 link3D link3 0;
+#X obj 453 267 link3D link4 0;
+#X obj 190 60 \$1;
+#X msg 189 245 position3D \$1 0 0;
+#X obj 188 113 / 20;
+#X obj 453 56 \$1;
+#X obj 479 145 sin;
+#X obj 452 78 / 124;
+#X obj 451 101 * 6.28;
+#X obj 454 144 cos;
+#X obj 451 169 pack f f 0;
+#X obj 452 120 t f f;
+#X obj 79 177 sin;
+#X obj 53 133 * 6.28;
+#X obj 54 176 cos;
+#X obj 54 201 pack f f 0;
+#X obj 54 152 t f f;
+#X obj 54 110 / 25;
+#X obj 54 60 pack \$1;
+#X obj 54 84 t f f;
+#X msg 53 245 position3D \$2 \$3 \$1;
+#X obj 321 62 pack \$2 \$3 \$4;
+#X obj 111 178 / 50;
+#X obj 188 83 - 70;
+#X connect 0 0 3 0;
+#X connect 0 0 11 1;
+#X connect 0 0 12 1;
+#X connect 0 0 13 1;
+#X connect 0 0 14 1;
+#X connect 1 0 31 0;
+#X connect 2 0 4 0;
+#X connect 3 1 4 1;
+#X connect 3 2 4 2;
+#X connect 3 3 4 3;
+#X connect 4 0 5 0;
+#X connect 6 0 15 0;
+#X connect 7 0 34 0;
+#X connect 8 0 13 0;
+#X connect 9 0 18 0;
+#X connect 10 0 14 0;
+#X connect 11 1 0 0;
+#X connect 12 1 0 0;
+#X connect 13 1 0 0;
+#X connect 14 1 0 0;
+#X connect 15 0 36 0;
+#X connect 16 0 12 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 23 1;
+#X connect 20 0 21 0;
+#X connect 21 0 24 0;
+#X connect 22 0 23 0;
+#X connect 23 0 10 0;
+#X connect 24 0 22 0;
+#X connect 24 1 19 0;
+#X connect 25 0 28 1;
+#X connect 26 0 29 0;
+#X connect 27 0 28 0;
+#X connect 28 0 33 0;
+#X connect 29 0 27 0;
+#X connect 29 1 25 0;
+#X connect 30 0 26 0;
+#X connect 31 0 32 0;
+#X connect 32 0 30 0;
+#X connect 32 1 35 0;
+#X connect 33 0 11 0;
+#X connect 34 0 8 0;
+#X connect 35 0 28 2;
+#X connect 36 0 17 0;
diff --git a/exemples/mass_link.pd b/exemples/mass_link.pd
new file mode 100755
index 0000000..73a9358
--- /dev/null
+++ b/exemples/mass_link.pd
@@ -0,0 +1,82 @@
+#N canvas 726 205 509 623 10;
+#X obj 255 447 translateXYZ 0 0 0;
+#X obj 254 353 unpack s f f f;
+#X obj 14 24 inlet;
+#X obj 14 45 t b a;
+#X obj 149 527 outlet;
+#X obj 254 330 masse3D masse 1 \$1 \$2 \$3;
+#X obj 276 118 unpack s f f f;
+#X obj 307 142 + 0;
+#X obj 307 166 f;
+#X obj 291 192 f;
+#X obj 340 143 + 0;
+#X obj 340 167 f;
+#X obj 324 193 f;
+#X obj 372 146 + 0;
+#X obj 372 170 f;
+#X obj 361 194 f;
+#X obj 252 226 pack f f f;
+#X msg 253 257 force3D \$1 \$2 \$3;
+#X obj 262 28 r lia;
+#X obj 401 43 r r_lia;
+#X obj 264 53 t b b b;
+#X msg 401 117 0 0;
+#X obj 144 426 r masse3;
+#X obj 145 467 pack 0 f f f;
+#X msg 142 497 position3D \$2 \$3 \$4;
+#X obj 14 72 lia3D link 1 1 0 0.5;
+#X obj 137 326 r gemhead;
+#X obj 139 350 separator;
+#X obj 286 418 / 3;
+#X obj 318 416 / 3;
+#X obj 350 415 / 3;
+#X obj 255 475 sphere 0.2;
+#X obj 140 373 color 1 1 1;
+#X connect 0 0 31 0;
+#X connect 1 1 23 1;
+#X connect 1 1 28 0;
+#X connect 1 2 23 2;
+#X connect 1 2 29 0;
+#X connect 1 3 23 3;
+#X connect 1 3 30 0;
+#X connect 2 0 3 0;
+#X connect 3 0 25 0;
+#X connect 3 1 25 0;
+#X connect 5 0 1 0;
+#X connect 5 0 25 1;
+#X connect 6 1 7 0;
+#X connect 6 2 10 0;
+#X connect 6 3 13 0;
+#X connect 7 0 8 0;
+#X connect 8 0 7 1;
+#X connect 8 0 9 1;
+#X connect 9 0 16 0;
+#X connect 10 0 11 0;
+#X connect 11 0 10 1;
+#X connect 11 0 12 1;
+#X connect 12 0 16 1;
+#X connect 13 0 14 0;
+#X connect 14 0 13 1;
+#X connect 14 0 15 1;
+#X connect 15 0 16 2;
+#X connect 16 0 17 0;
+#X connect 17 0 5 0;
+#X connect 18 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 21 0;
+#X connect 20 1 9 0;
+#X connect 20 2 15 0;
+#X connect 20 2 12 0;
+#X connect 21 0 13 0;
+#X connect 21 0 10 0;
+#X connect 21 0 7 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 4 0;
+#X connect 25 1 6 0;
+#X connect 26 0 27 0;
+#X connect 27 0 32 0;
+#X connect 28 0 0 1;
+#X connect 29 0 0 2;
+#X connect 30 0 0 3;
+#X connect 32 0 0 0;
diff --git a/exemples/mass_link2.pd b/exemples/mass_link2.pd
new file mode 100755
index 0000000..f395846
--- /dev/null
+++ b/exemples/mass_link2.pd
@@ -0,0 +1,24 @@
+#N canvas 792 238 341 264 10;
+#X obj 112 80 unpack s f f f;
+#X obj 15 171 outlet;
+#X obj 112 57 masse3D masse2 1 \$1 \$2 \$3;
+#X obj 98 202 translateXYZ 0 0 0;
+#X obj 99 226 sphere 0.3;
+#X obj 93 120 r gemhead;
+#X obj 95 144 separator;
+#X obj 129 173 / 3;
+#X obj 161 171 / 3;
+#X obj 193 170 / 3;
+#X obj 66 11 inlet;
+#X connect 0 1 7 0;
+#X connect 0 2 8 0;
+#X connect 0 3 9 0;
+#X connect 2 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 7 0 3 1;
+#X connect 8 0 3 2;
+#X connect 9 0 3 3;
+#X connect 10 0 2 0;
diff --git a/exemples/mass_link3.pd b/exemples/mass_link3.pd
new file mode 100755
index 0000000..12e3792
--- /dev/null
+++ b/exemples/mass_link3.pd
@@ -0,0 +1,90 @@
+#N canvas 726 205 515 629 10;
+#X obj 255 447 translateXYZ 0 0 0;
+#X obj 254 353 unpack s f f f;
+#X obj 14 24 inlet;
+#X obj 14 45 t b a;
+#X obj 149 527 outlet;
+#X obj 276 118 unpack s f f f;
+#X obj 307 142 + 0;
+#X obj 307 166 f;
+#X obj 291 192 f;
+#X obj 340 143 + 0;
+#X obj 340 167 f;
+#X obj 324 193 f;
+#X obj 372 146 + 0;
+#X obj 372 170 f;
+#X obj 361 194 f;
+#X obj 252 226 pack f f f;
+#X msg 253 257 force3D \$1 \$2 \$3;
+#X obj 262 28 r lia;
+#X obj 401 43 r r_lia;
+#X obj 264 53 t b b b;
+#X msg 401 117 0 0;
+#X obj 144 426 r masse3;
+#X obj 145 467 pack 0 f f f;
+#X msg 142 497 position3D \$2 \$3 \$4;
+#X obj 14 72 lia3D link 1 1 0 0.5;
+#X obj 137 326 r gemhead;
+#X obj 139 350 separator;
+#X obj 286 418 / 3;
+#X obj 318 416 / 3;
+#X obj 350 415 / 3;
+#X obj 255 475 sphere 0.2;
+#X obj 140 373 color 1 1 1;
+#X obj 254 330 masse3D masse 1 \$2 \$3 \$4;
+#X obj 66 87 inlet;
+#X obj 66 108 t b a;
+#X obj 66 135 lia3D link2 1 1 0 0.5;
+#X connect 0 0 30 0;
+#X connect 1 1 22 1;
+#X connect 1 1 27 0;
+#X connect 1 2 22 2;
+#X connect 1 2 28 0;
+#X connect 1 3 22 3;
+#X connect 1 3 29 0;
+#X connect 2 0 3 0;
+#X connect 3 0 24 0;
+#X connect 3 1 24 0;
+#X connect 5 1 6 0;
+#X connect 5 2 9 0;
+#X connect 5 3 12 0;
+#X connect 6 0 7 0;
+#X connect 7 0 6 1;
+#X connect 7 0 8 1;
+#X connect 8 0 15 0;
+#X connect 9 0 10 0;
+#X connect 10 0 9 1;
+#X connect 10 0 11 1;
+#X connect 11 0 15 1;
+#X connect 12 0 13 0;
+#X connect 13 0 12 1;
+#X connect 13 0 14 1;
+#X connect 14 0 15 2;
+#X connect 15 0 16 0;
+#X connect 16 0 32 0;
+#X connect 17 0 19 0;
+#X connect 18 0 20 0;
+#X connect 19 0 20 0;
+#X connect 19 1 8 0;
+#X connect 19 2 14 0;
+#X connect 19 2 11 0;
+#X connect 20 0 12 0;
+#X connect 20 0 9 0;
+#X connect 20 0 6 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 4 0;
+#X connect 24 1 5 0;
+#X connect 25 0 26 0;
+#X connect 26 0 31 0;
+#X connect 27 0 0 1;
+#X connect 28 0 0 2;
+#X connect 29 0 0 3;
+#X connect 31 0 0 0;
+#X connect 32 0 1 0;
+#X connect 32 0 24 1;
+#X connect 32 0 35 1;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 34 1 35 0;
+#X connect 35 1 5 0;
diff --git a/exemples/mountain.pd b/exemples/mountain.pd
new file mode 100755
index 0000000..bedab1d
--- /dev/null
+++ b/exemples/mountain.pd
@@ -0,0 +1,144 @@
+#N canvas 122 226 1016 613 10;
+#X obj 25 24 inlet;
+#X obj 134 33 inlet;
+#X obj 21 215 outlet;
+#X obj 134 217 outlet;
+#X obj 221 34 inlet;
+#X obj 221 218 outlet;
+#X obj 358 60 random 10;
+#X obj 358 33 r init;
+#X obj 274 208 gemhead;
+#X obj 274 289 translateXYZ;
+#X obj 274 337 sphere 0.2;
+#X obj 296 256 \$2;
+#X obj 296 231 loadbang;
+#X obj 318 256 \$4;
+#X msg 358 83 setX \$1;
+#X obj 341 142 mass M 22;
+#X obj 301 312 r size;
+#X obj 427 476 primTri 0 0 0;
+#X obj 426 122 t b f;
+#X obj 450 213 t b f;
+#X obj 463 451 pack \$2 \$4 f;
+#X obj 463 428 t b f;
+#X obj 517 87 \$2;
+#X obj 517 62 loadbang;
+#X obj 539 87 \$4;
+#X obj 425 149 pack f f f;
+#X obj 450 280 pack f f f;
+#X obj 516 111 - 1;
+#X obj 540 110 - 1;
+#X obj 427 390 gemhead;
+#X obj 427 362 &&;
+#X msg 488 329 0;
+#X obj 488 308 loadbang;
+#X msg 455 329 1;
+#X msg 427 329 1;
+#X obj 610 37 inlet;
+#X obj 632 539 primTri 0 0 0;
+#X obj 632 148 t b f;
+#X obj 656 239 t b f;
+#X obj 821 299 t b f;
+#X obj 723 113 \$2;
+#X obj 723 88 loadbang;
+#X obj 745 113 \$4;
+#X obj 631 175 pack f f f;
+#X obj 656 306 pack f f f;
+#X obj 722 137 - 1;
+#X obj 746 136 - 1;
+#X obj 632 469 gemhead;
+#X obj 633 388 &&;
+#X msg 694 355 0;
+#X obj 694 334 loadbang;
+#X msg 661 355 1;
+#X msg 633 355 1;
+#X obj 657 426 &&;
+#X msg 697 394 1;
+#X obj 668 514 pack f f f;
+#X obj 224 89 link L 0 1 0.1 0.1;
+#X obj 135 58 link L 0 1 0.1 0.1;
+#X connect 0 0 15 0;
+#X connect 1 0 34 0;
+#X connect 1 0 18 0;
+#X connect 1 0 52 0;
+#X connect 1 0 37 0;
+#X connect 1 0 57 0;
+#X connect 4 0 33 0;
+#X connect 4 0 19 0;
+#X connect 4 0 51 0;
+#X connect 4 0 38 0;
+#X connect 4 0 56 0;
+#X connect 6 0 14 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 11 0 9 1;
+#X connect 12 0 11 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 2;
+#X connect 14 0 15 0;
+#X connect 15 0 2 0;
+#X connect 15 0 9 3;
+#X connect 15 0 21 0;
+#X connect 15 0 56 1;
+#X connect 15 0 57 1;
+#X connect 16 0 10 1;
+#X connect 18 0 25 0;
+#X connect 18 1 25 2;
+#X connect 19 0 26 0;
+#X connect 19 1 26 2;
+#X connect 20 0 17 3;
+#X connect 21 0 20 0;
+#X connect 21 1 20 2;
+#X connect 22 0 27 0;
+#X connect 22 0 26 0;
+#X connect 23 0 22 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 1;
+#X connect 24 0 28 0;
+#X connect 25 0 17 1;
+#X connect 26 0 17 2;
+#X connect 27 0 25 0;
+#X connect 28 0 26 1;
+#X connect 29 0 17 0;
+#X connect 30 0 29 0;
+#X connect 31 0 30 1;
+#X connect 31 0 30 0;
+#X connect 32 0 31 0;
+#X connect 33 0 30 1;
+#X connect 34 0 30 0;
+#X connect 35 0 39 0;
+#X connect 35 0 54 0;
+#X connect 37 0 43 0;
+#X connect 37 1 43 2;
+#X connect 38 0 44 0;
+#X connect 38 1 44 2;
+#X connect 39 0 55 0;
+#X connect 39 1 55 2;
+#X connect 40 0 45 0;
+#X connect 40 0 44 0;
+#X connect 41 0 40 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 1;
+#X connect 42 0 46 0;
+#X connect 43 0 36 1;
+#X connect 44 0 36 2;
+#X connect 45 0 43 0;
+#X connect 45 0 55 0;
+#X connect 46 0 44 1;
+#X connect 46 0 55 1;
+#X connect 47 0 36 0;
+#X connect 48 0 53 0;
+#X connect 49 0 48 1;
+#X connect 49 0 48 0;
+#X connect 49 0 53 1;
+#X connect 50 0 49 0;
+#X connect 51 0 48 1;
+#X connect 52 0 48 0;
+#X connect 53 0 47 0;
+#X connect 54 0 53 1;
+#X connect 55 0 36 3;
+#X connect 56 0 5 0;
+#X connect 56 1 15 0;
+#X connect 57 0 3 0;
+#X connect 57 1 15 0;
diff --git a/exemples/pd_lia.pd b/exemples/pd_lia.pd
new file mode 100755
index 0000000..c1e51d1
--- /dev/null
+++ b/exemples/pd_lia.pd
@@ -0,0 +1,19 @@
+#N canvas 587 514 324 278 12;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$1-lia 0 10 2.5 0.001;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
diff --git a/exemples/pd_lia2.pd b/exemples/pd_lia2.pd
new file mode 100755
index 0000000..b6f9b7e
--- /dev/null
+++ b/exemples/pd_lia2.pd
@@ -0,0 +1,19 @@
+#N canvas 587 514 324 278 12;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D \$1-lia2 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
diff --git a/exemples/pd_masse.pd b/exemples/pd_masse.pd
new file mode 100755
index 0000000..23e7308
--- /dev/null
+++ b/exemples/pd_masse.pd
@@ -0,0 +1,44 @@
+#N canvas 645 -2 656 389 12;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 62 165 gemhead;
+#X obj 59 206 translateXYZ;
+#X obj 56 248 sphere 0.1;
+#X obj 25 71 masse2D \$3-masse 50 \$1 \$2 -3.8 3.8 -3.8 3.8;
+#X obj 257 105 unpack s f f f;
+#X obj 438 233 osc~;
+#X obj 438 208 mtof;
+#X obj 438 133 loadbang;
+#X obj 364 275 *~;
+#X msg 364 209 \$1 50;
+#X obj 364 234 line~;
+#X obj 364 305 dac~;
+#X obj 438 183 + 30;
+#X obj 438 159 random 60;
+#X obj 442 29 inlet;
+#X msg 442 53 0;
+#X obj 364 183 min 0.1;
+#X obj 364 130 * 0.03;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
+#X connect 6 1 7 0;
+#X connect 7 3 20 0;
+#X connect 8 0 11 1;
+#X connect 9 0 8 0;
+#X connect 10 0 16 0;
+#X connect 11 0 14 0;
+#X connect 11 0 14 1;
+#X connect 12 0 13 0;
+#X connect 13 0 11 0;
+#X connect 15 0 9 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 1;
+#X connect 19 0 12 0;
+#X connect 20 0 19 0;
diff --git a/exemples/pd_masse2.pd b/exemples/pd_masse2.pd
new file mode 100755
index 0000000..fdc2e4e
--- /dev/null
+++ b/exemples/pd_masse2.pd
@@ -0,0 +1,15 @@
+#N canvas 500 206 486 336 12;
+#X obj 26 38 inlet;
+#X obj 11 137 outlet;
+#X obj 25 104 unpack s f f;
+#X obj 285 48 gemhead;
+#X obj 284 89 translateXYZ;
+#X obj 281 131 sphere 0.1;
+#X obj 25 71 masse2D \$3-masse2 50 \$1 \$2;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
diff --git a/exemples/rain.pd b/exemples/rain.pd
new file mode 100755
index 0000000..0969a50
--- /dev/null
+++ b/exemples/rain.pd
@@ -0,0 +1,16 @@
+#N canvas 571 315 266 261 10;
+#X obj 33 161 gemhead;
+#X obj 33 187 translateXYZ;
+#X obj 25 39 loadbang;
+#X obj 25 85 masse3D masse 1 0 3;
+#X obj 25 108 unpack s f f f;
+#X obj 33 211 sphere 0.05;
+#X msg 25 62 setYmin -3 \, setT 1;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 2 0 6 0;
+#X connect 3 0 4 0;
+#X connect 4 1 1 1;
+#X connect 4 2 1 2;
+#X connect 4 3 1 3;
+#X connect 6 0 3 0;
diff --git a/exemples/rain1.pd b/exemples/rain1.pd
new file mode 100755
index 0000000..436f34f
--- /dev/null
+++ b/exemples/rain1.pd
@@ -0,0 +1,16 @@
+#N canvas 571 315 262 257 10;
+#X obj 33 161 gemhead;
+#X obj 33 187 translateXYZ;
+#X obj 25 39 loadbang;
+#X msg 25 62 setYmin -3;
+#X obj 25 85 masse3D masse 1 0 3;
+#X obj 25 108 unpack s f f f;
+#X obj 33 211 sphere 0.05;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 1 1 1;
+#X connect 5 2 1 2;
+#X connect 5 3 1 3;
diff --git a/exemples/sand.pd b/exemples/sand.pd
new file mode 100755
index 0000000..b162a86
--- /dev/null
+++ b/exemples/sand.pd
@@ -0,0 +1,29 @@
+#N canvas 571 315 419 342 10;
+#X obj 45 142 gemhead;
+#X obj 45 168 translateXYZ;
+#X obj 25 108 unpack s f f;
+#X obj 25 85 masse2D masse 1 \$1 \$2;
+#X msg 37 259 setX \$1 \, setY \$2;
+#X obj 13 236 r link;
+#X obj 25 39 loadbang;
+#X msg 175 155 1 0 0;
+#X obj 175 23 inlet;
+#X obj 45 191 color 1 1 1;
+#X obj 45 212 circle 0.05;
+#X msg 25 62 setYmin -3 \, setT 0.9;
+#X obj 85 40 r reset;
+#X obj 40 286 iCircle2D masse 0 0 0.0001 0.15 0 0 1 0 0 0 0.31;
+#X connect 0 0 1 0;
+#X connect 1 0 9 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 3 0 2 0;
+#X connect 3 0 4 0;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 11 0;
+#X connect 7 0 9 1;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 11 0 3 0;
+#X connect 12 0 11 0;
diff --git a/exemples/smoke.pd b/exemples/smoke.pd
new file mode 100755
index 0000000..66d4fb5
--- /dev/null
+++ b/exemples/smoke.pd
@@ -0,0 +1,55 @@
+#N canvas 830 39 529 709 10;
+#X obj 143 288 gemhead;
+#X obj 143 311 translateXYZ;
+#X obj 69 197 unpack s f f;
+#X msg 49 484 setX \$1 \, setY \$2;
+#X obj 24 296 r link;
+#X obj 143 335 sphere 0.05;
+#X msg 59 45 off;
+#X obj 139 21 r reset_smoke;
+#X obj 59 15 loadbang;
+#X obj 139 48 sel \$1;
+#X obj 199 50 r reset_all;
+#X obj 268 369 spigot;
+#X msg 294 327 0;
+#X msg 327 330 1;
+#X msg 191 97 off;
+#X obj 196 74 t b b b;
+#X obj 53 458 pack f f;
+#X obj 327 250 delay 1000;
+#X obj 54 511 iCircle2D masse 0 0 0.1 10 0 0 0 0 0 0 0 0 0 -1e-005
+;
+#X obj 190 254 / 10;
+#X obj 155 249 / 10;
+#X msg 157 130 on \, reset \, setXY 0 -35;
+#X obj 53 427 - 0;
+#X obj 61 173 masse2D masse 1 0 -35;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 2 1 20 0;
+#X connect 2 1 22 0;
+#X connect 2 2 16 1;
+#X connect 2 2 19 0;
+#X connect 3 0 18 0;
+#X connect 4 0 11 0;
+#X connect 6 0 23 0;
+#X connect 7 0 9 0;
+#X connect 8 0 6 0;
+#X connect 8 0 12 0;
+#X connect 9 0 21 0;
+#X connect 9 0 17 0;
+#X connect 10 0 15 0;
+#X connect 11 0 18 0;
+#X connect 12 0 11 1;
+#X connect 13 0 11 1;
+#X connect 14 0 23 0;
+#X connect 15 0 14 0;
+#X connect 15 1 21 0;
+#X connect 15 2 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 13 0;
+#X connect 19 0 1 2;
+#X connect 20 0 1 1;
+#X connect 21 0 23 0;
+#X connect 22 0 16 0;
+#X connect 23 0 2 0;
diff --git a/exemples/smoke1.pd b/exemples/smoke1.pd
new file mode 100755
index 0000000..4153b82
--- /dev/null
+++ b/exemples/smoke1.pd
@@ -0,0 +1,32 @@
+#N canvas 830 39 365 388 10;
+#X obj 80 254 gemhead;
+#X obj 80 277 translateXYZ;
+#X obj 69 197 unpack s f f;
+#X obj 80 301 sphere 0.05;
+#X msg 59 45 off;
+#X obj 139 21 r reset_smoke;
+#X obj 59 15 loadbang;
+#X obj 139 48 sel \$1;
+#X obj 199 50 r reset_all;
+#X msg 191 97 off;
+#X obj 196 74 t b b b;
+#X obj 136 224 / 10;
+#X obj 102 224 / 10;
+#X obj 61 173 masse2D masse 1 0 -35;
+#X msg 157 130 on \, reset \, setXY 0 -35;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 1 12 0;
+#X connect 2 2 11 0;
+#X connect 4 0 13 0;
+#X connect 5 0 7 0;
+#X connect 6 0 4 0;
+#X connect 7 0 14 0;
+#X connect 8 0 10 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 10 1 14 0;
+#X connect 11 0 1 2;
+#X connect 12 0 1 1;
+#X connect 13 0 2 0;
+#X connect 14 0 13 0;
diff --git a/exemples/smoke_vortex.pd b/exemples/smoke_vortex.pd
new file mode 100755
index 0000000..d17eaa7
--- /dev/null
+++ b/exemples/smoke_vortex.pd
@@ -0,0 +1,41 @@
+#N canvas 0 0 460 532 10;
+#X obj 66 303 line;
+#X obj 137 305 line;
+#X obj 67 331 pack;
+#X msg 69 359 setX \$1 \, setY \$2;
+#X obj 71 3 loadbang;
+#X obj 24 38 r link;
+#X obj 67 146 randomF 80;
+#X obj 138 148 randomF 80;
+#X obj 137 172 - 40;
+#X obj 66 170 - 40;
+#X obj 65 234 pack f f;
+#X obj 67 95 metro 8000;
+#X msg 158 254 -50 \, 50 8000;
+#X obj 73 75 delay;
+#X obj 71 28 t b b;
+#X obj 99 54 random 8000;
+#X obj 25 389 iCircle2D masse 0 0 0.1 50 0 0 0 0 0 \$1;
+#X obj 144 8 r reset_all;
+#X msg 67 257 \$1 \, \$2 500000;
+#X connect 0 0 2 0;
+#X connect 1 0 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 16 0;
+#X connect 4 0 14 0;
+#X connect 5 0 16 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 8 0 10 1;
+#X connect 9 0 10 0;
+#X connect 10 0 18 0;
+#X connect 11 0 6 0;
+#X connect 11 0 7 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
+#X connect 13 0 11 0;
+#X connect 14 0 13 0;
+#X connect 14 1 15 0;
+#X connect 15 0 13 1;
+#X connect 17 0 14 0;
+#X connect 18 0 0 0;
diff --git a/exemples/tut_lia.pd b/exemples/tut_lia.pd
new file mode 100755
index 0000000..9563ede
--- /dev/null
+++ b/exemples/tut_lia.pd
@@ -0,0 +1,19 @@
+#N canvas 0 0 454 304 10;
+#X obj 177 35 inlet;
+#X obj 171 96 outlet;
+#X obj 12 32 inlet;
+#X obj 6 93 outlet;
+#X msg 56 156 \$1 \$2 0;
+#X obj 24 186 gemhead;
+#X obj 26 210 curve 2;
+#X msg 134 155 \$1 \$2 0;
+#X obj 45 61 lia2D tut_lia 0 10 2.5 0.1;
+#X connect 0 0 7 0;
+#X connect 0 0 8 1;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 7 0 6 2;
+#X connect 8 0 3 0;
+#X connect 8 1 1 0;
diff --git a/exemples/tut_masse.pd b/exemples/tut_masse.pd
new file mode 100755
index 0000000..05d523e
--- /dev/null
+++ b/exemples/tut_masse.pd
@@ -0,0 +1,15 @@
+#N canvas 0 0 416 404 10;
+#X obj 40 110 inlet;
+#X obj 25 209 outlet;
+#X obj 39 176 unpack s f f;
+#X obj 114 224 gemhead;
+#X obj 113 265 translateXYZ;
+#X obj 110 307 sphere 0.1;
+#X obj 38 137 masse2D tut_masse 50 \$1 \$2;
+#X connect 0 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 4 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 6 0 1 0;
diff --git a/exemples/vortex.pd b/exemples/vortex.pd
new file mode 100755
index 0000000..66c399c
--- /dev/null
+++ b/exemples/vortex.pd
@@ -0,0 +1,26 @@
+#N canvas 844 114 502 389 10;
+#X obj 77 177 gemhead;
+#X obj 77 200 translateXYZ;
+#X obj 66 150 unpack s f f;
+#X msg 56 285 setX \$1 \, setY \$2;
+#X obj 23 262 r link;
+#X obj 58 15 r masse2;
+#X msg 54 61 bang;
+#X msg 94 66 reset;
+#X obj 60 36 t b b;
+#X obj 56 126 masse2D masse 0 \$1;
+#X obj 77 224 sphere 0.05;
+#X obj 56 312 iCircle2D masse 0 0 1e-006 10 0 0 0 0 0 0 0 0 0 0.0001
+;
+#X connect 0 0 1 0;
+#X connect 1 0 10 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 3 0 11 0;
+#X connect 4 0 11 0;
+#X connect 5 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 6 0;
+#X connect 8 1 7 0;
+#X connect 9 0 2 0;
+#X connect 9 0 3 0;
diff --git a/exemples/vortex2.pd b/exemples/vortex2.pd
new file mode 100755
index 0000000..1ea2e69
--- /dev/null
+++ b/exemples/vortex2.pd
@@ -0,0 +1,53 @@
+#N canvas 703 127 516 799 10;
+#X obj 85 424 gemhead;
+#X obj 85 447 translateXYZ;
+#X obj 74 397 unpack s f f;
+#X msg 64 532 setX \$1 \, setY \$2;
+#X obj 31 509 r link;
+#X obj 64 30 loadbang;
+#X obj 64 166 cos;
+#X obj 64 110 * 3.14159;
+#X obj 88 167 sin;
+#X obj 63 317 pack f f;
+#X msg 64 343 setXY \$1 \$2;
+#X obj 132 29 r masse2;
+#X obj 64 59 random 360;
+#X obj 64 85 / 180;
+#X obj 135 176 random 100;
+#X obj 272 167 random 100;
+#X obj 64 135 t f f b;
+#X obj 124 227 *;
+#X obj 149 272 *;
+#X obj 85 471 sphere 0.05;
+#X obj 271 190 / 50;
+#X obj 137 202 / 100;
+#X obj 64 373 masse2D masse 0;
+#X obj 64 559 iCircle2D masse 0 0 1e-006 10 0 0 0 0 0 0 0 0 0 0.0001
+;
+#X connect 0 0 1 0;
+#X connect 1 0 19 0;
+#X connect 2 1 1 1;
+#X connect 2 2 1 2;
+#X connect 3 0 23 0;
+#X connect 4 0 23 0;
+#X connect 5 0 12 0;
+#X connect 6 0 18 0;
+#X connect 7 0 16 0;
+#X connect 8 0 17 0;
+#X connect 9 0 10 0;
+#X connect 10 0 22 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 7 0;
+#X connect 14 0 21 0;
+#X connect 15 0 20 0;
+#X connect 16 0 6 0;
+#X connect 16 1 8 0;
+#X connect 16 2 14 0;
+#X connect 16 2 15 0;
+#X connect 17 0 9 1;
+#X connect 18 0 9 0;
+#X connect 20 0 18 1;
+#X connect 21 0 17 1;
+#X connect 22 0 2 0;
+#X connect 22 0 3 0;
diff --git a/help/help-iAmbient2D.pd b/help/help-iAmbient2D.pd
new file mode 100755
index 0000000..8e00c71
--- /dev/null
+++ b/help/help-iAmbient2D.pd
@@ -0,0 +1,61 @@
+#N canvas 572 117 613 725 10;
+#X obj 16 652 iAmbient2D;
+#X text 272 20 ambient interaction;
+#X text 178 41 This object sould be used for the simulation of interaction
+between a collection of masse and a commun environement;
+#X text 179 143 1 : name;
+#X text 176 71 This object should receive a bang to be active (act
+like the link object);
+#X obj 46 672 pmpd.iAmbient2D;
+#X text 196 155 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X text 201 552 if a mass is outside of this rectangle \, the mass
+will not interact with this object.;
+#X text 196 404 value of the damping forces. this force is oposite
+from the velocity of the mass. It is proportional to the velocity of
+the masse.;
+#X text 195 356 Maximum amplitude of a random force aplyed to masses
+(X and Y amplitude).;
+#X text 196 270 this is constant force apply to all masses interacting
+this this object. Gravity is a constant negative force on Y axes.;
+#X msg 73 225 setFX 0;
+#X msg 73 249 setFY 0;
+#X msg 76 304 setRndFX 0;
+#X msg 77 333 setRndFY 0;
+#X msg 79 385 setD 0;
+#X msg 76 451 setXmin -100000;
+#X msg 76 495 setYmin -100000;
+#X msg 76 473 setXmax 100000;
+#X msg 76 518 setYmax 100000;
+#X text 173 517 10 : Y maximum;
+#X text 179 495 9 : Y minimum;
+#X text 179 473 8 : X maximum;
+#X text 179 452 7 : X minimum;
+#X text 202 537 minimum and maximum position of the interactor.;
+#X msg 78 593 setdX 0;
+#X msg 78 616 setdY 0;
+#X text 77 112 message to change parametter / default value / creation
+arg number / description;
+#X text 175 225 2 : X constant force field;
+#X text 174 249 3 : Y constant force field;
+#X text 177 306 4 : rnd X force field;
+#X text 175 334 5 : rnd Y force field;
+#X text 176 389 6 : damping;
+#X text 174 593 11 : X displacement field;
+#X text 173 617 12 : y displacement field;
+#X text 205 640 X and Y displacement field. displace the mass if it's
+inside the interactor field;
+#X msg 72 202 setFXY 0 0;
+#X connect 11 0 0 0;
+#X connect 12 0 0 0;
+#X connect 13 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 0 0;
+#X connect 16 0 0 0;
+#X connect 17 0 0 0;
+#X connect 18 0 0 0;
+#X connect 19 0 0 0;
+#X connect 25 0 0 0;
+#X connect 26 0 0 0;
+#X connect 36 0 0 0;
diff --git a/help/help-iAmbient3D.pd b/help/help-iAmbient3D.pd
new file mode 100755
index 0000000..11c3d6f
--- /dev/null
+++ b/help/help-iAmbient3D.pd
@@ -0,0 +1,76 @@
+#N canvas 281 53 599 822 10;
+#X text 272 20 ambient interaction;
+#X text 172 40 This object sould be used for the simulation of interaction
+between a collection of masse and a commun environement;
+#X text 179 143 1 : name;
+#X text 172 70 This object should receive a bang to be active (act
+like the link object);
+#X text 196 155 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X text 200 642 if a mass is outside of this rectangle \, the mass
+will not interact with this object.;
+#X text 197 450 value of the damping forces. this force is oposite
+from the velocity of the mass. It is proportional to the velocity of
+the masse.;
+#X text 198 295 this is constant force apply to all masses interacting
+this this object. Gravity is a constant negative force on Y axes.;
+#X msg 74 225 setFX 0;
+#X msg 75 249 setFY 0;
+#X msg 76 335 setRndFX 0;
+#X msg 76 359 setRndFY 0;
+#X msg 77 431 setD 0;
+#X msg 69 499 setXmin -100000;
+#X msg 69 543 setYmin -100000;
+#X msg 69 521 setXmax 100000;
+#X msg 69 566 setYmax 100000;
+#X text 202 627 minimum and maximum position of the interactor.;
+#X msg 70 673 setdX 0;
+#X msg 70 694 setdY 0;
+#X text 77 112 message to change parametter / default value / creation
+arg number / description;
+#X obj 16 752 iAmbient3D;
+#X obj 47 775 pmpd.iAmbient3D;
+#X msg 76 272 setFZ 0;
+#X msg 77 385 setRndFZ 0;
+#X msg 69 589 setZmin -100000;
+#X msg 69 611 setZmax 100000;
+#X msg 70 716 setdZ 0;
+#X text 200 401 Maximum amplitude of a random force aplyed to masses
+(X \, Y and Z amplitude).;
+#X text 175 225 2 : X constant force field;
+#X text 174 249 3 : Y constant force field;
+#X text 173 270 4 : Z constant force field;
+#X text 172 333 5 : rnd X force field;
+#X text 170 360 6 : rnd Y force field;
+#X text 170 386 7 : rnd Z force field;
+#X text 170 432 8 : damping;
+#X text 172 500 9 : X minimum;
+#X text 172 521 10 : X maximum;
+#X text 172 543 11 : Y minimum;
+#X text 171 565 12 : Y maximum;
+#X text 172 591 13 : Z minimum;
+#X text 171 611 14 : Z maximum;
+#X text 170 675 15 : X displacement field;
+#X text 169 696 16 : Y displacement field;
+#X text 169 719 17 : Z displacement field;
+#X text 200 736 X and Y displacement field. displace the masse if it's
+in the interactor field;
+#X msg 72 202 setFXY 0 0 0;
+#X connect 8 0 21 0;
+#X connect 9 0 21 0;
+#X connect 10 0 21 0;
+#X connect 11 0 21 0;
+#X connect 12 0 21 0;
+#X connect 13 0 21 0;
+#X connect 14 0 21 0;
+#X connect 15 0 21 0;
+#X connect 16 0 21 0;
+#X connect 18 0 21 0;
+#X connect 19 0 21 0;
+#X connect 23 0 21 0;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 21 0;
+#X connect 27 0 21 0;
+#X connect 46 0 21 0;
diff --git a/help/help-iCircle2D.pd b/help/help-iCircle2D.pd
new file mode 100755
index 0000000..e26ede4
--- /dev/null
+++ b/help/help-iCircle2D.pd
@@ -0,0 +1,83 @@
+#N canvas 352 49 574 849 10;
+#X text 156 130 1 : name;
+#X obj 12 785 iCircle2D;
+#X text 151 193 2 : center circle X;
+#X text 153 219 3 : center circle Y;
+#X text 260 23 Circlular interaction;
+#X text 154 52 This object sould be used for the simulation of interaction
+between a collection of masse and a circle;
+#X text 152 281 5 : Maximum Radius;
+#X text 151 258 4 : Minimum Radius;
+#X text 150 341 6 : constante Normal Force;
+#X text 149 374 7 : constante tengential Force;
+#X text 150 412 8 : normal rigidity;
+#X text 150 430 9 : tengential rigidity;
+#X text 143 492 10 : normal force proportional to 1/R;
+#X text 141 512 11 : tengential force proportional to 1/R;
+#X text 144 558 12 : normal damping;
+#X text 142 580 13 : tengential damping;
+#X text 144 614 14 : Normal displacement;
+#X text 143 633 15 : Tengential displacement;
+#X text 143 670 16 : link damping.;
+#X text 143 731 18 : normal constant displacement;
+#X text 142 753 19 : tangential constant displacement;
+#X obj 28 808 pmpd.iCircle2D;
+#X text 98 97 message to change parametter / default value / creation
+arg number / description;
+#X text 177 148 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 80 194 setX 0;
+#X msg 80 219 setY 0;
+#X msg 80 257 setRmin 0;
+#X msg 81 281 setRmax 1;
+#X text 177 236 center of the circle defining the interactor;
+#X text 176 300 minimal and maximal radius of the circle. If the mass
+is outside or inside this circles \, it will not interact with this
+link.;
+#X text 175 358 constant force normal to the circle.;
+#X text 176 391 add a constant force tangential to the circle.;
+#X msg 78 373 setFT 0;
+#X msg 79 339 setFN 0;
+#X text 175 447 normal and tangential rigidity of the circle. Forces
+are proportional to the distance between the masse and the maximum
+diametter of the circle.;
+#X text 175 528 normal and tangential forces proportional to the 1/distance
+between the masse and the center of the circle.;
+#X text 174 596 normal and tangential (to the circle) damping to the
+masse.;
+#X text 174 649 normal and tangential displacement field.;
+#X text 143 695 17 : Gravitation;
+#X text 172 714 Gravitation : this is a normal force proportional to
+1/R*R.;
+#X msg 78 694 setG;
+#X text 173 770 displace the masse if it's inside the interactor;
+#X msg 78 731 setdN;
+#X msg 78 750 setdT;
+#X msg 79 412 setKN;
+#X msg 78 431 setKT;
+#X msg 78 492 setRN;
+#X msg 78 514 setRT;
+#X msg 80 558 setDN;
+#X msg 80 582 setDT;
+#X msg 80 615 setdN;
+#X msg 79 636 setdT;
+#X msg 78 670 setD;
+#X connect 24 0 1 0;
+#X connect 25 0 1 0;
+#X connect 26 0 1 0;
+#X connect 27 0 1 0;
+#X connect 32 0 1 0;
+#X connect 33 0 1 0;
+#X connect 40 0 1 0;
+#X connect 42 0 1 0;
+#X connect 43 0 1 0;
+#X connect 44 0 1 0;
+#X connect 45 0 1 0;
+#X connect 46 0 1 0;
+#X connect 47 0 1 0;
+#X connect 48 0 1 0;
+#X connect 49 0 1 0;
+#X connect 50 0 1 0;
+#X connect 51 0 1 0;
+#X connect 52 0 1 0;
diff --git a/help/help-iCircle3D.pd b/help/help-iCircle3D.pd
new file mode 100755
index 0000000..1d93cea
--- /dev/null
+++ b/help/help-iCircle3D.pd
@@ -0,0 +1,70 @@
+#N canvas 277 111 566 710 10;
+#X text 177 107 1 : name;
+#X text 285 12 Circlular interaction;
+#X text 179 41 This object sould be used for the simulation of interaction
+between a collection of masse and a circle;
+#X text 123 74 message to change parametter / default value / creation
+arg number / description;
+#X text 198 125 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 104 332 setRmin 0;
+#X msg 105 355 setRmax 1;
+#X text 200 374 minimal and maximal radius of the circle. If the mass
+is outside or inside this circles \, it will not interact with this
+link.;
+#X text 199 432 constant force normal to the circle.;
+#X msg 103 413 setFN 0;
+#X obj 20 632 iCircle3D;
+#X obj 37 655 pmpd.iCircle3D;
+#X text 176 170 2 : X coordonate of the orientation vector of the circle
+;
+#X text 175 195 3 : Y coordonate of the orientation vector of the circle
+;
+#X text 209 237 normal vector of the circle;
+#X msg 108 255 setX 0;
+#X msg 107 280 setY 0;
+#X msg 107 303 setZ 0;
+#X text 175 255 5 : center circle X;
+#X text 175 279 6 : center circle Y;
+#X text 174 304 7 : center circle Z;
+#X msg 105 171 setVX 0;
+#X msg 105 196 setVY 0;
+#X msg 107 218 setVZ 0;
+#X text 199 318 center of the circle;
+#X text 176 332 8 : Minimum Radius;
+#X text 176 355 9 : Maximum Radius;
+#X text 171 415 10 : constante Normal Force;
+#X text 170 448 11 : normal rigidity;
+#X text 176 219 4 : Z coordonate of the orientation vector of the circle
+;
+#X text 201 466 Force is proportional to the distance between the masse
+and the circle plane.;
+#X msg 104 448 setKN 0;
+#X text 168 493 12 : damping;
+#X text 199 509 normal (to the circle plane) damping to the masses.
+;
+#X msg 104 493 setD 0;
+#X text 170 560 14 : Normal constant displacement;
+#X text 171 589 15 : displace the masse proportionaly to it's depth
+of the mass in the interactor;
+#X msg 103 558 setdN 0;
+#X msg 104 589 setdKN 0;
+#X text 170 532 13 : maximum profound of the circle interaction;
+#X text 168 642 this object is like iPlane3D \, but it's action is
+more limited in space.;
+#X msg 104 532 setPmax 10000;
+#X connect 5 0 10 0;
+#X connect 6 0 10 0;
+#X connect 9 0 10 0;
+#X connect 15 0 10 0;
+#X connect 16 0 10 0;
+#X connect 17 0 10 0;
+#X connect 21 0 10 0;
+#X connect 22 0 10 0;
+#X connect 23 0 10 0;
+#X connect 31 0 10 0;
+#X connect 34 0 10 0;
+#X connect 37 0 10 0;
+#X connect 38 0 10 0;
+#X connect 41 0 10 0;
diff --git a/help/help-iCylinder3D.pd b/help/help-iCylinder3D.pd
new file mode 100755
index 0000000..ce643a3
--- /dev/null
+++ b/help/help-iCylinder3D.pd
@@ -0,0 +1,90 @@
+#N canvas 338 52 610 896 10;
+#X text 276 10 Cylinder interaction;
+#X text 166 610 15 : minimum height of the cylinder interaction;
+#X text 168 641 16 : minimum height of the cylinder interaction;
+#X text 167 670 17 : tengential constant force;
+#X text 167 695 18 : tangential rigidity;
+#X text 168 727 19 : normal constant displacement;
+#X text 167 757 20 : tangential constant displacement;
+#X text 166 786 21 : normal displacement proportional to 1/R;
+#X text 166 812 22 : tangential displacement proportional to 1/R;
+#X text 175 118 1 : name;
+#X text 121 76 message to change parametter / default value / creation
+arg number / description;
+#X text 196 136 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 81 343 setRmin 0;
+#X msg 82 366 setRmax 1;
+#X text 198 385 minimal and maximal radius of the circle. If the mass
+is outside or inside this circles \, it will not interact with this
+link.;
+#X msg 80 424 setFN 0;
+#X text 174 181 2 : X coordonate of the orientation vector of the circle
+;
+#X text 173 206 3 : Y coordonate of the orientation vector of the circle
+;
+#X text 207 248 normal vector of the circle;
+#X msg 85 266 setX 0;
+#X msg 84 291 setY 0;
+#X msg 84 314 setZ 0;
+#X msg 82 182 setVX 0;
+#X msg 83 207 setVY 0;
+#X msg 84 229 setVZ 0;
+#X text 197 329 center of the circle;
+#X text 174 343 8 : Minimum Radius;
+#X text 174 366 9 : Maximum Radius;
+#X text 169 426 10 : constante Normal Force;
+#X text 168 459 11 : normal rigidity;
+#X text 174 230 4 : Z coordonate of the orientation vector of the circle
+;
+#X msg 81 459 setKN 0;
+#X text 166 504 12 : damping;
+#X msg 81 504 setD 0;
+#X msg 78 731 setdN 0;
+#X obj 9 866 iCylinder3D;
+#X obj 30 840 pmpd.iCylinder3D;
+#X text 177 39 This object sould be used for the simulation of interaction
+between a collection of masse and a cylinder;
+#X text 173 266 5 : center X;
+#X text 173 290 6 : center Y;
+#X text 172 315 7 : center Z;
+#X text 197 443 constant force normal to the cylinder.;
+#X text 199 477 Force is proportional to the distance between the masse
+and the cylindre center.;
+#X text 197 520 normal (to the cylinder surface) damping to the masses.
+;
+#X text 166 536 13 : Normal force proportional to 1/distance to the
+center of the cylinder;
+#X msg 78 610 setPmin -10000;
+#X msg 80 639 setPmax 10000;
+#X msg 78 756 setdT 0;
+#X text 166 574 14 : Normal force proportional to 1/square(distance)
+to the center of the cylinder;
+#X msg 80 670 setFN 0;
+#X msg 81 705 setKN 0;
+#X msg 82 575 setG 0;
+#X msg 83 538 setRN 0;
+#X msg 77 782 setdKN 0;
+#X msg 77 807 setdKT 0;
+#X connect 12 0 35 0;
+#X connect 13 0 35 0;
+#X connect 15 0 35 0;
+#X connect 19 0 35 0;
+#X connect 20 0 35 0;
+#X connect 21 0 35 0;
+#X connect 22 0 35 0;
+#X connect 23 0 35 0;
+#X connect 24 0 35 0;
+#X connect 31 0 35 0;
+#X connect 33 0 35 0;
+#X connect 34 0 35 0;
+#X connect 45 0 35 0;
+#X connect 46 0 35 0;
+#X connect 47 0 35 0;
+#X connect 49 0 35 0;
+#X connect 50 0 35 0;
+#X connect 51 0 35 0;
+#X connect 52 0 35 0;
+#X connect 53 0 35 0;
+#X connect 54 0 35 0;
diff --git a/help/help-iLine2D.pd b/help/help-iLine2D.pd
new file mode 100755
index 0000000..3c112ec
--- /dev/null
+++ b/help/help-iLine2D.pd
@@ -0,0 +1,58 @@
+#N canvas 508 171 589 636 10;
+#X text 163 39 This object sould be used for the simulation of interaction
+between a collection of masse and a line.;
+#X text 175 273 6 : maximum depth (1);
+#X text 266 11 interaction with a line;
+#X text 169 513 12 : Normal displacement;
+#X text 169 544 13 : tengential displacement;
+#X text 177 107 1 : name;
+#X text 123 74 message to change parametter / default value / creation
+arg number / description;
+#X text 198 125 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 108 303 setFN 0;
+#X msg 110 383 setKN 0;
+#X msg 108 512 setdN 0;
+#X obj 17 577 iLine2D;
+#X obj 34 600 pmpd.iLine2D;
+#X msg 106 194 setY1 0;
+#X msg 107 240 setY2 0;
+#X msg 105 169 setX1 -1;
+#X msg 106 217 setX2 1;
+#X text 176 169 2 : X coordonate of the the 1st point of the line;
+#X text 176 193 3 : Y coordonate of the the 1st point of the line;
+#X text 176 216 4 : X coordonate of the the 2nd point of the line;
+#X text 176 240 5 : Y coordonate of the the 2nd point of the line;
+#X msg 107 273 setPmax 1;
+#X text 201 257 X and Y position of the 2 points defining the line.
+;
+#X text 199 288 maximum depth of the interaction line.;
+#X text 175 305 7 : Normal constant force;
+#X text 175 325 8 : tengential constant force;
+#X text 174 383 9 : normal rigidity;
+#X text 168 445 10 : Normal damping;
+#X text 168 471 11 : Tengential damping;
+#X text 199 347 normal and tangential (to the line) constant forces
+apply to the masse when it is in interaction with this object.;
+#X msg 109 327 setFT 0;
+#X msg 109 445 setDN 0;
+#X text 199 397 normal rigidity. Forces are proportional to the depth
+between the masse and the line. The force is aply only to one side
+of the line.;
+#X text 199 489 normal and tangential damping for the masse.;
+#X msg 109 472 setDT 0;
+#X msg 107 543 setdT 0;
+#X text 198 564 displace the mass when it is in the interactor field
+;
+#X connect 8 0 11 0;
+#X connect 9 0 11 0;
+#X connect 10 0 11 0;
+#X connect 13 0 11 0;
+#X connect 14 0 11 0;
+#X connect 15 0 11 0;
+#X connect 16 0 11 0;
+#X connect 21 0 11 0;
+#X connect 31 0 11 0;
+#X connect 34 0 11 0;
+#X connect 35 0 11 0;
diff --git a/help/help-iPlane3D.pd b/help/help-iPlane3D.pd
new file mode 100755
index 0000000..96c3911
--- /dev/null
+++ b/help/help-iPlane3D.pd
@@ -0,0 +1,55 @@
+#N canvas 4 8 610 587 10;
+#X text 174 327 8 : constante Normal Force;
+#X text 175 353 9 : normal rigidity;
+#X text 166 405 10 : normal damping;
+#X text 161 463 12 : normal displacement;
+#X text 174 258 5 : X point of the plane;
+#X text 173 281 6 : Y point of the plane;
+#X text 173 304 7 : Z point of the plane;
+#X text 162 491 13 : dormal displacement (proportional to the pronfondary
+of the point);
+#X text 175 107 1 : name;
+#X text 121 74 message to change parametter / default value / creation
+arg number / description;
+#X text 196 125 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 95 327 setFN 0;
+#X text 207 237 normal vector of the circle;
+#X msg 96 255 setX 0;
+#X msg 95 280 setY 0;
+#X msg 95 303 setZ 0;
+#X msg 93 171 setVX 0;
+#X msg 93 196 setVY 0;
+#X msg 95 218 setVZ 0;
+#X text 196 376 Force is proportional to the distance between the masse
+and the circle plane.;
+#X msg 95 354 setKN 0;
+#X msg 96 400 setD 0;
+#X msg 95 433 setPmax 10000;
+#X msg 94 462 setdN 0;
+#X msg 95 493 setdKN 0;
+#X text 283 12 Plane interaction;
+#X obj 21 521 iPlane3D;
+#X obj 38 544 pmpd.iPlane3D;
+#X text 177 41 This object sould be used for the simulation of interaction
+between a collection of masse and a plane;
+#X text 174 170 2 : X coordonate of the orientation vector of the plane
+;
+#X text 173 195 3 : Y coordonate of the orientation vector of the plane
+;
+#X text 174 219 4 : Z coordonate of the orientation vector of the plane
+;
+#X text 162 433 11 : maximum profound of the circle interaction;
+#X connect 11 0 26 0;
+#X connect 13 0 26 0;
+#X connect 14 0 26 0;
+#X connect 15 0 26 0;
+#X connect 16 0 26 0;
+#X connect 17 0 26 0;
+#X connect 18 0 26 0;
+#X connect 20 0 26 0;
+#X connect 21 0 26 0;
+#X connect 22 0 26 0;
+#X connect 23 0 26 0;
+#X connect 24 0 26 0;
diff --git a/help/help-iSeg2D.pd b/help/help-iSeg2D.pd
new file mode 100755
index 0000000..4025c36
--- /dev/null
+++ b/help/help-iSeg2D.pd
@@ -0,0 +1,64 @@
+#N canvas 378 178 579 646 10;
+#X text 175 273 6 : maximum depth (1);
+#X text 169 513 12 : Normal displacement;
+#X text 169 544 13 : tengential displacement;
+#X text 177 107 1 : name;
+#X text 123 74 message to change parametter / default value / creation
+arg number / description;
+#X text 198 125 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 108 303 setFN 0;
+#X msg 110 383 setKN 0;
+#X msg 108 512 setdN 0;
+#X msg 106 194 setY1 0;
+#X msg 107 240 setY2 0;
+#X msg 105 169 setX1 -1;
+#X msg 106 217 setX2 1;
+#X msg 107 273 setPmax 1;
+#X text 175 305 7 : Normal constant force;
+#X text 175 325 8 : tengential constant force;
+#X text 174 383 9 : normal rigidity;
+#X text 168 445 10 : Normal damping;
+#X text 168 471 11 : Tengential damping;
+#X msg 109 327 setFT 0;
+#X msg 109 445 setDN 0;
+#X text 199 397 normal rigidity. Forces are proportional to the depth
+between the masse and the line. The force is aply only to one side
+of the line.;
+#X text 199 489 normal and tangential damping for the masse.;
+#X msg 109 472 setDT 0;
+#X msg 107 543 setdT 0;
+#X text 198 564 displace the mass when it is in the interactor field
+;
+#X text 266 11 interaction with a segment;
+#X text 163 39 This object sould be used for the simulation of interaction
+between a collection of masse and a segment.;
+#X text 135 596 this object is like iLine2D \, but the action is more
+limited in space;
+#X obj 17 577 iSeg2D;
+#X obj 34 600 pmpd.iSeg2D;
+#X text 177 169 2 : X coordonate of the the 1st point of the segment
+;
+#X text 176 193 3 : Y coordonate of the the 1st point of the segment
+;
+#X text 176 216 4 : X coordonate of the the 2nd point of the segment
+;
+#X text 176 240 5 : Y coordonate of the the 2nd point of the segment
+;
+#X text 201 257 X and Y position of the 2 points defining the segment.
+;
+#X text 199 288 maximum depth of the interaction segment.;
+#X text 199 347 normal and tangential (to the segment) constant forces
+apply to the masse when it is in interaction with this object.;
+#X connect 6 0 29 0;
+#X connect 7 0 29 0;
+#X connect 8 0 29 0;
+#X connect 9 0 29 0;
+#X connect 10 0 29 0;
+#X connect 11 0 29 0;
+#X connect 12 0 29 0;
+#X connect 13 0 29 0;
+#X connect 20 0 29 0;
+#X connect 23 0 29 0;
+#X connect 24 0 29 0;
diff --git a/help/help-iSphere3D.pd b/help/help-iSphere3D.pd
new file mode 100755
index 0000000..2299db4
--- /dev/null
+++ b/help/help-iSphere3D.pd
@@ -0,0 +1,67 @@
+#N canvas 37 20 614 708 10;
+#X text 247 6 Spherical interaction;
+#X text 181 182 2 : X coordonate of the center of the sphere;
+#X text 170 555 13 : constant displacement normal to the circle. (0)
+;
+#X text 171 580 14 : normal displacement proportional to 1/distance
+between the masse and the sphere.;
+#X text 172 517 12 : normal force proportional to 1/sqare(distance)
+between the masse and the sphere.;
+#X text 169 615 15 : normal displacement proportional to 1/sqare(distance)
+between the masse and the sphere.;
+#X text 171 486 11 : normal constant displacement;
+#X text 175 118 1 : name;
+#X text 121 76 message to change parametter / default value / creation
+arg number / description;
+#X text 196 136 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 80 257 setRmin 0;
+#X msg 81 280 setRmax 1;
+#X msg 78 340 setFN 0;
+#X msg 79 378 setKN 0;
+#X msg 79 485 setdN 0;
+#X msg 79 579 setdRN 0;
+#X msg 78 518 setG 0;
+#X obj 17 659 iSphere3D;
+#X obj 78 659 pmpd.iSphere3D;
+#X text 177 39 This object sould be used for the simulation of interaction
+between a collection of masse and a Sphere;
+#X msg 80 182 setX 0;
+#X msg 79 207 setY 0;
+#X msg 79 230 setZ 0;
+#X text 179 208 3 : Y coordonate of the center of the sphere;
+#X text 178 233 4 : Z coordonate of the center of the sphere;
+#X text 177 258 5 : Minimum Radius;
+#X text 177 279 6 : Maximum Radius;
+#X text 203 297 minimal and maximal radius of the sphere. If the mass
+is outside or inside this sphere \, it will not interact with this
+link.;
+#X text 204 356 constant force normal to the sphere.;
+#X text 204 396 Force is proportional to the distance between the masse
+and the sphere center.;
+#X text 175 338 7 : constante Normal Force;
+#X text 175 377 8 : normal rigidity;
+#X text 178 423 9 : normal forces proportional to 1/distance between
+the masse and the sphere.;
+#X text 173 456 10 : damping;
+#X msg 78 457 setDN 0;
+#X text 204 471 normal (to the sphere surface) damping to the masses.
+;
+#X msg 79 553 setdKN 0;
+#X msg 78 620 setdGN 0;
+#X msg 79 425 setFRN;
+#X connect 10 0 17 0;
+#X connect 11 0 17 0;
+#X connect 12 0 17 0;
+#X connect 13 0 17 0;
+#X connect 14 0 17 0;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 17 0;
+#X connect 34 0 17 0;
+#X connect 36 0 17 0;
+#X connect 37 0 17 0;
+#X connect 38 0 17 0;
diff --git a/help/help-lia.pd b/help/help-lia.pd
new file mode 100755
index 0000000..6e606e3
--- /dev/null
+++ b/help/help-lia.pd
@@ -0,0 +1,114 @@
+#N canvas 331 134 656 710 10;
+#X obj 129 501 lia;
+#N canvas 85 7 622 478 physical 0;
+#X text 23 268 Generated force is the sum of 3 differents forces :
+;
+#X text 102 142 eL[t] = L[t] - L[0];
+#X text 78 166 -> Elongation-Speed of a link :;
+#X text 101 184 speedOf(eL[t]) = eL[t] - eL[t-1];
+#X text 78 106 -> Elongation of a link (eL) is equal to the length
+of the link minus its initial length :;
+#X text 78 46 -> Length of a link (L) is equal to the difference between
+positions of Masses (M1 \, M2) :;
+#X text 102 79 L[t] = positionOf(M1[t]) - positionOf(M2[t]);
+#X text 78 206 -> Speed of a mass :;
+#X text 77 346 -> Damping of a link (proportional to) :;
+#X text 77 385 -> Damping of a mass is proportional to :;
+#X text 102 224 speedOf(M[t]) = positionOf(M[t-1]) - positionOf(M[t])
+;
+#X text 77 306 -> Rigidity of a link (proportional to) :;
+#X text 100 403 Fdm :: D2 * speedOf(M[t]);
+#X text 100 364 Fdl :: D * speedOf(eL[t]);
+#X text 100 324 Frl :: K * eL[t];
+#X text 24 8 Notation (at time t) :;
+#X restore 239 679 pd physical equations;
+#X text 217 593 value range :;
+#X text 260 13 link between 2 masses;
+#X text 88 562 1 : force to apply to mass 1 (float);
+#X text 89 530 2 : force to apply to mass 2 (float);
+#X text 257 381 if the size of the link is < Lmin then force of the
+link will be null;
+#X text 263 432 if the size of the link is > Lmax then force of the
+link will be null;
+#X text 242 622 K \, D \, D2 are positive. Negative values make strange
+(non physical) things. High values can cause numerical instability.
+;
+#X obj 25 501 link;
+#X obj 65 501 pmpd.link;
+#X text 127 471 2 : position of mass 2 (float);
+#X floatatom 25 562 5 0 0 0 - - -;
+#X floatatom 44 529 5 0 0 0 - - -;
+#X text 225 68 1 : name;
+#X floatatom 93 471 5 0 0 0 - - -;
+#X msg 105 125 setL 0;
+#X msg 105 154 setK 0;
+#X msg 105 184 setD 0;
+#X msg 104 214 setD2 0;
+#X text 226 122 2 : Lenght;
+#X text 250 139 change Length of the link;
+#X text 226 153 3 : rigidity;
+#X text 249 168 change rigidity;
+#X text 230 238 change position of mass 1;
+#X msg 106 265 bang;
+#X text 228 258 compute and output forces \, according to the last
+masses positions;
+#X msg 107 291 reset;
+#X msg 109 316 resetF;
+#X msg 109 338 resetL;
+#X msg 110 366 setLmin 0;
+#X text 229 185 4 : Damping of the link deformation;
+#X text 231 214 5 : Damping of the masses speed;
+#X obj 105 240 0;
+#X text 227 288 reset position of masses and set speed of the link
+to zero;
+#X text 230 314 reset damping and inertial force of the link.;
+#X text 228 339 set the length of the liaison to it's curent lengh
+;
+#X text 234 363 set the minimum size of the link;
+#X text 233 416 set the maximum size of the link;
+#X msg 110 416 setLmax 10000;
+#X text 250 84 you can use it in pd to send messages / bang / etc to
+the lia. this is for simplifying connection.;
+#N canvas 292 12 556 402 Lmin 0;
+#X text 23 14 Lmin and Lmax are useful for non-linear links;
+#X text 24 42 If the length of the link is < Lmin then force of the
+link will be null;
+#X text 24 86 If the length of the link is > Lmax then force of the
+link will be null;
+#X text 13 137 Case Lmin = 0 and Lmax = 10 :;
+#X text 38 163 At L = 0 \, links can break (a bit like a magnet.);
+#X text 38 183 At L = 10 \, this is a repulsive-only link useful for
+interaction between two structures.;
+#X text 12 237 Case Lmin = 10 and Lmax = very positive :;
+#X text 38 262 At L = 10 \, this is an attractive link only;
+#X text 13 304 note : D2 is damping associated with the mass but not
+the link. So it's not affected by Lmin and Lmax;
+#X restore 477 456 pd Lmin Lmax exemple;
+#N canvas 0 0 231 186 name 0;
+#X obj 23 6 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1
+;
+#X obj 23 27 s lia_foo;
+#X obj 116 102 lia lia_foo;
+#X obj 19 125 print lia1;
+#X obj 116 126 print lia2;
+#X obj 19 101 lia lia_foo;
+#X connect 0 0 1 0;
+#X connect 2 0 4 0;
+#X connect 5 0 3 0;
+#X restore 496 117 pd name example;
+#X text 138 33 link : get position of masses \, output forces to apply
+;
+#X connect 9 0 12 0;
+#X connect 9 1 13 0;
+#X connect 15 0 9 1;
+#X connect 16 0 9 0;
+#X connect 17 0 9 0;
+#X connect 18 0 9 0;
+#X connect 19 0 9 0;
+#X connect 25 0 9 0;
+#X connect 27 0 9 0;
+#X connect 28 0 9 0;
+#X connect 29 0 9 0;
+#X connect 30 0 9 0;
+#X connect 33 0 9 0;
+#X connect 39 0 9 0;
diff --git a/help/help-lia2D.pd b/help/help-lia2D.pd
new file mode 100755
index 0000000..63619d4
--- /dev/null
+++ b/help/help-lia2D.pd
@@ -0,0 +1,68 @@
+#N canvas 0 0 673 682 10;
+#X text 250 618 forces depend of the physicals properies of the liaison
+;
+#X text 226 36 link2D : get position of masses \, output forces;
+#X obj 78 536 pmpd.link2D;
+#X obj 154 536 lia2D;
+#X text 260 13 link between 2 masses;
+#X text 224 593 1 : force to apply to mass 1 (float);
+#X text 224 566 2 : force to apply to mass 2 (float);
+#X text 251 389 if the size of the link is < Lmin then force of the
+link will be null;
+#X text 257 440 if the size of the link is > Lmax then force of the
+link will be null;
+#X text 225 68 1 : name;
+#X msg 105 125 setL 0;
+#X msg 105 154 setK 0;
+#X msg 105 184 setD 0;
+#X msg 104 214 setD2 0;
+#X text 226 122 2 : Lenght;
+#X text 250 139 change Length of the link;
+#X text 226 153 3 : rigidity;
+#X text 249 168 change rigidity;
+#X text 230 238 change position of mass 1;
+#X msg 104 270 bang;
+#X text 229 266 compute and output forces \, according to the last
+masses positions;
+#X msg 106 300 reset;
+#X msg 105 326 resetF;
+#X msg 105 350 resetL;
+#X msg 104 374 setLmin 0;
+#X text 229 185 4 : Damping of the link deformation;
+#X text 231 214 5 : Damping of the masses speed;
+#X text 226 297 reset position of masses and set speed of the link
+to zero;
+#X text 226 324 reset damping and inertial force of the link.;
+#X text 224 351 set the length of the liaison to it's curent lengh
+;
+#X text 228 371 set the minimum size of the link;
+#X text 227 424 set the maximum size of the link;
+#X msg 104 424 setLmax 10000;
+#X text 250 84 you can use it in pd to send messages / bang / etc to
+the lia. this is for simplifying connection.;
+#X obj 33 536 link2D;
+#X msg 103 238 position2D $f1 $f2;
+#X msg 102 508 position2D $f1 $f2;
+#X text 224 508 position of mass 2;
+#X obj 64 563 unpack s f f;
+#X obj 33 591 unpack s f f;
+#X text 130 635 this object is a 3D version of link. more exemple can
+be find in the link help;
+#X msg 104 475 setM 1;
+#X text 227 472 change mucle force : a muscle can change the link size
+(link size = muscle * lenght);
+#X connect 10 0 34 0;
+#X connect 11 0 34 0;
+#X connect 12 0 34 0;
+#X connect 13 0 34 0;
+#X connect 19 0 34 0;
+#X connect 21 0 34 0;
+#X connect 22 0 34 0;
+#X connect 23 0 34 0;
+#X connect 24 0 34 0;
+#X connect 32 0 34 0;
+#X connect 34 0 39 0;
+#X connect 34 1 38 0;
+#X connect 35 0 34 0;
+#X connect 36 0 34 1;
+#X connect 41 0 34 0;
diff --git a/help/help-lia3D.pd b/help/help-lia3D.pd
new file mode 100755
index 0000000..13b9f4b
--- /dev/null
+++ b/help/help-lia3D.pd
@@ -0,0 +1,68 @@
+#N canvas 186 56 629 692 10;
+#X obj 156 538 lia3D;
+#X text 230 37 lia3D : get position of masses \, output force;
+#X text 133 637 this object is a 3D version of link. more exemple can
+be find in the link help;
+#X obj 80 538 pmpd.link3D;
+#X msg 67 511 position3D $f1 $f2 $f3;
+#X text 253 620 forces depend of the physicals properies of the liaison
+;
+#X text 260 13 link between 2 masses;
+#X text 227 595 1 : force to apply to mass 1 (float);
+#X text 227 568 2 : force to apply to mass 2 (float);
+#X text 251 389 if the size of the link is < Lmin then force of the
+link will be null;
+#X text 257 440 if the size of the link is > Lmax then force of the
+link will be null;
+#X text 225 68 1 : name;
+#X msg 105 125 setL 0;
+#X msg 105 154 setK 0;
+#X msg 105 184 setD 0;
+#X msg 104 214 setD2 0;
+#X text 226 122 2 : Lenght;
+#X text 250 139 change Length of the link;
+#X text 226 153 3 : rigidity;
+#X text 249 168 change rigidity;
+#X text 230 238 change position of mass 1;
+#X msg 104 270 bang;
+#X text 229 266 compute and output forces \, according to the last
+masses positions;
+#X msg 106 300 reset;
+#X msg 105 326 resetF;
+#X msg 105 350 resetL;
+#X msg 104 374 setLmin 0;
+#X text 229 185 4 : Damping of the link deformation;
+#X text 231 214 5 : Damping of the masses speed;
+#X text 226 297 reset position of masses and set speed of the link
+to zero;
+#X text 226 324 reset damping and inertial force of the link.;
+#X text 224 351 set the length of the liaison to it's curent lengh
+;
+#X text 228 371 set the minimum size of the link;
+#X text 227 424 set the maximum size of the link;
+#X msg 104 424 setLmax 10000;
+#X text 250 84 you can use it in pd to send messages / bang / etc to
+the lia. this is for simplifying connection.;
+#X text 227 510 position of mass 2;
+#X obj 36 538 link3D;
+#X msg 58 239 position3D $f1 $f2 $f3;
+#X obj 67 565 unpack s f f f;
+#X obj 36 593 unpack s f f f;
+#X msg 104 475 setM 1;
+#X text 227 472 change mucle force : a muscle can change the link size
+(link size = muscle * lenght);
+#X connect 4 0 37 1;
+#X connect 12 0 37 0;
+#X connect 13 0 37 0;
+#X connect 14 0 37 0;
+#X connect 15 0 37 0;
+#X connect 21 0 37 0;
+#X connect 23 0 37 0;
+#X connect 24 0 37 0;
+#X connect 25 0 37 0;
+#X connect 26 0 37 0;
+#X connect 34 0 37 0;
+#X connect 37 0 40 0;
+#X connect 37 1 39 0;
+#X connect 38 0 37 0;
+#X connect 41 0 37 0;
diff --git a/help/help-masse.pd b/help/help-masse.pd
new file mode 100755
index 0000000..0636432
--- /dev/null
+++ b/help/help-masse.pd
@@ -0,0 +1,55 @@
+#N canvas 10 17 695 631 10;
+#X obj 141 520 masse;
+#X obj 74 520 pmpd.mass;
+#X text 317 6 masse;
+#X text 153 80 M is positive. negative value give non physical things.
+;
+#X text 152 37 the somme of the forces apply to a masse modifie its
+velocity (depending of it's weight). the position his change according
+to the velocity and the weight of the masse;
+#X text 259 169 2 : M = weith of the masse;
+#X text 304 321 if the position of the masse is < Xmin then position
+will be Xmin;
+#X msg 123 448 resetF;
+#X text 258 452 reset the total forces applied to the masse;
+#X msg 124 417 reset;
+#X text 258 413 reset position (to it's initial value) and forces to
+zero. send it's position to it's outlet.;
+#X text 281 224 change position of the masse \, and reset memory (for
+history).;
+#X text 283 188 change weith of the masse;
+#X text 302 307 set the minimum and maximum position of the masse;
+#X msg 124 356 bang;
+#X msg 122 483 loadbang;
+#X text 251 485 output curent position;
+#X text 262 353 compute position and output it;
+#X text 260 387 add force to this mass;
+#X msg 120 173 setM 1;
+#X text 261 117 1 : name;
+#X text 282 135 this is the name of the mass. you can set value to
+this name instead of making a pd connection.;
+#X text 156 23 mass : get liaison forces and output position;
+#X msg 120 283 setXmin -10000 \, setXmax 10000;
+#X msg 121 209 setX 0;
+#X text 259 208 3 : position of the masse;
+#X obj 36 520 mass;
+#X floatatom 36 589 5 0 0 0 - - -;
+#X floatatom 45 572 5 0 0 0 - - -;
+#X floatatom 55 554 5 0 0 0 - - -;
+#X text 97 553 X velocity of the masse;
+#X text 95 572 X force apply to the masse;
+#X text 95 590 X positin of the masse;
+#X text 260 308 Xmin;
+#X text 260 324 Xmax;
+#X obj 124 386 0;
+#X connect 7 0 26 0;
+#X connect 9 0 26 0;
+#X connect 14 0 26 0;
+#X connect 15 0 26 0;
+#X connect 19 0 26 0;
+#X connect 23 0 26 0;
+#X connect 24 0 26 0;
+#X connect 26 0 27 0;
+#X connect 26 1 28 0;
+#X connect 26 2 29 0;
+#X connect 35 0 26 0;
diff --git a/help/help-masse2D.pd b/help/help-masse2D.pd
new file mode 100755
index 0000000..83d3bf4
--- /dev/null
+++ b/help/help-masse2D.pd
@@ -0,0 +1,77 @@
+#N canvas 311 -11 712 738 10;
+#X obj 73 625 pmpd.mass2D;
+#X text 317 6 masse;
+#X text 152 81 M is positive. negative value give non physical things.
+;
+#X text 152 37 the somme of the forces apply to a masse modifie its
+velocity (depending of it's weight). the position his change according
+to the velocity and the weight of the masse;
+#X text 259 149 2 : M = weith of the masse;
+#X text 259 181 3 : X = initial position of the masse;
+#X text 259 202 4 : Y = initial position of the masse;
+#X text 342 305 if the position of the masse is < Xmin then position
+will be Xmin;
+#X msg 115 519 resetF;
+#X text 246 523 reset the total forces applied to the masse;
+#X msg 116 496 reset;
+#X text 246 492 reset position (to it's initial value) and forces to
+zero. send it's position to it's outlet.;
+#X text 283 220 change position of the masse \, and reset memory (for
+history).;
+#X text 282 162 change weith of the masse;
+#X text 340 289 set the minimum and maximum position of the masse;
+#X text 283 375 when the masses are at Xmin \, Xmax \, Ymon \, Ymax
+\, Zmin or Zmax \, the mouvement is possible only if force apply is
+superior to the threshold;
+#X text 283 362 change the threshold value;
+#X msg 116 450 bang;
+#X msg 115 541 off;
+#X msg 116 564 on;
+#X msg 115 588 loadbang;
+#X text 244 590 output curent position;
+#X text 246 545 stop mass mouvement;
+#X text 245 567 restart mass movement;
+#X text 252 447 compute position and output it;
+#X text 250 474 add force to this mass;
+#X msg 116 472 force3D $f1 $f2 $f3;
+#X msg 120 153 setM 1;
+#X msg 119 344 setT 0;
+#X obj 29 706 unpack s f f f;
+#X text 261 97 1 : name;
+#X text 282 115 this is the name of the mass. you can set value to
+this name instead of making a pd connection.;
+#X text 129 707 X Y Z positin of the masse;
+#X obj 44 682 unpack s f f f;
+#X obj 60 657 unpack s f f f;
+#X text 144 683 X Y Z & total force apply to the masse;
+#X text 159 659 X Y Z & total velocity of the masse;
+#X obj 29 625 mass2D;
+#X obj 149 625 masse2D;
+#X msg 120 256 setXmin -10000 \, setXmax 10000 \, setYmin -10000 \,
+setYmax 10000;
+#X text 260 277 5 : Xmin;
+#X text 260 293 6 : Xmax;
+#X text 260 309 7 : Ymin;
+#X text 260 325 8 : Ymax;
+#X text 259 343 9 : Threshold;
+#X text 156 23 mass2D : get liaison forces and output position;
+#X msg 121 182 setX 0 \, setY 0;
+#X msg 121 206 setXY 0 0 0;
+#X msg 114 427 setD 0;
+#X text 256 423 10 : set velocity damping of the mass;
+#X connect 8 0 37 0;
+#X connect 10 0 37 0;
+#X connect 17 0 37 0;
+#X connect 18 0 37 0;
+#X connect 19 0 37 0;
+#X connect 20 0 37 0;
+#X connect 26 0 37 0;
+#X connect 27 0 37 0;
+#X connect 28 0 37 0;
+#X connect 37 0 29 0;
+#X connect 37 1 33 0;
+#X connect 37 2 34 0;
+#X connect 39 0 37 0;
+#X connect 46 0 37 0;
+#X connect 47 0 37 0;
+#X connect 48 0 37 0;
diff --git a/help/help-masse3D.pd b/help/help-masse3D.pd
new file mode 100755
index 0000000..d2d506a
--- /dev/null
+++ b/help/help-masse3D.pd
@@ -0,0 +1,80 @@
+#N canvas 125 5 709 792 10;
+#X text 317 6 masse;
+#X text 152 81 M is positive. negative value give non physical things.
+;
+#X text 152 37 the somme of the forces apply to a masse modifie its
+velocity (depending of it's weight). the position his change according
+to the velocity and the weight of the masse;
+#X text 259 150 2 : M = weith of the masse;
+#X text 259 189 3 : X = initial position of the masse;
+#X text 259 210 4 : Y = initial position of the masse;
+#X text 324 327 if the position of the masse is < Xmin then position
+will be Xmin;
+#X obj 79 679 masse3D;
+#X text 259 226 5 : Z = initial position of the masse;
+#X text 259 303 6 : Xmin;
+#X text 259 319 7 : Xmax;
+#X text 259 335 8 : Ymin;
+#X text 259 351 9 : Ymax;
+#X text 252 367 10 : Zmin;
+#X text 252 383 11 : Zmax;
+#X text 252 398 12 : Threshold;
+#X msg 119 565 resetF;
+#X text 250 569 reset the total forces applied to the masse;
+#X msg 120 538 reset;
+#X text 248 534 reset position (to it's initial value) and forces to
+zero. send it's position to it's outlet.;
+#X text 285 241 change position of the masse \, and reset memory (for
+history).;
+#X text 283 169 change weith of the masse;
+#X text 323 310 set the minimum and maximum position of the masse;
+#X text 302 413 when the masses are at Xmin \, Xmax \, Ymon \, Ymax
+\, Zmin or Zmax \, the mouvement is possible only if force apply is
+superior to the threshold;
+#X msg 119 489 bang;
+#X msg 119 588 off;
+#X msg 120 610 on;
+#X msg 119 635 loadbang;
+#X text 248 637 output curent position;
+#X text 250 592 stop mass mouvement;
+#X text 249 613 restart mass movement;
+#X text 250 486 compute position and output it;
+#X text 247 515 add force to this mass;
+#X text 156 23 mass3D : get liaison forces and output position;
+#X obj 135 680 pmpd.mass3D;
+#X obj 31 678 mass3D;
+#X msg 120 514 force3D $f1 $f2 $f3;
+#X msg 120 154 setM 1;
+#X msg 121 190 setX 0 \, setY 0 \, setZ 0;
+#X msg 117 270 setXmin -10000 \, setXmax 10000 \, setYmin -10000 \,
+setYmax 10000 \, setZmin -10000 \, setZmax 10000;
+#X msg 119 397 setT 0;
+#X obj 31 759 unpack s f f f;
+#X text 261 98 1 : name;
+#X text 282 116 this is the name of the mass. you can set value to
+this name instead of making a pd connection.;
+#X text 131 760 X Y Z positin of the masse;
+#X obj 46 735 unpack s f f f;
+#X obj 62 710 unpack s f f f;
+#X text 146 736 X Y Z & total force apply to the masse;
+#X text 161 712 X Y Z & total velocity of the masse;
+#X msg 121 214 setXYZ 0 0 0;
+#X msg 119 462 setD 0;
+#X text 252 460 13 : Damp : change the velocyty damping of the mass
+;
+#X connect 16 0 35 0;
+#X connect 18 0 35 0;
+#X connect 24 0 35 0;
+#X connect 25 0 35 0;
+#X connect 26 0 35 0;
+#X connect 27 0 35 0;
+#X connect 35 0 41 0;
+#X connect 35 1 45 0;
+#X connect 35 2 46 0;
+#X connect 36 0 35 0;
+#X connect 37 0 35 0;
+#X connect 38 0 35 0;
+#X connect 39 0 35 0;
+#X connect 40 0 35 0;
+#X connect 49 0 35 0;
+#X connect 50 0 35 0;
diff --git a/help/help-pmpd.pd b/help/help-pmpd.pd
new file mode 100755
index 0000000..e805fb0
--- /dev/null
+++ b/help/help-pmpd.pd
@@ -0,0 +1,259 @@
+#N canvas 517 121 498 357 12;
+#X text 52 14 physical modeling for pure data using a collection of
+physical ojects.;
+#N canvas 0 0 623 384 read 0;
+#X text 123 207 cyrille.henry@la-kitchen.fr;
+#X text 412 312 ch20031213;
+#X text 30 25 The aim of this collection of objects is to create physical
+behavior with pure data. It's not audio synthesis. But it can be used
+for the creation of parameters that can be used for driving an audio
+or video synthesis.;
+#X text 30 101 Most of the examples use GEM \, to allow visualization
+of the "physical" geometry \, but you don't need it to use this collection.
+;
+#X text 30 161 any comments \, criticism \, suggestions \, help would
+be highly apreciated :;
+#X text 28 240 informations can be find :;
+#X text 122 263 http://drpichon.free.fr/pmpd/;
+#X restore 38 87 pd read me first;
+#N canvas 0 0 663 567 basics 0;
+#X text 34 30 Object in this collection can be mass \, link and interactor
+\, in 1D \, 2D or 3D.;
+#X text 47 69 Masses (mass \, mass2D \, mass3D) are ponctual. They've
+got a weight \, and know their position. They can move when they receive
+a force \, acording to physical rules.;
+#X text 47 126 Link (link \, link2D \, link3D) are the basic interaction
+beetween 2 masses. It is a visco-elastic link. The link object receive
+the position of 2 masses \, compute the force beetween the 2 masses
+and output a force for each mass.;
+#X text 47 202 Interactors are a kind of link \, but influence a group
+of masses at once. They can be used for global interaction. We will
+look further into it later.;
+#X text 32 272 This collection of objects can be interconnected for
+the creation of "physical" structures. Such structures can then move
+\, and distord themselves \, according to forces applied to them.;
+#X text 29 350 The resulting movements are very natural \, due to the
+physical equations used to define the objects.;
+#X text 30 418 all objects can be created using pmpd.name \, instead
+of name in order to avoid name conflict between libraries.;
+#X text 29 466 ex :;
+#X text 219 466 are the same objects.;
+#X obj 183 466 lia;
+#X obj 65 466 pmpd.link;
+#X obj 145 466 link;
+#X restore 38 115 pd basics;
+#N canvas 434 60 645 737 global_description 0;
+#X obj 34 169 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 268 print;
+#X obj 34 217 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 57 165 1;
+#X text 58 216 2;
+#X text 36 452 Here is the basic connection beetween 2 masses :;
+#X obj 40 591 lia;
+#X text 36 529 You can also create things like this :;
+#X text 32 23 For patching simplification \, objects in this collection
+only have "cold" inlets. The computation speed depends on an external
+metronome. This metronome should bang alternatively all links in the
+model and then masses of the model.;
+#X text 33 103 mass and link have a name corresponding to their class
+name. They will receive everything sent to this name.;
+#X text 159 236 clicking on bang 1 or 2 is equivalent;
+#X text 32 304 As you sould send a bang alternatively to links and
+masses \, you sould give diferent names to the links group and masses
+group.;
+#X text 36 361 Masses output their position when you bang them. This
+position depends on the forces applied to the mass.;
+#X text 36 401 Links output a force according to the position of the
+masses when you bang them. This force sould be applied to the same
+mass.;
+#X text 40 626 The masse1 will never receive forces \, so it will never
+move. It is useful for creating a structure attached to a fixed point.
+;
+#X obj 40 558 mass masse1;
+#X obj 76 591 mass masse2;
+#X obj 110 489 masse;
+#X obj 156 489 lia;
+#X obj 195 489 masse;
+#X obj 34 188 s foo1;
+#X obj 34 237 masse2D foo1;
+#X connect 0 0 20 0;
+#X connect 2 0 21 0;
+#X connect 6 1 16 0;
+#X connect 15 0 6 0;
+#X connect 16 0 6 1;
+#X connect 17 0 18 0;
+#X connect 18 0 17 0;
+#X connect 18 1 19 0;
+#X connect 19 0 18 1;
+#X connect 21 0 1 0;
+#X restore 38 144 pd global_description;
+#N canvas 0 0 762 661 test 0;
+#X msg 108 98 1;
+#X msg 74 98 0;
+#X msg 41 98 -1;
+#X msg 141 98 2;
+#X obj 15 16 loadbang;
+#X floatatom 41 169 5 0 0 0 - - -;
+#X msg 106 390 1;
+#X msg 72 390 0;
+#X msg 39 390 -1;
+#X msg 139 390 2;
+#X floatatom 39 461 5 0 0 0 - - -;
+#X floatatom 37 325 5 0 0 0 - - -;
+#X msg 106 508 1;
+#X msg 72 508 0;
+#X msg 39 508 -1;
+#X msg 139 508 2;
+#X floatatom 39 579 5 0 0 0 - - -;
+#X text 247 61 A force to a masse make it to move at a constant speed.
+You can accelerate it or decelerate it using message box. a nul force
+as no effect.;
+#X floatatom 172 267 5 0 0 0 - - -;
+#X msg 104 264 1;
+#X msg 70 264 0;
+#X msg 37 264 -1;
+#X msg 137 264 2;
+#X text 247 405 Viscosity link : the force is proportinal to the deformation
+speed of the link;
+#X text 249 265 Rigidity link : the force is proportional to the elongation
+of the link. (the right inlet is not used \, so the like take is defauld
+value : 0.) Lengh of the link is null.;
+#X text 238 529 Visco-elasic link : the effect is the somme of the
+2 previus link.;
+#X obj 15 69 s foo2;
+#X obj 41 142 mass foo2 10 0 0;
+#X obj 37 298 link foo2 0 0.1 0;
+#X obj 39 434 link foo2 0 0 0.1;
+#X obj 39 552 link foo2 0 0.1 0.1;
+#X obj 15 43 metro 300;
+#X connect 0 0 27 0;
+#X connect 1 0 27 0;
+#X connect 2 0 27 0;
+#X connect 3 0 27 0;
+#X connect 4 0 31 0;
+#X connect 6 0 29 0;
+#X connect 7 0 29 0;
+#X connect 8 0 29 0;
+#X connect 9 0 29 0;
+#X connect 12 0 30 0;
+#X connect 13 0 30 0;
+#X connect 14 0 30 0;
+#X connect 15 0 30 0;
+#X connect 18 0 28 0;
+#X connect 19 0 28 0;
+#X connect 20 0 28 0;
+#X connect 21 0 28 0;
+#X connect 22 0 28 0;
+#X connect 27 0 5 0;
+#X connect 28 0 11 0;
+#X connect 29 0 10 0;
+#X connect 30 0 16 0;
+#X connect 31 0 26 0;
+#X restore 40 265 pd test;
+#N canvas 394 231 879 595 simple_exemple 0;
+#X obj 356 237 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X obj 74 98 hradio 15 1 0 5 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#N canvas 477 25 445 299 preset 0;
+#X msg 36 193 setK 0.05 \, setD 0 \, setD2 30;
+#X msg 55 166 setK 1 \, setD 0 \, setD2 30;
+#X msg 75 138 setK 1 \, setD 0 \, setD2 200;
+#X obj 36 16 inlet;
+#X obj 115 254 outlet;
+#X msg 95 108 setK 300 \, setD 300 \, setD2 5;
+#X obj 36 43 sel 2 1 0 3 4;
+#X msg 115 78 setK 3000 \, setD 1000 \, setD2 5000;
+#X connect 0 0 4 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 0 0;
+#X connect 6 1 1 0;
+#X connect 6 2 2 0;
+#X connect 6 3 5 0;
+#X connect 6 4 7 0;
+#X connect 7 0 4 0;
+#X restore 74 119 pd preset;
+#X obj 336 237 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X text 80 415 the masse is link to the cursor with diferents kinf
+of liaison (see the preset);
+#X text 71 18 comportement of a single masse link to a fixed point
+with a visco elastic link.;
+#X text 173 95 <- diferents comportement of the link;
+#N canvas 0 0 268 186 stuff 0;
+#X obj 13 20 loadbang;
+#X obj 48 97 s \$0-lia;
+#X obj 13 72 t b b;
+#X obj 13 123 s \$0-masse;
+#X obj 13 45 metro 5;
+#X obj 89 20 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 124 92 reset;
+#X msg 89 66 resetL \, resetF;
+#X obj 89 40 t b b;
+#X connect 0 0 4 0;
+#X connect 2 0 3 0;
+#X connect 2 1 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X restore 75 65 pd stuff;
+#X text 98 346 click or move the slider ->;
+#X text 396 346 look at the mouvement of the masse (the right slider)
+;
+#X text 80 481 surch system can be usefull for replacing the line object
+of pd when more natural evolution is neaded...;
+#X obj 169 167 lia \$0-lia 0 1 0 200;
+#X obj 356 167 masse \$0-masse 10000 0;
+#X connect 1 0 2 0;
+#X connect 2 0 11 0;
+#X connect 3 0 11 0;
+#X connect 11 1 12 0;
+#X connect 12 0 0 0;
+#X connect 12 0 11 1;
+#X restore 40 292 pd simple_exemple;
+#X text 64 180 look at mass and link help file :;
+#X obj 65 198 mass;
+#X obj 65 228 link;
+#N canvas 108 97 450 541 list 0;
+#X obj 190 135 iAmbient2D;
+#X obj 305 137 iAmbient3D;
+#X obj 190 166 iCircle2D;
+#X obj 306 257 iCylinder3D;
+#X obj 305 227 iCircle3D;
+#X obj 190 196 iLine2D;
+#X obj 305 197 iPlane3D;
+#X obj 190 225 iSeg2D;
+#X obj 305 168 iSphere3D;
+#X obj 192 75 lia2D;
+#X obj 306 75 lia3D;
+#X obj 79 76 lia;
+#X obj 79 48 mass;
+#X obj 192 48 mass2D;
+#X obj 306 48 mass3D;
+#X text 78 25 1D;
+#X text 191 27 2D;
+#X text 304 28 3D;
+#X text 21 46 basic;
+#X text 19 136 interactors;
+#X text 24 328 test;
+#X obj 192 327 tLia2D;
+#X obj 307 327 tLia3D;
+#X obj 192 389 tCircle2D;
+#X obj 192 419 tLine2D;
+#X obj 192 448 tSeg2D;
+#X obj 305 480 tCylinder3D;
+#X obj 306 420 tPlane3D;
+#X obj 306 450 tCircle3D;
+#X obj 306 390 tSphere3D;
+#X obj 192 358 tSquare2D;
+#X obj 307 359 tCube3D;
+#X restore 40 322 pd list of pmpd's object;
diff --git a/help/help-tCircle2D.pd b/help/help-tCircle2D.pd
new file mode 100755
index 0000000..5a0e195
--- /dev/null
+++ b/help/help-tCircle2D.pd
@@ -0,0 +1,40 @@
+#N canvas 830 6 548 565 10;
+#X text 173 41 This object sould be used for testing the masse position.
+;
+#X text 303 9 test circle;
+#X text 173 58 It receive masse position \, and output 0/1 according
+to the position of the masse (1 if the mass is in the circle);
+#X text 98 97 message to change parametter / default value / creation
+arg number / description;
+#X msg 66 157 setX 0;
+#X msg 66 182 setY 0;
+#X msg 66 220 setRmin 0;
+#X msg 67 244 setRmax 1;
+#X text 163 199 center of the circle defining the interactor;
+#X text 165 266 minimal and maximal radius of the circle. If the mass
+is outside or inside this circles \, it will not interact with this
+link.;
+#X obj 105 408 pmpd.tCircle2D;
+#X obj 32 408 tCircle2D;
+#X floatatom 32 486 5 0 0 0 - - -;
+#X text 169 485 0/1 according to the position of the masse;
+#X msg 68 321 position2D 0 0;
+#X floatatom 56 464 5 0 0 0 - - -;
+#X floatatom 81 441 5 0 0 0 - - -;
+#X text 167 320 position of the tested mass;
+#X text 168 463 distance of the mass from the center of the circle
+;
+#X text 168 439 speed of the mass regarding the center of the circle
+;
+#X text 137 156 1 : center circle X;
+#X text 138 182 2 : center circle Y;
+#X text 137 221 3 : Minimum Radius;
+#X text 138 244 4 : Maximum Radius;
+#X connect 4 0 11 0;
+#X connect 5 0 11 0;
+#X connect 6 0 11 0;
+#X connect 7 0 11 0;
+#X connect 11 0 12 0;
+#X connect 11 1 15 0;
+#X connect 11 2 16 0;
+#X connect 14 0 11 0;
diff --git a/help/help-tCircle3D.pd b/help/help-tCircle3D.pd
new file mode 100755
index 0000000..60040a4
--- /dev/null
+++ b/help/help-tCircle3D.pd
@@ -0,0 +1,59 @@
+#N canvas 181 15 585 661 10;
+#X text 254 13 Circlular test;
+#X text 97 490 this object is like tPlane3D \, but it's action is limited
+in space (circular).;
+#X text 143 147 1 : X coordonate of the orientation vector of the circle
+;
+#X text 143 173 2 : Y coordonate of the orientation vector of the circle
+;
+#X text 144 198 3 : Z coordonate of the orientation vector of the circle
+;
+#X text 144 226 4 : center circle X;
+#X text 143 252 5 : center circle Y;
+#X text 142 275 6 : center circle Z;
+#X text 140 414 9 : maximum profound of the test;
+#X text 140 45 This object sould be used for testing the masse position.
+;
+#X text 140 62 It receive masse position \, and output 0/1 according
+to the position of the masse (1 if the mass is in the circle);
+#X text 65 101 message to change parametter / default value / creation
+arg number / description;
+#X msg 50 325 setRmin 0;
+#X msg 51 349 setRmax 1;
+#X text 164 304 center of the circle defining the interactor;
+#X text 167 367 minimal and maximal radius of the circle. If the mass
+is outside or inside this circles \, it will not interact with this
+link.;
+#X floatatom 12 619 5 0 0 0 - - -;
+#X text 149 618 0/1 according to the position of the masse;
+#X floatatom 36 597 5 0 0 0 - - -;
+#X floatatom 61 574 5 0 0 0 - - -;
+#X text 147 453 position of the tested mass;
+#X text 148 596 distance of the mass from the center of the circle
+;
+#X text 148 572 speed of the mass regarding the center of the circle
+;
+#X obj 12 541 tCircle3D;
+#X obj 85 541 pmpd.tCircle3D;
+#X msg 50 149 setVX 0;
+#X msg 50 174 setVY 0;
+#X msg 50 199 setVZ 0;
+#X msg 51 228 setX 0;
+#X msg 51 252 setY 0;
+#X msg 51 277 setZ 0;
+#X msg 48 415 setPmax 10000;
+#X text 138 326 7 : Minimum Radius;
+#X text 139 349 8 : Maximum Radius;
+#X msg 48 454 position3D 0 0 0;
+#X connect 12 0 23 0;
+#X connect 13 0 23 0;
+#X connect 23 0 16 0;
+#X connect 23 1 18 0;
+#X connect 23 2 19 0;
+#X connect 25 0 23 0;
+#X connect 26 0 23 0;
+#X connect 28 0 23 0;
+#X connect 29 0 23 0;
+#X connect 30 0 23 0;
+#X connect 31 0 23 0;
+#X connect 34 0 23 0;
diff --git a/help/help-tCube3D.pd b/help/help-tCube3D.pd
new file mode 100755
index 0000000..2021608
--- /dev/null
+++ b/help/help-tCube3D.pd
@@ -0,0 +1,37 @@
+#N canvas 14 12 620 496 10;
+#X text 137 42 This object sould be used for testing the masse position.
+;
+#X text 137 59 It receive masse position \, and output 0/1 according
+to the position of the masse (1 if the mass is in the square);
+#X text 296 15 test cube;
+#X text 214 299 if a mass is outside of this rectangle \, the mass
+will not interact with this object.;
+#X text 216 284 minimum and maximum position of the interactor.;
+#X text 77 112 message to change parametter / default value / creation
+arg number / description;
+#X obj 13 399 tCube3D;
+#X obj 76 399 pmpd.tCube3D;
+#X msg 83 156 setXmin -1;
+#X msg 83 178 setXmax 1;
+#X msg 83 200 setYmin -1;
+#X msg 83 223 setYmax 1;
+#X msg 83 246 setZmin -1;
+#X msg 83 268 setZmax 1;
+#X floatatom 13 433 5 0 0 0 - - -;
+#X text 172 431 0/1 according to the position of the masse;
+#X text 192 357 position of the tested mass;
+#X msg 84 357 position3D 0 0 0;
+#X text 186 157 1 : X minimum;
+#X text 186 178 2 : X maximum;
+#X text 185 201 3 : Y minimum;
+#X text 185 222 4 : Y maximum;
+#X text 186 248 5 : Z minimum;
+#X text 185 268 6 : Z maximum;
+#X connect 6 0 14 0;
+#X connect 8 0 6 0;
+#X connect 9 0 6 0;
+#X connect 10 0 6 0;
+#X connect 11 0 6 0;
+#X connect 12 0 6 0;
+#X connect 13 0 6 0;
+#X connect 17 0 6 0;
diff --git a/help/help-tCylinder3D.pd b/help/help-tCylinder3D.pd
new file mode 100755
index 0000000..4f45a9e
--- /dev/null
+++ b/help/help-tCylinder3D.pd
@@ -0,0 +1,58 @@
+#N canvas 8 15 584 655 10;
+#X text 266 11 Cylinder test;
+#X text 168 39 This object sould be used for testing the relative position
+of a masse depending on a cylinder;
+#X text 166 583 0/1 according to the position of the masse;
+#X text 166 562 distance from the center of the cylinder;
+#X text 167 541 speed from the center of the cylinder;
+#X text 104 81 message to change parametter / default value / creation
+arg number / description;
+#X msg 88 289 setRmin 0;
+#X msg 89 312 setRmax 1;
+#X text 205 331 minimal and maximal radius of the circle. If the mass
+is outside or inside this circles \, it will not interact with this
+link.;
+#X text 214 194 normal vector of the circle;
+#X msg 92 212 setX 0;
+#X msg 91 237 setY 0;
+#X msg 91 260 setZ 0;
+#X msg 89 128 setVX 0;
+#X msg 90 153 setVY 0;
+#X msg 91 175 setVZ 0;
+#X text 204 275 center of the circle;
+#X msg 88 380 setPmin -10000;
+#X msg 90 409 setPmax 10000;
+#X obj 13 517 tCylinder3D;
+#X obj 91 517 pmpd.tCylinder3D;
+#X text 181 127 1 : X coordonate of the orientation vector of the circle
+;
+#X text 180 152 2 : Y coordonate of the orientation vector of the circle
+;
+#X text 181 176 3 : Z coordonate of the orientation vector of the circle
+;
+#X text 180 212 4 : center X;
+#X text 180 236 5 : center Y;
+#X text 179 261 6 : center Z;
+#X text 181 289 7 : Minimum Radius;
+#X text 181 312 8 : Maximum Radius;
+#X text 182 382 9 : minimum height of the cylinder interaction;
+#X text 178 411 10 : maximum height of the cylinder interaction;
+#X floatatom 13 584 5 0 0 0 - - -;
+#X floatatom 43 563 5 0 0 0 - - -;
+#X floatatom 74 543 5 0 0 0 - - -;
+#X text 188 464 position of the tested mass;
+#X msg 78 464 position3D 0 0 0;
+#X connect 6 0 19 0;
+#X connect 7 0 19 0;
+#X connect 10 0 19 0;
+#X connect 11 0 19 0;
+#X connect 12 0 19 0;
+#X connect 13 0 19 0;
+#X connect 14 0 19 0;
+#X connect 15 0 19 0;
+#X connect 17 0 19 0;
+#X connect 18 0 19 0;
+#X connect 19 0 31 0;
+#X connect 19 1 32 0;
+#X connect 19 2 33 0;
+#X connect 35 0 19 0;
diff --git a/help/help-tLia2D.pd b/help/help-tLia2D.pd
new file mode 100755
index 0000000..57bdacc
--- /dev/null
+++ b/help/help-tLia2D.pd
@@ -0,0 +1,31 @@
+#N canvas 712 340 590 388 10;
+#X obj 152 220 tLia2D;
+#X text 181 337 1 : distance between the 2 masses;
+#X text 181 309 2 : elongation speed of the link;
+#X text 181 281 3 : orientation of the link;
+#X text 182 257 4 : position of the center of the link;
+#X text 181 39 link2D : get position of masses \, output forces;
+#X text 216 12 link between 2 masses;
+#X text 181 67 1 : name;
+#X text 185 162 change position of mass 1;
+#X msg 57 131 bang;
+#X text 182 127 compute and output forces \, according to the last
+masses positions;
+#X text 206 83 you can use it in pd to send messages / bang / etc to
+the lia. this is for simplifying connection.;
+#X msg 58 162 position2D $f1 $f2;
+#X msg 62 194 position2D $f1 $f2;
+#X text 184 194 position of mass 2;
+#X obj 25 220 tLink2D;
+#X obj 72 220 pmpd.tLink2D;
+#X floatatom 25 339 5 0 0 0 - - -;
+#X floatatom 37 311 5 0 0 0 - - -;
+#X floatatom 49 284 5 0 0 0 - - -;
+#X obj 62 258 unpack s f f;
+#X connect 9 0 15 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 1;
+#X connect 15 0 17 0;
+#X connect 15 1 18 0;
+#X connect 15 2 19 0;
+#X connect 15 3 20 0;
diff --git a/help/help-tLia3D.pd b/help/help-tLia3D.pd
new file mode 100755
index 0000000..c5f0599
--- /dev/null
+++ b/help/help-tLia3D.pd
@@ -0,0 +1,31 @@
+#N canvas 626 360 644 394 10;
+#X obj 156 231 tLia3D;
+#X text 228 31 output informations about a tested link;
+#X text 224 332 distance between the 2 masses;
+#X text 224 308 elongation speed of the link;
+#X text 228 255 position of the center of the link;
+#X text 225 282 orientation of the link;
+#X msg 64 205 position3D $f1 $f2 $f3;
+#X text 231 68 1 : name;
+#X text 229 173 change position of mass 1;
+#X msg 65 126 bang;
+#X text 230 123 compute and output forces \, according to the last
+masses positions;
+#X text 256 84 you can use it in pd to send messages / bang / etc to
+the lia. this is for simplifying connection.;
+#X text 229 204 position of mass 2;
+#X msg 65 175 position3D $f1 $f2 $f3;
+#X obj 64 259 unpack s f f f;
+#X text 321 7 teste a link;
+#X obj 27 232 tLink3D;
+#X obj 76 231 pmpd.tLink3D;
+#X obj 51 284 unpack s f f f;
+#X floatatom 39 309 5 0 0 0 - - -;
+#X floatatom 27 332 5 0 0 0 - - -;
+#X connect 6 0 16 1;
+#X connect 9 0 16 0;
+#X connect 13 0 16 0;
+#X connect 16 0 20 0;
+#X connect 16 1 19 0;
+#X connect 16 2 18 0;
+#X connect 16 3 14 0;
diff --git a/help/help-tLine2D.pd b/help/help-tLine2D.pd
new file mode 100755
index 0000000..4b90e3f
--- /dev/null
+++ b/help/help-tLine2D.pd
@@ -0,0 +1,47 @@
+#N canvas 6 5 586 578 10;
+#X text 129 40 This object sould be used for testing the masse position.
+;
+#X text 129 56 It receive masse position \, and output 0/1 according
+to the position of the masse (1 if the mass is on a side of the line)
+;
+#X text 175 146 1 : name;
+#X text 121 113 message to change parametter / default value / creation
+arg number / description;
+#X text 196 164 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 104 233 setY1 0;
+#X msg 105 279 setY2 0;
+#X msg 103 208 setX1 -1;
+#X msg 104 256 setX2 1;
+#X text 174 208 2 : X coordonate of the the 1st point of the line;
+#X text 174 232 3 : Y coordonate of the the 1st point of the line;
+#X text 174 255 4 : X coordonate of the the 2nd point of the line;
+#X text 174 279 5 : Y coordonate of the the 2nd point of the line;
+#X msg 105 312 setPmax 1;
+#X text 199 296 X and Y position of the 2 points defining the line.
+;
+#X text 197 327 maximum depth of the interaction line.;
+#X text 269 14 test line;
+#X obj 35 450 tLine2D;
+#X obj 92 450 pmpd.tLine2D;
+#X text 173 312 6 : maximum depth;
+#X floatatom 72 481 5 0 0 0 - - -;
+#X floatatom 72 481 5 0 0 0 - - -;
+#X floatatom 53 505 5 0 0 0 - - -;
+#X floatatom 35 529 5 0 0 0 - - -;
+#X text 172 479 speed regarding the distance from the segment;
+#X text 171 504 distance from the segment;
+#X text 171 530 0/1 according to the position of the masse;
+#X text 195 378 position of the mass (first outlet of the mass object)
+;
+#X msg 92 379 position2D 0 0;
+#X connect 5 0 17 0;
+#X connect 6 0 17 0;
+#X connect 7 0 17 0;
+#X connect 8 0 17 0;
+#X connect 13 0 17 0;
+#X connect 17 0 23 0;
+#X connect 17 1 22 0;
+#X connect 17 2 21 0;
+#X connect 28 0 17 0;
diff --git a/help/help-tPlane3D.pd b/help/help-tPlane3D.pd
new file mode 100755
index 0000000..c13a7f6
--- /dev/null
+++ b/help/help-tPlane3D.pd
@@ -0,0 +1,41 @@
+#N canvas 141 50 610 449 10;
+#X text 295 18 Plane test;
+#X text 184 259 5 : X point of the plane;
+#X text 183 282 6 : Y point of the plane;
+#X text 183 305 7 : Z point of the plane;
+#X text 185 108 1 : name;
+#X text 121 74 message to change parametter / default value / creation
+arg number / description;
+#X text 206 126 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X text 217 238 normal vector of the circle;
+#X msg 96 255 setX 0;
+#X msg 95 280 setY 0;
+#X msg 95 303 setZ 0;
+#X msg 93 171 setVX 0;
+#X msg 93 196 setVY 0;
+#X msg 95 218 setVZ 0;
+#X msg 95 344 setPmax 10000;
+#X text 177 41 This object sould be used for the simulation of interaction
+between a collection of masse and a plane;
+#X text 184 171 2 : X coordonate of the orientation vector of the plane
+;
+#X text 183 196 3 : Y coordonate of the orientation vector of the plane
+;
+#X text 184 220 4 : Z coordonate of the orientation vector of the plane
+;
+#X obj 14 415 tPlane3D;
+#X obj 70 415 pmpd.tPlane3D;
+#X text 199 379 position of the mass (first outlet of the mass object)
+;
+#X msg 94 379 position3D 0 0 0;
+#X text 184 346 8 : maximum profound of the circle interaction;
+#X connect 8 0 19 0;
+#X connect 9 0 19 0;
+#X connect 10 0 19 0;
+#X connect 11 0 19 0;
+#X connect 12 0 19 0;
+#X connect 13 0 19 0;
+#X connect 14 0 19 0;
+#X connect 22 0 19 0;
diff --git a/help/help-tSeg2D.pd b/help/help-tSeg2D.pd
new file mode 100755
index 0000000..f8663c5
--- /dev/null
+++ b/help/help-tSeg2D.pd
@@ -0,0 +1,47 @@
+#N canvas 38 50 579 593 10;
+#X text 270 16 test segment;
+#X text 129 40 This object sould be used for testing the masse position.
+;
+#X text 129 56 It receive masse position \, and output 0/1 according
+to the position of the masse (1 if the mass is on a side of the line)
+;
+#X text 175 146 1 : name;
+#X text 121 113 message to change parametter / default value / creation
+arg number / description;
+#X text 196 164 this is the name of the mass interacting with this
+object. you can also conect the output of this object to a mass \,
+to allow an interaction with this mass.;
+#X msg 104 233 setY1 0;
+#X msg 105 279 setY2 0;
+#X msg 103 208 setX1 -1;
+#X msg 104 256 setX2 1;
+#X text 174 208 2 : X coordonate of the the 1st point of the line;
+#X text 174 232 3 : Y coordonate of the the 1st point of the line;
+#X text 174 255 4 : X coordonate of the the 2nd point of the line;
+#X text 174 279 5 : Y coordonate of the the 2nd point of the line;
+#X msg 105 312 setPmax 1;
+#X text 199 296 X and Y position of the 2 points defining the line.
+;
+#X text 197 327 maximum depth of the interaction line.;
+#X text 173 312 6 : maximum depth;
+#X floatatom 66 481 5 0 0 0 - - -;
+#X floatatom 66 481 5 0 0 0 - - -;
+#X floatatom 50 505 5 0 0 0 - - -;
+#X floatatom 35 529 5 0 0 0 - - -;
+#X text 172 479 speed regarding the distance from the segment;
+#X text 171 504 distance from the segment;
+#X text 171 530 0/1 according to the position of the masse;
+#X text 195 378 position of the mass (first outlet of the mass object)
+;
+#X msg 92 379 position2D 0 0;
+#X obj 35 450 tSeg2D;
+#X obj 92 450 pmpd.tSeg2D;
+#X connect 6 0 27 0;
+#X connect 7 0 27 0;
+#X connect 8 0 27 0;
+#X connect 9 0 27 0;
+#X connect 14 0 27 0;
+#X connect 26 0 27 0;
+#X connect 27 0 21 0;
+#X connect 27 1 20 0;
+#X connect 27 2 19 0;
diff --git a/help/help-tSphere3D.pd b/help/help-tSphere3D.pd
new file mode 100755
index 0000000..d5b4d6a
--- /dev/null
+++ b/help/help-tSphere3D.pd
@@ -0,0 +1,37 @@
+#N canvas 737 247 618 430 10;
+#X text 135 35 This object sould be used to test if a specific masse
+is inside a sphere;
+#X text 121 76 message to change parametter / default value / creation
+arg number / description;
+#X msg 80 207 setRmin 0;
+#X msg 81 230 setRmax 1;
+#X msg 80 132 setX 0;
+#X msg 79 157 setY 0;
+#X msg 79 180 setZ 0;
+#X text 203 247 minimal and maximal radius of the sphere. If the mass
+is outside or inside this sphere \, it will not interact with this
+link.;
+#X obj 16 302 tSphere3D;
+#X obj 77 302 pmpd.tSphere3D;
+#X text 248 6 Spherical test;
+#X text 178 132 1 : X coordonate of the center of the sphere;
+#X text 178 159 2 : Y coordonate of the center of the sphere;
+#X text 178 183 3 : Z coordonate of the center of the sphere;
+#X text 177 208 4 : Minimum Radius;
+#X text 177 229 5 : Maximum Radius;
+#X floatatom 65 338 5 0 0 0 - - -;
+#X floatatom 40 360 5 0 0 0 - - -;
+#X floatatom 16 384 5 0 0 0 - - -;
+#X text 123 382 0/1 according to the position of the masse;
+#X text 122 360 distance of the mass from the center of the circle
+;
+#X text 122 336 speed of the mass regarding the center of the circle
+;
+#X connect 2 0 8 0;
+#X connect 3 0 8 0;
+#X connect 4 0 8 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 8 0 18 0;
+#X connect 8 1 17 0;
+#X connect 8 2 16 0;
diff --git a/help/help-tSquare2D.pd b/help/help-tSquare2D.pd
new file mode 100755
index 0000000..89b1c6a
--- /dev/null
+++ b/help/help-tSquare2D.pd
@@ -0,0 +1,29 @@
+#N canvas 111 51 545 429 10;
+#X text 137 42 This object sould be used for testing the masse position.
+;
+#X text 137 59 It receive masse position \, and output 0/1 according
+to the position of the masse (1 if the mass is in the square);
+#X text 296 15 test cube;
+#X text 190 241 minimum and maximum position of the interactor.;
+#X text 77 112 message to change parametter / default value / creation
+arg number / description;
+#X msg 83 156 setXmin -1;
+#X msg 83 178 setXmax 1;
+#X msg 83 200 setYmin -1;
+#X msg 83 223 setYmax 1;
+#X floatatom 15 360 5 0 0 0 - - -;
+#X text 175 362 0/1 according to the position of the masse;
+#X text 194 284 position of the tested mass;
+#X obj 15 326 tSquare2D;
+#X obj 78 326 pmpd.tSquare2D;
+#X text 186 157 1 : X minimum;
+#X text 186 178 2 : X maximum;
+#X text 186 200 3 : Y minimum;
+#X text 185 222 4 : Y maximum;
+#X msg 86 284 position2D 0 0 0;
+#X connect 5 0 12 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 8 0 12 0;
+#X connect 12 0 9 0;
+#X connect 18 0 12 0;
diff --git a/src/iAmbient2D.c b/src/iAmbient2D.c
new file mode 100755
index 0000000..f5050ce
--- /dev/null
+++ b/src/iAmbient2D.c
@@ -0,0 +1,200 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iAmbient2D_class;
+
+typedef struct _iAmbient2D {
+ t_object x_obj;
+ t_atom force[12];
+ /*
+ force =
+ forceX,
+ forceY,
+ randomFX,
+ randomFY,
+ damp,
+ Xmin,
+ Xmax,
+ Ymin,
+ Ymax,
+ dX,
+ dY;
+ */
+
+ t_outlet *force_new;// outlet
+ t_symbol *x_sym; // send
+} t_iAmbient2D;
+
+void iAmbient2D_forceX(t_iAmbient2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[0]), f1);
+}
+
+void iAmbient2D_forceY(t_iAmbient2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[1]), f1);
+}
+
+void iAmbient2D_force(t_iAmbient2D *x, t_floatarg f1, t_floatarg f2)
+{
+ SETFLOAT(&(x->force[0]), f1);
+ SETFLOAT(&(x->force[1]), f2 );
+}
+
+void iAmbient2D_rndFX(t_iAmbient2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[2]), X);
+}
+
+void iAmbient2D_rndFY(t_iAmbient2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iAmbient2D_rndF(t_iAmbient2D *x, t_floatarg f1, t_floatarg f2)
+{
+ SETFLOAT(&(x->force[2]), f1);
+ SETFLOAT(&(x->force[3]), f2);
+}
+
+void iAmbient2D_damp(t_iAmbient2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[4]), X);
+}
+
+void iAmbient2D_Xmin(t_iAmbient2D *x, t_float Xmin)
+{
+ SETFLOAT(&(x->force[6]), Xmin);
+}
+
+void iAmbient2D_Xmax(t_iAmbient2D *x, t_float Xmax)
+{
+ SETFLOAT(&(x->force[7]), Xmax);
+}
+
+void iAmbient2D_Ymin(t_iAmbient2D *x, t_float Ymin)
+{
+ SETFLOAT(&(x->force[8]), Ymin);
+}
+
+void iAmbient2D_Ymax(t_iAmbient2D *x, t_float Ymax)
+{
+ SETFLOAT(&(x->force[9]), Ymax);
+}
+
+void iAmbient2D_dXY(t_iAmbient2D *x, t_float dX, t_float dY)
+{
+ SETFLOAT(&(x->force[10]), dX);
+ SETFLOAT(&(x->force[11]), dY);
+}
+
+void iAmbient2D_dX(t_iAmbient2D *x, t_float dX)
+{
+ SETFLOAT(&(x->force[10]), dX);
+}
+
+void iAmbient2D_dY(t_iAmbient2D *x, t_float dY)
+{
+ SETFLOAT(&(x->force[11]), dY);
+}
+
+void iAmbient2D_bang(t_iAmbient2D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_ambient_2D"), 12, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_ambient_2D"), 12, x->force);
+}
+
+void *iAmbient2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iAmbient2D *x = (t_iAmbient2D *)pd_new(iAmbient2D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+ SETFLOAT(&(x->force[5]), 0);
+
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 100000);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), -100000);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 100000);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), -100000);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 0);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 0);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), 0);
+
+ return (x);
+}
+
+void iAmbient2D_setup(void)
+{
+ iAmbient2D_class = class_new(gensym("iAmbient2D"),
+ (t_newmethod)iAmbient2D_new,
+ 0, sizeof(t_iAmbient2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iAmbient2D_new, gensym("pmpd.iAmbient2D"), A_GIMME, 0);
+
+ class_addbang(iAmbient2D_class, iAmbient2D_bang);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_force, gensym("setFXY"), A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_forceX, gensym("setFX"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_forceY, gensym("setFY"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_Xmin, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_Ymin, gensym("setYmin"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_Xmax, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_Ymax, gensym("setYmax"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_rndFY, gensym("setRndFY"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_rndFX, gensym("setRndFX"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_damp, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_dX, gensym("setdX"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_dY, gensym("setdY"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient2D_class, (t_method)iAmbient2D_dXY, gensym("setdXY"), A_DEFFLOAT, A_DEFFLOAT, 0);
+}
diff --git a/src/iAmbient3D.c b/src/iAmbient3D.c
new file mode 100755
index 0000000..cd95088
--- /dev/null
+++ b/src/iAmbient3D.c
@@ -0,0 +1,259 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iAmbient3D_class;
+
+typedef struct _iAmbient3D {
+ t_object x_obj;
+ t_atom force[17];
+/* 1 : name of the mass (send interactors informations to this masses)
+ 2 : FX (constant X force apply to the masses) (0)
+ 3 : FY (constant Y force apply to the masses) (0)
+ 4 : FZ (constant Z force apply to the masses) (0)
+ 5 : Rnd FX (random X force apply to the masses) (0)
+ 6 : Rnd FY (random Y force apply to the masses) (0)
+ 7 : Rnd FZ (random Z force apply to the masses) (0)
+ 8 : Damping (velocity damping of the masses) (0)
+ 9 : Rien
+ 10 : Xmin (minimum and maximum limit of the interactors) (-10000)
+ 9 : Xmax (a mass interact with this object only if it is inside the interactor bounds) (10000)
+ 10 : Ymin (-10000)
+ 11 : Ymax (10000)
+ 12 : Zmin (-10000)
+ 13 : Zmax (10000)
+ 14 : dX (displace the mass by a constant value) (0)
+ 15 : dY (0)
+ 16 : dZ (0)
+*/
+ t_outlet *force_new;// outlet
+ t_symbol *x_sym; // send
+} t_iAmbient3D;
+
+void iAmbient3D_forceX(t_iAmbient3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[0]), f1);
+}
+
+void iAmbient3D_forceY(t_iAmbient3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[1]), f1);
+}
+
+void iAmbient3D_forceZ(t_iAmbient3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[2]), f1);
+}
+
+void iAmbient3D_force(t_iAmbient3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ SETFLOAT(&(x->force[0]), f1 );
+ SETFLOAT(&(x->force[1]), f2 );
+ SETFLOAT(&(x->force[2]), f3 );
+}
+
+void iAmbient3D_rndFX(t_iAmbient3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iAmbient3D_rndFY(t_iAmbient3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[4]), X);
+}
+
+void iAmbient3D_rndFZ(t_iAmbient3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[5]), X);
+}
+
+void iAmbient3D_rndF(t_iAmbient3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ SETFLOAT(&(x->force[3]), f1);
+ SETFLOAT(&(x->force[4]), f2);
+ SETFLOAT(&(x->force[5]), f3);
+}
+
+void iAmbient3D_damp(t_iAmbient3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[6]), X);
+}
+
+
+void iAmbient3D_Xmin(t_iAmbient3D *x, t_float Xmin)
+{
+ SETFLOAT(&(x->force[8]), Xmin);
+}
+
+void iAmbient3D_Xmax(t_iAmbient3D *x, t_float Xmax)
+{
+ SETFLOAT(&(x->force[9]), Xmax);
+}
+
+void iAmbient3D_Ymin(t_iAmbient3D *x, t_float Ymin)
+{
+ SETFLOAT(&(x->force[10]), Ymin);
+}
+
+void iAmbient3D_Ymax(t_iAmbient3D *x, t_float Ymax)
+{
+ SETFLOAT(&(x->force[11]), Ymax);
+}
+
+void iAmbient3D_Zmin(t_iAmbient3D *x, t_float Zmin)
+{
+ SETFLOAT(&(x->force[12]), Zmin);
+}
+
+void iAmbient3D_Zmax(t_iAmbient3D *x, t_float Zmax)
+{
+ SETFLOAT(&(x->force[13]), Zmax);
+}
+
+void iAmbient3D_dXYZ(t_iAmbient3D *x, t_float dX, t_float dY, t_float dZ)
+{
+ SETFLOAT(&(x->force[14]), dX);
+ SETFLOAT(&(x->force[15]), dY);
+ SETFLOAT(&(x->force[16]), dZ);
+}
+
+void iAmbient3D_dX(t_iAmbient3D *x, t_float dX)
+{
+ SETFLOAT(&(x->force[14]), dX);
+}
+
+void iAmbient3D_dY(t_iAmbient3D *x, t_float dY)
+{
+ SETFLOAT(&(x->force[15]), dY);
+}
+
+void iAmbient3D_dZ(t_iAmbient3D *x, t_float dZ)
+{
+ SETFLOAT(&(x->force[16]), dZ);
+}
+
+void iAmbient3D_bang(t_iAmbient3D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_ambient_3D"), 17, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_ambient_3D"), 17, x->force);
+}
+
+void *iAmbient3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iAmbient3D *x = (t_iAmbient3D *)pd_new(iAmbient3D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+ if (argc>=16)
+ SETFLOAT(&(x->force[15]), atom_getfloatarg(15, argc, argv));
+ else
+ SETFLOAT(&(x->force[15]), 0);
+
+ if (argc>=15)
+ SETFLOAT(&(x->force[14]), atom_getfloatarg(14, argc, argv));
+ else
+ SETFLOAT(&(x->force[14]), 0);
+
+ if (argc>=14)
+ SETFLOAT(&(x->force[13]), atom_getfloatarg(13, argc, argv));
+ else
+ SETFLOAT(&(x->force[13]), 10000);
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[12]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[12]), -10000);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 10000);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), -10000);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 10000);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), -10000);
+
+ SETFLOAT(&(x->force[7]), 0);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 0);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 0);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), 0);
+
+ return (x);
+}
+
+void iAmbient3D_setup(void)
+{
+
+ iAmbient3D_class = class_new(gensym("iAmbient3D"),
+ (t_newmethod)iAmbient3D_new,
+ 0, sizeof(t_iAmbient3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iAmbient3D_new, gensym("pmpd.iAmbient3D"), A_GIMME, 0);
+
+ class_addbang(iAmbient3D_class, iAmbient3D_bang);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_force, gensym("setFXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_forceX, gensym("setFX"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_forceY, gensym("setFY"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_forceZ, gensym("setFZ"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_Xmin, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_Ymin, gensym("setYmin"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_Zmin, gensym("setZmin"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_Xmax, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_Ymax, gensym("setYmax"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_Zmax, gensym("setZmax"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_rndFY, gensym("setRndFY"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_rndFX, gensym("setRndFX"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_rndFZ, gensym("setRndFZ"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_damp, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_dXYZ, gensym("dXYZ"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_dX, gensym("setdX"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_dY, gensym("setdY"), A_DEFFLOAT, 0);
+ class_addmethod(iAmbient3D_class, (t_method)iAmbient3D_dZ, gensym("setdZ"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/iCircle2D.c b/src/iCircle2D.c
new file mode 100755
index 0000000..869dd70
--- /dev/null
+++ b/src/iCircle2D.c
@@ -0,0 +1,276 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iCircle2D_class;
+
+typedef struct _iCircle2D {
+ t_object x_obj;
+ t_atom force[20];
+ t_outlet *force_new; // outlet
+ t_symbol *x_sym; // send
+ t_float posX_old, posY_old, posX, posY; // anciennes position, pour calculer la vitesse de cette interacteur.
+
+} t_iCircle2D;
+
+void iCircle2D_bang(t_iCircle2D *x)
+{
+ SETFLOAT(&(x->force[14]), x->posX_old); // posX_old
+ SETFLOAT(&(x->force[15]), x->posY_old); // posY_old
+
+ x->posX_old = x->posX;
+ x->posY_old = x->posY;
+
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_circle_2D"), 20, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_circle_2D"), 20, x->force);
+}
+
+void iCircle2D_setXY(t_iCircle2D *x, t_float X, t_float Y)
+{
+ SETFLOAT(&(x->force[0]), X);
+ x->posX= X;
+ SETFLOAT(&(x->force[1]), Y);
+ x->posY = Y;
+}
+
+void iCircle2D_setX(t_iCircle2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[0]), X);
+ x->posX= X;
+}
+
+void iCircle2D_setY(t_iCircle2D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[1]), Y);
+ x->posY = Y;
+}
+
+void iCircle2D_setRmin(t_iCircle2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[2]), X);
+}
+
+void iCircle2D_setRmax(t_iCircle2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iCircle2D_setFN(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[4]), f1);
+}
+
+void iCircle2D_setFT(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[5]), f1);
+}
+
+void iCircle2D_setKN(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[6]), f1);
+}
+
+void iCircle2D_setKT(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[7]), f1);
+}
+
+void iCircle2D_setRN(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iCircle2D_setRT(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[9]), f1);
+}
+
+void iCircle2D_setDN(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[10]), f1);
+}
+
+void iCircle2D_setDT(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[11]), f1);
+}
+
+void iCircle2D_setdRN(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[12]), f1);
+}
+
+void iCircle2D_setdRT(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[13]), f1);
+}
+
+void iCircle2D_setD(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[16]), f1);
+}
+
+void iCircle2D_setG(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[17]), f1);
+}
+
+void iCircle2D_setdN(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[18]), f1);
+}
+
+void iCircle2D_setdT(t_iCircle2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[19]), f1);
+}
+
+void *iCircle2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iCircle2D *x = (t_iCircle2D *)pd_new(iCircle2D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+ if (argc>=19)
+ SETFLOAT(&(x->force[19]), atom_getfloatarg(18, argc, argv));
+ else
+ SETFLOAT(&(x->force[19]), 0);
+
+ if (argc>=18)
+ SETFLOAT(&(x->force[18]), atom_getfloatarg(17, argc, argv));
+ else
+ SETFLOAT(&(x->force[18]), 0);
+
+ if (argc>=17)
+ SETFLOAT(&(x->force[17]), atom_getfloatarg(16, argc, argv));
+ else
+ SETFLOAT(&(x->force[17]), 0);
+
+ if (argc>=16)
+ SETFLOAT(&(x->force[16]), atom_getfloatarg(15, argc, argv));
+ else
+ SETFLOAT(&(x->force[16]), 0);
+
+ if (argc>=15)
+ SETFLOAT(&(x->force[13]), atom_getfloatarg(14, argc, argv));
+ else
+ SETFLOAT(&(x->force[13]), 0);
+
+ if (argc>=14)
+ SETFLOAT(&(x->force[12]), atom_getfloatarg(13, argc, argv));
+ else
+ SETFLOAT(&(x->force[12]), 0);
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 0);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 0);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 0);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 1);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 0);
+
+ if (argc>=3)
+ {
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ SETFLOAT(&(x->force[15]), atom_getfloatarg(2, argc, argv));
+ x->posY_old = atom_getfloatarg(2, argc, argv);
+ }
+ else
+ {
+ SETFLOAT(&(x->force[1]), 0);
+ SETFLOAT(&(x->force[15]), 0);
+ x->posY_old = 0;
+ }
+
+ if (argc>=2)
+ {
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ SETFLOAT(&(x->force[14]), atom_getfloatarg(1, argc, argv));
+ x->posX_old = atom_getfloatarg(1, argc, argv);
+ }
+ else
+ {
+ SETFLOAT(&(x->force[0]), 0);
+ SETFLOAT(&(x->force[14]), 0);
+ x->posX_old = 0;
+ }
+
+ return (x);
+}
+
+void iCircle2D_setup(void)
+{
+
+ iCircle2D_class = class_new(gensym("iCircle2D"),
+ (t_newmethod)iCircle2D_new,
+ 0, sizeof(t_iCircle2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iCircle2D_new, gensym("pmpd.iCircle2D"), A_GIMME, 0);
+
+ class_addbang(iCircle2D_class, iCircle2D_bang);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setFT, gensym("setFT"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setKT, gensym("setKT"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setDN, gensym("setDN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setDT, gensym("setDT"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setXY, gensym("setXY"), A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setRN, gensym("setRN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setRT, gensym("setRT"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setdT, gensym("setdT"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setdRN, gensym("setdRN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setdRT, gensym("setdRT"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle2D_class, (t_method)iCircle2D_setG, gensym("setG"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/iCircle3D.c b/src/iCircle3D.c
new file mode 100755
index 0000000..cfbc412
--- /dev/null
+++ b/src/iCircle3D.c
@@ -0,0 +1,211 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iCircle3D_class;
+
+typedef struct _iCircle3D {
+ t_object x_obj;
+ t_atom force[14];
+ t_outlet *force_new; // outlet
+ t_symbol *x_sym; // send
+
+} t_iCircle3D;
+
+void iCircle3D_bang(t_iCircle3D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_circle_3D"), 14, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_circle_3D"), 14, x->force);
+}
+
+void iCircle3D_setXYZ(t_iCircle3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[3]), X);
+ SETFLOAT(&(x->force[4]), Y);
+ SETFLOAT(&(x->force[5]), Z);
+}
+void iCircle3D_setVXYZ(t_iCircle3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[0]), X);
+ SETFLOAT(&(x->force[1]), Y);
+ SETFLOAT(&(x->force[2]), Z);
+}
+
+void iCircle3D_setVX(t_iCircle3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[0]), X);
+}
+
+void iCircle3D_setVY(t_iCircle3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[1]), Y);
+}
+
+void iCircle3D_setVZ(t_iCircle3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[2]), Z);
+}
+void iCircle3D_setX(t_iCircle3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iCircle3D_setY(t_iCircle3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[4]), Y);
+}
+
+void iCircle3D_setZ(t_iCircle3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[5]), Z);
+}
+
+void iCircle3D_setRmin(t_iCircle3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[6]), f1);
+}
+
+void iCircle3D_setRmax(t_iCircle3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[7]), f1);
+}
+
+void iCircle3D_setFN(t_iCircle3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iCircle3D_setKN(t_iCircle3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[9]), f1);
+}
+
+void iCircle3D_setD(t_iCircle3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[10]), f1);
+}
+
+void iCircle3D_setPmax(t_iCircle3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[11]), X);
+}
+
+void iCircle3D_setdN(t_iCircle3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[12]), f1);
+}
+
+void iCircle3D_setdKN(t_iCircle3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[13]), X);
+}
+
+void *iCircle3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iCircle3D *x = (t_iCircle3D *)pd_new(iCircle3D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+
+ if (argc>=15)
+ SETFLOAT(&(x->force[13]), atom_getfloatarg(14, argc, argv));
+ else
+ SETFLOAT(&(x->force[13]), 0);
+
+ if (argc>=14)
+ SETFLOAT(&(x->force[12]), atom_getfloatarg(13, argc, argv));
+ else
+ SETFLOAT(&(x->force[12]), 0);
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 10000);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 1);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 0);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 0);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), 1);
+
+ return (x);
+}
+
+void iCircle3D_setup(void)
+{
+ iCircle3D_class = class_new(gensym("iCircle3D"),
+ (t_newmethod)iCircle3D_new,
+ 0, sizeof(t_iCircle3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iCircle3D_new, gensym("pmpd.iCircle3D"), A_GIMME, 0);
+
+ class_addbang(iCircle3D_class, iCircle3D_bang);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setVX, gensym("setVX"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setVY, gensym("setVY"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setVZ, gensym("setVZ"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setVXYZ, gensym("setVXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setPmax, gensym("setPmax"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setdKN, gensym("setdKN"), A_DEFFLOAT, 0);
+ class_addmethod(iCircle3D_class, (t_method)iCircle3D_setD, gensym("setD"), A_DEFFLOAT, 0);
+}
diff --git a/src/iCylinder3D.c b/src/iCylinder3D.c
new file mode 100755
index 0000000..59336bf
--- /dev/null
+++ b/src/iCylinder3D.c
@@ -0,0 +1,292 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iCylinder3D_class;
+
+typedef struct _iCylinder3D {
+ t_object x_obj;
+ t_atom force[21];
+ t_outlet *force_new; // outlet
+ t_symbol *x_sym; // send
+
+} t_iCylinder3D;
+
+
+
+void iCylinder3D_bang(t_iCylinder3D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_cylinder_3D"), 21, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_cylinder_3D"), 21, x->force);
+}
+
+void iCylinder3D_setXYZ(t_iCylinder3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[3]), X);
+ SETFLOAT(&(x->force[4]), Y);
+ SETFLOAT(&(x->force[5]), Z);
+}
+void iCylinder3D_setVXYZ(t_iCylinder3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[0]), X);
+ SETFLOAT(&(x->force[1]), Y);
+ SETFLOAT(&(x->force[2]), Z);
+}
+
+void iCylinder3D_setVX(t_iCylinder3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[0]), X);
+}
+
+void iCylinder3D_setVY(t_iCylinder3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[1]), Y);
+}
+
+void iCylinder3D_setVZ(t_iCylinder3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[2]), Z);
+}
+void iCylinder3D_setX(t_iCylinder3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iCylinder3D_setY(t_iCylinder3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[4]), Y);
+}
+
+void iCylinder3D_setZ(t_iCylinder3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[5]), Z);
+}
+
+void iCylinder3D_setRmin(t_iCylinder3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[6]), X);
+}
+
+void iCylinder3D_setRmax(t_iCylinder3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[7]), X);
+}
+
+void iCylinder3D_setFN(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iCylinder3D_setKN(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[9]), f1);
+}
+
+void iCylinder3D_setD(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[10]), f1);
+}
+
+void iCylinder3D_setRN(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[11]), f1);
+}
+
+void iCylinder3D_setG(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[12]), f1);
+}
+
+void iCylinder3D_setPmin(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[13]), f1);
+}
+
+void iCylinder3D_setPmax(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[14]), f1);
+}
+
+void iCylinder3D_setFT(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[15]), f1);
+}
+
+void iCylinder3D_setKT(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[16]), f1);
+}
+
+void iCylinder3D_setdN(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[17]), f1);
+}
+
+void iCylinder3D_setdT(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[18]), f1);
+}
+
+void iCylinder3D_setdKN(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[19]), f1);
+}
+
+void iCylinder3D_setdKT(t_iCylinder3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[20]), f1);
+}
+
+void *iCylinder3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iCylinder3D *x = (t_iCylinder3D *)pd_new(iCylinder3D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+
+ if (argc>=22)
+ SETFLOAT(&(x->force[20]), atom_getfloatarg(21, argc, argv));
+ else
+ SETFLOAT(&(x->force[20]), 0);
+
+ if (argc>=21)
+ SETFLOAT(&(x->force[19]), atom_getfloatarg(20, argc, argv));
+ else
+ SETFLOAT(&(x->force[19]), 0);
+
+ if (argc>=20)
+ SETFLOAT(&(x->force[18]), atom_getfloatarg(19, argc, argv));
+ else
+ SETFLOAT(&(x->force[18]), 0);
+
+ if (argc>=19)
+ SETFLOAT(&(x->force[17]), atom_getfloatarg(18, argc, argv));
+ else
+ SETFLOAT(&(x->force[17]), 0);
+
+ if (argc>=18)
+ SETFLOAT(&(x->force[16]), atom_getfloatarg(17, argc, argv));
+ else
+ SETFLOAT(&(x->force[16]), 0);
+
+ if (argc>=17)
+ SETFLOAT(&(x->force[15]), atom_getfloatarg(16, argc, argv));
+ else
+ SETFLOAT(&(x->force[15]), 0);
+
+ if (argc>=16)
+ SETFLOAT(&(x->force[14]), atom_getfloatarg(15, argc, argv));
+ else
+ SETFLOAT(&(x->force[14]), 1000);
+
+ if (argc>=15)
+ SETFLOAT(&(x->force[13]), atom_getfloatarg(14, argc, argv));
+ else
+ SETFLOAT(&(x->force[13]), -1000);
+
+ if (argc>=14)
+ SETFLOAT(&(x->force[12]), atom_getfloatarg(13, argc, argv));
+ else
+ SETFLOAT(&(x->force[12]), 0);
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 0);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 1);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 0);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 0);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), 1);
+
+ return (x);
+}
+
+void iCylinder3D_setup(void)
+{
+
+ iCylinder3D_class = class_new(gensym("iCylinder3D"),
+ (t_newmethod)iCylinder3D_new,
+ 0, sizeof(t_iCylinder3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iCylinder3D_new, gensym("pmpd.iCylinder3D"), A_GIMME, 0);
+
+ class_addbang(iCylinder3D_class, iCylinder3D_bang);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setVX, gensym("setVX"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setVY, gensym("setVY"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setVZ, gensym("setVZ"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setVXYZ, gensym("setVXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setPmin, gensym("setPmin"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setPmax, gensym("setPmax"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setRN, gensym("setRN"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setG, gensym("setG"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setFT, gensym("setFT"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setKT, gensym("setKT"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setdT, gensym("setdT"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setdKN, gensym("setdKN"), A_DEFFLOAT, 0);
+ class_addmethod(iCylinder3D_class, (t_method)iCylinder3D_setdKT, gensym("setdKT"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/iLine2D.c b/src/iLine2D.c
new file mode 100755
index 0000000..d188d92
--- /dev/null
+++ b/src/iLine2D.c
@@ -0,0 +1,179 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iLine2D_class;
+
+typedef struct _iLine2D {
+ t_object x_obj;
+ t_atom force[12];
+ t_outlet *force_new;// outlet
+ t_symbol *x_sym; // send
+} t_iLine2D;
+
+
+
+void iLine2D_bang(t_iLine2D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_line_2D"), 12, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_line_2D"), 12, x->force);
+}
+
+void iLine2D_X1(t_iLine2D *x, t_float Xmax)
+{
+ SETFLOAT(&(x->force[0]), Xmax);
+}
+
+void iLine2D_Y1(t_iLine2D *x, t_float Ymax)
+{
+ SETFLOAT(&(x->force[1]), Ymax);
+}
+
+void iLine2D_X2(t_iLine2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[2]), X);
+}
+
+void iLine2D_Y2(t_iLine2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iLine2D_setPmax(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[4]), f1);
+}
+
+void iLine2D_setFN(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[5]), f1);
+}
+
+void iLine2D_setFT(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[6]), f1);
+}
+
+void iLine2D_setKN(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[7]), f1);
+}
+
+void iLine2D_setDN(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iLine2D_setDT(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[9]), f1);
+}
+
+void iLine2D_setdN(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[10]), f1);
+}
+
+void iLine2D_setdT(t_iLine2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[11]), f1);
+}
+
+void *iLine2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iLine2D *x = (t_iLine2D *)pd_new(iLine2D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 0);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 0);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 1);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 1);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), -1);
+
+ return (x);
+}
+
+void iLine2D_setup(void)
+{
+
+ iLine2D_class = class_new(gensym("iLine2D"),
+ (t_newmethod)iLine2D_new,
+ 0, sizeof(t_iLine2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iLine2D_new, gensym("pmpd.iLine2D"), A_GIMME, 0);
+
+ class_addbang(iLine2D_class, iLine2D_bang);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setPmax, gensym("setPmax"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setFT, gensym("setFT"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setDN, gensym("setDN"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setDT, gensym("setDT"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_setdT, gensym("setdT"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_X1, gensym("setX1"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_Y1, gensym("setY1"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_X2, gensym("setX2"), A_DEFFLOAT, 0);
+ class_addmethod(iLine2D_class, (t_method)iLine2D_Y2, gensym("setY2"), A_DEFFLOAT, 0);
+
+
+}
diff --git a/src/iPlane3D.c b/src/iPlane3D.c
new file mode 100755
index 0000000..f9be065
--- /dev/null
+++ b/src/iPlane3D.c
@@ -0,0 +1,193 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iPlane3D_class;
+
+typedef struct _iPlane3D {
+ t_object x_obj;
+ t_atom force[12];
+ t_outlet *force_new; // outlet
+ t_symbol *x_sym; // send
+
+} t_iPlane3D;
+
+
+
+void iPlane3D_bang(t_iPlane3D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_plane_3D"), 12, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_plane_3D"), 12, x->force);
+}
+
+void iPlane3D_setXYZ(t_iPlane3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[3]), X);
+ SETFLOAT(&(x->force[4]), Y);
+ SETFLOAT(&(x->force[5]), Z);
+}
+void iPlane3D_setVXYZ(t_iPlane3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[0]), X);
+ SETFLOAT(&(x->force[1]), Y);
+ SETFLOAT(&(x->force[2]), Z);
+}
+
+void iPlane3D_setVX(t_iPlane3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[0]), X);
+}
+
+void iPlane3D_setVY(t_iPlane3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[1]), Y);
+}
+
+void iPlane3D_setVZ(t_iPlane3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[2]), Z);
+}
+void iPlane3D_setX(t_iPlane3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iPlane3D_setY(t_iPlane3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[4]), Y);
+}
+
+void iPlane3D_setZ(t_iPlane3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[5]), Z);
+}
+
+void iPlane3D_setFN(t_iPlane3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[6]), f1);
+}
+
+void iPlane3D_setKN(t_iPlane3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[7]), f1);
+}
+
+void iPlane3D_setD(t_iPlane3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iPlane3D_setP(t_iPlane3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[9]), X);
+}
+
+void iPlane3D_setdN(t_iPlane3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[10]), f1);
+}
+
+void iPlane3D_setdKN(t_iPlane3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[11]), f1);
+}
+
+void *iPlane3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iPlane3D *x = (t_iPlane3D *)pd_new(iPlane3D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 0);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 10000);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 0);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 0);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 0);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), 1);
+
+ return (x);
+}
+
+void iPlane3D_setup(void)
+{
+
+ iPlane3D_class = class_new(gensym("iPlane3D"),
+ (t_newmethod)iPlane3D_new,
+ 0, sizeof(t_iPlane3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iPlane3D_new, gensym("pmpd.iPlane3D"), A_GIMME, 0);
+
+ class_addbang(iPlane3D_class, iPlane3D_bang);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setVX, gensym("setVX"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setVY, gensym("setVY"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setVZ, gensym("setVZ"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setVXYZ, gensym("setVXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setP, gensym("setPmax"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setdKN, gensym("setdKN"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(iPlane3D_class, (t_method)iPlane3D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/iSeg2D.c b/src/iSeg2D.c
new file mode 100755
index 0000000..77c740b
--- /dev/null
+++ b/src/iSeg2D.c
@@ -0,0 +1,175 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iSeg2D_class;
+
+typedef struct _iSeg2D {
+ t_object x_obj;
+ t_atom force[12];
+ t_outlet *force_new;// outlet
+ t_symbol *x_sym; // send
+} t_iSeg2D;
+
+void iSeg2D_bang(t_iSeg2D *x)
+{
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_segment_2D"), 12, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_segment_2D"), 12, x->force);
+}
+
+void iSeg2D_X1(t_iSeg2D *x, t_float Xmax)
+{
+ SETFLOAT(&(x->force[0]), Xmax);
+}
+
+void iSeg2D_Y1(t_iSeg2D *x, t_float Ymax)
+{
+ SETFLOAT(&(x->force[1]), Ymax);
+}
+
+void iSeg2D_X2(t_iSeg2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[2]), X);
+}
+
+void iSeg2D_Y2(t_iSeg2D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iSeg2D_setPmax(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[4]), f1);
+}
+
+void iSeg2D_setFN(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[5]), f1);
+}
+
+void iSeg2D_setFT(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[6]), f1);
+}
+
+void iSeg2D_setKN(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[7]), f1);
+}
+
+void iSeg2D_setDN(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iSeg2D_setDT(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[9]), f1);
+}
+
+void iSeg2D_setdN(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[10]), f1);
+}
+
+void iSeg2D_setdT(t_iSeg2D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[11]), f1);
+}
+
+void *iSeg2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iSeg2D *x = (t_iSeg2D *)pd_new(iSeg2D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[11]), 0);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[10]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 0);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 1);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ else
+ SETFLOAT(&(x->force[2]), 1);
+
+ if (argc>=3)
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ else
+ SETFLOAT(&(x->force[1]), 0);
+
+ if (argc>=2)
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ else
+ SETFLOAT(&(x->force[0]), -1);
+
+ return (x);
+}
+
+void iSeg2D_setup(void)
+{
+
+ iSeg2D_class = class_new(gensym("iSeg2D"),
+ (t_newmethod)iSeg2D_new,
+ 0, sizeof(t_iSeg2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iSeg2D_new, gensym("pmpd.iSeg2D"), A_GIMME, 0);
+
+ class_addbang(iSeg2D_class, iSeg2D_bang);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setPmax, gensym("setPmax"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setFT, gensym("setFT"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setDN, gensym("setDN"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setDT, gensym("setDT"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_setdT, gensym("setdT"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_X1, gensym("setX1"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_Y1, gensym("setY1"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_X2, gensym("setX2"), A_DEFFLOAT, 0);
+ class_addmethod(iSeg2D_class, (t_method)iSeg2D_Y2, gensym("setY2"), A_DEFFLOAT, 0);
+}
diff --git a/src/iSphere3D.c b/src/iSphere3D.c
new file mode 100755
index 0000000..5b84171
--- /dev/null
+++ b/src/iSphere3D.c
@@ -0,0 +1,253 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *iSphere3D_class;
+
+typedef struct _iSphere3D {
+ t_object x_obj;
+ t_atom force[17];
+ // = Xcentre, Ycentre, .., Rmin, Rmax, Fnormal, K normal, F/R normal, DampNormal, dN, posX_old, posY_old, posZ_old, lia_damp, f/R2
+ t_outlet *force_new; // outlet
+ t_symbol *x_sym; // send
+ t_float posX_old, posY_old, posZ_old, posX, posY, posZ; // anciennes position, pour calculer la vitesse de cette interacteur.
+
+} t_iSphere3D;
+
+
+
+void iSphere3D_bang(t_iSphere3D *x)
+{
+
+ SETFLOAT(&(x->force[10]), x->posX_old); // posX_old
+ SETFLOAT(&(x->force[11]), x->posY_old); // posY_old
+ SETFLOAT(&(x->force[12]), x->posZ_old); // posZ_old
+
+ x->posX_old = x->posX;
+ x->posY_old = x->posY;
+ x->posZ_old = x->posZ;
+
+ if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_sphere_3D"), 17, x->force);
+
+ outlet_anything(x->force_new, gensym("interactor_sphere_3D"), 17, x->force);
+}
+
+void iSphere3D_setXYZ(t_iSphere3D *x, t_float X, t_float Y, t_float Z)
+{
+ SETFLOAT(&(x->force[0]), X);
+ x->posX= X;
+ SETFLOAT(&(x->force[1]), Y);
+ x->posY = Y;
+ SETFLOAT(&(x->force[2]), Z);
+ x->posZ = Z;
+}
+
+void iSphere3D_setX(t_iSphere3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[0]), X);
+ x->posX= X;
+}
+
+void iSphere3D_setY(t_iSphere3D *x, t_float Y)
+{
+ SETFLOAT(&(x->force[1]), Y);
+ x->posY = Y;
+}
+
+void iSphere3D_setZ(t_iSphere3D *x, t_float Z)
+{
+ SETFLOAT(&(x->force[2]), Z);
+ x->posZ = Z;
+}
+
+void iSphere3D_setRmin(t_iSphere3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[3]), X);
+}
+
+void iSphere3D_setRmax(t_iSphere3D *x, t_float X)
+{
+ SETFLOAT(&(x->force[4]), X);
+}
+
+void iSphere3D_setFN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[5]), f1);
+}
+
+void iSphere3D_setKN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[6]), f1);
+}
+
+void iSphere3D_setFRN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[7]), f1);
+}
+
+
+void iSphere3D_setDN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[8]), f1);
+}
+
+void iSphere3D_setdN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[9]), f1);
+}
+
+void iSphere3D_setG(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[13]), f1);
+}
+
+void iSphere3D_setdKN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[14]), f1);
+}
+
+void iSphere3D_setdRN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[15]), f1);
+}
+
+void iSphere3D_setdGN(t_iSphere3D *x, t_floatarg f1)
+{
+ SETFLOAT(&(x->force[16]), f1);
+}
+
+void *iSphere3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_iSphere3D *x = (t_iSphere3D *)pd_new(iSphere3D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+ if (argc>=15)
+ SETFLOAT(&(x->force[16]), atom_getfloatarg(14, argc, argv));
+ else
+ SETFLOAT(&(x->force[16]), 0);
+
+ if (argc>=14)
+ SETFLOAT(&(x->force[15]), atom_getfloatarg(13, argc, argv));
+ else
+ SETFLOAT(&(x->force[15]), 0);
+
+ if (argc>=13)
+ SETFLOAT(&(x->force[14]), atom_getfloatarg(12, argc, argv));
+ else
+ SETFLOAT(&(x->force[14]), 0);
+
+ if (argc>=12)
+ SETFLOAT(&(x->force[13]), atom_getfloatarg(11, argc, argv));
+ else
+ SETFLOAT(&(x->force[13]), 0);
+
+ if (argc>=11)
+ SETFLOAT(&(x->force[9]), atom_getfloatarg(10, argc, argv));
+ else
+ SETFLOAT(&(x->force[9]), 0);
+
+ if (argc>=10)
+ SETFLOAT(&(x->force[8]), atom_getfloatarg(9, argc, argv));
+ else
+ SETFLOAT(&(x->force[8]), 0);
+
+ if (argc>=9)
+ SETFLOAT(&(x->force[7]), atom_getfloatarg(8, argc, argv));
+ else
+ SETFLOAT(&(x->force[7]), 0);
+
+ if (argc>=8)
+ SETFLOAT(&(x->force[6]), atom_getfloatarg(7, argc, argv));
+ else
+ SETFLOAT(&(x->force[6]), 0);
+
+ if (argc>=7)
+ SETFLOAT(&(x->force[5]), atom_getfloatarg(6, argc, argv));
+ else
+ SETFLOAT(&(x->force[5]), 0);
+
+ if (argc>=6)
+ SETFLOAT(&(x->force[4]), atom_getfloatarg(5, argc, argv));
+ else
+ SETFLOAT(&(x->force[4]), 1);
+
+ if (argc>=5)
+ SETFLOAT(&(x->force[3]), atom_getfloatarg(4, argc, argv));
+ else
+ SETFLOAT(&(x->force[3]), 0);
+
+ if (argc>=4)
+ {
+ SETFLOAT(&(x->force[12]), atom_getfloatarg(3, argc, argv));
+ SETFLOAT(&(x->force[2]), atom_getfloatarg(3, argc, argv));
+ x->posZ_old = atom_getfloatarg(3, argc, argv);
+ }
+ else
+ {
+ SETFLOAT(&(x->force[12]), 0);
+ SETFLOAT(&(x->force[2]), 0);
+ x->posZ_old = 0;
+ }
+
+ if (argc>=3)
+ {
+ SETFLOAT(&(x->force[11]), atom_getfloatarg(2, argc, argv));
+ SETFLOAT(&(x->force[1]), atom_getfloatarg(2, argc, argv));
+ x->posY_old = atom_getfloatarg(2, argc, argv);
+
+ }
+ else
+ {
+ SETFLOAT(&(x->force[1]), 0);
+ SETFLOAT(&(x->force[11]), 0);
+ x->posY_old = 0;
+ }
+
+ if (argc>=2)
+ {
+ SETFLOAT(&(x->force[10]), atom_getfloatarg(1, argc, argv));
+ SETFLOAT(&(x->force[0]), atom_getfloatarg(1, argc, argv));
+ x->posX_old = atom_getfloatarg(1, argc, argv);
+ }
+ else
+ {
+ SETFLOAT(&(x->force[10]), 0);
+ SETFLOAT(&(x->force[0]), 0);
+ x->posX_old = 0;
+ }
+
+ return (x);
+}
+
+void iSphere3D_setup(void)
+{
+
+ iSphere3D_class = class_new(gensym("iSphere3D"),
+ (t_newmethod)iSphere3D_new,
+ 0, sizeof(t_iSphere3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)iSphere3D_new, gensym("pmpd.iSphere3D"), A_GIMME, 0);
+
+ class_addbang(iSphere3D_class, iSphere3D_bang);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setFN, gensym("setFN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setKN, gensym("setKN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setDN, gensym("setDN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setFRN, gensym("setFRN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setdN, gensym("setdN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setdRN, gensym("setdRN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setG, gensym("setG"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setdKN, gensym("setdKN"), A_DEFFLOAT, 0);
+ class_addmethod(iSphere3D_class, (t_method)iSphere3D_setdGN, gensym("setdGN"), A_DEFFLOAT, 0);
+
+}
+
+
diff --git a/src/lia.c b/src/lia.c
new file mode 100755
index 0000000..1293cac
--- /dev/null
+++ b/src/lia.c
@@ -0,0 +1,162 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *liaKD_class;
+
+typedef struct _liaKD {
+ t_object x_obj;
+ t_float raideur, viscosite, D2, longueur, distance_old, position1, position2, position_old1, position_old2;
+ t_outlet *force1;
+ t_outlet *force2;
+ t_float Lmin, Lmax;
+ t_symbol *x_sym; // receive
+} t_liaKD;
+
+void liaKD_float(t_liaKD *x, t_floatarg f1)
+{
+ x->position1 = f1;
+}
+
+void liaKD_bang(t_liaKD *x)
+{
+ t_float force1, force2, distance;
+
+ distance = (x->position2 - x->position1);
+//distance = abs(x->position2 - x->position1);
+ if (distance<0) distance = -distance;
+
+ force1 = x->raideur*(distance-(x->longueur)) + x->viscosite*(distance - x->distance_old) ;
+
+ x->distance_old = distance;
+
+ if (distance > x->Lmax) force1=0;
+ if (distance < x->Lmin) force1=0;
+
+ if (distance != 0)
+ {
+ force1 = force1 * (x->position2 - x->position1) / distance;
+ }
+
+ force2 = -force1 + (x->position_old2 - x->position2)*x->D2;
+ force1 += (x->position_old1 - x->position1)*x->D2;
+ // masse damping
+
+ outlet_float(x->force1, force1);
+ outlet_float(x->force2, force2);
+
+
+ x->position_old1 = x->position1;
+ x->position_old2 = x->position2;
+
+}
+
+void liaKD_reset(t_liaKD *x)
+{
+ x->position1 = 0;
+ x->position2 = 0;
+
+ x->position_old1 = 0;
+ x->position_old2 = 0;
+
+ x->distance_old = x->longueur;
+}
+
+void liaKD_resetF(t_liaKD *x)
+{
+ x->position_old1 = x->position1;
+ x->position_old2 = x->position2;
+
+ x->distance_old = x->longueur;
+}
+
+void liaKD_resetl(t_liaKD *x)
+{
+ x->longueur = (x->position1 - x->position2);
+}
+
+void liaKD_setL(t_liaKD *x, t_float L)
+{
+ x->longueur = L;
+}
+
+void liaKD_setK(t_liaKD *x, t_float K)
+{
+ x->raideur = K;
+}
+
+void liaKD_setD(t_liaKD *x, t_float D)
+{
+ x->viscosite = D;
+}
+
+void liaKD_setD2(t_liaKD *x, t_float D2)
+{
+ x->D2 = D2;
+}
+
+void liaKD_Lmin(t_liaKD *x, t_float Lmin)
+{
+ x->Lmin = Lmin;
+}
+
+void liaKD_Lmax(t_liaKD *x, t_float Lmax)
+{
+ x->Lmax = Lmax;
+}
+
+static void liaKD_free(t_liaKD *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void *liaKD_new(t_symbol *s, t_floatarg L, t_floatarg K, t_floatarg D, t_floatarg D2 )
+{
+
+ t_liaKD *x = (t_liaKD *)pd_new(liaKD_class);
+
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+
+ floatinlet_new(&x->x_obj, &x->position2);
+
+ x->force1=outlet_new(&x->x_obj, 0);
+ x->force2=outlet_new(&x->x_obj, 0);
+
+ x->position1 = 0;
+ x->position2 = 0;
+
+ x->raideur=K;
+ x->viscosite=D;
+ x->D2=D2;
+
+ x->Lmin= 0;
+ x->Lmax= 10000;
+
+ x->longueur=L;
+
+ return (void *)x;
+}
+
+void lia_setup(void)
+{
+ liaKD_class = class_new(gensym("lia"),
+ (t_newmethod)liaKD_new,
+ (t_method)liaKD_free,
+ sizeof(t_liaKD),
+ CLASS_DEFAULT, A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addcreator((t_newmethod)liaKD_new, gensym("link"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addcreator((t_newmethod)liaKD_new, gensym("pmpd.link"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addfloat(liaKD_class, liaKD_float);
+ class_addbang(liaKD_class, liaKD_bang);
+ class_addmethod(liaKD_class, (t_method)liaKD_reset, gensym("reset"), 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_resetl, gensym("resetL"), 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_resetF, gensym("resetF"), 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_setD2, gensym("setD2"), A_DEFFLOAT, 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_setK, gensym("setK"), A_DEFFLOAT, 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_setL, gensym("setL"), A_DEFFLOAT, 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_Lmin, gensym("setLmin"), A_DEFFLOAT, 0);
+ class_addmethod(liaKD_class, (t_method)liaKD_Lmax, gensym("setLmax"), A_DEFFLOAT, 0);
+}
diff --git a/src/lia2D.c b/src/lia2D.c
new file mode 100755
index 0000000..ff5e0aa
--- /dev/null
+++ b/src/lia2D.c
@@ -0,0 +1,213 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *lia2D_class;
+
+typedef struct _lia2D {
+ t_object x_obj;
+ t_float raideur, viscosite, D2, longueur, distance_old;
+ t_float position2Dx1, position2Dx2, posx_old1, posx_old2;
+ t_float position2Dy1, position2Dy2, posy_old1, posy_old2;
+ t_float Lmin, Lmax, muscle;
+ t_outlet *force1;
+ t_outlet *force2;
+ t_symbol *x_sym; // receive
+} t_lia2D;
+
+void lia2D_position2D(t_lia2D *x, t_floatarg f1, t_floatarg f2)
+{
+ x->position2Dx1 = f1;
+ x->position2Dy1 = f2;
+}
+
+void lia2D_position2D2(t_lia2D *x, t_floatarg f1, t_floatarg f2)
+{
+ x->position2Dx2 = f1;
+ x->position2Dy2 = f2;
+}
+
+void lia2D_bang(t_lia2D *x)
+{
+ t_float force, force2, forcex1, forcey1, forcex2, forcey2, distance;
+ t_atom force1[2];
+
+ distance = sqrt ( pow((x->position2Dx2-x->position2Dx1), 2) + pow((x->position2Dy2-x->position2Dy1), 2) );
+
+ force = ( x->raideur*(distance-(x->longueur * x->muscle)) ) + ( x->viscosite*(distance-x->distance_old) );
+
+ if (distance > x->Lmax) force=0;
+ if (distance < x->Lmin) force=0;
+
+ if (distance != 0)
+ {
+ forcex1 = force * (x->position2Dx2 - x->position2Dx1) / distance;
+ forcey1 = force * (x->position2Dy2 - x->position2Dy1) / distance;
+ }
+ else
+ {
+ forcex1 = 0;
+ forcey1 = 0 ;
+ }
+
+ forcex2 = -forcex1;
+ forcey2 = -forcey1;
+
+ forcex1 += (x->posx_old1 - x->position2Dx1)*x->D2;
+ forcey1 += (x->posy_old1 - x->position2Dy1)*x->D2;
+
+ forcex2 += (x->posx_old2 - x->position2Dx2)*x->D2;
+ forcey2 += (x->posy_old2 - x->position2Dy2)*x->D2;
+
+ SETFLOAT(&(force1[0]), forcex2 );
+ SETFLOAT(&(force1[1]), forcey2 );
+
+ outlet_anything(x->force2, gensym("force2D"), 2, force1);
+
+ SETFLOAT(&(force1[0]), forcex1 );
+ SETFLOAT(&(force1[1]), forcey1 );
+
+ outlet_anything(x->force1, gensym("force2D"), 2, force1);
+
+ x->posx_old2 = x->position2Dx2;
+ x->posx_old1 = x->position2Dx1;
+
+ x->posy_old2 = x->position2Dy2;
+ x->posy_old1 = x->position2Dy1;
+
+ x->distance_old = distance;
+}
+
+void lia2D_reset(t_lia2D *x)
+{
+ x->position2Dx1 = 0;
+ x->position2Dx2 = 0;
+ x->posx_old1 = 0;
+ x->posx_old2 = 0;
+
+ x->position2Dy1 = 0;
+ x->position2Dy2 = 0;
+ x->posy_old1 = 0;
+ x->posy_old2 = 0;
+
+ x->distance_old = x->longueur;
+}
+
+void lia2D_resetF(t_lia2D *x)
+{
+
+ x->posx_old1 = x->position2Dx1;
+ x->posx_old2 = x->position2Dx2;
+
+ x->posy_old1 = x->position2Dy1;
+ x->posy_old2 = x->position2Dy2;
+
+ x->distance_old = x->longueur;
+
+}
+
+void lia2D_resetL(t_lia2D *x)
+{
+ x->longueur = sqrt ( pow((x->position2Dx2-x->position2Dx1), 2) + pow((x->position2Dy2-x->position2Dy1), 2) );
+}
+
+
+void lia2D_setK(t_lia2D *x, t_float K)
+{
+ x->raideur = K;
+}
+
+void lia2D_setL(t_lia2D *x, t_float L)
+{
+ x->longueur = L;
+}
+
+void lia2D_setD(t_lia2D *x, t_float D)
+{
+ x->viscosite = D;
+}
+
+void lia2D_setD2(t_lia2D *x, t_float D)
+{
+ x->D2 = D;
+}
+
+void lia2D_Lmin(t_lia2D *x, t_float Lmin)
+{
+ x->Lmin = Lmin;
+}
+
+void lia2D_Lmax(t_lia2D *x, t_float Lmax)
+{
+ x->Lmax = Lmax;
+}
+
+void lia2D_muscle(t_lia2D *x, t_float muscle)
+{
+ x->muscle = muscle;
+}
+
+static void lia2D_free(t_lia2D *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void *lia2D_new(t_symbol *s, t_floatarg l, t_floatarg K, t_floatarg D, t_floatarg D2)
+{
+
+ t_lia2D *x = (t_lia2D *)pd_new(lia2D_class);
+
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("position2D"), gensym("position2D2"));
+
+ x->force1=outlet_new(&x->x_obj, 0);
+ x->force2=outlet_new(&x->x_obj, 0);
+
+ x->position2Dx1 = 0;
+ x->position2Dx2 = 0;
+ x->position2Dy1 = 0;
+ x->position2Dy2 = 0;
+
+ x->raideur=K;
+ x->viscosite=D;
+ x->longueur = l;
+
+ x->D2=D2;
+
+ x->Lmin= 0;
+ x->Lmax= 10000;
+ x->muscle= 1;
+
+ x->distance_old = x->longueur;
+
+ return (x);
+}
+
+void lia2D_setup(void)
+{
+
+ lia2D_class = class_new(gensym("lia2D"),
+ (t_newmethod)lia2D_new,
+ (t_method)lia2D_free,
+ sizeof(t_lia2D),
+ CLASS_DEFAULT, A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addcreator((t_newmethod)lia2D_new, gensym("link2D"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addcreator((t_newmethod)lia2D_new, gensym("pmpd.link2D"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addbang(lia2D_class, lia2D_bang);
+ class_addmethod(lia2D_class, (t_method)lia2D_reset, gensym("reset"), 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_resetL, gensym("resetL"), 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_resetF, gensym("resetF"), 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_setD2, gensym("setD2"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_setK, gensym("setK"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_setL, gensym("setL"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_Lmin, gensym("setLmin"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_Lmax, gensym("setLmax"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_muscle, gensym("setM"), A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_position2D, gensym("position2D"), A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(lia2D_class, (t_method)lia2D_position2D2, gensym("position2D2"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
+}
diff --git a/src/lia3D.c b/src/lia3D.c
new file mode 100755
index 0000000..4621516
--- /dev/null
+++ b/src/lia3D.c
@@ -0,0 +1,238 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *lia3D_class;
+
+typedef struct _lia3D {
+ t_object x_obj;
+ t_float raideur, viscosite, D2, longueur, distance_old;
+ t_float position3Dx1, position3Dx2, posx_old1, posx_old2;
+ t_float position3Dy1, position3Dy2, posy_old1, posy_old2;
+ t_float position3Dz1, position3Dz2, posz_old1, posz_old2;
+ t_float Lmin, Lmax, muscle;
+ t_outlet *force1;
+ t_outlet *force2;
+ t_symbol *x_sym; // receive
+} t_lia3D;
+
+void lia3D_position3D(t_lia3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ x->position3Dx1 = f1;
+ x->position3Dy1 = f2;
+ x->position3Dz1 = f3;
+
+}
+
+void lia3D_position3D2(t_lia3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ x->position3Dx2 = f1;
+ x->position3Dy2 = f2;
+ x->position3Dz2 = f3;
+}
+
+void lia3D_bang(t_lia3D *x)
+{
+ t_float force, force2, forcex1, forcey1, forcez1, forcex2, forcey2, forcez2, distance;
+ t_atom force1[3];
+
+ distance = sqrt ( pow((x->position3Dx2-x->position3Dx1), 2) + pow((x->position3Dy2-x->position3Dy1),2) + pow((x->position3Dz2-x->position3Dz1), 2) );
+
+ force = ( x->raideur*(distance-(x->longueur * x->muscle)) ) + ( x->viscosite*(distance-x->distance_old) );
+
+ if (distance > x->Lmax) force=0;
+ if (distance < x->Lmin) force=0;
+
+ if (distance != 0)
+ {
+ forcex1 = force * (x->position3Dx2 - x->position3Dx1) / distance;
+ forcey1 = force * (x->position3Dy2 - x->position3Dy1) / distance;
+ forcez1 = force * (x->position3Dz2 - x->position3Dz1) / distance;
+ }
+ else
+ {
+ forcex1 = 0;
+ forcey1 = 0;
+ forcez1 = 0;
+ }
+
+ forcex2 = -forcex1;
+ forcey2 = -forcey1;
+ forcez2 = -forcez1;
+
+ forcex1 += (x->posx_old1 - x->position3Dx1)*x->D2;
+ forcey1 += (x->posy_old1 - x->position3Dy1)*x->D2;
+ forcez1 += (x->posz_old1 - x->position3Dz1)*x->D2;
+
+ forcex2 += (x->posx_old2 - x->position3Dx2)*x->D2;
+ forcey2 += (x->posy_old2 - x->position3Dy2)*x->D2;
+ forcez2 += (x->posz_old2 - x->position3Dz2)*x->D2;
+
+
+ SETFLOAT(&(force1[0]), forcex1 );
+ SETFLOAT(&(force1[1]), forcey1 );
+ SETFLOAT(&(force1[2]), forcez1 );
+ outlet_anything(x->force1, gensym("force3D"), 3, force1);
+
+ SETFLOAT(&(force1[0]), forcex2 );
+ SETFLOAT(&(force1[1]), forcey2 );
+ SETFLOAT(&(force1[2]), forcez2 );
+
+ outlet_anything(x->force2, gensym("force3D"), 3, force1);
+
+ x->posx_old2 = x->position3Dx2;
+ x->posx_old1 = x->position3Dx1;
+
+ x->posy_old2 = x->position3Dy2;
+ x->posy_old1 = x->position3Dy1;
+
+ x->posz_old2 = x->position3Dz2;
+ x->posz_old1 = x->position3Dz1;
+
+ x->distance_old = distance;
+}
+
+void lia3D_reset(t_lia3D *x)
+{
+ x->position3Dx1 = 0;
+ x->position3Dx2 = 0;
+ x->posx_old1 = 0;
+ x->posx_old2 = 0;
+
+ x->position3Dy1 = 0;
+ x->position3Dy2 = 0;
+ x->posy_old1 = 0;
+ x->posy_old2 = 0;
+
+ x->position3Dz1 = 0;
+ x->position3Dz2 = 0;
+ x->posz_old1 = 0;
+ x->posz_old2 = 0;
+
+ x->distance_old = x->longueur;
+
+}
+
+void lia3D_resetF(t_lia3D *x)
+{
+
+ x->posx_old1 = x->position3Dx1;
+ x->posx_old2 = x->position3Dx2;
+
+ x->posy_old1 = x->position3Dy1;
+ x->posy_old2 = x->position3Dy2;
+
+ x->posz_old1 = x->position3Dz1;
+ x->posz_old2 = x->position3Dz2;
+
+ x->distance_old = x->longueur;
+
+}
+
+void lia3D_resetL(t_lia3D *x)
+{
+ x->longueur = sqrt ( pow((x->position3Dx2-x->position3Dx1), 2) + pow((x->position3Dy2-x->position3Dy1),2) + pow((x->position3Dz2-x->position3Dz1), 2) );
+}
+
+void lia3D_setK(t_lia3D *x, t_float K)
+{
+ x->raideur = K;
+}
+
+void lia3D_setL(t_lia3D *x, t_float L)
+{
+ x->longueur = L;
+}
+
+void lia3D_setD(t_lia3D *x, t_float D)
+{
+ x->viscosite = D;
+}
+
+void lia3D_setD2(t_lia3D *x, t_float D2)
+{
+ x->D2 = D2;
+}
+
+void lia3D_Lmin(t_lia3D *x, t_float Lmin)
+{
+ x->Lmin = Lmin;
+}
+
+void lia3D_Lmax(t_lia3D *x, t_float Lmax)
+{
+ x->Lmax = Lmax;
+}
+
+void lia3D_muscle(t_lia3D *x, t_float muscle)
+{
+ x->muscle = muscle;
+}
+
+static void lia3D_free(t_lia3D *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void *lia3D_new(t_symbol *s, t_floatarg l, t_floatarg K, t_floatarg D, t_floatarg D2)
+{
+
+ t_lia3D *x = (t_lia3D *)pd_new(lia3D_class);
+
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("position3D"), gensym("position3D2"));
+
+ x->force1=outlet_new(&x->x_obj, 0);
+ x->force2=outlet_new(&x->x_obj, 0);
+
+ x->position3Dx1 = 0;
+ x->position3Dx2 = 0;
+ x->position3Dy1 = 0;
+ x->position3Dy2 = 0;
+ x->position3Dz1 = 0;
+ x->position3Dz2 = 0;
+
+ x->raideur = K;
+ x->viscosite = D;
+ x->longueur = l;
+
+ x->D2 = D2;
+
+ x->Lmin= 0;
+ x->Lmax= 10000;
+
+ x->distance_old = x->longueur;
+
+ x->muscle = 1;
+
+ return (void *)x;
+}
+
+void lia3D_setup(void)
+{
+
+ lia3D_class = class_new(gensym("lia3D"),
+ (t_newmethod)lia3D_new,
+ (t_method)lia3D_free,
+ sizeof(t_lia3D),
+ CLASS_DEFAULT, A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addcreator((t_newmethod)lia3D_new, gensym("link3D"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addcreator((t_newmethod)lia3D_new, gensym("pmpd.link3D"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addbang(lia3D_class, lia3D_bang);
+ class_addmethod(lia3D_class, (t_method)lia3D_reset, gensym("reset"), 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_resetL, gensym("resetL"), 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_resetF, gensym("resetF"), 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_setD2, gensym("setD2"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_setK, gensym("setK"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_setL, gensym("setL"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_Lmin, gensym("setLmin"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_Lmax, gensym("setLmax"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_muscle, gensym("setM"), A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(lia3D_class, (t_method)lia3D_position3D2, gensym("position3D2"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+}
diff --git a/src/makefile b/src/makefile
new file mode 100755
index 0000000..32ef4e0
--- /dev/null
+++ b/src/makefile
@@ -0,0 +1,95 @@
+current:
+ echo make pd_linux, pd_nt, pd_darwin
+
+clean: ; rm -f *.pd_linux *.o
+
+# ----------------------- NT -----------------------
+
+pd_nt: pmpd.dll
+
+.SUFFIXES: .dll
+
+PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo
+VC="C:\Program Files\Microsoft Visual Studio\Vc98"
+
+PDNTINCLUDE = /I. /I\tcl\include /I\pds\win32\pd36\src /I$(VC)\include
+
+PDNTLDIR = $(VC)\lib
+PDNTLIB = $(PDNTLDIR)\libc.lib \
+ $(PDNTLDIR)\oldnames.lib \
+ $(PDNTLDIR)\kernel32.lib \
+ \pds\win32\pd37\bin\pd.lib
+
+.c.dll:
+ cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
+ link /dll /export:$*_setup $*.obj $(PDNTLIB)
+
+# ----------------------- IRIX 5.x -----------------------
+
+pd_irix5: foo1.pd_irix5 foo2.pd_irix5 dspobj~.pd_irix5
+
+.SUFFIXES: .pd_irix5
+
+SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
+
+
+SGIINCLUDE = -I../../src/
+
+.c.pd_irix5:
+ cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
+ ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
+ rm $*.o
+
+# ----------------------- IRIX 6.x -----------------------
+
+pd_irix6: foo1.pd_irix6 foo2.pd_irix6 dspobj~.pd_irix6
+
+.SUFFIXES: .pd_irix6
+
+SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
+ -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
+ -Ofast=ip32
+
+.c.pd_irix6:
+ cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
+ ld -IPA -n32 -shared -rdata_shared -o $*.pd_irix6 $*.o
+ rm $*.o
+
+# ----------------------- LINUX i386 -----------------------
+
+pd_linux: pmpd.pd_linux
+
+.SUFFIXES: .pd_linux
+
+LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \
+ -Wall -W -Wshadow -Wstrict-prototypes -Werror \
+ -Wno-unused -Wno-parentheses -Wno-switch
+
+LINUXINCLUDE = -I../../src
+
+.c.pd_linux:
+ cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
+ ld -export_dynamic -shared -o $*.pd_linux $*.o -lc -lm
+ strip --strip-unneeded $*.pd_linux
+ rm $*.o
+
+# ----------------------- Mac OS X (Darwin) -----------------------
+
+pd_darwin: pmpd.pd_darwin
+
+.SUFFIXES: .pd_darwin
+
+DARWINCFLAGS = -DPD -DUNIX -DMACOSX -O2 \
+ -Wall -W -Wshadow -Wstrict-prototypes \
+ -Wno-unused -Wno-parentheses -Wno-switch
+
+# where is your m_pd.h ???
+DARWININCLUDE = -I/. -I../pd/src -I../pd/obj
+
+.c.pd_darwin:
+ cc $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
+ cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $*.o
+ rm -f $*.o ../$*.pd_darwin
+ ln -s $*/$*.pd_darwin ..
+
+
diff --git a/src/masse.c b/src/masse.c
new file mode 100755
index 0000000..8241854
--- /dev/null
+++ b/src/masse.c
@@ -0,0 +1,153 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *masse_class;
+
+typedef struct _masse {
+ t_object x_obj;
+ t_float pos_old_1, pos_old_2, Xinit;
+ t_float force, masse, dX;
+ t_float minX, maxX;
+ t_outlet *position_new, *vitesse_out, *force_out;
+ t_symbol *x_sym; // receive
+} t_masse;
+
+extern t_float max(t_float, t_float);
+extern t_float min(t_float, t_float);
+
+
+void masse_minX(t_masse *x, t_floatarg f1)
+{
+ x->minX = f1;
+}
+
+void masse_maxX(t_masse *x, t_floatarg f1)
+{
+ x->maxX = f1;
+}
+
+void masse_float(t_masse *x, t_floatarg f1)
+{
+ x->force += f1;
+}
+
+void masse_bang(t_masse *x)
+{
+ t_float pos_new;
+
+ if (x->masse > 0)
+ pos_new = x->force/x->masse + 2*x->pos_old_1 - x->pos_old_2;
+ else pos_new = x->pos_old_1;
+
+ pos_new = max(min(x->maxX, pos_new), x->minX);
+
+ pos_new += x->dX;
+
+ x->pos_old_1 += x->dX; // pour ne pas avoir d'inertie suplementaire du a ce deplacement
+
+ outlet_float(x->vitesse_out, x->pos_old_1 - x->pos_old_2);
+ outlet_float(x->force_out, x->force);
+ outlet_float(x->position_new, pos_new);
+
+ x->pos_old_2 = x->pos_old_1;
+ x->pos_old_1 = pos_new;
+
+ x->force = 0;
+ x->dX = 0;
+
+}
+
+void masse_reset(t_masse *x)
+{
+ x->pos_old_2 = x->Xinit;
+ x->pos_old_1 = x->Xinit;
+
+ x->force=0;
+
+ outlet_float(x->position_new, x->Xinit);
+}
+
+void masse_resetF(t_masse *x)
+{
+ x->force=0;
+}
+
+void masse_dX(t_masse *x, t_float posX)
+{
+ x->dX += posX;
+}
+
+void masse_setX(t_masse *x, t_float posX)
+{
+ x->pos_old_2 = posX; // clear hystory for stability (instability) problem
+ x->pos_old_1 = posX;
+
+ x->force=0;
+
+ outlet_float(x->position_new, posX);
+}
+
+void masse_loadbang(t_masse *x)
+{
+ outlet_float(x->position_new, x->Xinit);
+}
+
+void masse_set_masse(t_masse *x, t_float mass)
+{
+ x->masse=mass;
+}
+
+static void masse_free(t_masse *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void *masse_new(t_symbol *s, t_floatarg M, t_floatarg X)
+{
+
+ t_masse *x = (t_masse *)pd_new(masse_class);
+
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+
+ x->position_new=outlet_new(&x->x_obj, 0);
+ x->force_out=outlet_new(&x->x_obj, 0);
+ x->vitesse_out=outlet_new(&x->x_obj, 0);
+
+ x->Xinit=X;
+
+ x->pos_old_1 = X;
+ x->pos_old_2 = X;
+ x->force=0;
+ x->masse=M;
+
+ x->minX = -100000;
+ x->maxX = 100000;
+
+ if (x->masse<=0) x->masse=1;
+
+ return (void *)x;
+}
+
+void masse_setup(void)
+{
+
+ masse_class = class_new(gensym("masse"),
+ (t_newmethod)masse_new,
+ (t_method)masse_free,
+ sizeof(t_masse),
+ CLASS_DEFAULT, A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT,0);
+ class_addcreator((t_newmethod)masse_new, gensym("mass"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT,0);
+ class_addcreator((t_newmethod)masse_new, gensym("pmpd.mass"), A_DEFSYM, A_DEFFLOAT, A_DEFFLOAT,0);
+ class_addfloat(masse_class, masse_float);
+ class_addbang(masse_class, masse_bang);
+ class_addmethod(masse_class, (t_method)masse_set_masse, gensym("setM"), A_DEFFLOAT, 0);
+ class_addmethod(masse_class, (t_method)masse_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(masse_class, (t_method)masse_dX, gensym("dX"), A_DEFFLOAT, 0);
+ class_addmethod(masse_class, (t_method)masse_reset, gensym("reset"), 0);
+ class_addmethod(masse_class, (t_method)masse_resetF, gensym("resetF"), 0);
+ class_addmethod(masse_class, (t_method)masse_minX, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(masse_class, (t_method)masse_maxX, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(masse_class, (t_method)masse_loadbang, gensym("loadbang"), 0);
+}
+
diff --git a/src/masse2D.c b/src/masse2D.c
new file mode 100755
index 0000000..067a69b
--- /dev/null
+++ b/src/masse2D.c
@@ -0,0 +1,810 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *masse2D_class;
+
+typedef struct _masse2D {
+ t_object x_obj;
+ t_float posX_old_1, posX_old_2, posY_old_1, posY_old_2, Xinit, Yinit;
+ t_float forceX, forceY, VX, VY, dX, dY, onoff;
+ t_float masse2D, seuil, damp;
+ t_float minX, maxX, minY, maxY;
+ t_atom pos_new[2], vitesse[3], force[3];
+ t_outlet *position2D_new, *vitesse_out, *force_out;
+ t_symbol *x_sym; // receive
+ unsigned int x_state; // random
+ t_float x_f; // random
+} t_masse2D;
+
+extern t_float max(t_float, t_float);
+extern t_float min(t_float, t_float);
+
+
+static int makeseed(void)
+{
+ static unsigned int random_nextseed = 1489853723;
+ random_nextseed = random_nextseed * 435898247 + 938284287;
+ return (random_nextseed & 0x7fffffff);
+}
+
+static float random_bang(t_masse2D *x)
+{
+ int nval;
+ int range = 2000000;
+ float rnd;
+ unsigned int randval = x->x_state;
+ x->x_state = randval = randval * 472940017 + 832416023;
+ nval = ((double)range) * ((double)randval)
+ * (1./4294967296.);
+ if (nval >= range) nval = range-1;
+
+ rnd=nval;
+
+ rnd-=1000000;
+ rnd=rnd/1000000.; //pour mettre entre -1 et 1;
+ return (rnd);
+}
+
+void masse2D_seuil(t_masse2D *x, t_floatarg f1)
+{
+ x->seuil = f1;
+}
+
+void masse2D_on(t_masse2D *x)
+{
+ x->onoff = 1;
+}
+
+void masse2D_off(t_masse2D *x)
+{
+ x->onoff = 0;
+}
+
+void masse2D_minX(t_masse2D *x, t_floatarg f1)
+{
+ x->minX = f1;
+}
+
+void masse2D_maxX(t_masse2D *x, t_floatarg f1)
+{
+ x->maxX = f1;
+}
+
+void masse2D_minY(t_masse2D *x, t_floatarg f1)
+{
+ x->minY = f1;
+}
+
+void masse2D_maxY(t_masse2D *x, t_floatarg f1)
+{
+ x->maxY = f1;
+}
+
+void masse2D_force(t_masse2D *x, t_floatarg f1, t_floatarg f2)
+{
+ x->forceX = x->forceX+f1;
+ x->forceY = x->forceY+f2;
+}
+
+void masse2D_displace(t_masse2D *x, t_floatarg f1, t_floatarg f2)
+{
+ x->dX += f1;
+ x->dY += f2;
+}
+
+void masse2D_damp(t_masse2D *x, t_floatarg f1)
+{
+ x->damp = f1;
+}
+
+void masse2D_dX(t_masse2D *x, t_floatarg f1)
+{
+ x->dX += f1;
+}
+
+void masse2D_dY(t_masse2D *x, t_floatarg f1)
+{
+ x->dY += f1;
+}
+
+void masse2D_bang(t_masse2D *x)
+{
+ t_float posX_new, posY_new, vX=1, vY=1;
+ if (x->onoff != 0)
+ {
+
+ if (x->seuil > 0)
+ {
+ if (x->posY_old_1 == x->minY) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (fabs(x->forceX)<=(x->seuil * -(x->forceY)))
+ vX = 0; // on est a l'interieur du cone de frotement,
+ }
+
+ if (x->posY_old_1 == x->maxY) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (fabs(x->forceX)<=(x->seuil * (x->forceY)))
+ vX = 0; // on est a l'interieur du cone de frotement,
+ }
+
+ if (x->posX_old_1 == x->minX) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (fabs(x->forceX)<=(x->seuil * -(x->forceY)))
+ vY = 0; // on est a l'interieur du cone de frotement,
+ }
+
+ if (x->posX_old_1 == x->maxX) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (fabs(x->forceX)<=(x->seuil * (x->forceY)))
+ vY = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+
+ x->forceX += x->damp * ((x->posX_old_2)-(x->posX_old_1));
+ x->forceY += x->damp * ((x->posY_old_2)-(x->posY_old_1)); // damping
+
+
+ if (x->masse2D != 0)
+ {
+ posX_new = x->forceX/x->masse2D + 2*x->posX_old_1 - x->posX_old_2;
+ posY_new = x->forceY/x->masse2D + 2*x->posY_old_1 - x->posY_old_2;
+ }
+ else
+ {
+ posX_new = x->posX_old_1;
+ posY_new = x->posY_old_1;
+ }
+
+ if (vX==0)
+ posX_new = x->posX_old_1; // on n'a pas de mv qd on est a l'interieur du cone de frotement
+ if (vY==0)
+ posY_new = x->posY_old_1;
+
+ posX_new = max(min(posX_new, x->maxX), x->minX);
+ posY_new = max(min(posY_new, x->maxY), x->minY);
+
+ posX_new += x->dX;
+ posY_new += x->dY;
+
+ x->posX_old_1 += x->dX; // pour eviter l'inertie
+ x->posY_old_1 += x->dY;
+
+ SETFLOAT(&(x->pos_new[0]), posX_new );
+ SETFLOAT(&(x->pos_new[1]), posY_new );
+
+ x->posX_old_2 = x->posX_old_1;
+ x->posX_old_1 = posX_new;
+
+ x->posY_old_2 = x->posY_old_1;
+ x->posY_old_1 = posY_new;
+
+ SETFLOAT(&(x->force[0]), x->forceX );
+ SETFLOAT(&(x->force[1]), x->forceY );
+ SETFLOAT(&(x->force[2]), sqrt( (x->forceX * x->forceX) + (x->forceY * x->forceY) ));
+
+ x->forceX=0;
+ x->forceY=0;
+
+ x->dX=0;
+ x->dY=0;
+
+ x->VX = x->posX_old_1 - x->posX_old_2;
+ x->VY = x->posY_old_1 - x->posY_old_2;
+
+ SETFLOAT(&(x->vitesse[0]), x->VX );
+ SETFLOAT(&(x->vitesse[1]), x->VY );
+ SETFLOAT(&(x->vitesse[2]), sqrt( (x->VX * x->VX) + (x->VY * x->VY) ));
+
+ outlet_anything(x->vitesse_out, gensym("velocity2D"), 3, x->vitesse);
+ outlet_anything(x->force_out, gensym("force2D"), 3, x->force);
+ outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+ }
+}
+
+void masse2D_reset(t_masse2D *x)
+{
+ x->posX_old_2 = x->Xinit;
+ x->posX_old_1 = x->Xinit;
+ x->forceX=0;
+
+ x->posY_old_2 = x->Yinit;
+ x->posY_old_1 = x->Yinit;
+ x->forceY=0;
+
+ x->VX = 0;
+ x->VY = 0;
+
+ x->dX=0;
+ x->dY=0;
+
+ x->seuil=0;
+
+ x->onoff = 1;
+
+ SETFLOAT(&(x->pos_new[0]), x->Xinit );
+ SETFLOAT(&(x->pos_new[1]), x->Yinit );
+
+ SETFLOAT(&(x->force[0]), 0 );
+ SETFLOAT(&(x->force[1]), 0 );
+ SETFLOAT(&(x->force[2]), 0 );
+
+ SETFLOAT(&(x->vitesse[0]), 0 );
+ SETFLOAT(&(x->vitesse[1]), 0 );
+ SETFLOAT(&(x->vitesse[2]), 0 );
+
+ outlet_anything(x->vitesse_out, gensym("velocity2D"), 3, x->vitesse);
+ outlet_anything(x->force_out, gensym("force2D"), 3, x->force);
+ outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+}
+
+void masse2D_resetf(t_masse2D *x)
+{
+ x->dX=0;
+ x->dY=0;
+
+ x->forceX=0;
+ x->forceY=0;
+}
+
+void masse2D_setXY(t_masse2D *x, t_float posX, t_float posY)
+{
+ x->posX_old_2 = posX;
+ x->posX_old_1 = posX;
+ x->forceX=0;
+
+ x->posY_old_2 = posY;
+ x->posY_old_1 = posY;
+ x->forceY=0;
+
+ SETFLOAT(&(x->pos_new[0]), posX );
+ SETFLOAT(&(x->pos_new[1]), posY );
+
+ outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+}
+
+void masse2D_setX(t_masse2D *x, t_float posX)
+{
+ x->posX_old_2 = posX;
+ x->posX_old_1 = posX;
+ x->forceX=0;
+
+ SETFLOAT(&(x->pos_new[0]), posX );
+
+ outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+}
+
+void masse2D_setY(t_masse2D *x, t_float posY)
+{
+ x->posY_old_2 = posY;
+ x->posY_old_1 = posY;
+ x->forceY=0;
+
+ SETFLOAT(&(x->pos_new[1]), posY );
+
+ outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+}
+
+void masse2D_loadbang(t_masse2D *x)
+{
+ outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+}
+
+
+void masse2D_set_masse2D(t_masse2D *x, t_float mass)
+{
+ x->masse2D=mass;
+}
+
+void masse2D_inter_ambient(t_masse2D *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if (argc == 12)
+ // 0 : FX
+ // 1 : FY
+ // 2 : RndX
+ // 3 : RndY
+ // 4 : D2
+ // 5 : rien
+ // 6 : Xmin
+ // 7 : Xmax
+ // 8 : Ymin
+ // 9 : Ymax
+ // 10 : dX
+ // 11 : dY
+ {
+ if (x->posX_old_1 > atom_getfloatarg(6, argc, argv))
+ {
+ if (x->posX_old_1 < atom_getfloatarg(7, argc, argv))
+ {
+ if (x->posY_old_1 > atom_getfloatarg(8, argc, argv))
+ {
+ if (x->posY_old_1 < atom_getfloatarg(9, argc, argv))
+ {
+ x->forceX += atom_getfloatarg(0, argc, argv);
+ x->forceY += atom_getfloatarg(1, argc, argv); // constant
+
+ x->forceX += random_bang(x)*atom_getfloatarg(2, argc, argv);
+ x->forceY += random_bang(x)*atom_getfloatarg(3, argc, argv); // random
+
+ x->forceX += atom_getfloatarg(4, argc, argv) * ((x->posX_old_2)-(x->posX_old_1));
+ x->forceY += atom_getfloatarg(4, argc, argv) * ((x->posY_old_2)-(x->posY_old_1)); // damping
+
+ x->dX += atom_getfloatarg(10, argc, argv);
+ x->dY += atom_getfloatarg(11, argc, argv); // constant
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ error("bad ambient interraction message");
+ }
+}
+
+void masse2D_inter_seg(t_masse2D *x, t_symbol *s, int argc, t_atom *argv)
+{
+t_float a1, b1, c1, a2, b2, c2, a3, b3, c3, tmp;
+t_float posx1, posx2, posy1, posy2;
+t_float profondeur, prof_max;
+
+ if (argc == 12)
+ // 0 : posx1
+ // 1 : posy1
+ // 2 : posx2
+ // 3 : posy2
+ // 4 : profondeur max
+ // 5 : F CT Normal
+ // 6 : F CT Tengentiel
+ // 7 : K normal
+ // 8 : Damp2 normal
+ // 9 : Damp2 tan
+ // 10 : displacement Normal
+ // 11 : d Tan
+
+ {
+ posx1 = atom_getfloatarg(0, argc, argv);
+ posy1 = atom_getfloatarg(1, argc, argv);
+ posx2 = atom_getfloatarg(2, argc, argv);
+ posy2 = atom_getfloatarg(3, argc, argv);
+
+ b1 = posx2 - posx1;
+ a1 = -posy2 + posy1;
+
+ if (!((a1==0) & (b1==0)))
+ {
+
+ tmp = sqrt((a1*a1)+(b1*b1)); // = longueur du vecteur pour renormalisation
+ if (tmp !=0)
+ {
+ a1 = a1/tmp;
+ b1 = b1/tmp;
+ }
+ else
+ {
+ a1 = 0;
+ b1 = 0;
+ }
+
+ c1 = a1*posx1+b1*posy1;
+
+ profondeur = ( (a1 * x->posX_old_1) + (b1 * x->posY_old_1) ) - c1;
+
+ if ( ( profondeur < 0) & (profondeur > - atom_getfloatarg(4, argc, argv)) )
+ {
+ a2 = b1;
+ b2 = -a1;
+ c2 = a2*posx1+b2*posy1;
+ if (( (a2 * x->posX_old_1) + (b2 * x->posY_old_1) ) > c2)
+ {
+ a3 = a2;
+ b3 = b2;
+ c3 = a3*posx2+b3*posy2;
+ if (( (a3 * x->posX_old_1) + (b3 * x->posY_old_1) ) < c3)
+ {
+ tmp = atom_getfloatarg(5, argc, argv); // force ct normal
+ x->forceX += tmp * a1;
+ x->forceY += tmp * b1;
+
+ tmp = atom_getfloatarg(6, argc, argv); // force ct normal
+ x->forceX -= tmp * b1;
+ x->forceY -= tmp * -a1;
+
+ tmp = atom_getfloatarg(7, argc, argv); // force K normal
+ tmp *= profondeur;
+ x->forceX -= tmp * a1;
+ x->forceY -= tmp * b1;
+
+ tmp = atom_getfloatarg(8, argc, argv); // damping2 normal
+ tmp *= ( x->VX * a1 + x->VY * b1 );
+ x->forceX -= tmp * a1 ;
+ x->forceY -= tmp * b1 ;
+
+ tmp = atom_getfloatarg(9, argc, argv); // damping2 tangentiel
+ tmp *= ( x->VX * b1 - x->VY * a1 );
+ x->forceX -= tmp * b1 ;
+ x->forceY -= tmp * -a1 ;
+
+ tmp = atom_getfloatarg(10, argc, argv); // displacement normal
+ x->dX += tmp * a1 ;
+ x->dY += tmp * b1 ;
+
+ tmp = atom_getfloatarg(11, argc, argv); // displacement tengentiel
+ x->dX -= tmp * b1 ;
+ x->dY -= tmp * -a1 ;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ error("bad interact_2D_segment message");
+ }
+}
+
+void masse2D_inter_line(t_masse2D *x, t_symbol *s, int argc, t_atom *argv)
+{
+t_float a1, b1, c1, tmp;
+t_float posx1, posx2, posy1, posy2;
+t_float profondeur, prof_max;
+
+ if (argc == 12)
+ // 0 : posx1
+ // 1 : posy1
+ // 2 : posx2
+ // 3 : posy2
+ // 4 : profondeur max
+ // 5 : F CT Normal
+ // 6 : F CT Tengentiel
+ // 7 : K normal
+ // 8 : Damp2 normal
+ // 9 : Damp2 tan
+ // 10 : d normal
+ // 11 : d tengential
+ {
+ posx1 = atom_getfloatarg(0, argc, argv);
+ posy1 = atom_getfloatarg(1, argc, argv);
+ posx2 = atom_getfloatarg(2, argc, argv);
+ posy2 = atom_getfloatarg(3, argc, argv);
+
+ b1 = posx2 - posx1;
+ a1 = -posy2 + posy1;
+
+ if (!((a1==0) & (b1==0)))
+ {
+ tmp = sqrt((a1*a1)+(b1*b1)); // = longueur du vecteur pour renormalisation
+ a1 = a1/tmp; // composante X de la normal
+ b1 = b1/tmp; // composante Y de la normal
+ c1 = a1*posx1+b1*posy1; //
+
+ profondeur = ( (a1 * x->posX_old_1) + (b1 * x->posY_old_1) ) - c1;
+ if ( ( profondeur < 0) & (profondeur > - atom_getfloatarg(4, argc, argv)) )
+ {
+ tmp = atom_getfloatarg(5, argc, argv); // force ct normal
+ x->forceX += tmp * a1;
+ x->forceY += tmp * b1;
+
+ tmp = atom_getfloatarg(6, argc, argv); // force ct tengentiel
+ x->forceX -= tmp * b1;
+ x->forceY -= tmp * -a1;
+
+ tmp = atom_getfloatarg(7, argc, argv); // force K normal
+ tmp *= profondeur ;
+ x->forceX -= tmp * a1;
+ x->forceY -= tmp * b1;
+
+ tmp = atom_getfloatarg(8, argc, argv); // damping2 normal
+ tmp *= ( x->VX * a1 + x->VY * b1 ) ;
+ x->forceX -= tmp * a1 ;
+ x->forceY -= tmp * b1 ;
+
+ tmp = atom_getfloatarg(9, argc, argv); // damping2 tangentiel
+ tmp *= ( x->VX * b1 - x->VY * a1 );
+ x->forceX -= tmp * b1 ;
+ x->forceY -= tmp * -a1 ;
+
+ tmp = atom_getfloatarg(10, argc, argv); // d normal
+ x->dX += tmp * a1;
+ x->dY += tmp * b1;
+
+ tmp = atom_getfloatarg(11, argc, argv); // d tangentiel
+ x->dX -= tmp * b1;
+ x->dY -= tmp * -a1;
+ }
+ }
+ }
+ else
+ {
+ error("bad interact_2D_line message");
+ }
+}
+
+void masse2D_inter_circle(t_masse2D *x, t_symbol *s, int argc, t_atom *argv)
+{
+t_float posx1, posy1, Nx, Ny, dx, dy, distance, Dmax, tmp;
+t_float deltaX_old, deltaY_old, distance_old ;
+t_float fnx=0, fny=0;
+t_float ftx=0, fty=0;
+
+ if (argc == 20)
+ // 0 : Xcentre
+ // 1 : Ycendre
+ // 2 : Rmin
+ // 3 : Rmax
+ // 4 : F normal
+ // 5 : F tangentiel
+ // 6 : K normal
+ // 7 : K tengentiel
+ // 8 : F normal proportionel a 1/R
+ // 9 : F tengentiel proportionel a 1/R
+ // 10 : Damp2 normal
+ // 11 : Damp2 tan
+ // 12 : deplacement N proportionel a 1/R
+ // 13 : deplacement tengentiel proportionel a 1/R
+ // 14 : position ancienne de l'interacteur en X
+ // 15 : position abcienne de l'interacteur en Y
+ // 16 : damping de liaison
+ // 17 : F normal proportionel a 1/R*R
+ // 18 : normal displacement
+ // 19 : tengential displacement
+
+ {
+ posx1 = atom_getfloatarg(0, argc, argv);
+ posy1 = atom_getfloatarg(1, argc, argv);
+ Nx = (x->posX_old_1)-posx1; // vecteur deplacement X
+ Ny = (x->posY_old_1)-posy1; // vecteur deplacement Y
+
+ distance = sqrt((Nx * Nx)+(Ny * Ny)); // distance entre le centre de l'interaction, et le pts
+
+ Dmax= atom_getfloatarg(3, argc, argv); // distance max de l'interaction
+ if ( (distance > atom_getfloatarg(2, argc, argv)) & (distance < Dmax) )
+ {
+ Nx = Nx/distance; // composante X de la normal (normalisé)
+ Ny = Ny/distance; // composante Y de la normal.
+
+ tmp = atom_getfloatarg(4, argc, argv); // force constante normal
+// x->forceX += tmp * Nx;
+// x->forceY += tmp * Ny;
+ fnx +=tmp;
+// fny +=tmp;
+
+ tmp = atom_getfloatarg(5, argc, argv); // force constante tengentiel
+// x->forceX += tmp * Ny;
+// x->forceY += tmp * -Nx;
+ ftx +=tmp;
+// fty +=tmp;
+
+ tmp = atom_getfloatarg(6, argc, argv); // force variable (K) normal
+ tmp *= ( Dmax-distance );
+// x->forceX += tmp * Nx ;
+// x->forceY += tmp * Ny ;
+ fnx +=tmp;
+// fny +=tmp;
+
+ tmp = atom_getfloatarg(7, argc, argv); // force variable (K) tengentiel
+ tmp *= ( Dmax-distance );
+// x->forceX += tmp * Ny ;
+// x->forceY += tmp * -Nx ;
+ ftx +=tmp;
+// fty +=tmp;
+
+ tmp = atom_getfloatarg(8, argc, argv); // force normal proportionel a 1/r
+ if (distance != 0)
+ {
+ tmp /= distance;
+// x->forceX += tmp * Nx ;
+// x->forceY += tmp * Ny ;
+ fnx +=tmp;
+// fny +=tmp;
+ }
+
+ tmp = atom_getfloatarg(9, argc, argv); // force tengentiel proportionel a 1/r
+ if (distance != 0)
+ {
+ tmp /= distance;
+// x->forceX -= tmp * Ny ;
+// x->forceY -= tmp * -Nx ;
+ ftx -=tmp;
+// fty -=tmp;
+ }
+
+ tmp = atom_getfloatarg(10, argc, argv); // damping2 normal
+ tmp *= ( x->VX * Nx + x->VY * Ny );
+// x->forceX -= tmp * Nx ;
+// x->forceY -= tmp * Ny ;
+ fnx -=tmp;
+// fny -=tmp;
+
+ tmp = atom_getfloatarg(11, argc, argv); // damping2 tangentiel
+ tmp *= ( x->VX * Ny - x->VY * Nx );
+// x->forceX -= tmp * Ny ;
+// x->forceY -= tmp * -Ny ;
+ ftx -=tmp;
+// fty -=tmp;
+
+ tmp = atom_getfloatarg(12, argc, argv); // d normal
+ if (distance != 0)
+ {
+ tmp /= distance;
+ x->dX += tmp * Nx ;
+ x->dY += tmp * Ny ;
+ }
+
+ tmp = atom_getfloatarg(13, argc, argv); // d tangentiel
+ if (distance != 0)
+ {
+ tmp /= distance;
+
+ x->dX -= tmp * Ny ;
+ x->dY -= tmp * -Nx ;
+ }
+
+ tmp = atom_getfloatarg(16, argc, argv); // damping de liaison
+ if (tmp!= 0)
+ {
+ deltaX_old = atom_getfloatarg(14, argc, argv) - x->posX_old_2;
+ deltaY_old = atom_getfloatarg(15, argc, argv) - x->posY_old_2;
+ distance_old = sqrt( (deltaX_old * deltaX_old) + (deltaY_old * deltaY_old));
+
+// x->forceX -= Nx * tmp * (distance - distance_old);
+// x->forceY -= Ny * tmp * (distance - distance_old);
+
+ tmp *= (distance - distance_old);
+ fnx -=tmp;
+// fny -=tmp;
+ }
+
+ tmp = atom_getfloatarg(17, argc, argv); // force normal proportionel a 1/r2
+ if (distance != 0)
+ {
+ tmp /= (distance*distance);
+// x->forceX -= tmp * Nx;
+// x->forceY -= tmp * Ny;
+ fnx +=tmp;
+// fny +=tmp;
+ }
+
+ tmp = atom_getfloatarg(18, argc, argv); // deplacement constante normal
+ x->dX += tmp * Nx;
+ x->dY += tmp * Ny;
+
+ tmp = atom_getfloatarg(19, argc, argv); // deplacement constante tengentiel
+ x->dX -= tmp * Ny;
+ x->dY -= tmp * -Nx;
+
+ x->forceX += fnx * Nx + ftx * Ny; // optimisation, but does not change anything...
+ x->forceY += fnx * Ny - ftx * Nx;
+ }
+ }
+ else
+ {
+ error("bad interact_2D_circle message");
+ }
+}
+
+void *masse2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+
+ t_masse2D *x = (t_masse2D *)pd_new(masse2D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+ x->x_state = makeseed();
+
+ pd_bind(&x->x_obj.ob_pd, atom_getsymbolarg(0, argc, argv));
+
+ x->position2D_new=outlet_new(&x->x_obj, 0);
+ x->force_out=outlet_new(&x->x_obj, 0);
+ x->vitesse_out=outlet_new(&x->x_obj, 0);
+
+ x->forceX=0;
+ x->forceY=0;
+
+ if (argc >= 2)
+ x->masse2D = atom_getfloatarg(1, argc, argv) ;
+ else
+ x->masse2D = 1;
+
+ x->onoff = 1;
+
+ x->VX = 0;
+ x->VY = 0;
+
+ x->dX=0;
+ x->dY=0;
+
+ if (argc >= 3)
+ x->Xinit = atom_getfloatarg(2, argc, argv);
+ else
+ x->Xinit = 0 ;
+
+ x->posX_old_1 = x->Xinit ;
+ x->posX_old_2 = x->Xinit;
+ SETFLOAT(&(x->pos_new[0]), x->Xinit);
+
+ if (argc >= 4)
+ x->Yinit = atom_getfloatarg(3, argc, argv);
+ else
+ x->Yinit = 0 ;
+
+ x->posY_old_1 = x->Yinit ;
+ x->posY_old_2 = x->Yinit;
+ SETFLOAT(&(x->pos_new[1]), x->Yinit);
+
+ if (argc >= 5)
+ x->minX = atom_getfloatarg(4, argc, argv) ;
+ else
+ x->minX = -100000;
+
+ if (argc >= 6)
+ x->maxX = atom_getfloatarg(5, argc, argv) ;
+ else
+ x->maxX = 100000;
+
+ if (argc >= 7)
+ x->minY = atom_getfloatarg(6, argc, argv) ;
+ else
+ x->minY = -100000;
+
+ if (argc >= 8)
+ x->maxY = atom_getfloatarg(7, argc, argv) ;
+ else
+ x->maxY = 100000;
+
+ if (argc >= 9)
+ x->seuil = atom_getfloatarg(8, argc, argv) ;
+ else
+ x->seuil = 0;
+
+ if (argc >= 10)
+ x->damp = atom_getfloatarg(9, argc, argv) ;
+ else
+ x->damp = 0;
+
+ return (x);
+}
+
+static void masse2D_free(t_masse2D *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void masse2D_setup(void)
+{
+
+ masse2D_class = class_new(gensym("masse2D"),
+ (t_newmethod)masse2D_new,
+ (t_method)masse2D_free, sizeof(t_masse2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)masse2D_new, gensym("mass2D"), A_GIMME, 0);
+ class_addcreator((t_newmethod)masse2D_new, gensym("pmpd.mass2D"), A_GIMME, 0);
+
+ class_addbang(masse2D_class, masse2D_bang);
+
+ class_addmethod(masse2D_class, (t_method)masse2D_force, gensym("force2D"),A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_displace, gensym("dXY"),A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_dX, gensym("dX"),A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_dY, gensym("dY"),A_DEFFLOAT, 0);
+
+ class_addmethod(masse2D_class, (t_method)masse2D_inter_ambient, gensym("interactor_ambient_2D"), A_GIMME, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_inter_line, gensym("interactor_line_2D"), A_GIMME, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_inter_seg, gensym("interactor_segment_2D"), A_GIMME, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_inter_circle, gensym("interactor_circle_2D"), A_GIMME, 0);
+
+ class_addmethod(masse2D_class, (t_method)masse2D_seuil, gensym("setT"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_set_masse2D, gensym("setM"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_minX, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_minY, gensym("setYmin"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_maxX, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_maxY, gensym("setYmax"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_setXY, gensym("setXY"), A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_damp, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_on, gensym("on"), 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_off, gensym("off"), 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_reset, gensym("reset"), 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_resetf, gensym("resetF"), 0);
+ class_addmethod(masse2D_class, (t_method)masse2D_loadbang, gensym("loadbang"), 0);
+
+}
diff --git a/src/masse3D.c b/src/masse3D.c
new file mode 100755
index 0000000..68dda3b
--- /dev/null
+++ b/src/masse3D.c
@@ -0,0 +1,1093 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *masse3D_class;
+
+extern t_float max(t_float, t_float);
+extern t_float min(t_float, t_float);
+
+
+typedef struct _masse3D {
+ t_object x_obj;
+ t_float posX_old_1, posX_old_2, posY_old_1, posY_old_2, posZ_old_1, posZ_old_2;
+ t_float Xinit, Yinit, Zinit, forceX, forceY, forceZ, VX, VY, VZ, dX, dY, dZ;
+ t_float masse3D, seuil, onoff, damp;
+ t_atom pos_new[3], vitesse[4], force[4];
+ t_float minX, maxX, minY, maxY, minZ, maxZ;
+ t_outlet *position3D_new, *vitesse_out, *force_out;
+ t_symbol *x_sym; // receive
+ unsigned int x_state; // random
+ t_float x_f; // random
+} t_masse3D;
+
+void masse3D_on(t_masse3D *x)
+{
+ x->onoff = 1;
+}
+
+void masse3D_off(t_masse3D *x)
+{
+ x->onoff = 0;
+}
+
+void masse3D_minX(t_masse3D *x, t_floatarg f1)
+{
+ x->minX = f1;
+}
+
+void masse3D_maxX(t_masse3D *x, t_floatarg f1)
+{
+ x->maxX = f1;
+}
+
+void masse3D_minY(t_masse3D *x, t_floatarg f1)
+{
+ x->minY = f1;
+}
+
+void masse3D_maxY(t_masse3D *x, t_floatarg f1)
+{
+ x->maxY = f1;
+}
+
+void masse3D_minZ(t_masse3D *x, t_floatarg f1)
+{
+ x->minZ = f1;
+}
+
+void masse3D_maxZ(t_masse3D *x, t_floatarg f1)
+{
+ x->maxZ = f1;
+}
+
+void masse3D_seuil(t_masse3D *x, t_floatarg f1)
+{
+ x->seuil = f1;
+}
+
+void masse3D_damp(t_masse3D *x, t_floatarg f1)
+{
+ x->damp = f1;
+}
+
+void masse3D_loadbang(t_masse3D *x, t_float posZ)
+{
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+}
+
+void masse3D_setX(t_masse3D *x, t_float posX)
+{
+
+ x->posX_old_2 = posX;
+ x->posX_old_1 = posX;
+ x->forceX=0;
+
+ SETFLOAT(&(x->pos_new[0]), posX);
+
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+
+}
+
+void masse3D_setY(t_masse3D *x, t_float posY)
+{
+ x->posY_old_2 = posY;
+ x->posY_old_1 = posY;
+ x->forceY=0;
+
+ SETFLOAT(&(x->pos_new[1]), posY);
+
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+
+}
+
+void masse3D_setZ(t_masse3D *x, t_float posZ)
+{
+ x->posZ_old_2 = posZ;
+ x->posZ_old_1 = posZ;
+ x->forceZ=0;
+
+ SETFLOAT(&(x->pos_new[2]), posZ);
+
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+
+}
+
+void masse3D_setXYZ(t_masse3D *x, t_float posX, t_float posY, t_float posZ)
+{
+
+ x->posX_old_2 = posX;
+ x->posX_old_1 = posX;
+ x->forceX=0;
+
+ x->posY_old_2 = posY;
+ x->posY_old_1 = posY;
+ x->forceY=0;
+
+ x->posZ_old_2 = posZ;
+ x->posZ_old_1 = posZ;
+ x->forceZ=0;
+
+ SETFLOAT(&(x->pos_new[0]), posX);
+ SETFLOAT(&(x->pos_new[1]), posY);
+ SETFLOAT(&(x->pos_new[2]), posZ);
+
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+}
+
+void masse3D_set_masse3D(t_masse3D *x, t_float mass)
+{
+ x->masse3D=mass;
+}
+
+
+void masse3D_force(t_masse3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ x->forceX = x->forceX+f1;
+ x->forceY = x->forceY+f2;
+ x->forceZ = x->forceZ+f3;
+}
+
+void masse3D_dXYZ(t_masse3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ x->dX += f1;
+ x->dY += f2;
+ x->dZ += f3;
+}
+
+void masse3D_dX(t_masse3D *x, t_floatarg f1 )
+{
+ x->dX += f1;
+}
+
+void masse3D_dY(t_masse3D *x, t_floatarg f1 )
+{
+ x->dY += f1;
+}
+
+void masse3D_dZ(t_masse3D *x, t_floatarg f1 )
+{
+ x->dZ += f1;
+}
+
+void masse3D_bang(t_masse3D *x)
+{
+ t_float posX_new, posY_new, posZ_new, vX=1, vY=1, vZ=1;
+ if (x->onoff != 0)
+ {
+
+ if (x->seuil > 0)
+ {
+ if (x->posZ_old_1 == x->minZ) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (sqrt(x->forceX*x->forceX + x->forceY*x->forceY)<=(x->seuil * -(x->forceZ)))
+ {
+ vX = 0; // on est a l'interieur du cone de frotement,
+ vY = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+
+ if (x->posZ_old_1 == x->maxZ) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (sqrt(x->forceX*x->forceX + x->forceY*x->forceY)<=(x->seuil * (x->forceZ)))
+ {
+ vX = 0; // on est a l'interieur du cone de frotement,
+ vY = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+
+ if (x->posY_old_1 == x->minY) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (sqrt(x->forceX*x->forceX + x->forceZ*x->forceZ)<=(x->seuil * -(x->forceY)))
+ {
+ vX = 0; // on est a l'interieur du cone de frotement,
+ vZ = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+
+ if (x->posY_old_1 == x->maxY) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (sqrt(x->forceX*x->forceX + x->forceZ*x->forceZ)<=(x->seuil * (x->forceY)))
+ {
+ vX = 0; // on est a l'interieur du cone de frotement,
+ vZ = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+
+ if (x->posX_old_1 == x->minX) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (sqrt(x->forceY*x->forceY + x->forceZ*x->forceZ)<=(x->seuil * -(x->forceX)))
+ {
+ vY = 0; // on est a l'interieur du cone de frotement,
+ vZ = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+
+ if (x->posX_old_1 == x->maxX) // si on est en dehors de la structure -> frottement sec sur les bords
+ {
+ if (sqrt(x->forceY*x->forceY + x->forceZ*x->forceZ)<=(x->seuil * (x->forceX)))
+ {
+ vY = 0; // on est a l'interieur du cone de frotement,
+ vZ = 0; // on est a l'interieur du cone de frotement,
+ }
+ }
+ }
+
+ x->forceX += x->damp * ((x->posX_old_2)-(x->posX_old_1));
+ x->forceY += x->damp * ((x->posY_old_2)-(x->posY_old_1)); // damping
+ x->forceZ += x->damp * ((x->posZ_old_2)-(x->posZ_old_1)); // damping
+
+ if (!(x->masse3D == 0))
+ {
+ posX_new = x->forceX/x->masse3D + 2*x->posX_old_1 - x->posX_old_2;
+ posY_new = x->forceY/x->masse3D + 2*x->posY_old_1 - x->posY_old_2;
+ posZ_new = x->forceZ/x->masse3D + 2*x->posZ_old_1 - x->posZ_old_2;
+ }
+ else
+ {
+ posX_new = x->posX_old_1;
+ posY_new = x->posY_old_1;
+ posZ_new = x->posY_old_1;
+ }
+
+
+ if (vX==0)
+ posX_new = x->posX_old_1; // on n'a pas de mv qd on est a l'interieur du cone de frotement
+ if (vY==0)
+ posY_new = x->posY_old_1;
+ if (vZ==0)
+ posZ_new = x->posZ_old_1;
+
+ posX_new = max(min(x->maxX, posX_new), x->minX);
+ posY_new = max(min(x->maxY, posY_new), x->minY);
+ posZ_new = max(min(x->maxZ, posZ_new), x->minZ);
+
+
+ posX_new += x->dX;
+ posY_new += x->dY;
+ posZ_new += x->dZ;
+
+ x->posX_old_1 += x->dX;
+ x->posY_old_1 += x->dY;
+ x->posZ_old_1 += x->dZ;
+
+ SETFLOAT(&(x->pos_new[0]), posX_new );
+ SETFLOAT(&(x->pos_new[1]), posY_new );
+ SETFLOAT(&(x->pos_new[2]), posZ_new );
+
+ x->posX_old_2 = x->posX_old_1;
+ x->posX_old_1 = posX_new;
+
+ x->posY_old_2 = x->posY_old_1;
+ x->posY_old_1 = posY_new;
+
+ x->posZ_old_2 = x->posZ_old_1;
+ x->posZ_old_1 = posZ_new;
+
+ SETFLOAT(&(x->force[0]), x->forceX );
+ SETFLOAT(&(x->force[1]), x->forceY );
+ SETFLOAT(&(x->force[2]), x->forceZ );
+ SETFLOAT(&(x->force[3]), sqrt( (x->forceX * x->forceX) + (x->forceY * x->forceY) + (x->forceZ * x->forceZ) ));
+
+ x->forceX=0;
+ x->forceY=0;
+ x->forceZ=0;
+
+ x->dX=0;
+ x->dY=0;
+ x->dZ=0;
+
+ x->VX = x->posX_old_1 - x->posX_old_2;
+ x->VY = x->posY_old_1 - x->posY_old_2;
+ x->VZ = x->posZ_old_1 - x->posZ_old_2;
+
+ SETFLOAT(&(x->vitesse[0]), x->VX );
+ SETFLOAT(&(x->vitesse[1]), x->VY );
+ SETFLOAT(&(x->vitesse[2]), x->VZ );
+ SETFLOAT(&(x->vitesse[3]), sqrt( (x->VX * x->VX) + (x->VY * x->VY) + (x->VZ * x->VZ) ));
+
+ outlet_anything(x->vitesse_out, gensym("velocity3D"), 4, x->vitesse);
+ outlet_anything(x->force_out, gensym("force3D"), 4, x->force);
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+ }
+}
+
+void masse3D_reset(t_masse3D *x)
+{
+
+ x->posX_old_2 = x->Xinit;
+ x->posX_old_1 = x->Xinit;
+ x->forceX=0;
+
+ x->posY_old_2 = x->Yinit;
+ x->posY_old_1 = x->Yinit;
+ x->forceY=0;
+
+ x->posZ_old_2 = x->Zinit;
+ x->posZ_old_1 = x->Zinit;
+ x->forceZ=0;
+
+ x->VX = 0;
+ x->VY = 0;
+ x->VZ = 0;
+
+ x->dX=0;
+ x->dY=0;
+ x->dZ=0;
+
+ x->seuil=0;
+
+ x->onoff = 1;
+
+ SETFLOAT(&(x->pos_new[0]), x->Xinit );
+ SETFLOAT(&(x->pos_new[1]), x->Yinit );
+ SETFLOAT(&(x->pos_new[2]), x->Zinit );
+
+ SETFLOAT(&(x->force[0]), 0 );
+ SETFLOAT(&(x->force[1]), 0 );
+ SETFLOAT(&(x->force[2]), 0 );
+ SETFLOAT(&(x->force[3]), 0 );
+
+ SETFLOAT(&(x->vitesse[0]), 0 );
+ SETFLOAT(&(x->vitesse[1]), 0 );
+ SETFLOAT(&(x->vitesse[2]), 0 );
+ SETFLOAT(&(x->vitesse[3]), 0 );
+
+ outlet_anything(x->vitesse_out, gensym("velocity3D"), 4, x->vitesse);
+ outlet_anything(x->force_out, gensym("force3D"), 4, x->force);
+ outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+
+}
+
+
+void masse3D_resetf(t_masse3D *x)
+{
+ x->forceX=0;
+ x->forceY=0;
+ x->forceZ=0;
+
+ x->dX=0;
+ x->dY=0;
+ x->dZ=0;
+}
+
+static int makeseed3D(void)
+{
+ static unsigned int random_nextseed = 1489853723;
+ random_nextseed = random_nextseed * 435898247 + 938284287;
+ return (random_nextseed & 0x7fffffff);
+}
+
+static float random_bang3D(t_masse3D *x)
+{
+ int nval;
+ int range = 2000000;
+ float rnd;
+ unsigned int randval = x->x_state;
+ x->x_state = randval = randval * 472940017 + 832416023;
+ nval = ((double)range) * ((double)randval)
+ * (1./4294967296.);
+ if (nval >= range) nval = range-1;
+
+ rnd=nval;
+
+ rnd-=1000000;
+ rnd=rnd/1000000.; //pour mettre entre -1 et 1;
+ return (rnd);
+}
+
+
+void masse3D_inter_ambient(t_masse3D *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_float tmp;
+
+ if (argc == 17)
+ // 0 : FX
+ // 1 : FY
+ // 2 : FZ
+ // 3 : RndX
+ // 4 : RndY
+ // 5 : RndZ
+ // 6 : D2
+ // 7 : rien
+ // 8 : Xmin
+ // 9 : Xmax
+ // 10 : Ymin
+ // 11 : Ymax
+ // 12 : Zmin
+ // 13 : Zmax
+ // 14 : dX
+ // 15 : dY
+ // 16 : dZ
+ {
+ if (x->posX_old_1 > atom_getfloatarg(8, argc, argv))
+ {
+ if (x->posX_old_1 < atom_getfloatarg(9, argc, argv))
+ {
+ if (x->posY_old_1 > atom_getfloatarg(10, argc, argv))
+ {
+ if (x->posY_old_1 < atom_getfloatarg(11, argc, argv))
+ {
+ if (x->posZ_old_1 > atom_getfloatarg(12, argc, argv))
+ {
+ if (x->posZ_old_1 < atom_getfloatarg(13, argc, argv))
+ {
+ x->forceX += atom_getfloatarg(0, argc, argv);
+ x->forceY += atom_getfloatarg(1, argc, argv); // constant
+ x->forceZ += atom_getfloatarg(2, argc, argv); // constant
+
+ x->forceX += random_bang3D(x)*atom_getfloatarg(3, argc, argv);
+ x->forceY += random_bang3D(x)*atom_getfloatarg(4, argc, argv); // random
+ x->forceZ += random_bang3D(x)*atom_getfloatarg(5, argc, argv); // random
+
+ tmp = atom_getfloatarg(6, argc, argv);
+ if (tmp != 0)
+ {
+ x->forceX += tmp * ((x->posX_old_2)-(x->posX_old_1));
+ x->forceY += tmp * ((x->posY_old_2)-(x->posY_old_1)); // damping
+ x->forceZ += tmp * ((x->posZ_old_2)-(x->posZ_old_1)); // damping
+ }
+
+ x->dX += atom_getfloatarg(14, argc, argv);
+ x->dY += atom_getfloatarg(15, argc, argv); // constant
+ x->dZ += atom_getfloatarg(16, argc, argv); // constant
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ error("bad ambient interraction message");
+ }
+}
+
+void masse3D_inter_plane(t_masse3D *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_float a, b, c, d, profondeur, distance, tmp, profondeur_old;
+
+ if (argc == 12)
+ // 0 : Xvector
+ // 1 : Yvector
+ // 2 : Zvector
+ // 3 : Xcenter
+ // 4 : Ycenter
+ // 5 : Zcenter
+ // 6 : FNCt
+ // 7 : KN
+ // 8 : damping de liaison (profondeur)
+ // 9 : Profondeur maximum
+ // 10 : deplacement normal X
+ // 11 : deplacement proportionel a P
+
+ {
+
+// ax+by+cz-d=0
+// a = Xvector / |V|
+// b = Yvector ...
+// d est tel que aXcenter +bYcenter + cYcenter = d
+
+ a = atom_getfloatarg(0, argc, argv);
+ b = atom_getfloatarg(1, argc, argv);
+ c = atom_getfloatarg(2, argc, argv);
+
+ tmp = sqrt (a*a + b*b + c*c);
+ if (tmp != 0)
+ {
+ a /= tmp;
+ b /= tmp;
+ c /= tmp;
+
+ }
+ else
+ {
+ a=1;
+ b=0;
+ c=0;
+ }
+
+ d = a * atom_getfloatarg(3, argc, argv) + b * atom_getfloatarg(4, argc, argv) + c * atom_getfloatarg(5, argc, argv);
+//C a optimiser : envoyer directement les coef directeur et l'offset
+//C a faire pour les autres obj aussi
+
+ profondeur = a * x->posX_old_1 + b * x->posY_old_1 + c * x->posZ_old_1 - d;
+
+ if ( (profondeur < 0) & (profondeur > -atom_getfloatarg(9, argc, argv)) )
+ {
+
+ tmp = atom_getfloatarg(6, argc, argv); // force normal constante
+
+ x->forceX += tmp * a;
+ x->forceY += tmp * b;
+ x->forceZ += tmp * c;
+
+ tmp = atom_getfloatarg(7, argc, argv); // force normal proportionelle a la profondeur
+ tmp *= profondeur;
+ x->forceX -= tmp * a;
+ x->forceY -= tmp * b;
+ x->forceZ -= tmp * c;
+
+ tmp = atom_getfloatarg(8, argc, argv); // force normal proportionelle a la profondeur
+
+ profondeur_old = a * x->posX_old_2 + b * x->posY_old_2 + c * x->posZ_old_2 - d;
+ tmp *= (profondeur - profondeur_old);
+ x->forceX -= tmp * a;
+ x->forceY -= tmp * b;
+ x->forceZ -= tmp * c;
+
+
+ tmp = atom_getfloatarg(10, argc, argv); // deplacement normal constant
+
+ x->dX += tmp * a;
+ x->dY += tmp * b;
+ x->dZ += tmp * c;
+
+ tmp = atom_getfloatarg(11, argc, argv); // deplacement normal proportionel
+ tmp *= profondeur;
+
+ x->dX -= tmp * a;
+ x->dY -= tmp * b;
+ x->dZ -= tmp * c;
+ }
+
+ }
+ else
+ {
+ error("bad plane interraction message");
+ }
+}
+
+
+void masse3D_inter_sphere(t_masse3D *x, t_symbol *s, int argc, t_atom *argv)
+{
+t_float posx1, posy1, posz1, Nx, Ny, Nz, dx, dy, dz, distance, Dmax, tmp;
+t_float deltaX_old, deltaY_old, deltaZ_old, distance_old ;
+
+ if (argc == 17)
+ // 0 : Xcentre
+ // 1 : Ycendre
+ // 2 : Zcentre
+ // 3 : Rmin
+ // 4 : Rmax
+ // 5 : F normal
+ // 6 : K normal
+ // 7 : F normal proportionel a 1/R
+ // 8 : Damp de liason normal
+ // 9 : deplacement N Ct
+ // 10 : position ancienne de l'interacteur en X
+ // 11 : position abcienne de l'interacteur en Y
+ // 12 : position abcienne de l'interacteur en Z
+ // 13 : d dormal proportionel a R
+ // 14 : force normal proportionel a 1/R2
+ // 15 : d dormal proportionel a 1/R
+ // 16 : d dormal proportionel a 1/R*R
+
+ {
+ posx1 = atom_getfloatarg(0, argc, argv);
+ posy1 = atom_getfloatarg(1, argc, argv);
+ posz1 = atom_getfloatarg(2, argc, argv);
+ Nx = (x->posX_old_1)-posx1; // vecteur deplacement X
+ Ny = (x->posY_old_1)-posy1; // vecteur deplacement Y
+ Nz = (x->posZ_old_1)-posz1; // vecteur deplacement Y
+
+ distance = sqrt((Nx * Nx)+(Ny * Ny)+(Nz * Nz)); // distance entre le centre de l'interaction, et le pts
+
+ Nx = Nx/distance; // composante X de la normal (normalisé)
+ Ny = Ny/distance; // composante Y de la normal.
+ Nz = Nz/distance; // composante Y de la normal.
+
+ Dmax= atom_getfloatarg(4, argc, argv); // distance max de l'interaction
+ if ( (distance > atom_getfloatarg(3, argc, argv)) & (distance < Dmax) )
+ {
+ tmp = atom_getfloatarg(5, argc, argv); // force constante normal
+ x->forceX += tmp * Nx;
+ x->forceY += tmp * Ny;
+ x->forceZ += tmp * Nz;
+
+ tmp = atom_getfloatarg(6, argc, argv); // force variable (K) normal
+ tmp *= ( Dmax-distance );
+ x->forceX += tmp * Nx ;
+ x->forceY += tmp * Ny ;
+ x->forceZ += tmp * Nz ;
+
+ tmp = atom_getfloatarg(7, argc, argv); // force normal proportionel a 1/r
+ if ( (distance != 0) & (tmp != 0) )
+ {
+ tmp /= distance;
+ x->forceX += tmp * Nx;
+ x->forceY += tmp * Ny;
+ x->forceZ += tmp * Nz ;
+ }
+
+ tmp = atom_getfloatarg(8, argc, argv); // damping2 normal
+ tmp *= ( x->VX * Nx + x->VY * Ny + x->VZ * Nz );
+ x->forceX -= tmp * Nx ;
+ x->forceY -= tmp * Ny ;
+ x->forceZ -= tmp * Nz ;
+
+ tmp = atom_getfloatarg(9, argc, argv); // d normal
+ x->dX += tmp * Nx ;
+ x->dY += tmp * Ny ;
+ x->dZ += tmp * Nz ;
+
+ tmp = atom_getfloatarg(13, argc, argv); // force normal proportionel a 1/r2
+ if ( (distance != 0) & (tmp != 0) )
+ {
+ tmp /= (distance * distance);
+ x->forceX += tmp * Nx ;
+ x->forceY += tmp * Ny ;
+ x->forceZ += tmp * Nz ;
+ }
+
+ tmp = atom_getfloatarg(14, argc, argv); // deplacement variable (K) normal
+ tmp *= ( Dmax-distance );
+ x->dX += tmp * Nx ;
+ x->dY += tmp * Ny ;
+ x->dZ += tmp * Nz ;
+
+ tmp = atom_getfloatarg(15, argc, argv); // deplacement normal proportionel a 1/r
+ if ( (distance != 0) & (tmp != 0) )
+ {
+ tmp /= distance;
+ x->dX += tmp * Nx ;
+ x->dY += tmp * Ny ;
+ x->dZ += tmp * Nz ;
+ }
+
+ tmp = atom_getfloatarg(16, argc, argv); // deplacement normal proportionel a 1/r2
+ if ( (distance != 0) & (tmp != 0) )
+ {
+ tmp /= (distance * distance);
+ x->dX += tmp * Nx;
+ x->dY += tmp * Ny;
+ x->dZ += tmp * Nz;
+ }
+
+ }
+ }
+ else
+ {
+ error("bad interact_3D_sphere message");
+ }
+}
+
+
+void masse3D_inter_circle(t_masse3D *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_float a, b, c, d, profondeur, distance, tmp, profondeur_old, rayon, rayon_old;
+
+ if (argc == 14)
+ // 0 : Xvector
+ // 1 : Yvector
+ // 2 : Zvector
+ // 3 : Xcenter
+ // 4 : Ycenter
+ // 5 : Zcenter
+ // 6 : Rmin
+ // 7 : RMax
+ // 8 : FNCt
+ // 9 : KN
+ // 10 : damping de liaison (profondeur)
+ // 11 : Profondeur maximum
+ // 12 : dN
+ // 13 : dKN
+
+ {
+// ax+by+cz-d=0
+// a = Xvector / |V|
+// b = Yvector ...
+// d est tel que aXcenter +bYcenter + cYcenter = d
+
+ a = atom_getfloatarg(0, argc, argv);
+ b = atom_getfloatarg(1, argc, argv);
+ c = atom_getfloatarg(2, argc, argv);
+
+ tmp = sqrt (a*a + b*b + c*c);
+ if (tmp != 0)
+ {
+ a /= tmp;
+ b /= tmp;
+ c /= tmp;
+ }
+ else
+ {
+ a=1;
+ b=0;
+ c=0;
+ }
+
+ d = a * atom_getfloatarg(3, argc, argv) + b * atom_getfloatarg(4, argc, argv) + c * atom_getfloatarg(5, argc, argv);
+
+ profondeur = a * x->posX_old_1 + b * x->posY_old_1 + c * x->posZ_old_1 - d;
+
+ rayon = sqrt ( pow(x->posX_old_1-atom_getfloatarg(3, argc, argv), 2) +pow(x->posY_old_1-atom_getfloatarg(4, argc, argv) , 2) + pow(x->posZ_old_1 - atom_getfloatarg(5, argc, argv) , 2) - profondeur*profondeur );
+
+ if ( (profondeur < 0) & (profondeur > - atom_getfloatarg(11, argc, argv)) & (rayon > atom_getfloatarg(6, argc, argv)) & (rayon < atom_getfloatarg(7, argc, argv)))
+ {
+
+ tmp = atom_getfloatarg(8, argc, argv); // force normal constante
+
+ x->forceX += tmp * a;
+ x->forceY += tmp * b;
+ x->forceZ += tmp * c;
+
+ tmp = atom_getfloatarg(9, argc, argv); // force normal proportionelle a la profondeur
+ tmp *= profondeur;
+ x->forceX -= tmp * a;
+ x->forceY -= tmp * b;
+ x->forceZ -= tmp * c;
+
+ tmp = atom_getfloatarg(10, argc, argv); // force normal proportionelle a la profondeur
+
+ profondeur_old = a * x->posX_old_2 + b * x->posY_old_2 + c * x->posZ_old_2 - d;
+ tmp *= (profondeur - profondeur_old);
+
+ x->forceX -= tmp * a;
+ x->forceY -= tmp * b;
+ x->forceZ -= tmp * c;
+
+ tmp = atom_getfloatarg(12, argc, argv); // deplacement normal constante
+ x->dX += tmp * a;
+ x->dY += tmp * b;
+ x->dZ += tmp * c;
+
+ tmp = atom_getfloatarg(13, argc, argv); // deplacement normal proportionelle a la profondeur
+ tmp *= profondeur;
+ x->dX -= tmp * a;
+ x->dY -= tmp * b;
+ x->dZ -= tmp * c;
+ }
+ }
+ else
+ {
+ error("bad circle interraction message");
+ }
+}
+
+
+void masse3D_inter_cylinder(t_masse3D *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_float a, b, c, d, profondeur, profondeur_old, distance, tmp, rayon_old, rayon;
+ t_float Xb, Yb, Zb, Ta, Tb, Tc, Xb_old, Yb_old, Zb_old;
+
+ if (argc == 21)
+ // 0 : Xvector
+ // 1 : Yvector
+ // 2 : Zvector
+ // 3 : Xcenter
+ // 4 : Ycenter
+ // 5 : Zcenter
+ // 6 : Rmin
+ // 7 : Rmax
+ // 8 : FNCt
+ // 9 : KN
+ // 10 : damping de liaison (rayon)
+ // 11 : FN 1/R
+ // 12 : FN 1/R2
+ // 13 : Pmin
+ // 14 : Pmax
+ // 15 : FTct
+ // 16 : KT
+ // 17 : dNct
+ // 18 : dTct
+ // 19 : dKN
+ // 20 : dKT
+
+ {
+
+// ax+by+cz-d=0
+// a = Xvector / |V|
+// b = Yvector ...
+// d est tel que aXcenter +bYcenter + cYcenter = d
+
+ a = atom_getfloatarg(0, argc, argv);
+ b = atom_getfloatarg(1, argc, argv);
+ c = atom_getfloatarg(2, argc, argv);
+
+ tmp = sqrt (a*a + b*b + c*c);
+ if (tmp != 0)
+ {
+ a /= tmp;
+ b /= tmp;
+ c /= tmp;
+ }
+ else
+ {
+ a=1;
+ b=0;
+ c=0;
+ }
+
+ d = a * atom_getfloatarg(3, argc, argv) + b * atom_getfloatarg(4, argc, argv) + c * atom_getfloatarg(5, argc, argv);
+
+ profondeur = a * x->posX_old_1 + b * x->posY_old_1 + c * x->posZ_old_1 - d;
+
+ Xb = x->posX_old_1 - atom_getfloatarg(3, argc, argv) - profondeur * a;
+ Yb = x->posY_old_1 - atom_getfloatarg(4, argc, argv) - profondeur * b;
+ Zb = x->posZ_old_1 - atom_getfloatarg(5, argc, argv) - profondeur * c;
+
+ rayon = sqrt ( pow(Xb, 2) + pow(Yb, 2) + pow(Zb, 2) );
+
+ if (rayon != 0)
+ {
+ Xb /= rayon; // normalisation
+ Yb /= rayon;
+ Zb /= rayon;
+ }
+ else
+ {
+ Xb = 0; // normalisation
+ Yb = 0;
+ Zb = 0;
+ }
+
+
+ Ta = b*Zb - c*Yb; // vecteur tengentiel = vecteur vectoriel rayon
+ Tb = c*Xb - a*Zb;
+ Tc = a*Yb - b*Xb;
+
+ if ( (profondeur < atom_getfloatarg(14, argc, argv)) & (profondeur > atom_getfloatarg(13, argc, argv)) & (rayon < atom_getfloatarg(7, argc, argv)) & (rayon > atom_getfloatarg(6, argc, argv)) )
+ {
+
+ tmp = atom_getfloatarg(8, argc, argv); // force normal constante
+
+ x->forceX += tmp * Xb;
+ x->forceY += tmp * Yb;
+ x->forceZ += tmp * Zb;
+
+ tmp = atom_getfloatarg(9, argc, argv); // rigidité normal proportionelle
+ tmp *= ( atom_getfloatarg(7, argc, argv) - rayon ) ;
+ x->forceX += tmp * Xb;
+ x->forceY += tmp * Yb;
+ x->forceZ += tmp * Zb;
+
+ tmp = atom_getfloatarg(10, argc, argv); // damping normal proportionelle a la profondeur
+
+ profondeur_old = a * x->posX_old_2 + b * x->posY_old_2 + c * x->posZ_old_2 - d;
+
+ Xb_old = x->posX_old_2 - atom_getfloatarg(3, argc, argv) - profondeur_old * a;
+ Yb_old = x->posY_old_2 - atom_getfloatarg(4, argc, argv) - profondeur_old * b;
+ Zb_old = x->posZ_old_2 - atom_getfloatarg(5, argc, argv) - profondeur_old * c;
+
+ rayon_old = sqrt ( pow(Xb_old, 2) + pow(Yb_old, 2) + pow(Zb_old, 2) );
+
+ tmp *= (rayon - rayon_old);
+
+ x->forceX -= tmp * Xb;
+ x->forceY -= tmp * Yb;
+ x->forceZ -= tmp * Zb;
+
+ tmp = atom_getfloatarg(11, argc, argv); // force normal proportionne a 1/R
+ if (rayon != 0)
+ {
+ tmp /= rayon;
+ x->forceX += tmp * Xb;
+ x->forceY += tmp * Yb;
+ x->forceZ += tmp * Zb;
+ }
+
+ tmp = atom_getfloatarg(12, argc, argv); // force normal proportionne a 1/R*R
+ if (rayon != 0)
+ {
+ tmp /= (rayon*rayon);
+ x->forceX += tmp * Xb;
+ x->forceY += tmp * Yb;
+ x->forceZ += tmp * Zb;
+ }
+
+ tmp = atom_getfloatarg(15, argc, argv); // force tengente constante
+ x->forceX -= tmp * Ta;
+ x->forceY -= tmp * Tb;
+ x->forceZ -= tmp * Tc;
+
+ tmp = atom_getfloatarg(16, argc, argv); // rigidité tengentiel proportionelle
+ tmp *= ( atom_getfloatarg(7, argc, argv) - rayon ) ;
+ x->forceX += tmp * Ta;
+ x->forceY += tmp * Tb;
+ x->forceZ += tmp * Tc;
+
+ tmp = atom_getfloatarg(17, argc, argv); // deplacement normal constante
+
+ x->dX += tmp * Xb;
+ x->dY += tmp * Yb;
+ x->dZ += tmp * Zb;
+
+ tmp = atom_getfloatarg(19, argc, argv); // deplacement normal proportionelle
+ tmp *= ( atom_getfloatarg(7, argc, argv) - rayon ) ;
+ x->dX += tmp * Xb;
+ x->dY += tmp * Yb;
+ x->dZ += tmp * Zb;
+
+ tmp = atom_getfloatarg(18, argc, argv); // deplacement tengente constante
+ x->dX += tmp * Ta;
+ x->dY += tmp * Tb;
+ x->dZ += tmp * Tc;
+
+ tmp = atom_getfloatarg(20, argc, argv); // deplacement tengentiel proportionelle
+ tmp *= ( atom_getfloatarg(7, argc, argv) - rayon ) ;
+ x->dX += tmp * Ta;
+ x->dY += tmp * Tb;
+ x->dZ += tmp * Tc;
+ }
+ }
+ else
+ {
+ error("bad cylinder interraction message");
+ }
+}
+
+void *masse3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_masse3D *x = (t_masse3D *)pd_new(masse3D_class);
+
+ x->x_sym = atom_getsymbolarg(0, argc, argv);
+ x->x_state = makeseed();
+
+ pd_bind(&x->x_obj.ob_pd, atom_getsymbolarg(0, argc, argv));
+
+ x->position3D_new=outlet_new(&x->x_obj, 0);
+ x->force_out=outlet_new(&x->x_obj, 0);
+ x->vitesse_out=outlet_new(&x->x_obj, 0);
+
+ x->forceX=0;
+ x->forceY=0;
+ x->forceZ=0;
+
+ if (argc >= 2)
+ x->masse3D = atom_getfloatarg(1, argc, argv) ;
+ else
+ x->masse3D = 1;
+
+ x->onoff = 1;
+
+ x->VX = 0;
+ x->VY = 0;
+ x->VZ = 0;
+
+ x->dX=0;
+ x->dY=0;
+ x->dZ=0;
+
+ if (argc >= 3)
+ x->Xinit = atom_getfloatarg(2, argc, argv);
+ else
+ x->Xinit = 0 ;
+
+ x->posX_old_1 = x->Xinit ;
+ x->posX_old_2 = x->Xinit;
+ SETFLOAT(&(x->pos_new[0]), x->Xinit);
+
+ if (argc >= 4)
+ x->Yinit = atom_getfloatarg(3, argc, argv);
+ else
+ x->Yinit = 0 ;
+
+ x->posY_old_1 = x->Yinit ;
+ x->posY_old_2 = x->Yinit;
+ SETFLOAT(&(x->pos_new[1]), x->Yinit);
+
+ if (argc >= 5)
+ x->Zinit = atom_getfloatarg(4, argc, argv);
+ else
+ x->Zinit = 0 ;
+
+ x->posZ_old_1 = x->Zinit ;
+ x->posZ_old_2 = x->Zinit;
+ SETFLOAT(&(x->pos_new[2]), x->Zinit);
+
+
+ if (argc >= 6)
+ x->minX = atom_getfloatarg(5, argc, argv) ;
+ else
+ x->minX = -100000;
+
+ if (argc >= 7)
+ x->maxX = atom_getfloatarg(6, argc, argv) ;
+ else
+ x->maxX = 100000;
+
+ if (argc >= 8)
+ x->minY = atom_getfloatarg(7, argc, argv) ;
+ else
+ x->minY = -100000;
+
+ if (argc >= 9)
+ x->maxY = atom_getfloatarg(8, argc, argv) ;
+ else
+ x->maxY = 100000;
+
+ if (argc >= 10)
+ x->minZ = atom_getfloatarg(9, argc, argv) ;
+ else
+ x->minZ = -100000;
+
+ if (argc >= 11)
+ x->maxZ = atom_getfloatarg(10, argc, argv) ;
+ else
+ x->maxZ = 100000;
+
+ if (argc >= 12)
+ x->seuil = atom_getfloatarg(11, argc, argv) ;
+ else
+ x->seuil = 0;
+
+ if (argc >= 13)
+ x->damp = atom_getfloatarg(12, argc, argv) ;
+ else
+ x->damp = 0;
+
+ return (void *)x;
+}
+
+static void masse3D_free(t_masse3D *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+
+void masse3D_setup(void)
+{
+
+ masse3D_class = class_new(gensym("masse3D"),
+ (t_newmethod)masse3D_new,
+ (t_method)masse3D_free,
+ sizeof(t_masse3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)masse3D_new, gensym("mass3D"), A_GIMME, 0);
+ class_addcreator((t_newmethod)masse3D_new, gensym("pmpd.mass3D"), A_GIMME, 0);
+
+ class_addmethod(masse3D_class, (t_method)masse3D_force, gensym("force3D"),A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addbang(masse3D_class, masse3D_bang);
+
+ class_addmethod(masse3D_class, (t_method)masse3D_dX, gensym("dX"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_dY, gensym("dY"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_dZ, gensym("dZ"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_dXYZ, gensym("dXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_minX, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_minY, gensym("setYmin"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_maxX, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_maxY, gensym("setYmax"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_minZ, gensym("setZmin"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_maxZ, gensym("setZmax"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_set_masse3D, gensym("setM"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_reset, gensym("reset"), 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_resetf, gensym("resetF"), 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_reset, gensym("loadbang"), 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_on, gensym("on"), 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_off, gensym("off"), 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_seuil, gensym("setT"), A_DEFFLOAT, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_damp, gensym("setD"), A_DEFFLOAT, 0);
+
+ class_addmethod(masse3D_class, (t_method)masse3D_inter_ambient, gensym("interactor_ambient_3D"), A_GIMME, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_inter_sphere, gensym("interactor_sphere_3D"), A_GIMME, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_inter_plane, gensym("interactor_plane_3D"), A_GIMME, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_inter_circle, gensym("interactor_circle_3D"), A_GIMME, 0);
+ class_addmethod(masse3D_class, (t_method)masse3D_inter_cylinder, gensym("interactor_cylinder_3D"), A_GIMME, 0);
+
+}
diff --git a/src/pmpd.c b/src/pmpd.c
new file mode 100755
index 0000000..9d21d64
--- /dev/null
+++ b/src/pmpd.c
@@ -0,0 +1,146 @@
+/*
+-------------------------- pmpd ----------------------------------------
+
+ pmpd = physical modeling for pure data
+ Written by Cyrille Henry (cyrille.henry@la-kitchen.fr)
+
+ Get sources at http://drpichon.free.fr/pure-data/physical-modeling/
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Based on PureData by Miller Puckette and others.
+
+
+----------------------------------------------------------------------------
+*/
+
+#ifndef VERSION
+#define VERSION "0.05"
+#endif
+
+#include "m_pd.h"
+
+#ifndef __DATE__
+#define __DATE__ ""
+#endif
+
+#include "masse.c"
+#include "lia.c"
+#include "masse2D.c"
+#include "lia2D.c"
+#include "masse3D.c"
+#include "lia3D.c"
+
+#include "iAmbient2D.c"
+#include "iLine2D.c"
+#include "iSeg2D.c"
+#include "iCircle2D.c"
+
+#include "tSquare2D.c"
+#include "tLine2D.c"
+#include "tSeg2D.c"
+#include "tCircle2D.c"
+#include "tLia2D.c"
+
+#include "iAmbient3D.c"
+#include "iSphere3D.c"
+#include "iPlane3D.c"
+#include "iCircle3D.c"
+#include "iCylinder3D.c"
+
+
+#include "tCube3D.c"
+#include "tSphere3D.c"
+#include "tPlane3D.c"
+#include "tCircle3D.c"
+#include "tCylinder3D.c"
+#include "tLia3D.c"
+
+static t_class *pmpd_class;
+
+typedef struct _pmpd
+{
+ t_object x_obj;
+} t_pmpd;
+
+t_float max(t_float x, t_float y)
+{
+ if (x >= y)
+ {
+ return x;
+ }
+ return y;
+}
+
+t_float min(t_float x, t_float y)
+{
+ if (x <= y)
+ {
+ return x;
+ }
+ return y;
+}
+
+void *pmpd_new(void)
+{
+ t_pmpd *x = (t_pmpd *)pd_new(pmpd_class);
+ return (void *)x;
+}
+
+void pmpd_setup(void)
+{
+ pmpd_class = class_new(gensym("pmpd"),
+ (t_newmethod)pmpd_new,
+ 0, sizeof(t_pmpd),0,0);
+
+ post("");
+ post(" pmpd = Physical Modeling for Pure Data");
+ post(" version "VERSION);
+ post(" compiled "__DATE__);
+ post(" Contact : cyrille.henry@la-kitchen.fr");
+ post("");
+
+masse_setup() ;
+lia_setup() ;
+masse2D_setup() ;
+lia2D_setup() ;
+masse3D_setup() ;
+lia3D_setup() ;
+
+iAmbient2D_setup();
+iLine2D_setup();
+iSeg2D_setup();
+iCircle2D_setup();
+
+tSquare2D_setup();
+tCircle2D_setup();
+tLine2D_setup();
+tSeg2D_setup();
+tLia2D_setup();
+
+iAmbient3D_setup();
+iSphere3D_setup();
+iPlane3D_setup();
+iCircle3D_setup();
+iCylinder3D_setup();
+
+tLia3D_setup();
+tCube3D_setup();
+tPlane3D_setup();
+tSphere3D_setup();
+tCylinder3D_setup();
+tCircle3D_setup();
+
+}
diff --git a/src/tCircle2D.c b/src/tCircle2D.c
new file mode 100755
index 0000000..e4ba448
--- /dev/null
+++ b/src/tCircle2D.c
@@ -0,0 +1,113 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tCircle2D_class;
+
+typedef struct _tCircle2D {
+ t_object x_obj;
+ t_float X, Y, Rmin, Rmax, distance_old;
+ t_outlet *force_new, *distance, *vitesse; // outlet
+} t_tCircle2D;
+
+
+void tCircle2D_position2D(t_tCircle2D *x, t_float X, t_float Y)
+{
+
+ t_float tmp, vitesse;
+
+ tmp = sqrt((X-x->X)*(X-x->X) + (Y-x->Y)*(Y-x->Y));
+
+ vitesse = tmp - x->distance_old ;
+
+ x->distance_old = tmp;
+
+ outlet_float(x->vitesse, vitesse);
+
+ outlet_float(x->distance, tmp);
+
+ if ( (tmp < x->Rmax) & (tmp >= x->Rmin))
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+}
+
+void tCircle2D_XY(t_tCircle2D *x, t_float X, t_float Y)
+{
+ x->X= X;
+ x->Y= Y;
+}
+
+void tCircle2D_X(t_tCircle2D *x, t_float X)
+{
+ x->X= X;
+}
+
+void tCircle2D_Y(t_tCircle2D *x, t_float X)
+{
+ x->Y= X;
+}
+
+void tCircle2D_Rmin(t_tCircle2D *x, t_float X)
+{
+ x->Rmin= X;
+}
+
+void tCircle2D_Rmax(t_tCircle2D *x, t_float X)
+{
+ x->Rmax= X;
+}
+
+void *tCircle2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tCircle2D *x = (t_tCircle2D *)pd_new(tCircle2D_class);
+ x->force_new=outlet_new(&x->x_obj, 0);
+ x->distance=outlet_new(&x->x_obj, 0);
+ x->vitesse=outlet_new(&x->x_obj, 0);
+
+ x->distance_old = 0;
+
+ if (argc>=4)
+ x->Rmax = atom_getfloatarg(3, argc, argv);
+ else
+ x->Rmax = 1;
+
+ if (argc>=3)
+ x->Rmin = atom_getfloatarg(2, argc, argv);
+ else
+ x->Rmin = 0;
+
+ if (argc>=2)
+ x->Y = atom_getfloatarg(1, argc, argv);
+ else
+ x->Y = 0;
+
+ if (argc>=1)
+ x->X = atom_getfloatarg(0, argc, argv);
+ else
+ x->X = 0;
+
+ return (x);
+}
+
+void tCircle2D_setup(void)
+{
+
+ tCircle2D_class = class_new(gensym("tCircle2D"),
+ (t_newmethod)tCircle2D_new,
+ 0, sizeof(t_tCircle2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tCircle2D_new, gensym("pmpd.tCircle2D"), A_GIMME, 0);
+
+ class_addmethod(tCircle2D_class, (t_method)tCircle2D_position2D, gensym("position2D"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tCircle2D_class, (t_method)tCircle2D_XY, gensym("setXY"), A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tCircle2D_class, (t_method)tCircle2D_X, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle2D_class, (t_method)tCircle2D_Y, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle2D_class, (t_method)tCircle2D_Rmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle2D_class, (t_method)tCircle2D_Rmax, gensym("setRmax"), A_DEFFLOAT, 0);
+}
diff --git a/src/tCircle3D.c b/src/tCircle3D.c
new file mode 100755
index 0000000..6664d39
--- /dev/null
+++ b/src/tCircle3D.c
@@ -0,0 +1,195 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tCircle3D_class;
+
+typedef struct _tCircle3D {
+ t_object x_obj;
+ t_float X, Y, Z, VX, VY, VZ, P, Rmin, Rmax, distance_old;
+ t_outlet *force_new, *distance, *vitesse;// outlet
+} t_tCircle3D;
+
+void tCircle3D_position3D(t_tCircle3D *x, t_float X, t_float Y, t_float Z)
+{
+t_float d, tmp, profondeur, vitesse;
+
+
+
+ tmp = sqrt (x->VX*x->VX + x->VY*x->VY + x->VZ*x->VZ);
+ if (tmp != 0)
+ {
+ x->VX /= tmp;
+ x->VY /= tmp;
+ x->VZ /= tmp;
+ }
+ else
+ {
+ x->VX=1;
+ x->VY=0;
+ x->VZ=0;
+ }
+
+ d = x->VX * x->X + x->VY * x->Y + x->VZ * x->Z;
+
+ profondeur = x->VX * X + x->VY * Y + x->VZ * Z - d;
+
+ vitesse = profondeur - x->distance_old;
+ x->distance_old = profondeur;
+
+ outlet_float(x->vitesse, vitesse);
+
+ outlet_float(x->distance, profondeur);
+
+ if ( (profondeur < 0) & (profondeur > - x->P) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+
+}
+
+void tCircle3D_setXYZ(t_tCircle3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->X= X;
+ x->Y= Y;
+ x->Z= Z;
+}
+void tCircle3D_setVXYZ(t_tCircle3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->VX= X;
+ x->VY= Y;
+ x->VZ= Z;
+}
+
+void tCircle3D_setVX(t_tCircle3D *x, t_float X)
+{
+ x->VX= X;
+}
+
+void tCircle3D_setVY(t_tCircle3D *x, t_float Y)
+{
+ x->VY= Y;
+}
+
+void tCircle3D_setVZ(t_tCircle3D *x, t_float Z)
+{
+ x->VZ= Z;
+}
+void tCircle3D_setX(t_tCircle3D *x, t_float X)
+{
+ x->X= X;
+}
+
+void tCircle3D_setY(t_tCircle3D *x, t_float Y)
+{
+ x->Y= Y;
+}
+
+void tCircle3D_setZ(t_tCircle3D *x, t_float Z)
+{
+ x->Z= Z;
+}
+
+void tCircle3D_setP(t_tCircle3D *x, t_float X)
+{
+ x->P= X;
+}
+
+void tCircle3D_setRmin(t_tCircle3D *x, t_float R)
+{
+ x->Rmin = R;
+}
+
+void tCircle3D_setRmax(t_tCircle3D *x, t_float R)
+{
+ x->Rmax = R;
+}
+
+
+void *tCircle3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tCircle3D *x = (t_tCircle3D *)pd_new(tCircle3D_class);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+ x->distance=outlet_new(&x->x_obj, 0);
+ x->vitesse=outlet_new(&x->x_obj, 0);
+
+ x->distance_old = 0;
+
+ if (argc>=9)
+ x->P= atom_getfloatarg(8, argc, argv);
+ else
+ x->P= 10000;
+
+ if (argc>=8)
+ x->Z= atom_getfloatarg(7, argc, argv);
+ else
+ x->Rmax= 1;
+
+ if (argc>=7)
+ x->P= atom_getfloatarg(6, argc, argv);
+ else
+ x->Rmin= 0;
+
+ if (argc>=6)
+ x->Z= atom_getfloatarg(5, argc, argv);
+ else
+ x->Z= 0;
+
+ if (argc>=5)
+ x->Y= atom_getfloatarg(4, argc, argv);
+ else
+ x->Y= 0;
+
+ if (argc>=4)
+ x->X= atom_getfloatarg(3, argc, argv);
+ else
+ x->X= 0;
+
+ if (argc>=3)
+ x->VZ= atom_getfloatarg(2, argc, argv);
+ else
+ x->VZ= 0;
+
+ if (argc>=2)
+ x->VY= atom_getfloatarg(1, argc, argv);
+ else
+ x->VY= 0;
+
+ if (argc>=1)
+ x->VX= atom_getfloatarg(0, argc, argv);
+ else
+ x->VX= 1;
+
+ return (x);
+}
+
+void tCircle3D_setup(void)
+{
+
+ tCircle3D_class = class_new(gensym("tCircle3D"),
+ (t_newmethod)tCircle3D_new,
+ 0, sizeof(t_tCircle3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tCircle3D_new, gensym("pmpd.tCircle3D"), A_GIMME, 0);
+
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setVX, gensym("setVX"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setVY, gensym("setVY"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setVZ, gensym("setVZ"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setVXYZ, gensym("setVXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tCircle3D_class, (t_method)tCircle3D_setP, gensym("setPmax"), A_DEFFLOAT, 0);
+
+
+}
diff --git a/src/tCube3D.c b/src/tCube3D.c
new file mode 100755
index 0000000..ce0c434
--- /dev/null
+++ b/src/tCube3D.c
@@ -0,0 +1,114 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tCube3D_class;
+
+typedef struct _tCube3D {
+ t_object x_obj;
+ t_float Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
+ //extrem = Xmin, Ymin, Xmax, Ymax;
+ t_outlet *force_new;// outlet
+} t_tCube3D;
+
+void tCube3D_position3D(t_tCube3D *x, t_float X, t_float Y, t_float Z)
+{
+
+ if ((X > x->Xmin) & (X < x->Xmax) & (Y > x->Ymin) & (Y < x->Ymax) & (Z > x->Zmin) & (Z < x->Zmax) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+}
+
+void tCube3D_Xmin(t_tCube3D *x, t_float X)
+{
+ x->Xmin= X;
+}
+
+void tCube3D_Xmax(t_tCube3D *x, t_float X)
+{
+ x->Xmax= X;
+}
+
+void tCube3D_Ymin(t_tCube3D *x, t_float X)
+{
+ x->Ymin= X;
+}
+
+void tCube3D_Ymax(t_tCube3D *x, t_float X)
+{
+ x->Ymax= X;
+}
+
+void tCube3D_Zmin(t_tCube3D *x, t_float X)
+{
+ x->Zmin= X;
+}
+
+void tCube3D_Zmax(t_tCube3D *x, t_float X)
+{
+ x->Zmax= X;
+}
+
+void *tCube3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tCube3D *x = (t_tCube3D *)pd_new(tCube3D_class);
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+ if (argc>=6)
+ x->Zmax = atom_getfloatarg(5, argc, argv);
+ else
+ x->Zmax = 1;
+
+ if (argc>=5)
+ x->Zmin = atom_getfloatarg(4, argc, argv);
+ else
+ x->Zmin = -1;
+
+ if (argc>=4)
+ x->Ymax = atom_getfloatarg(3, argc, argv);
+ else
+ x->Ymax = 1;
+
+ if (argc>=3)
+ x->Ymin = atom_getfloatarg(2, argc, argv);
+ else
+ x->Ymin = -1;
+
+ if (argc>=2)
+ x->Xmax = atom_getfloatarg(1, argc, argv);
+ else
+ x->Xmax = 1;
+
+ if (argc>=1)
+ x->Xmin = atom_getfloatarg(0, argc, argv);
+ else
+ x->Xmin = -1;
+
+ return (x);
+}
+
+void tCube3D_setup(void)
+{
+
+ tCube3D_class = class_new(gensym("tCube3D"),
+ (t_newmethod)tCube3D_new,
+ 0, sizeof(t_tCube3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tCube3D_new, gensym("pmpd.tCube3D"), A_GIMME, 0);
+
+ class_addmethod(tCube3D_class, (t_method)tCube3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tCube3D_class, (t_method)tCube3D_Xmin, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCube3D_class, (t_method)tCube3D_Ymin, gensym("setYmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCube3D_class, (t_method)tCube3D_Ymin, gensym("setZmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCube3D_class, (t_method)tCube3D_Xmax, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(tCube3D_class, (t_method)tCube3D_Ymax, gensym("setYmax"), A_DEFFLOAT, 0);
+ class_addmethod(tCube3D_class, (t_method)tCube3D_Ymax, gensym("setZmax"), A_DEFFLOAT, 0);
+
+
+}
diff --git a/src/tCylinder3D.c b/src/tCylinder3D.c
new file mode 100755
index 0000000..1ccf832
--- /dev/null
+++ b/src/tCylinder3D.c
@@ -0,0 +1,218 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tCylinder3D_class;
+
+typedef struct _tCylinder3D {
+ t_object x_obj;
+ t_float X, Y, Z, VX, VY, VZ, Pmin, Pmax, Rmin, Rmax, position_old;
+ t_outlet *force_new, *profondeur, *vitesse;// outlet
+} t_tCylinder3D;
+
+void tCylinder3D_position3D(t_tCylinder3D *x, t_float X, t_float Y, t_float Z)
+{
+ t_float d, tmp, profondeur, Xb, Yb, Zb, rayon, vitesse;
+
+ tmp = sqrt (x->VX*x->VX + x->VY*x->VY + x->VZ*x->VZ);
+ if (tmp != 0)
+ {
+ x->VX /= tmp;
+ x->VY /= tmp;
+ x->VZ /= tmp;
+ }
+ else
+ {
+ x->VX=1;
+ x->VY=0;
+ x->VZ=0;
+ }
+
+ d = x->VX * x->X + x->VY * x->Y + x->VZ * x->Z;
+
+ profondeur = x->VX * X + x->VY * Y + x->VZ * Z - d;
+
+ Xb = X - x->X - profondeur * x->VX;
+ Yb = Y - x->Y - profondeur * x->VY;
+ Zb = Z - x->Z - profondeur * x->VZ;
+
+ rayon = sqrt ( pow(Xb, 2) + pow(Yb, 2) + pow(Zb, 2) );
+
+ if ( rayon != 0 )
+ {
+ Xb /= rayon; // normalisation
+ Yb /= rayon;
+ Zb /= rayon;
+ }
+
+ vitesse = rayon - x->position_old;
+ x->position_old = rayon;
+
+ outlet_float(x->vitesse, vitesse);
+
+ outlet_float(x->profondeur, rayon);
+
+ if ( (profondeur < x->Pmin) & (profondeur > x->Pmax) & (rayon < x->Rmax) & (rayon > x->Rmin) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+//C optimiser ca : pas faire le calcul de l'orientation du cylindre a chaques fois...
+
+}
+
+void tCylinder3D_setXYZ(t_tCylinder3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->X= X;
+ x->Y= Y;
+ x->Z= Z;
+}
+void tCylinder3D_setVXYZ(t_tCylinder3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->VX= X;
+ x->VY= Y;
+ x->VZ= Z;
+}
+
+void tCylinder3D_setVX(t_tCylinder3D *x, t_float X)
+{
+ x->VX= X;
+}
+
+void tCylinder3D_setVY(t_tCylinder3D *x, t_float Y)
+{
+ x->VY= Y;
+}
+
+void tCylinder3D_setVZ(t_tCylinder3D *x, t_float Z)
+{
+ x->VZ= Z;
+}
+void tCylinder3D_setX(t_tCylinder3D *x, t_float X)
+{
+ x->X= X;
+}
+
+void tCylinder3D_setY(t_tCylinder3D *x, t_float Y)
+{
+ x->Y= Y;
+}
+
+void tCylinder3D_setZ(t_tCylinder3D *x, t_float Z)
+{
+ x->Z= Z;
+}
+
+void tCylinder3D_setPmin(t_tCylinder3D *x, t_float X)
+{
+ x->Pmin= X;
+}
+
+void tCylinder3D_setPmax(t_tCylinder3D *x, t_float X)
+{
+ x->Pmax= X;
+}
+
+void tCylinder3D_setRmin(t_tCylinder3D *x, t_float R)
+{
+ x->Rmin = R;
+}
+
+void tCylinder3D_setRmax(t_tCylinder3D *x, t_float R)
+{
+ x->Rmax = R;
+}
+
+
+void *tCylinder3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tCylinder3D *x = (t_tCylinder3D *)pd_new(tCylinder3D_class);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+ x->profondeur=outlet_new(&x->x_obj, 0);
+ x->vitesse=outlet_new(&x->x_obj, 0);
+
+ x->position_old = 0;
+
+ if (argc>=10)
+ x->Pmax= atom_getfloatarg(9, argc, argv);
+ else
+ x->Pmax= 1000;
+
+ if (argc>=9)
+ x->Pmin= atom_getfloatarg(8, argc, argv);
+ else
+ x->Pmin= -1000;
+
+ if (argc>=8)
+ x->Z= atom_getfloatarg(7, argc, argv);
+ else
+ x->Rmax= 1;
+
+ if (argc>=7)
+ x->Rmin= atom_getfloatarg(6, argc, argv);
+ else
+ x->Rmin= 0;
+
+ if (argc>=6)
+ x->Z= atom_getfloatarg(5, argc, argv);
+ else
+ x->Z= 0;
+
+ if (argc>=5)
+ x->Y= atom_getfloatarg(4, argc, argv);
+ else
+ x->Y= 0;
+
+ if (argc>=4)
+ x->X= atom_getfloatarg(3, argc, argv);
+ else
+ x->X= 0;
+
+ if (argc>=3)
+ x->VZ= atom_getfloatarg(2, argc, argv);
+ else
+ x->VZ= 0;
+
+ if (argc>=2)
+ x->VY= atom_getfloatarg(1, argc, argv);
+ else
+ x->VY= 0;
+
+ if (argc>=1)
+ x->VX= atom_getfloatarg(0, argc, argv);
+ else
+ x->VX= 1;
+
+ return (x);
+}
+
+void tCylinder3D_setup(void)
+{
+
+ tCylinder3D_class = class_new(gensym("tCylinder3D"),
+ (t_newmethod)tCylinder3D_new,
+ 0, sizeof(t_tCylinder3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tCylinder3D_new, gensym("pmpd.tCylinder3D"), A_GIMME, 0);
+
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setVX, gensym("setVX"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setVY, gensym("setVY"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setVZ, gensym("setVZ"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setVXYZ, gensym("setVXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setPmin, gensym("setPmin"), A_DEFFLOAT, 0);
+ class_addmethod(tCylinder3D_class, (t_method)tCylinder3D_setPmax, gensym("setPmax"), A_DEFFLOAT, 0);
+
+
+}
diff --git a/src/tLia2D.c b/src/tLia2D.c
new file mode 100755
index 0000000..968e5de
--- /dev/null
+++ b/src/tLia2D.c
@@ -0,0 +1,157 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tLia2D_class;
+
+typedef struct _tLia2D {
+ t_object x_obj;
+ t_float distance_old, position2Dx1, position2Dy1, position2Dx2, position2Dy2;
+ t_outlet *force1;
+ t_outlet *force2;
+ t_outlet *force3;
+ t_outlet *force4;
+ t_symbol *x_sym; // receive
+} t_tLia2D;
+
+void tLia2D_reset(t_tLia2D *x)
+{
+}
+
+void tLia2D_resetF(t_tLia2D *x)
+{
+}
+
+void tLia2D_resetL(t_tLia2D *x)
+{
+}
+
+void tLia2D_setK(t_tLia2D *x, t_float K)
+{
+}
+
+void tLia2D_setL(t_tLia2D *x, t_float L)
+{
+}
+
+void tLia2D_setD(t_tLia2D *x, t_float D)
+{
+}
+
+void tLia2D_setD2(t_tLia2D *x, t_float D)
+{
+}
+
+void tLia2D_Lmin(t_tLia2D *x, t_float Lmin)
+{
+}
+
+void tLia2D_Lmax(t_tLia2D *x, t_float Lmax)
+{
+}
+
+void tLia2D_position2D(t_tLia2D *x, t_floatarg f1, t_floatarg f2)
+{
+ x->position2Dx1 = f1;
+ x->position2Dy1 = f2;
+}
+
+void tLia2D_position2D2(t_tLia2D *x, t_floatarg f1, t_floatarg f2)
+{
+ x->position2Dx2 = f1;
+ x->position2Dy2 = f2;
+}
+
+void tLia2D_bang(t_tLia2D *x)
+{
+ t_float vitesse, distance, orientation;
+ t_atom force1[2];
+
+ distance = sqrt ( pow((x->position2Dx2-x->position2Dx1), 2) + pow((x->position2Dy2-x->position2Dy1), 2) );
+
+ vitesse = x->distance_old - distance;
+
+ SETFLOAT(&(force1[0]), (x->position2Dx2 + x->position2Dx1)/ 2);
+ SETFLOAT(&(force1[1]), (x->position2Dy2 + x->position2Dy1)/ 2);
+
+ outlet_anything(x->force4, gensym("position2D"), 2, force1);
+
+ if ((x->position2Dx2-x->position2Dx1) != 0)
+ {
+ orientation = 180/3.14159 * atan((float)(x->position2Dy2 - x->position2Dy1)/(x->position2Dx2 - x->position2Dx1));
+ if ((x->position2Dx2 - x->position2Dx1)<0)
+ orientation +=180;
+ if (orientation<0)
+ orientation +=360;
+
+ outlet_float(x->force3, orientation);
+ }
+ else
+ {
+ if ((x->position2Dy2 - x->position2Dy1)<0)
+ outlet_float(x->force3,270);
+ else
+ outlet_float(x->force3,90);
+ }
+
+ outlet_float(x->force2, vitesse);
+
+ outlet_float(x->force1, distance);
+
+ x->distance_old = distance;
+
+}
+
+
+static void tLia2D_free(t_tLia2D *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void *tLia2D_new(t_symbol *s)
+{
+ t_tLia2D *x = (t_tLia2D *)pd_new(tLia2D_class);
+
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("position2D"), gensym("position2D2"));
+
+ x->force1=outlet_new(&x->x_obj, 0);
+ x->force2=outlet_new(&x->x_obj, 0);
+ x->force3=outlet_new(&x->x_obj, 0);
+ x->force4=outlet_new(&x->x_obj, 0);
+
+ x->distance_old = 0;
+
+ return (x);
+}
+
+void tLia2D_setup(void)
+{
+
+ tLia2D_class = class_new(gensym("tLia2D"),
+ (t_newmethod)tLia2D_new,
+ (t_method)tLia2D_free,
+ sizeof(t_tLia2D),
+ CLASS_DEFAULT, A_DEFSYM, 0);
+
+ class_addcreator((t_newmethod)tLia2D_new, gensym("tLink2D"), A_DEFSYM, 0);
+ class_addcreator((t_newmethod)tLia2D_new, gensym("pmpd.tLink2D"), A_DEFSYM, 0);
+
+ class_addbang(tLia2D_class, tLia2D_bang);
+
+ class_addmethod(tLia2D_class, (t_method)tLia2D_position2D, gensym("position2D"), A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_position2D2, gensym("position2D2"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ // only for the object not to output erreor when having the same name as the link
+ class_addmethod(tLia2D_class, (t_method)tLia2D_reset, gensym("reset"), 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_resetL, gensym("resetL"), 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_resetF, gensym("resetF"), 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_setD2, gensym("setD2"), A_DEFFLOAT, 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_setK, gensym("setK"), A_DEFFLOAT, 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_setL, gensym("setL"), A_DEFFLOAT, 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_Lmin, gensym("setLmin"), A_DEFFLOAT, 0);
+ class_addmethod(tLia2D_class, (t_method)tLia2D_Lmax, gensym("setLmax"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/tLia3D.c b/src/tLia3D.c
new file mode 100755
index 0000000..507d113
--- /dev/null
+++ b/src/tLia3D.c
@@ -0,0 +1,153 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tLia3D_class;
+
+typedef struct _tLia3D {
+ t_object x_obj;
+ t_float distance_old, position2Dx1, position2Dy1, position2Dz1, position2Dx2, position2Dy2, position2Dz2;
+ t_outlet *force1;
+ t_outlet *force2;
+ t_outlet *force3;
+ t_outlet *force4;
+ t_symbol *x_sym; // receive
+} t_tLia3D;
+
+void tLia3D_reset(t_tLia3D *x)
+{
+}
+
+void tLia3D_resetF(t_tLia3D *x)
+{
+}
+
+void tLia3D_resetL(t_tLia3D *x)
+{
+}
+
+
+void tLia3D_setK(t_tLia3D *x, t_float K)
+{
+}
+
+void tLia3D_setL(t_tLia3D *x, t_float L)
+{
+}
+
+void tLia3D_setD(t_tLia3D *x, t_float D)
+{
+}
+
+void tLia3D_setD2(t_tLia3D *x, t_float D)
+{
+}
+
+void tLia3D_Lmin(t_tLia3D *x, t_float Lmin)
+{
+}
+
+void tLia3D_Lmax(t_tLia3D *x, t_float Lmax)
+{
+}
+
+
+void tLia3D_position3D(t_tLia3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ x->position2Dx1 = f1;
+ x->position2Dy1 = f2;
+ x->position2Dz1 = f3;
+}
+
+void tLia3D_position3D2(t_tLia3D *x, t_floatarg f1, t_floatarg f2, t_floatarg f3)
+{
+ x->position2Dx2 = f1;
+ x->position2Dy2 = f2;
+ x->position2Dz2 = f3;
+}
+
+void tLia3D_bang(t_tLia3D *x)
+{
+ t_float vitesse, distance, orientation;
+ t_atom force1[3];
+
+ distance = sqrt ( pow((x->position2Dx2-x->position2Dx1), 2) + pow((x->position2Dy2-x->position2Dy1), 2) + pow((x->position2Dz2-x->position2Dz1), 2) );
+
+ vitesse = x->distance_old - distance;
+
+
+ SETFLOAT(&(force1[0]), (x->position2Dx2 + x->position2Dx1)/ 2);
+ SETFLOAT(&(force1[1]), (x->position2Dy2 + x->position2Dy1)/ 2);
+ SETFLOAT(&(force1[2]), (x->position2Dz2 + x->position2Dz1)/ 2);
+
+ outlet_anything(x->force4, gensym("position3D"), 3, force1);
+
+
+ SETFLOAT(&(force1[0]), (x->position2Dx2 - x->position2Dx1)/ distance);
+ SETFLOAT(&(force1[1]), (x->position2Dy2 - x->position2Dy1)/ distance);
+ SETFLOAT(&(force1[2]), (x->position2Dz2 - x->position2Dz1)/ distance);
+
+ outlet_anything(x->force3, gensym("vector3D"), 3, force1);
+
+ outlet_float(x->force2, vitesse);
+
+ outlet_float(x->force1, distance);
+
+ x->distance_old = distance;
+
+}
+
+
+static void tLia3D_free(t_tLia3D *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void *tLia3D_new(t_symbol *s)
+{
+
+ t_tLia3D *x = (t_tLia3D *)pd_new(tLia3D_class);
+
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("position3D"), gensym("position3D2"));
+
+ x->force1=outlet_new(&x->x_obj, 0);
+ x->force2=outlet_new(&x->x_obj, 0);
+ x->force3=outlet_new(&x->x_obj, 0);
+ x->force4=outlet_new(&x->x_obj, 0);
+
+ x->distance_old = 0;
+
+ return (x);
+}
+
+void tLia3D_setup(void)
+{
+
+ tLia3D_class = class_new(gensym("tLia3D"),
+ (t_newmethod)tLia3D_new,
+ (t_method)tLia3D_free,
+ sizeof(t_tLia3D),
+ CLASS_DEFAULT, A_DEFSYM, 0);
+
+ class_addcreator((t_newmethod)tLia3D_new, gensym("tLink3D"), A_DEFSYM, 0);
+ class_addcreator((t_newmethod)tLia3D_new, gensym("pmpd.tLink3D"), A_DEFSYM, 0);
+
+ class_addbang(tLia3D_class, tLia3D_bang);
+
+ class_addmethod(tLia3D_class, (t_method)tLia3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_position3D2, gensym("position3D2"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ // only for the object not to output erreor when having the same name as the link
+ class_addmethod(tLia3D_class, (t_method)tLia3D_reset, gensym("reset"), 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_resetL, gensym("resetL"), 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_resetF, gensym("resetF"), 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_setD, gensym("setD"), A_DEFFLOAT, 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_setD2, gensym("setD2"), A_DEFFLOAT, 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_setK, gensym("setK"), A_DEFFLOAT, 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_setL, gensym("setL"), A_DEFFLOAT, 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_Lmin, gensym("setLmin"), A_DEFFLOAT, 0);
+ class_addmethod(tLia3D_class, (t_method)tLia3D_Lmax, gensym("setLmax"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/tLine2D.c b/src/tLine2D.c
new file mode 100755
index 0000000..f440bfd
--- /dev/null
+++ b/src/tLine2D.c
@@ -0,0 +1,137 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tLine2D_class;
+
+typedef struct _tLine2D {
+ t_object x_obj;
+ t_float X1, X2, Y1, Y2, P, P_old;
+ //extrem = Xmin, Ymin, Xmax, Ymax;
+ t_outlet *force_new;// outlet
+ t_outlet *profondeur;// outlet
+ t_outlet *vitesse;// outlet
+} t_tLine2D;
+
+void tLine2D_position2D(t_tLine2D *x, t_float X, t_float Y)
+{
+ t_float a1, b1, c1, profondeur, tmp;
+
+ b1 = x->X2 - x->X1;
+ a1 = -x->Y2 + x->Y1;
+
+ if (!((a1==0) & (b1==0)))
+ {
+ tmp = sqrt((a1*a1)+(b1*b1)); // = longueur du vecteur pour renormalisation
+ a1 = a1/tmp;
+ b1 = b1/tmp;
+ c1 = a1*x->X1+b1*x->Y1;
+
+ profondeur = ( (a1 * X) + (b1 * Y) ) - c1;
+
+ tmp = profondeur - x->P_old;
+
+ x->P_old = profondeur;
+
+ outlet_float(x->vitesse, tmp);
+
+ outlet_float(x->profondeur, profondeur);
+
+ if ( ( profondeur < 0) & (profondeur > - x->P) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+
+}
+
+void tLine2D_Xmin(t_tLine2D *x, t_float X)
+{
+ x->X1= X;
+}
+
+void tLine2D_Xmax(t_tLine2D *x, t_float X)
+{
+ x->X2= X;
+}
+
+void tLine2D_Ymin(t_tLine2D *x, t_float X)
+{
+ x->Y1= X;
+}
+
+void tLine2D_Ymax(t_tLine2D *x, t_float X)
+{
+ x->Y2= X;
+}
+
+void tLine2D_P(t_tLine2D *x, t_float X)
+{
+ x->P= X;
+}
+
+void *tLine2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tLine2D *x = (t_tLine2D *)pd_new(tLine2D_class);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+ x->profondeur=outlet_new(&x->x_obj, 0);
+ x->vitesse=outlet_new(&x->x_obj, 0);
+
+ x->P_old=0;
+
+ if (argc>=5)
+ x->P = atom_getfloatarg(4, argc, argv);
+ else
+ x->P = 1;
+
+ if (argc>=4)
+ x->Y2 = atom_getfloatarg(3, argc, argv);
+ else
+ x->Y2 = 0;
+
+ if (argc>=3)
+ x->X2 = atom_getfloatarg(2, argc, argv);
+ else
+ x->X2 = 1;
+
+ if (argc>=2)
+ x->Y1 = atom_getfloatarg(1, argc, argv);
+ else
+ x->Y1 = 0;
+
+
+ if (argc>=1)
+ x->X1 = atom_getfloatarg(0, argc, argv);
+ else
+ x->X1 = -1;
+
+ return (x);
+}
+
+void tLine2D_setup(void)
+{
+
+ tLine2D_class = class_new(gensym("tLine2D"),
+ (t_newmethod)tLine2D_new,
+ 0, sizeof(t_tLine2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tLine2D_new, gensym("pmpd.tLine2D"), A_GIMME, 0);
+
+ class_addmethod(tLine2D_class, (t_method)tLine2D_position2D, gensym("position2D"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tLine2D_class, (t_method)tLine2D_Xmin, gensym("setX1"), A_DEFFLOAT, 0);
+ class_addmethod(tLine2D_class, (t_method)tLine2D_Ymin, gensym("setY1"), A_DEFFLOAT, 0);
+ class_addmethod(tLine2D_class, (t_method)tLine2D_Xmax, gensym("setX2"), A_DEFFLOAT, 0);
+ class_addmethod(tLine2D_class, (t_method)tLine2D_Ymax, gensym("setY2"), A_DEFFLOAT, 0);
+ class_addmethod(tLine2D_class, (t_method)tLine2D_P, gensym("setPmax"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/tPlane3D.c b/src/tPlane3D.c
new file mode 100755
index 0000000..3213bea
--- /dev/null
+++ b/src/tPlane3D.c
@@ -0,0 +1,175 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tPlane3D_class;
+
+typedef struct _tPlane3D {
+ t_object x_obj;
+ t_float X, Y, Z, VX, VY, VZ, P, distance_old;
+ t_outlet *force_new, *profondeur, *vitesse;// outlet
+} t_tPlane3D;
+
+
+void tPlane3D_position3D(t_tPlane3D *x, t_float X, t_float Y, t_float Z)
+{
+t_float d, tmp, profondeur, vitesse;
+
+ tmp = sqrt (x->VX*x->VX + x->VY*x->VY + x->VZ*x->VZ);
+ if (tmp != 0)
+ {
+ x->VX /= tmp;
+ x->VY /= tmp;
+ x->VZ /= tmp;
+
+ }
+ else
+ {
+ x->VX=1;
+ x->VY=0;
+ x->VZ=0;
+ }
+
+ d = x->VX * x->X + x->VY * x->Y + x->VZ * x->Z;
+
+ profondeur = x->VX * X + x->VY * Y + x->VZ * Z - d;
+
+ vitesse = profondeur - x->distance_old ;
+
+ x->distance_old = profondeur;
+
+ outlet_float(x->vitesse, vitesse);
+
+ outlet_float(x->profondeur, profondeur);
+
+
+ if ( (profondeur < 0) & (profondeur > - x->P) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+
+}
+
+void tPlane3D_setXYZ(t_tPlane3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->X= X;
+ x->Y= Y;
+ x->Z= Z;
+}
+void tPlane3D_setVXYZ(t_tPlane3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->VX= X;
+ x->VY= Y;
+ x->VZ= Z;
+}
+
+void tPlane3D_setVX(t_tPlane3D *x, t_float X)
+{
+ x->VX= X;
+}
+
+void tPlane3D_setVY(t_tPlane3D *x, t_float Y)
+{
+ x->VY= Y;
+}
+
+void tPlane3D_setVZ(t_tPlane3D *x, t_float Z)
+{
+ x->VZ= Z;
+}
+void tPlane3D_setX(t_tPlane3D *x, t_float X)
+{
+ x->X= X;
+}
+
+void tPlane3D_setY(t_tPlane3D *x, t_float Y)
+{
+ x->Y= Y;
+}
+
+void tPlane3D_setZ(t_tPlane3D *x, t_float Z)
+{
+ x->Z= Z;
+}
+
+void tPlane3D_setP(t_tPlane3D *x, t_float X)
+{
+ x->P= X;
+}
+
+
+void *tPlane3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tPlane3D *x = (t_tPlane3D *)pd_new(tPlane3D_class);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+ x->profondeur=outlet_new(&x->x_obj, 0);
+ x->vitesse=outlet_new(&x->x_obj, 0);
+
+ x->distance_old = 0;
+
+ if (argc>=7)
+ x->P= atom_getfloatarg(6, argc, argv);
+ else
+ x->P= 10000;
+
+ if (argc>=6)
+ x->Z= atom_getfloatarg(5, argc, argv);
+ else
+ x->Z= 0;
+
+ if (argc>=5)
+ x->Y= atom_getfloatarg(4, argc, argv);
+ else
+ x->Y= 0;
+
+ if (argc>=4)
+ x->X= atom_getfloatarg(3, argc, argv);
+ else
+ x->X= 0;
+
+ if (argc>=3)
+ x->VZ= atom_getfloatarg(2, argc, argv);
+ else
+ x->VZ= 0;
+
+ if (argc>=2)
+ x->VY= atom_getfloatarg(1, argc, argv);
+ else
+ x->VY= 0;
+
+ if (argc>=1)
+ x->VX= atom_getfloatarg(0, argc, argv);
+ else
+ x->VX= 1;
+
+ return (x);
+}
+
+void tPlane3D_setup(void)
+{
+
+ tPlane3D_class = class_new(gensym("tPlane3D"),
+ (t_newmethod)tPlane3D_new,
+ 0, sizeof(t_tPlane3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tPlane3D_new, gensym("pmpd.tPlane3D"), A_GIMME, 0);
+
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setVX, gensym("setVX"), A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setVY, gensym("setVY"), A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setVZ, gensym("setVZ"), A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setVXYZ, gensym("setVXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tPlane3D_class, (t_method)tPlane3D_setP, gensym("setPmax"), A_DEFFLOAT, 0);
+
+
+}
diff --git a/src/tSeg2D.c b/src/tSeg2D.c
new file mode 100755
index 0000000..7345bd7
--- /dev/null
+++ b/src/tSeg2D.c
@@ -0,0 +1,139 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tSeg2D_class;
+
+typedef struct _tSeg2D {
+ t_object x_obj;
+ t_float X1, X2, Y1, Y2, P, P_old;
+ t_outlet *force_new, *profondeur, *vitesse;// outlet
+} t_tSeg2D;
+
+void tSeg2D_position2D(t_tSeg2D *x, t_float X, t_float Y)
+{
+ t_float a1, b1, c1, a2, b2, c2, a3, b3, c3, profondeur, tmp;
+
+ b1 = x->X2 - x->X1;
+ a1 = -x->Y2 + x->Y1;
+
+ if (!((a1==0) & (b1==0)))
+ {
+ tmp = sqrt((a1*a1)+(b1*b1)); // = longueur du vecteur pour renormalisation
+ a1 = a1/tmp;
+ b1 = b1/tmp;
+ c1 = a1*x->X1+b1*x->Y1;
+
+ profondeur = ( (a1 * X) + (b1 * Y) ) - c1;
+
+ tmp = profondeur - x->P_old;
+
+ x->P_old = profondeur;
+
+ a2 = b1;
+ b2 = -a1;
+ c2 = a2*x->X1+b2*x->Y1;
+
+ a3 = a2;
+ b3 = b2;
+ c3 = a3*x->X2+b3*x->Y2;
+
+ outlet_float(x->vitesse, tmp);
+ outlet_float(x->profondeur, profondeur);
+
+ if ( ( profondeur < 0) & (profondeur > - x->P) & (( (a2 * X) + (b2 * Y) ) > c2) & ( ((a3 * X) + (b3 * Y) ) < c3) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+
+}
+
+void tSeg2D_Xmin(t_tSeg2D *x, t_float X)
+{
+ x->X1= X;
+}
+
+void tSeg2D_Xmax(t_tSeg2D *x, t_float X)
+{
+ x->X2= X;
+}
+
+void tSeg2D_Ymin(t_tSeg2D *x, t_float X)
+{
+ x->Y1= X;
+}
+
+void tSeg2D_Ymax(t_tSeg2D *x, t_float X)
+{
+ x->Y2= X;
+}
+
+void tSeg2D_P(t_tSeg2D *x, t_float X)
+{
+ x->P= X;
+}
+
+void *tSeg2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tSeg2D *x = (t_tSeg2D *)pd_new(tSeg2D_class);
+ x->force_new = outlet_new(&x->x_obj, 0);
+ x->profondeur =outlet_new(&x->x_obj, 0);
+ x->vitesse = outlet_new(&x->x_obj, 0);
+
+ x->P_old = 0;
+
+ if (argc>=5)
+ x->P = atom_getfloatarg(4, argc, argv);
+ else
+ x->P = 1;
+
+ if (argc>=4)
+ x->Y2 = atom_getfloatarg(3, argc, argv);
+ else
+ x->Y2 = 0;
+
+ if (argc>=3)
+ x->X2 = atom_getfloatarg(2, argc, argv);
+ else
+ x->X2 = 1;
+
+ if (argc>=2)
+ x->Y1 = atom_getfloatarg(1, argc, argv);
+ else
+ x->Y1 = 0;
+
+ if (argc>=1)
+ x->X1 = atom_getfloatarg(0, argc, argv);
+ else
+ x->X1 = -1;
+
+ return (x);
+}
+
+void tSeg2D_setup(void)
+{
+
+ tSeg2D_class = class_new(gensym("tSeg2D"),
+ (t_newmethod)tSeg2D_new,
+ 0, sizeof(t_tSeg2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tSeg2D_new, gensym("pmpd.tSeg2D"), A_GIMME, 0);
+
+ class_addmethod(tSeg2D_class, (t_method)tSeg2D_position2D, gensym("position2D"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tSeg2D_class, (t_method)tSeg2D_Xmin, gensym("setX1"), A_DEFFLOAT, 0);
+ class_addmethod(tSeg2D_class, (t_method)tSeg2D_Ymin, gensym("setY1"), A_DEFFLOAT, 0);
+ class_addmethod(tSeg2D_class, (t_method)tSeg2D_Xmax, gensym("setX2"), A_DEFFLOAT, 0);
+ class_addmethod(tSeg2D_class, (t_method)tSeg2D_Ymax, gensym("setY2"), A_DEFFLOAT, 0);
+ class_addmethod(tSeg2D_class, (t_method)tSeg2D_P, gensym("setPmax"), A_DEFFLOAT, 0);
+
+}
diff --git a/src/tSphere3D.c b/src/tSphere3D.c
new file mode 100755
index 0000000..6ef9cfa
--- /dev/null
+++ b/src/tSphere3D.c
@@ -0,0 +1,128 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tSphere3D_class;
+
+typedef struct _tSphere3D {
+ t_object x_obj;
+ t_float X, Y, Z, Rmin, Rmax, position_old;
+ t_outlet *force_new, *distance_out, *vitesse;// outlet
+} t_tSphere3D;
+
+void tSphere3D_position3D(t_tSphere3D *x, t_float X, t_float Y, t_float Z)
+{
+t_float distance, vitesse;
+ distance = sqrt ( (X - x->X)*(X - x->X) + (Y - x->Y)*(Y - x->Y) + (Z - x->Z)*(Z - x->Z));
+
+ vitesse = distance - x->position_old;
+ x->position_old = distance;
+
+ outlet_float(x->vitesse, vitesse);
+
+ outlet_float(x->distance_out, distance);
+
+ if ( (distance < x->Rmax) & (distance > x->Rmin) )
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+
+}
+
+void tSphere3D_setXYZ(t_tSphere3D *x, t_float X, t_float Y, t_float Z)
+{
+ x->X= X;
+ x->Y= Y;
+ x->Z= Z;
+}
+
+void tSphere3D_setX(t_tSphere3D *x, t_float X)
+{
+ x->X= X;
+}
+
+void tSphere3D_setY(t_tSphere3D *x, t_float Y)
+{
+ x->Y= Y;
+}
+
+void tSphere3D_setZ(t_tSphere3D *x, t_float Z)
+{
+ x->Z= Z;
+}
+
+void tSphere3D_setRmax(t_tSphere3D *x, t_float X)
+{
+ x->Rmax= X;
+}
+
+void tSphere3D_setRmin(t_tSphere3D *x, t_float X)
+{
+ x->Rmin= X;
+}
+
+
+
+void *tSphere3D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tSphere3D *x = (t_tSphere3D *)pd_new(tSphere3D_class);
+
+ x->force_new=outlet_new(&x->x_obj, 0);
+ x->distance_out=outlet_new(&x->x_obj, 0);
+ x->vitesse=outlet_new(&x->x_obj, 0);
+
+ x->position_old = 0;
+
+
+ if (argc>=5)
+ x->Rmax= atom_getfloatarg(4, argc, argv);
+ else
+ x->Rmax= 1;
+
+ if (argc>=4)
+ x->Rmin= atom_getfloatarg(3, argc, argv);
+ else
+ x->Rmin= 0;
+
+ if (argc>=3)
+ x->Z= atom_getfloatarg(2, argc, argv);
+ else
+ x->Z= 0;
+
+ if (argc>=2)
+ x->Y= atom_getfloatarg(1, argc, argv);
+ else
+ x->Y= 0;
+
+ if (argc>=1)
+ x->X= atom_getfloatarg(0, argc, argv);
+ else
+ x->X= 0;
+
+ return (x);
+}
+
+void tSphere3D_setup(void)
+{
+
+ tSphere3D_class = class_new(gensym("tSphere3D"),
+ (t_newmethod)tSphere3D_new,
+ 0, sizeof(t_tSphere3D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tSphere3D_new, gensym("pmpd.tSphere3D"), A_GIMME, 0);
+
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_position3D, gensym("position3D"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_setX, gensym("setX"), A_DEFFLOAT, 0);
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_setY, gensym("setY"), A_DEFFLOAT, 0);
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_setZ, gensym("setZ"), A_DEFFLOAT, 0);
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_setXYZ, gensym("setXYZ"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_setRmax, gensym("setRmax"), A_DEFFLOAT, 0);
+ class_addmethod(tSphere3D_class, (t_method)tSphere3D_setRmin, gensym("setRmin"), A_DEFFLOAT, 0);
+
+
+}
diff --git a/src/tSquare2D.c b/src/tSquare2D.c
new file mode 100755
index 0000000..4e14fa0
--- /dev/null
+++ b/src/tSquare2D.c
@@ -0,0 +1,92 @@
+#include "m_pd.h"
+#include "math.h"
+
+static t_class *tSquare2D_class;
+
+typedef struct _tSquare2D {
+ t_object x_obj;
+ t_float Xmin, Xmax, Ymin, Ymax;
+ //extrem = Xmin, Ymin, Xmax, Ymax;
+ t_outlet *force_new;// outlet
+} t_tSquare2D;
+
+void tSquare2D_position2D(t_tSquare2D *x, t_float X, t_float Y)
+{
+
+ if ((X > x->Xmin) & (X < x->Xmax) & (Y > x->Ymin) & (Y < x->Ymax))
+ {
+ outlet_float(x->force_new, 1);
+ }
+ else
+ {
+ outlet_float(x->force_new, 0);
+ }
+}
+
+void tSquare2D_Xmin(t_tSquare2D *x, t_float X)
+{
+ x->Xmin= X;
+}
+
+void tSquare2D_Xmax(t_tSquare2D *x, t_float X)
+{
+ x->Xmax= X;
+}
+
+void tSquare2D_Ymin(t_tSquare2D *x, t_float X)
+{
+ x->Ymin= X;
+}
+
+void tSquare2D_Ymax(t_tSquare2D *x, t_float X)
+{
+ x->Ymax= X;
+}
+
+void *tSquare2D_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_tSquare2D *x = (t_tSquare2D *)pd_new(tSquare2D_class);
+ x->force_new=outlet_new(&x->x_obj, 0);
+
+ if (argc>=4)
+ x->Ymax = atom_getfloatarg(3, argc, argv);
+ else
+ x->Ymax = 1;
+
+ if (argc>=3)
+ x->Ymin = atom_getfloatarg(2, argc, argv);
+ else
+ x->Ymin = -1;
+
+ if (argc>=2)
+ x->Xmax = atom_getfloatarg(1, argc, argv);
+ else
+ x->Xmax = 1;
+
+ if (argc>=1)
+ x->Xmin = atom_getfloatarg(0, argc, argv);
+ else
+ x->Xmin = -1;
+
+ return (x);
+}
+
+void tSquare2D_setup(void)
+{
+
+ tSquare2D_class = class_new(gensym("tSquare2D"),
+ (t_newmethod)tSquare2D_new,
+ 0, sizeof(t_tSquare2D),
+ CLASS_DEFAULT, A_GIMME, 0);
+
+ class_addcreator((t_newmethod)tSquare2D_new, gensym("pmpd.tSquare2D"), A_GIMME, 0);
+
+ class_addmethod(tSquare2D_class, (t_method)tSquare2D_position2D, gensym("position2D"), A_DEFFLOAT, A_DEFFLOAT, 0);
+
+ class_addmethod(tSquare2D_class, (t_method)tSquare2D_Xmin, gensym("setXmin"), A_DEFFLOAT, 0);
+ class_addmethod(tSquare2D_class, (t_method)tSquare2D_Ymin, gensym("setYmin"), A_DEFFLOAT, 0);
+ class_addmethod(tSquare2D_class, (t_method)tSquare2D_Xmax, gensym("setXmax"), A_DEFFLOAT, 0);
+ class_addmethod(tSquare2D_class, (t_method)tSquare2D_Ymax, gensym("setYmax"), A_DEFFLOAT, 0);
+
+
+}