aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--examples/60_pmpd3d_test.pd191
-rw-r--r--pmpd-help.pd31
-rw-r--r--pmpd2d-help.pd716
-rw-r--r--pmpd3d-help.pd703
5 files changed, 1626 insertions, 17 deletions
diff --git a/Makefile b/Makefile
index 4fe52c2..87ae7b3 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ SOURCES = iAmbient2D.c iAmbient3D.c iCircle2D.c iCircle3D.c iCylinder3D.c iLine2
PDOBJECTS =
# example patches and related files, in the 'examples' subfolder
-EXAMPLES = 00_pmpd.pd 01_basics.pd 02_string.pd 03_chaos2D.pd 04_3D_exemple.pd 05_corde2D.pd 06_pyramide3D.pd 07_corde3D.pd 08_ball2D.pd 09_tutorial2D.pd 10_game.pd 11_comportement.pd 12_exitation.pd 13_plane3D.pd 14_MP_curve3d.pd 15_constant_force_field.pd 16_name_and_interactors.pd 17_rnd_mouvmnt_and_obstacles.pd 18_flipper.pd 19_vertex.pd 20_moving_vertex.pd 21_fluid_circulation_cylinder.pd 22_gaz_molecules.pd 23_test.pd 24_sand.pd 25_sand2.pd 26_sand3.pd 27_tLia.pd 28_Lia.pd 29_aglom.pd 30_falling_aglom.pd 31_paste.pd 32_Kelvin_Helmoltz_instability.pd 33_vorticity_ellipse.pd 34_cigarette_smoke.pd 35_gravitation.pd 36_3D_interactors.pd 37_hollywood_planette_explosion.pd 38_elastique_membrane_on_a_sphere.pd 39_blob.pd 40_i3D.pd 41_morfing.pd 42_tentacule.pd 43_game.pd 44_flag.pd 45_newWave.pd 46_non_linear.pd 47_scann_synth.pd 48_pmpd.pd 49_pmpd~.pd 50_simple_oscilator~.pd 51_string~.pd 52_pmpd_test.pd 53_pmpd_string.pd 54_pmpd_wave.pd 55_pmpd2d_test.pd 56_pmpd2d_additive.pd 57_pmpd2d_ball.pd 58_pmpd2d_gravitation.pd 59_pmpd2d_sand.pd aglom.pd aglom2.pd aglom3.pd aglom4.pd blob.pd ch_gemwin.pd ch_uzi.pd constructor.pd explose1.pd explose2.pd fluide_mass.pd fluide_mass2.pd fluide_mass3.pd fluide_mass4.pd fluide_mass5.pd fluide_mass6.pd fluide_masse.pd fluide_masse2.pd fluide_masse3.pd fluide_masse4.pd fluide_masse5.pd fluide_masse6.pd game_line.pd gemLia.pd gemLia2.pd gemMasse.pd gemMasse2.pd gemMasse3.pd i3D.pd i3D2.pd mass_link.pd mass_link2.pd mass_link3.pd mountain.pd pd_lia.pd pd_lia2.pd pd_link.pd pd_link2.pd pd_mass.pd pd_mass2.pd pd_masse.pd pd_masse2.pd rain.pd rain1.pd sand.pd smoke.pd smoke1.pd smoke_vortex.pd tut_link.pd tut_mass.pd tut_masse.pd vortex.pd vortex2.pd sound_sable.pd
+EXAMPLES = 00_pmpd.pd 01_basics.pd 02_string.pd 03_chaos2D.pd 04_3D_exemple.pd 05_corde2D.pd 06_pyramide3D.pd 07_corde3D.pd 08_ball2D.pd 09_tutorial2D.pd 10_game.pd 11_comportement.pd 12_exitation.pd 13_plane3D.pd 14_MP_curve3d.pd 15_constant_force_field.pd 16_name_and_interactors.pd 17_rnd_mouvmnt_and_obstacles.pd 18_flipper.pd 19_vertex.pd 20_moving_vertex.pd 21_fluid_circulation_cylinder.pd 22_gaz_molecules.pd 23_test.pd 24_sand.pd 25_sand2.pd 26_sand3.pd 27_tLia.pd 28_Lia.pd 29_aglom.pd 30_falling_aglom.pd 31_paste.pd 32_Kelvin_Helmoltz_instability.pd 33_vorticity_ellipse.pd 34_cigarette_smoke.pd 35_gravitation.pd 36_3D_interactors.pd 37_hollywood_planette_explosion.pd 38_elastique_membrane_on_a_sphere.pd 39_blob.pd 40_i3D.pd 41_morfing.pd 42_tentacule.pd 43_game.pd 44_flag.pd 45_newWave.pd 46_non_linear.pd 47_scann_synth.pd 48_pmpd.pd 49_pmpd~.pd 50_simple_oscilator~.pd 51_string~.pd 52_pmpd_test.pd 53_pmpd_string.pd 54_pmpd_wave.pd 55_pmpd2d_test.pd 56_pmpd2d_additive.pd 57_pmpd2d_ball.pd 58_pmpd2d_gravitation.pd 59_pmpd2d_sand.pd 60_pmpd3d_test.pd aglom.pd aglom2.pd aglom3.pd aglom4.pd blob.pd ch_gemwin.pd ch_uzi.pd constructor.pd explose1.pd explose2.pd fluide_mass.pd fluide_mass2.pd fluide_mass3.pd fluide_mass4.pd fluide_mass5.pd fluide_mass6.pd fluide_masse.pd fluide_masse2.pd fluide_masse3.pd fluide_masse4.pd fluide_masse5.pd fluide_masse6.pd game_line.pd gemLia.pd gemLia2.pd gemMasse.pd gemMasse2.pd gemMasse3.pd i3D.pd i3D2.pd mass_link.pd mass_link2.pd mass_link3.pd mountain.pd pd_lia.pd pd_lia2.pd pd_link.pd pd_link2.pd pd_mass.pd pd_mass2.pd pd_masse.pd pd_masse2.pd rain.pd rain1.pd sand.pd smoke.pd smoke1.pd smoke_vortex.pd tut_link.pd tut_mass.pd tut_masse.pd vortex.pd vortex2.pd sound_sable.pd
# manuals and related files, in the 'manual' subfolder
MANUAL = pmpd.pdf pmpd.sxw
diff --git a/examples/60_pmpd3d_test.pd b/examples/60_pmpd3d_test.pd
new file mode 100644
index 0000000..f487106
--- /dev/null
+++ b/examples/60_pmpd3d_test.pd
@@ -0,0 +1,191 @@
+#N canvas 677 130 653 522 10;
+#X obj 27 26 loadbang;
+#X obj 263 104 gemwin;
+#X msg 278 81 0 \, destroy;
+#X text 260 26 2 DRAG THE STRUCTURE WITH THE MOUSE;
+#X obj 87 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 90 76 reset;
+#X obj 27 47 t b b b b b;
+#X msg 42 186 Xmax 100 \, Xmin 0 \, Ymax 100 \, Ymin 0;
+#X obj 53 300 gemhead;
+#X obj 53 323 t b;
+#X msg 53 345 bang \, get massesPos \, get linksPos;
+#N canvas 643 123 308 285 massrender 0;
+#X obj 127 22 inlet;
+#X obj 48 203 translateXYZ;
+#X obj 127 86 / 12.5;
+#X obj 127 109 - 4;
+#X obj 192 87 / 12.5;
+#X obj 192 110 - 4;
+#X obj 48 177 separator;
+#X obj 125 136 t b f;
+#X obj 48 141 gemhead 45;
+#X msg 48 104 0;
+#X obj 47 58 loadbang;
+#X obj 127 57 unpack f f f f;
+#X obj 238 88 / 12.5;
+#X obj 238 111 - 4;
+#X obj 48 229 sphere 0.1;
+#X connect 0 0 11 0;
+#X connect 1 0 14 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 2;
+#X connect 6 0 1 0;
+#X connect 7 0 8 0;
+#X connect 7 1 1 1;
+#X connect 8 0 6 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 11 1 2 0;
+#X connect 11 2 4 0;
+#X connect 11 3 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 1 3;
+#X restore 436 267 pd massrender;
+#N canvas 731 296 458 308 gemmouse 0;
+#X obj 189 77 gemmouse;
+#X obj 189 184 pack f f;
+#X obj 189 218 spigot;
+#X obj 103 244 outlet;
+#X obj 189 131 - 0;
+#X obj 216 131 + 100;
+#X obj 189 108 / 5;
+#X obj 216 108 / -5;
+#X obj 79 51 inlet;
+#X obj 109 98 t b;
+#X obj 141 120 list;
+#X obj 141 41 r mouse_init;
+#X connect 0 0 6 0;
+#X connect 0 1 7 0;
+#X connect 0 2 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 10 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 1;
+#X connect 6 0 4 0;
+#X connect 7 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 3 0;
+#X connect 11 0 10 1;
+#X restore 366 356 pd gemmouse;
+#X obj 366 335 gemhead;
+#X msg 366 377 posX fix \$1;
+#X msg 366 398 posY fix \$2;
+#N canvas 0 22 454 304 linkrender 0;
+#X obj 127 22 inlet;
+#X obj 128 86 / 12.5;
+#X obj 128 109 - 4;
+#X obj 183 87 / 12.5;
+#X obj 183 110 - 4;
+#X obj 48 177 separator;
+#X obj 128 136 t b f;
+#X obj 262 88 / 12.5;
+#X obj 262 111 - 4;
+#X obj 290 112 / 12.5;
+#X obj 290 135 - 4;
+#X obj 48 222 curve 2;
+#X obj 155 189 pack f f 0;
+#X obj 262 192 pack f f 0;
+#X obj 48 130 gemhead 45;
+#X obj 47 44 loadbang;
+#X msg 47 68 0;
+#X obj 127 57 unpack f f f f f f f;
+#X obj 212 112 / 12.5;
+#X obj 212 135 - 4;
+#X obj 319 135 / 12.5;
+#X obj 319 158 - 4;
+#X connect 0 0 17 0;
+#X connect 1 0 2 0;
+#X connect 2 0 6 0;
+#X connect 3 0 4 0;
+#X connect 4 0 12 1;
+#X connect 5 0 11 0;
+#X connect 6 0 14 0;
+#X connect 6 1 12 0;
+#X connect 7 0 8 0;
+#X connect 8 0 13 0;
+#X connect 9 0 10 0;
+#X connect 10 0 13 1;
+#X connect 12 0 11 1;
+#X connect 13 0 11 2;
+#X connect 14 0 5 0;
+#X connect 15 0 16 0;
+#X connect 16 0 14 0;
+#X connect 17 1 1 0;
+#X connect 17 2 3 0;
+#X connect 17 3 18 0;
+#X connect 17 4 7 0;
+#X connect 17 5 9 0;
+#X connect 17 6 20 0;
+#X connect 18 0 19 0;
+#X connect 19 0 12 2;
+#X connect 20 0 21 0;
+#X connect 21 0 13 2;
+#X restore 366 289 pd linkrender;
+#X msg 206 139 50 50;
+#X msg 58 118 40 60 \, 60 60 \, 60 40 \, 40 40;
+#X obj 206 162 s mouse_init;
+#X msg 27 207 link souple mob mob 10 5;
+#X msg 27 230 link souple fix mob 10 5;
+#X text 25 1 creation : 5 masses and 20 links;
+#X text 52 281 compute and get masses and links positions;
+#X text 364 315 move mass to mouse position;
+#X text 365 197 display masses with gem;
+#X text 261 6 1 CREATE WINDOW;
+#X text 108 26 reset struct;
+#X obj 90 259 s \$0-pmpdin;
+#X obj 84 373 r \$0-pmpdin;
+#X obj 52 419 s \$0-pmpdout;
+#X obj 365 423 s \$0-pmpdin;
+#X obj 366 218 r \$0-pmpdout;
+#X msg 74 96 mass fix 0 100 50 50 50;
+#X msg 58 139 mass mob 1 100 \$1 \$2 50;
+#X obj 368 177 s \$0-pmpdin;
+#X msg 369 129 forceZ mob 200;
+#X msg 368 153 forceZ mob 200;
+#X text 367 108 send vertical forces;
+#X msg 263 58 reset \, create \, lighting 1 \, 1;
+#X obj 51 454 gemhead;
+#X obj 51 476 world_light;
+#X obj 53 397 pmpd3d;
+#X obj 366 244 route linksPosNo massesPos;
+#X text 190 476 copyright Nicolas Montgermont 2010;
+#X connect 0 0 6 0;
+#X connect 2 0 1 0;
+#X connect 4 0 6 0;
+#X connect 5 0 28 0;
+#X connect 6 0 20 0;
+#X connect 6 1 17 0;
+#X connect 6 1 7 0;
+#X connect 6 2 18 0;
+#X connect 6 3 33 0;
+#X connect 6 4 5 0;
+#X connect 7 0 28 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 42 0;
+#X connect 12 0 14 0;
+#X connect 12 0 15 0;
+#X connect 13 0 12 0;
+#X connect 14 0 31 0;
+#X connect 15 0 31 0;
+#X connect 17 0 19 0;
+#X connect 18 0 34 0;
+#X connect 20 0 21 0;
+#X connect 20 0 28 0;
+#X connect 21 0 28 0;
+#X connect 29 0 42 0;
+#X connect 32 0 43 0;
+#X connect 33 0 28 0;
+#X connect 34 0 28 0;
+#X connect 36 0 35 0;
+#X connect 37 0 35 0;
+#X connect 39 0 1 0;
+#X connect 40 0 41 0;
+#X connect 42 0 30 0;
+#X connect 43 0 16 0;
+#X connect 43 1 11 0;
diff --git a/pmpd-help.pd b/pmpd-help.pd
index 10fd679..284071f 100644
--- a/pmpd-help.pd
+++ b/pmpd-help.pd
@@ -1,4 +1,4 @@
-#N canvas 619 38 575 730 10;
+#N canvas 553 116 575 730 10;
#X obj 4 369 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
0;
#X obj 5 669 cnv 15 550 40 empty empty empty 20 12 0 14 -158509 -66577
@@ -253,7 +253,7 @@ state based on previous instant.;
#X text 158 478 To set the model parameters after creation.;
#X text 158 456 To create the model masses and links.;
#X text 158 501 To get the model parameters;
-#N canvas 33 254 561 671 creation________ 0;
+#N canvas 818 245 561 671 creation________ 0;
#X obj 11 95 cnv 15 100 35 empty empty empty 20 12 0 14 -233017 -66577
0;
#X obj 5 75 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
@@ -311,7 +311,7 @@ messages.;
#X text 101 420 Messages - Different messages are used to control the
msd object. They are of three types :;
#X text 9 641 CATEGORY: control;
-#N canvas 318 62 1139 731 dynamic 0;
+#N canvas 841 74 1139 731 dynamic 0;
#X obj 5 3 cnv 15 550 15 empty empty empty 20 12 0 14 -233017 -66577
0;
#X obj 10 85 cnv 15 130 580 empty empty empty 20 12 0 14 -233017 -66577
@@ -392,7 +392,7 @@ internal parameters of links and masses.;
#X text 185 630 \$2 : position;
#X text 185 646 \$3 : grab or not (0 or 1);
#X restore 12 478 pd dynamic settings;
-#N canvas 441 24 1230 682 attributes______ 0;
+#N canvas 888 196 1230 682 attributes______ 0;
#X obj 11 95 cnv 15 100 35 empty empty empty 20 12 0 14 -233017 -66577
0;
#X obj 5 75 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
@@ -410,8 +410,6 @@ internal parameters of links and masses.;
#X text 7 74 General :;
#X text 7 2 ATTRIBUTES Messages;
#X text 7 137 Lists :;
-#X msg 32 170 massesPosL;
-#X msg 32 198 massesForcesL;
#X text 142 299 Get specific attribute on specific element;
#X msg 22 297 get \$1 (\$2);
#X text 9 259 Specific :;
@@ -423,11 +421,7 @@ is made of the asked parameter and the way you asked for it.;
#X text 142 457 Examples with 3 masses numbered 0 \, 1 and 2 and named
mas:;
#X text 148 566 [get massesPos mas( -----> [massesPosId 0 x0(;
-#X text 337 581 [massesPosId 2 x2(;
-#X text 337 596 [massesPosId 1 x1(;
#X text 176 495 [get massesPos( -----> [massesPos 0 x0(;
-#X text 337 509 [massesPos 2 x2(;
-#X text 337 523 [massesPos 1 x1(;
#X text 162 545 [get massesPos 1( -----> [massesPosNo 1 x1(;
#X text 15 30 The attributes messages ask the object to output some
of his internal parameters. They can be output by lists for positions
@@ -437,7 +431,6 @@ for all the elements. - Ids or/and creations No;
#X msg 33 104 print;
#X text 136 104 print infos on all masses and links on right outlet
;
-#X msg 32 228 massesSpeedsL;
#X text 171 170 Output all masses positions in a list on outlet;
#X text 169 199 Output all forces applied on masses in a list on outlet
;
@@ -447,8 +440,6 @@ for all the elements. - Ids or/and creations No;
massesSpeeds / massesSpeedsName / massesForces / massesForcesName /
linksPos / linksPosName );
#X text 148 615 [get massesPosName( -----> [massesPosName mas x0(;
-#X text 338 630 [massesPosName mas x2(;
-#X text 338 645 [massesPosName mas x1(;
#X obj 608 157 cnv 15 150 95 empty empty empty 20 12 0 14 -233017 -66577
0;
#X obj 602 137 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
@@ -480,12 +471,24 @@ linksPos / linksPosName );
#X msg 610 170 massesPosT \$1 (\$2);
#X msg 610 198 massesForcesT \$1 (\$2);
#X msg 611 228 massesSpeedsT \$1 (\$2);
-#X text 769 170 Output all masses positions in a table (\$1 = table
+#X text 770 169 Output all masses positions in a table (\$1 = table
name \, \$2 (optional): Masses Id);
#X text 768 198 Output all forces applied on masses in a table (\$1
= table name \, \$2 (optional): Masses Id);
#X text 768 229 Output all speeds of the masses in a table (\$1 = table
name \, \$2 (optional): Masses Id);
+#X msg 16 170 massesPosL (\$1);
+#X msg 16 198 massesForcesL (\$1);
+#X msg 16 228 massesSpeedsL (\$1);
+#X text 170 183 \$1 (optional): Masses Id;
+#X text 170 213 \$1 (optional): Masses Id;
+#X text 171 242 \$1 (optional): Masses Id;
+#X text 337 509 [massesPos 1 x1(;
+#X text 337 523 [massesPos 2 x2(;
+#X text 338 630 [massesPosName mas x1(;
+#X text 339 645 [massesPosName mas x2(;
+#X text 337 581 [massesPosId 1 x1(;
+#X text 337 596 [massesPosId 2 x2(;
#X restore 12 499 pd attributes______;
#X text 9 651 KEYWORDS: physical model mass spring damper link;
#X text 111 619 01_msdtest.pd;
diff --git a/pmpd2d-help.pd b/pmpd2d-help.pd
index 78a7b42..3fcd199 100644
--- a/pmpd2d-help.pd
+++ b/pmpd2d-help.pd
@@ -1 +1,715 @@
-#N canvas 0 0 450 300 10;
+#N canvas 150 72 568 710 10;
+#X obj 4 369 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 665 cnv 15 550 30 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 8 6 cnv 15 550 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 14 389 cnv 15 75 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 14 584 cnv 15 75 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 4 527 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 4 562 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 7 76 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 615 cnv 15 550 20 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 635 cnv 15 550 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#N canvas 76 31 921 714 More_Info 0;
+#X text 96 12 pmpd : mass - spring - damper model;
+#X text 27 155 Be careful : if masses are deleted \, lists messages
+won't work;
+#X text 27 60 It is designed to implement particules physical model
+in PD.The model is based on two elements type : mass and link. The
+pmpd masses are the principals objects of the model. They got only
+one physical parameter \, the value of their mass. They can be mobile
+or fixed \, in this case forces applied on them automatically \, by
+links \, or manually \, by messages \, don't do anything.;
+#X obj 456 -5 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 456 294 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity1 4 float 1;
+#A 0 -1 0 1 2;
+#X array zero 4 float 1;
+#A 0 0 0 0 0;
+#X coords 0 3 3 -3 200 150 1;
+#X restore 121 328 graph;
+#X text 179 485 L0;
+#N canvas 438 87 956 727 figure 0;
+#X obj 284 53 loadbang;
+#X msg 293 125 \; rigidity1 resize 1 \; rigidity1 resize 4 \; rigidity1
+bounds 0 3 3 -3 \; rigidity1 0 -1 0 1 2 \; rigidity1 ylabel -0.5 \;
+rigidity1 xlabel -3.5 \; rigidity1 xticks 0 1 1 \; rigidity1 yticks
+0 0.1 5;
+#X obj 388 574 sqrt;
+#X obj 316 651 tabwrite rigidity3;
+#X obj 343 464 - 20;
+#X obj 316 609 f;
+#X obj 316 579 t b f;
+#X obj 343 494 moses 0;
+#X obj 343 517 * -1;
+#X obj 343 538 sqrt;
+#X obj 343 559 * -1;
+#X obj 481 479 - 20;
+#X obj 453 662 f;
+#X obj 453 632 t b f;
+#X obj 481 509 moses 0;
+#X obj 481 532 * -1;
+#X obj 480 612 * -1;
+#X obj 528 622 *;
+#X obj 480 591 *;
+#X obj 525 590 t f f;
+#X obj 480 564 t f f;
+#X obj 453 683 tabwrite rigidity4;
+#X obj 181 235 t b b;
+#X obj 620 552 f;
+#X obj 620 522 t b f;
+#X obj 620 623 tabwrite rigidity2;
+#X msg 763 574 0;
+#X obj 679 437 - 50;
+#X obj 751 491 moses 40;
+#X obj 681 510 moses -40;
+#X obj 620 586 * 1.5;
+#X obj 680 462 moses 10;
+#X obj 680 488 moses -10;
+#X msg 55 419 \; rigidity2 resize 101 \; rigidity2 xticks 1 10 5 \;
+rigidity2 yticks 0 5 5 \; rigidity3 resize 51 \; rigidity3 xticks 0
+1 5 \; rigidity3 yticks 0 1 5 \; rigidity4 resize 51 \; rigidity4 xticks
+0 1 5 \; rigidity4 yticks 0 100 5;
+#X obj 631 315 f;
+#X obj 648 394 + 1;
+#X obj 632 367 t f f;
+#X obj 375 333 f;
+#X obj 375 360 moses 50.5;
+#X obj 392 411 + 1;
+#X obj 376 384 t f f;
+#X obj 176 141 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 371 310 0;
+#X msg 627 286 0;
+#X obj 631 343 moses 100.5;
+#X connect 0 0 1 0;
+#X connect 0 0 22 0;
+#X connect 2 0 5 1;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 6 1 3 1;
+#X connect 7 0 8 0;
+#X connect 7 1 2 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 5 1;
+#X connect 11 0 14 0;
+#X connect 12 0 21 0;
+#X connect 13 0 12 0;
+#X connect 13 1 21 1;
+#X connect 14 0 15 0;
+#X connect 14 1 19 0;
+#X connect 15 0 20 0;
+#X connect 16 0 12 1;
+#X connect 17 0 12 1;
+#X connect 18 0 16 0;
+#X connect 19 0 17 0;
+#X connect 19 1 17 1;
+#X connect 20 0 18 0;
+#X connect 20 1 18 1;
+#X connect 22 0 42 0;
+#X connect 22 1 33 0;
+#X connect 22 1 43 0;
+#X connect 23 0 30 0;
+#X connect 24 0 23 0;
+#X connect 24 1 25 1;
+#X connect 26 0 23 1;
+#X connect 27 0 31 0;
+#X connect 28 0 23 1;
+#X connect 28 1 26 0;
+#X connect 29 0 26 0;
+#X connect 29 1 23 1;
+#X connect 30 0 25 0;
+#X connect 31 0 32 0;
+#X connect 31 1 28 0;
+#X connect 32 0 29 0;
+#X connect 32 1 26 0;
+#X connect 34 0 44 0;
+#X connect 35 0 34 0;
+#X connect 36 0 35 0;
+#X connect 36 1 27 0;
+#X connect 36 1 24 0;
+#X connect 37 0 38 0;
+#X connect 38 0 40 0;
+#X connect 39 0 37 0;
+#X connect 40 0 39 0;
+#X connect 40 1 4 0;
+#X connect 40 1 6 0;
+#X connect 40 1 13 0;
+#X connect 40 1 11 0;
+#X connect 41 0 22 0;
+#X connect 42 0 37 0;
+#X connect 43 0 34 0;
+#X connect 44 0 36 0;
+#X restore 403 659 pd figure;
+#X text 125 307 Rigidity;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity2 101 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 -60 -58.5 -57 -55.5 -54 -52.5 -51 -49.5 -48
+-46.5 -45 -43.5 -42 -40.5 -39 -37.5 -36 -34.5 -33 -31.5 -30 -28.5 -27
+-25.5 -24 -22.5 -21 -19.5 -18 -16.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 15 16.5 18 19.5 21 22.5 24 25.5 27 28.5 30 31.5 33 34.5 36
+37.5 39 40.5 42 43.5 45 46.5 48 49.5 51 52.5 54 55.5 57 58.5 0 0 0
+0 0 0 0 0 0 0 0;
+#X array zero 101 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0;
+#X coords 0 3 22 -3 200 150 1;
+#X restore 565 327 graph;
+#X text 657 482 L0;
+#X text 569 304 Rigidity with Lmin and Lmax;
+#X text 673 482 Lmin;
+#X text 735 481 Lmax;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity3 51 float 1;
+#A 0 -4.47214 -4.3589 -4.24264 -4.12311 -4 -3.87298 -3.74166 -3.60555
+-3.4641 -3.31662 -3.16228 -3 -2.82843 -2.64575 -2.44949 -2.23607 -2
+-1.73205 -1.41421 -1 0 1 1.41421 1.73205 2 2.23607 2.44949 2.64575
+2.82843 3 3.16228 3.31662 3.4641 3.60555 3.74166 3.87298 4 4.12311
+4.24264 4.3589 4.47214 4.58258 4.69042 4.79583 4.89898 5 5.09902 5.19615
+5.2915 5.38516 5.47723;
+#X array zero 51 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 6 50 -6 200 150 1;
+#X restore 119 526 graph;
+#X text 192 679 L0;
+#X text 126 505 Rigidity with power = 1/2;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity4 51 float 1;
+#A 0 0 -400 -361 -324 -289 -256 -225 -196 -169 -144 -121 -100 -81 -64
+-49 -36 -25 -16 -9 -4 -1 0 1 4 9 16 25 36 49 64 81 100 121 144 169
+196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841;
+#X array zero 51 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 1000 50 -1000 200 150 1;
+#X restore 566 530 graph;
+#X text 639 684 L0;
+#X text 571 508 Rigidity with power = 2;
+#X text 571 12 The equations are :;
+#X text 497 36 if Lmin<|L[n]-L[0]|<Lmax;
+#X text 496 75 else;
+#X text 496 95 F[n] = D(L[n]-L[n-1]);
+#X text 496 54 F[n] = K(L[n] - L[0])^P + D(L[n] - L[n-1]);
+#X text 28 187 Links connect masses two by two. They got 4 physicals
+parameters : length \, rigidity \, damping and power.;
+#X text 27 216 Rigidity \, damping and power are defined by the creation
+message. The lenght is initialised to the distance between the two
+masses at the creation.;
+#X text 495 124 For oriented links \, the force F[n] is projected onto
+a vector which is given during the creation of the link using x1y1
+coordinates.;
+#X text 495 169 For normal vector \, the direction is calculated using
+the scalar product :;
+#X text 495 248 You can build specific links using different links
+messages defining the characteristic step by step.;
+#X text 496 206 x1x2 + y1y2 = 0;
+#X text 27 257 Links can be created in one shot between mutiples masses
+\, instead of creation number \, the masses linked are defined with
+their Id.;
+#X text 28 41 pmpd is the 2D object of the pmpd objects collection.
+;
+#X connect 3 0 4 0;
+#X restore 16 673 pd More_Info;
+#X text 12 76 Examples:;
+#X text 9 369 Inlets:;
+#X text 19 388 - Left:;
+#X text 10 526 Arguments:;
+#X text 11 562 Outlets:;
+#X text 19 617 See Also:;
+#X text 74 48 Full Name:;
+#N canvas 58 22 262 70 Related_Objects 0;
+#X obj 3 10 cnv 15 250 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 3 30 cnv 15 250 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 5 10 Externals and libraries;
+#X obj 44 37 pmpd;
+#X obj 141 39 pmpd3d;
+#X restore 122 673 pd Related_Objects;
+#N canvas 257 262 759 345 init 0;
+#X obj 89 215 t a;
+#X obj 89 33 loadbang;
+#X obj 89 241 s \$0-in;
+#X obj 89 59 t b b b b b;
+#X msg 161 80 reset;
+#X obj 44 13 inlet;
+#X msg 143 100 mass fix 0 10 0 0;
+#X msg 89 187 Xmax 4 \, Xmin -4 \, Ymax 4 \, Ymin -4;
+#X msg 125 120 mass mob 1 100 0 -2 \, mass mob 1 100 2 0 \, mass mob
+1 100 0 2 \, mass mob 1 100 -2 0;
+#X msg 107 161 link souple fix mob 10 10 \, link souple mob mob 10
+10;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 3 0 7 0;
+#X connect 3 1 9 0;
+#X connect 3 2 8 0;
+#X connect 3 3 6 0;
+#X connect 3 4 4 0;
+#X connect 4 0 0 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 0 0;
+#X restore 17 156 pd init;
+#X obj 18 321 s \$0-out;
+#X obj 18 272 r \$0-in;
+#X obj 393 317 s \$0-in;
+#N canvas 565 515 355 193 compute 0;
+#X obj 27 29 inlet;
+#X obj 27 127 s \$0-in;
+#X msg 27 96 bang \, get massesPos \, get linksPos;
+#X obj 27 66 gemhead;
+#X obj 160 36 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X restore 17 209 pd compute;
+#X obj 17 181 tgl 15 0 empty empty ON/OFF 25 10 1 10 -262144 -1 -1
+0 1;
+#X obj 172 270 r \$0-out;
+#X obj 17 126 bng 15 250 50 0 empty empty reset 25 10 1 10 -262144
+-1 -1;
+#X text 101 388 Bang - A bang at the left inlet compute the new model
+state based on previous instant.;
+#X text 158 478 To set the model parameters after creation.;
+#X text 158 456 To create the model masses and links.;
+#X text 158 501 To get the model parameters;
+#N canvas 41 48 967 626 creation________ 0;
+#X obj 5 75 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 3 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 7 2 CREATION Messages;
+#X obj 4 137 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 3 351 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X msg 32 104 reset;
+#X text 202 167 Add a mass;
+#X text 57 191 \$1 : Id (symbol);
+#X text 57 211 \$2 : fixed or mobile (0/1);
+#X text 57 229 \$3 : mass;
+#X text 7 137 Masses :;
+#X text 7 74 Reset :;
+#X text 129 105 Delete all masses \, links and internal variables;
+#X text 6 351 Links :;
+#X text 49 406 \$1 : Id (symbol);
+#X text 49 459 \$4 : rigidity;
+#X text 49 406 \$1 : Id (symbol);
+#X text 49 459 \$4 : rigidity;
+#X text 49 424 \$2 : creation No/Id of mass1;
+#X text 49 442 \$3 : creation No/Id of mass2;
+#X text 266 384 Add link(s);
+#X text 49 477 \$5 : damping;
+#X text 10 28 Creation messages are used to define the structure of
+the model. Messages create links and masses or destroy them.;
+#X msg 30 384 link \$1 \$2 \$3 \$4 \$5 (\$6 \$7 \$8);
+#X msg 32 167 mass \$1 \$2 \$3 \$4 \$5;
+#X text 57 247 \$4 \, \$5 : initial position;
+#X text 46 495 (\$6) : Power of the rigidity distance;
+#X text 46 514 (\$7) : minimum lenght of link;
+#X text 46 531 (\$8) : maximum lenght of link;
+#X obj 471 75 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 501 75 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 471 578 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 527 180 \$1 : Id (symbol);
+#X text 527 233 \$4 : rigidity;
+#X text 527 180 \$1 : Id (symbol);
+#X text 527 233 \$4 : rigidity;
+#X text 527 198 \$2 : creation No/Id of mass1;
+#X text 527 216 \$3 : creation No/Id of mass2;
+#X text 527 251 \$5 : damping;
+#X text 790 152 Add tangential link(s);
+#X text 524 289 (\$8) : Power of the rigidity distance;
+#X text 524 308 (\$9) : minimum lenght of link;
+#X text 524 325 (\$10) : maximum lenght of link;
+#X text 506 102 In 2D (and 3D) there are two specials links : oriented
+links. They works as general links excepts their calculation is made
+following a vector.;
+#X text 526 270 \$6 \, \$7 : tangential vector (x \, y);
+#X text 504 75 Oriented links :;
+#X msg 507 153 tLink \$1 \$2 \$3 \$4 \$5 \$6 \$7 (\$8 \$9 \$10);
+#X msg 502 406 tabLink \$1 \$2 \$3 \$4 \$5 \$6 \$7;
+#X text 532 453 \$1 : Id (symbol);
+#X text 532 453 \$1 : Id (symbol);
+#X text 532 471 \$2 : creation No/Id of mass1;
+#X text 532 489 \$3 : creation No/Id of mass2;
+#X text 527 434 Add non linear link(s);
+#X text 530 506 \$4 : table name for the rigidity;
+#X text 530 524 \$5 : length of the table;
+#X text 530 542 \$6 : table name for the damping;
+#X text 529 561 \$7 : length of the table;
+#X obj 494 351 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 497 351 Table links :;
+#X connect 29 0 31 0;
+#X restore 12 457 pd creation________;
+#X text 103 542 None;
+#X text 18 583 - Left:;
+#X text 101 584 Outputs the model parameters asked with the attributes
+messages.;
+#X text 101 420 Messages - Different messages are used to control the
+pmpd object. They are of three types :;
+#X text 9 639 CATEGORY: control;
+#N canvas 100 72 1078 872 dynamic 0;
+#X obj 5 3 cnv 15 550 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 10 85 cnv 15 150 750 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 4 62 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 574 86 cnv 15 130 350 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 567 62 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 7 62 Masses :;
+#X text 570 62 Links :;
+#X text 7 2 DYNAMIC SETTINGS Messages;
+#X msg 31 116 posX \$1 \$2;
+#X text 191 178 Add force on mass(es);
+#X msg 30 193 forceX \$1 \$2;
+#X text 190 114 \$1 : Id (symbol) or No;
+#X text 193 195 \$1 : Id (symbol) or No;
+#X msg 31 285 Xmin \$1;
+#X msg 90 285 Xmax \$1;
+#X msg 29 334 setMobile \$1;
+#X msg 29 355 setFixed \$1;
+#X text 190 96 Set position of fixed mass(es);
+#X text 177 268 Set minimimum and maximum position of all masses;
+#X text 188 334 Set mass to mobile or fixed;
+#X msg 593 150 setD \$1 \$2;
+#X text 748 136 \$2 : New value;
+#X msg 593 99 setK \$1 \$2;
+#X text 748 192 \$2 : New value;
+#X text 748 245 \$2 : New value;
+#X text 742 100 Set rigidity of link(s);
+#X text 742 156 Set damping of link(s);
+#X msg 593 205 setL \$1 \$2;
+#X text 742 209 Set initial lenght of link(s);
+#X text 748 118 \$1 : Id (symbol) or No;
+#X text 748 174 \$1 : Id (symbol) or No;
+#X text 748 227 \$1 : Id (symbol) or No;
+#X text 191 351 \$1 : Id (symbol) or No;
+#X text 10 25 Dynamic settings messages allows the user to redefine
+internal parameters of links and masses.;
+#X msg 29 391 grabMass \$1 \$2 \$3;
+#X text 186 391 Grab nearest mass;
+#X text 191 407 \$1 \, \$2 : position;
+#X text 190 424 \$3 : grab or not (0/1);
+#X msg 31 137 posY \$1 \$2;
+#X msg 30 214 forceY \$1 \$2;
+#X msg 31 307 Ymin \$1;
+#X msg 90 307 Ymax \$1;
+#X text 191 488 \$2 : New Id;
+#X msg 30 456 setMassId \$1 \$2;
+#X text 191 454 Change the Id of a mass;
+#X text 192 471 \$1 : mass (number or Id);
+#X msg 23 583 setSpeed \$1 \$2;
+#X text 186 535 \$1 : Id (symbol) or No;
+#X text 183 518 set force on mass(es);
+#X text 185 602 \$1 : Id (symbol) or No;
+#X text 182 585 set speed of a mass(es);
+#X text 184 663 \$1 : Id (symbol) or No;
+#X text 181 646 add pos of a mass(es);
+#X msg 23 737 grabMass \$1 \$2 \$3;
+#X text 183 707 grab a mass \, and move it;
+#X text 185 729 \$1 : mass number;
+#X text 185 745 \$2 : position;
+#X text 185 761 \$3 : grab or not (0 or 1);
+#X msg 24 515 setForce \$1 \$2 \$3;
+#X text 186 553 \$2 / \$3 : Value;
+#X msg 24 535 setForceX \$1 \$2;
+#X msg 24 554 setForceY \$1 \$2;
+#X msg 31 96 pos \$1 \$2 \$3;
+#X text 190 132 \$2 / \$3 : Value;
+#X msg 30 173 force \$1 \$2 \$3;
+#X text 191 213 \$2 / \$3 : Value;
+#X text 180 284 \$1 / \$2 : Value;
+#X msg 27 805 setDEnv \$1;
+#X text 178 798 Change environement damping;
+#X text 190 815 \$1 : damping;
+#X msg 23 602 setSpeedX \$1 \$2;
+#X msg 23 621 setSpeedY \$1 \$2;
+#X text 185 619 \$2 / \$3 : Value;
+#X text 185 681 \$2 / \$3 : Value;
+#X msg 24 646 addPos \$1 \$2 \$3;
+#X msg 588 280 setLinkId \$1 \$2;
+#X text 742 281 Change the Id of a link;
+#X text 743 298 \$1 : link (number or Id);
+#X text 746 315 \$2 : New Id;
+#X msg 591 353 setLKTab \$1 \$2;
+#X text 750 353 change the table (K) size of a non linear link;
+#X text 751 373 \$1 : link (number or Id);
+#X text 752 390 \$2 : New KL;
+#X text 751 435 \$1 : link (number or Id);
+#X msg 591 415 setLDTab \$1 \$2;
+#X text 750 415 change the table (D) size of a non linear link;
+#X text 752 452 \$2 : New DL;
+#X msg 31 245 min \$1 \$2;
+#X msg 31 265 max \$1 \$2;
+#X msg 24 665 addPosX \$1 \$2;
+#X msg 24 685 addPosY \$1 \$2;
+#X restore 12 478 pd dynamic settings;
+#N canvas 30 26 1236 814 attributes______ 0;
+#X obj 11 95 cnv 15 100 35 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 5 75 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 3 cnv 15 590 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 10 158 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 4 137 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 616 422 cnv 15 110 330 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj 610 398 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 7 74 General :;
+#X text 7 2 ATTRIBUTES Messages;
+#X text 7 137 Lists :;
+#X text 136 104 Get infos on all masses and links on right outlet;
+#X text 170 170 Output all masses positions in a list on outlet No
+1;
+#X text 746 438 Get specific attribute on specific element;
+#X msg 626 436 get \$1 (\$2);
+#X text 613 398 Specific :;
+#X text 746 533 The get message return the asked attribute preceded
+by an identifier and the creation No of the element. The identifier
+is made of the asked parameter and the way you asked for it.;
+#X text 747 609 message;
+#X text 987 609 response;
+#X text 746 590 Examples with 3 masses numbered 0 \, 1 and 2 and named
+mas:;
+#X text 15 30 The attributes messages ask the object to output some
+of his internal parameters. They can be output by lists for positions
+and forces of masses.;
+#X text 172 399 Output all forces applied on masses in a list on outlet
+No 1;
+#X text 746 500 (\$2) : - If not defined all the attributes are send
+for all the elements. - Ids or/and creations No;
+#X text 170 202 Output all masses x or y in a list on outlet No 1;
+#X text 780 628 [get massesPos( -----> [massesPos 0 x0 y0(;
+#X text 766 678 [get massesPos 1( -----> [massesPosNo 1 x1 y1(;
+#X text 752 699 [get massesPos mas( -----> [massesPosId 0 x0 y0(;
+#X msg 33 104 print;
+#X text 170 230 Output all norm of position vector (sqrt(x*x+y*y))
+in a list on outlet No 1;
+#X obj 11 272 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 171 284 Output all masses speeds in a list on outlet No 1;
+#X text 172 316 Output all masses speeds in x or y in a list on outlet
+No 1;
+#X text 171 344 Output all norm of speed vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X obj 11 385 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 175 429 Output all masses forces in x or y in a list on outlet
+No 1;
+#X text 171 457 Output all norm of forces vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X text 745 457 \$1 : Attribute type ( massesPos / massesPosName /
+massesSpeeds / massesSpeedsName / massesForces / massesForcesName /
+linksPos / linksPosName );
+#X text 752 750 [get massesPosName( -----> [massesPosName mas x0 y0(
+;
+#X obj 611 26 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 605 5 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 796 264 Output all forces applied on masses in a list on outlet
+No 1;
+#X obj 612 140 cnv 15 150 110 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text 795 149 Output all masses speeds in a list on outlet No 1;
+#X text 796 181 Output all masses speeds in x or y in a list on outlet
+No 1;
+#X text 801 209 Output all norm of speed vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X obj 612 253 cnv 15 150 110 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text 799 294 Output all masses forces in x or y in a list on outlet
+No 1;
+#X text 804 322 Output all norm of forces vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X msg 12 170 massesPosL (\$1);
+#X msg 12 190 massesPosXL (\$1);
+#X msg 12 210 massesPosYL (\$1);
+#X msg 12 230 massesPosNormL (\$1);
+#X msg 13 284 massesSpeedsL (\$1);
+#X msg 13 343 massesSpeedsNormL (\$1);
+#X msg 14 397 massesForcesL (\$1);
+#X msg 12 170 massesPosL (\$1);
+#X msg 13 456 massesSpeedsNormL (\$1);
+#X msg 615 38 massesPosT \$1 (\$2);
+#X msg 615 58 massesPosXT \$1 (\$2);
+#X msg 615 79 massesPosYT \$1 (\$2);
+#X msg 615 98 massesPosNormT \$1 (\$2);
+#X msg 616 152 massesSpeedsT \$1 (\$2);
+#X msg 616 213 massesSpeedsNormT \$1 (\$2);
+#X msg 617 265 massesForcesT \$1 (\$2);
+#X msg 616 324 massesSpeedsNormT \$1 (\$2);
+#X text 794 35 Output all masses positions in a table (\$1);
+#X text 794 67 Output all masses x or y in a table (\$1);
+#X text 794 95 Output all norm of position vector (sqrt(x*x+y*y)) in
+a table (\$1);
+#X text 174 498 \$1 (optional): Masses Id;
+#X text 815 376 \$2 (optional): Masses Id;
+#X text 814 363 \$1 : table name;
+#X obj 17 544 cnv 15 150 270 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 11 524 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 14 524 statistics :;
+#X msg 22 557 massesPosMean;
+#X text 177 573 \$1 : none or Id;
+#X msg 23 595 massesPosStd \$1;
+#X text 179 610 \$1 : none or Id;
+#X text 173 557 output the average position of masses;
+#X text 174 594 output the standard deviation of masses position;
+#X text 177 660 \$1 : none or Id;
+#X text 179 697 \$1 : none or Id;
+#X text 173 644 output the average position of masses;
+#X text 174 681 output the standard deviation of masses position;
+#X text 177 745 \$1 : none or Id;
+#X text 178 782 \$1 : none or Id;
+#X text 173 729 output the average position of masses;
+#X text 173 766 output the standard deviation of masses position;
+#X msg 22 682 massesForcesStd \$1;
+#X msg 22 644 massesForcesMean;
+#X msg 23 731 massesSpeedsMean;
+#X msg 22 767 massesSpeedsStd \$1;
+#X text 608 5 tables :;
+#X msg 14 304 massesSpeedsXL (\$1);
+#X msg 13 417 massesForcesXL (\$1);
+#X msg 616 173 massesSpeedsXT \$1 (\$2);
+#X msg 616 286 massesForcesXT \$1 (\$2);
+#X msg 13 324 massesSpeedsYL (\$1);
+#X msg 13 437 massesForcesYL (\$1);
+#X msg 616 192 massesSpeedsYT \$1 (\$2);
+#X msg 617 305 massesForcesYT \$1 (\$2);
+#X text 941 642 [massesPos 1 x2 y1(;
+#X text 941 657 [massesPos 2 x1 y2(;
+#X text 941 714 [massesPosId 1 x2 y1(;
+#X text 941 729 [massesPosId 2 x1 y2(;
+#X text 942 765 [massesPosName mas x1 y1(;
+#X text 942 780 [massesPosName mas x2 y2(;
+#X restore 12 499 pd attributes______;
+#X text 9 649 KEYWORDS: physical model mass spring damper link;
+#X text 12 8 HELP: pmpd2d;
+#X obj 157 48 pmpd2d;
+#X text 112 618 01_pmpd2dtest.pd;
+#X obj 18 296 pmpd2d;
+#N canvas 731 296 450 300 gemmouse 0;
+#X obj 189 77 gemmouse;
+#X obj 189 184 pack f f;
+#X obj 189 218 spigot;
+#X obj 109 243 outlet;
+#X obj 109 36 inlet;
+#X obj 109 98 t b;
+#X obj 238 131 + 4;
+#X msg 57 182 posX fix \$1;
+#X msg 57 203 posY fix \$2;
+#X obj 189 108 / 62.5;
+#X obj 237 107 / -62.5;
+#X obj 189 131 - 4;
+#X obj 109 125 list 0 0;
+#X connect 0 0 9 0;
+#X connect 0 1 10 0;
+#X connect 0 2 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 12 1;
+#X connect 4 0 5 0;
+#X connect 5 0 12 0;
+#X connect 6 0 1 1;
+#X connect 7 0 3 0;
+#X connect 8 0 3 0;
+#X connect 9 0 11 0;
+#X connect 10 0 6 0;
+#X connect 11 0 1 0;
+#X connect 12 0 7 0;
+#X connect 12 0 8 0;
+#X restore 393 295 pd gemmouse;
+#X obj 393 274 gemhead;
+#X obj 346 216 gemwin;
+#X msg 357 193 0 \, destroy;
+#N canvas 472 258 550 319 gemrender 0;
+#X obj 48 203 translateXYZ;
+#X obj 48 229 sphere 0.1;
+#X obj 127 24 inlet;
+#X obj 360 32 inlet;
+#X obj 275 232 curve 2;
+#X msg 431 81 \$4 \$5 0;
+#X msg 359 77 \$2 \$3 0;
+#X obj 359 105 t b a;
+#X obj 127 62 unpack f f f;
+#X obj 166 88 t b f;
+#X msg 48 110 0;
+#X obj 48 77 loadbang;
+#X obj 48 137 gemhead;
+#X msg 275 160 0;
+#X obj 275 127 loadbang;
+#X obj 275 187 gemhead;
+#X connect 0 0 1 0;
+#X connect 2 0 8 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 5 0 4 2;
+#X connect 6 0 7 0;
+#X connect 7 0 15 0;
+#X connect 7 1 4 1;
+#X connect 8 1 9 0;
+#X connect 8 2 0 2;
+#X connect 9 0 12 0;
+#X connect 9 1 0 1;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
+#X connect 12 0 0 0;
+#X connect 13 0 15 0;
+#X connect 14 0 13 0;
+#X connect 15 0 4 0;
+#X restore 172 320 pd gemrender;
+#X msg 346 129 reset \, create \, 1;
+#X text 135 98 Sorry \, you need GEM for this example...;
+#X text 169 132 1 Create window -->;
+#X text 169 163 2 Drag the structure with the mouse;
+#X text 169 195 3 Destroy the window -->;
+#X obj 172 294 route massesPos linksPosNo;
+#X text 11 19 DESCRIPTION: Physical modeling for Pd in 2d;
+#X text 265 669 - Cyrille Henry 2011;
+#X text 265 681 based on MSD by Nicolas Montgermont \, 2005;
+#X connect 21 0 43 0;
+#X connect 24 0 23 0;
+#X connect 25 0 54 0;
+#X connect 26 0 19 0;
+#X connect 43 0 20 0;
+#X connect 44 0 22 0;
+#X connect 45 0 44 0;
+#X connect 47 0 46 0;
+#X connect 49 0 46 0;
+#X connect 54 0 48 0;
+#X connect 54 1 48 1;
diff --git a/pmpd3d-help.pd b/pmpd3d-help.pd
index 78a7b42..e81aae1 100644
--- a/pmpd3d-help.pd
+++ b/pmpd3d-help.pd
@@ -1 +1,702 @@
-#N canvas 0 0 450 300 10;
+#N canvas 1045 104 613 729 10;
+#X obj 4 369 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 665 cnv 15 550 30 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 8 6 cnv 15 550 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 14 389 cnv 15 75 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 14 584 cnv 15 75 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 4 527 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 4 562 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 7 76 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 615 cnv 15 550 20 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 635 cnv 15 550 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#N canvas 76 31 921 714 More_Info 0;
+#X text 96 12 pmpd : mass - spring - damper model;
+#X text 27 155 Be careful : if masses are deleted \, lists messages
+won't work;
+#X text 27 60 It is designed to implement particules physical model
+in PD.The model is based on two elements type : mass and link. The
+pmpd masses are the principals objects of the model. They got only
+one physical parameter \, the value of their mass. They can be mobile
+or fixed \, in this case forces applied on them automatically \, by
+links \, or manually \, by messages \, don't do anything.;
+#X obj 456 -5 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 456 294 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity1 4 float 1;
+#A 0 -1 0 1 2;
+#X array zero 4 float 1;
+#A 0 0 0 0 0;
+#X coords 0 3 3 -3 200 150 1;
+#X restore 121 328 graph;
+#X text 179 485 L0;
+#N canvas 438 87 956 727 figure 0;
+#X obj 284 53 loadbang;
+#X msg 293 125 \; rigidity1 resize 1 \; rigidity1 resize 4 \; rigidity1
+bounds 0 3 3 -3 \; rigidity1 0 -1 0 1 2 \; rigidity1 ylabel -0.5 \;
+rigidity1 xlabel -3.5 \; rigidity1 xticks 0 1 1 \; rigidity1 yticks
+0 0.1 5;
+#X obj 388 574 sqrt;
+#X obj 316 651 tabwrite rigidity3;
+#X obj 343 464 - 20;
+#X obj 316 609 f;
+#X obj 316 579 t b f;
+#X obj 343 494 moses 0;
+#X obj 343 517 * -1;
+#X obj 343 538 sqrt;
+#X obj 343 559 * -1;
+#X obj 481 479 - 20;
+#X obj 453 662 f;
+#X obj 453 632 t b f;
+#X obj 481 509 moses 0;
+#X obj 481 532 * -1;
+#X obj 480 612 * -1;
+#X obj 528 622 *;
+#X obj 480 591 *;
+#X obj 525 590 t f f;
+#X obj 480 564 t f f;
+#X obj 453 683 tabwrite rigidity4;
+#X obj 181 235 t b b;
+#X obj 620 552 f;
+#X obj 620 522 t b f;
+#X obj 620 623 tabwrite rigidity2;
+#X msg 763 574 0;
+#X obj 679 437 - 50;
+#X obj 751 491 moses 40;
+#X obj 681 510 moses -40;
+#X obj 620 586 * 1.5;
+#X obj 680 462 moses 10;
+#X obj 680 488 moses -10;
+#X msg 55 419 \; rigidity2 resize 101 \; rigidity2 xticks 1 10 5 \;
+rigidity2 yticks 0 5 5 \; rigidity3 resize 51 \; rigidity3 xticks 0
+1 5 \; rigidity3 yticks 0 1 5 \; rigidity4 resize 51 \; rigidity4 xticks
+0 1 5 \; rigidity4 yticks 0 100 5;
+#X obj 631 315 f;
+#X obj 648 394 + 1;
+#X obj 632 367 t f f;
+#X obj 375 333 f;
+#X obj 375 360 moses 50.5;
+#X obj 392 411 + 1;
+#X obj 376 384 t f f;
+#X obj 176 141 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 371 310 0;
+#X msg 627 286 0;
+#X obj 631 343 moses 100.5;
+#X connect 0 0 1 0;
+#X connect 0 0 22 0;
+#X connect 2 0 5 1;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 6 1 3 1;
+#X connect 7 0 8 0;
+#X connect 7 1 2 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 5 1;
+#X connect 11 0 14 0;
+#X connect 12 0 21 0;
+#X connect 13 0 12 0;
+#X connect 13 1 21 1;
+#X connect 14 0 15 0;
+#X connect 14 1 19 0;
+#X connect 15 0 20 0;
+#X connect 16 0 12 1;
+#X connect 17 0 12 1;
+#X connect 18 0 16 0;
+#X connect 19 0 17 0;
+#X connect 19 1 17 1;
+#X connect 20 0 18 0;
+#X connect 20 1 18 1;
+#X connect 22 0 42 0;
+#X connect 22 1 33 0;
+#X connect 22 1 43 0;
+#X connect 23 0 30 0;
+#X connect 24 0 23 0;
+#X connect 24 1 25 1;
+#X connect 26 0 23 1;
+#X connect 27 0 31 0;
+#X connect 28 0 23 1;
+#X connect 28 1 26 0;
+#X connect 29 0 26 0;
+#X connect 29 1 23 1;
+#X connect 30 0 25 0;
+#X connect 31 0 32 0;
+#X connect 31 1 28 0;
+#X connect 32 0 29 0;
+#X connect 32 1 26 0;
+#X connect 34 0 44 0;
+#X connect 35 0 34 0;
+#X connect 36 0 35 0;
+#X connect 36 1 27 0;
+#X connect 36 1 24 0;
+#X connect 37 0 38 0;
+#X connect 38 0 40 0;
+#X connect 39 0 37 0;
+#X connect 40 0 39 0;
+#X connect 40 1 4 0;
+#X connect 40 1 6 0;
+#X connect 40 1 13 0;
+#X connect 40 1 11 0;
+#X connect 41 0 22 0;
+#X connect 42 0 37 0;
+#X connect 43 0 34 0;
+#X connect 44 0 36 0;
+#X restore 403 659 pd figure;
+#X text 125 307 Rigidity;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity2 101 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 -60 -58.5 -57 -55.5 -54 -52.5 -51 -49.5 -48
+-46.5 -45 -43.5 -42 -40.5 -39 -37.5 -36 -34.5 -33 -31.5 -30 -28.5 -27
+-25.5 -24 -22.5 -21 -19.5 -18 -16.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 15 16.5 18 19.5 21 22.5 24 25.5 27 28.5 30 31.5 33 34.5 36
+37.5 39 40.5 42 43.5 45 46.5 48 49.5 51 52.5 54 55.5 57 58.5 0 0 0
+0 0 0 0 0 0 0 0;
+#X array zero 101 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0;
+#X coords 0 3 22 -3 200 150 1;
+#X restore 565 327 graph;
+#X text 657 482 L0;
+#X text 569 304 Rigidity with Lmin and Lmax;
+#X text 673 482 Lmin;
+#X text 735 481 Lmax;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity3 51 float 1;
+#A 0 -4.47214 -4.3589 -4.24264 -4.12311 -4 -3.87298 -3.74166 -3.60555
+-3.4641 -3.31662 -3.16228 -3 -2.82843 -2.64575 -2.44949 -2.23607 -2
+-1.73205 -1.41421 -1 0 1 1.41421 1.73205 2 2.23607 2.44949 2.64575
+2.82843 3 3.16228 3.31662 3.4641 3.60555 3.74166 3.87298 4 4.12311
+4.24264 4.3589 4.47214 4.58258 4.69042 4.79583 4.89898 5 5.09902 5.19615
+5.2915 5.38516 5.47723;
+#X array zero 51 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 6 50 -6 200 150 1;
+#X restore 119 526 graph;
+#X text 192 679 L0;
+#X text 126 505 Rigidity with power = 1/2;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array rigidity4 51 float 1;
+#A 0 0 -400 -361 -324 -289 -256 -225 -196 -169 -144 -121 -100 -81 -64
+-49 -36 -25 -16 -9 -4 -1 0 1 4 9 16 25 36 49 64 81 100 121 144 169
+196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841;
+#X array zero 51 float 1;
+#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X coords 0 1000 50 -1000 200 150 1;
+#X restore 566 530 graph;
+#X text 639 684 L0;
+#X text 571 508 Rigidity with power = 2;
+#X text 571 12 The equations are :;
+#X text 497 36 if Lmin<|L[n]-L[0]|<Lmax;
+#X text 496 75 else;
+#X text 496 95 F[n] = D(L[n]-L[n-1]);
+#X text 496 54 F[n] = K(L[n] - L[0])^P + D(L[n] - L[n-1]);
+#X text 28 187 Links connect masses two by two. They got 4 physicals
+parameters : length \, rigidity \, damping and power.;
+#X text 27 216 Rigidity \, damping and power are defined by the creation
+message. The lenght is initialised to the distance between the two
+masses at the creation.;
+#X text 495 124 For oriented links \, the force F[n] is projected onto
+a vector which is given during the creation of the link using x1y1
+coordinates.;
+#X text 495 169 For normal vector \, the direction is calculated using
+the scalar product :;
+#X text 495 248 You can build specific links using different links
+messages defining the characteristic step by step.;
+#X text 496 206 x1x2 + y1y2 = 0;
+#X text 27 257 Links can be created in one shot between mutiples masses
+\, instead of creation number \, the masses linked are defined with
+their Id.;
+#X text 28 41 pmpd is the 2D object of the pmpd objects collection.
+;
+#X connect 3 0 4 0;
+#X restore 16 673 pd More_Info;
+#X text 12 76 Examples:;
+#X text 9 369 Inlets:;
+#X text 19 388 - Left:;
+#X text 10 526 Arguments:;
+#X text 11 562 Outlets:;
+#X text 19 617 See Also:;
+#X text 74 48 Full Name:;
+#N canvas 58 22 262 70 Related_Objects 0;
+#X obj 3 10 cnv 15 250 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 3 30 cnv 15 250 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 5 10 Externals and libraries;
+#X obj 44 37 pmpd;
+#X obj 141 39 pmpd3d;
+#X restore 122 673 pd Related_Objects;
+#X text 101 388 Bang - A bang at the left inlet compute the new model
+state based on previous instant.;
+#X text 158 478 To set the model parameters after creation.;
+#X text 158 456 To create the model masses and links.;
+#X text 158 501 To get the model parameters;
+#N canvas 556 79 967 626 creation________ 0;
+#X obj 5 75 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 3 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 7 2 CREATION Messages;
+#X obj 4 137 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 3 351 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X msg 32 104 reset;
+#X text 202 167 Add a mass;
+#X text 57 191 \$1 : Id (symbol);
+#X text 57 211 \$2 : fixed or mobile (0/1);
+#X text 57 229 \$3 : mass;
+#X text 7 137 Masses :;
+#X text 7 74 Reset :;
+#X text 129 105 Delete all masses \, links and internal variables;
+#X text 6 351 Links :;
+#X text 49 406 \$1 : Id (symbol);
+#X text 49 459 \$4 : rigidity;
+#X text 49 406 \$1 : Id (symbol);
+#X text 49 459 \$4 : rigidity;
+#X text 49 424 \$2 : creation No/Id of mass1;
+#X text 49 442 \$3 : creation No/Id of mass2;
+#X text 266 384 Add link(s);
+#X text 49 477 \$5 : damping;
+#X text 10 28 Creation messages are used to define the structure of
+the model. Messages create links and masses or destroy them.;
+#X msg 30 384 link \$1 \$2 \$3 \$4 \$5 (\$6 \$7 \$8);
+#X text 46 495 (\$6) : Power of the rigidity distance;
+#X text 46 514 (\$7) : minimum lenght of link;
+#X text 46 531 (\$8) : maximum lenght of link;
+#X obj 471 75 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 501 75 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 471 578 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 527 180 \$1 : Id (symbol);
+#X text 527 233 \$4 : rigidity;
+#X text 527 180 \$1 : Id (symbol);
+#X text 527 233 \$4 : rigidity;
+#X text 527 198 \$2 : creation No/Id of mass1;
+#X text 527 216 \$3 : creation No/Id of mass2;
+#X text 527 251 \$5 : damping;
+#X text 790 152 Add tangential link(s);
+#X text 524 289 (\$8) : Power of the rigidity distance;
+#X text 524 308 (\$9) : minimum lenght of link;
+#X text 524 325 (\$10) : maximum lenght of link;
+#X text 506 102 In 2D (and 3D) there are two specials links : oriented
+links. They works as general links excepts their calculation is made
+following a vector.;
+#X text 526 270 \$6 \, \$7 : tangential vector (x \, y);
+#X text 504 75 Oriented links :;
+#X msg 507 153 tLink \$1 \$2 \$3 \$4 \$5 \$6 \$7 (\$8 \$9 \$10);
+#X msg 502 406 tabLink \$1 \$2 \$3 \$4 \$5 \$6 \$7;
+#X text 532 453 \$1 : Id (symbol);
+#X text 532 453 \$1 : Id (symbol);
+#X text 532 471 \$2 : creation No/Id of mass1;
+#X text 532 489 \$3 : creation No/Id of mass2;
+#X text 527 434 Add non linear link(s);
+#X text 530 506 \$4 : table name for the rigidity;
+#X text 530 524 \$5 : length of the table;
+#X text 530 542 \$6 : table name for the damping;
+#X text 529 561 \$7 : length of the table;
+#X obj 494 351 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 497 351 Table links :;
+#X msg 32 167 mass \$1 \$2 \$3 \$4 \$5 \$6;
+#X text 58 247 \$4 \, \$5 \, \$6 : initial position;
+#X connect 27 0 29 0;
+#X restore 12 457 pd creation________;
+#X text 103 542 None;
+#X text 18 583 - Left:;
+#X text 101 584 Outputs the model parameters asked with the attributes
+messages.;
+#X text 101 420 Messages - Different messages are used to control the
+pmpd object. They are of three types :;
+#X text 9 639 CATEGORY: control;
+#N canvas 675 81 1078 872 dynamic 0;
+#X obj 5 3 cnv 15 550 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 10 85 cnv 15 150 750 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 4 62 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 574 86 cnv 15 130 350 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 567 62 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 7 62 Masses :;
+#X text 570 62 Links :;
+#X text 7 2 DYNAMIC SETTINGS Messages;
+#X msg 31 115 posX \$1 \$2;
+#X text 191 178 Add force on mass(es);
+#X msg 30 191 forceX \$1 \$2;
+#X text 190 114 \$1 : Id (symbol) or No;
+#X text 193 195 \$1 : Id (symbol) or No;
+#X msg 31 288 Xmin \$1;
+#X msg 90 288 Xmax \$1;
+#X msg 29 347 setMobile \$1;
+#X msg 29 368 setFixed \$1;
+#X text 190 96 Set position of fixed mass(es);
+#X text 177 272 Set minimimum and maximum position of all masses;
+#X text 188 347 Set mass to mobile or fixed;
+#X msg 593 150 setD \$1 \$2;
+#X text 748 136 \$2 : New value;
+#X msg 593 99 setK \$1 \$2;
+#X text 748 192 \$2 : New value;
+#X text 748 245 \$2 : New value;
+#X text 742 100 Set rigidity of link(s);
+#X text 742 156 Set damping of link(s);
+#X msg 593 205 setL \$1 \$2;
+#X text 742 209 Set initial lenght of link(s);
+#X text 748 118 \$1 : Id (symbol) or No;
+#X text 748 174 \$1 : Id (symbol) or No;
+#X text 748 227 \$1 : Id (symbol) or No;
+#X text 191 364 \$1 : Id (symbol) or No;
+#X text 10 25 Dynamic settings messages allows the user to redefine
+internal parameters of links and masses.;
+#X msg 29 404 grabMass \$1 \$2 \$3;
+#X text 186 404 Grab nearest mass;
+#X text 191 420 \$1 \, \$2 : position;
+#X text 190 437 \$3 : grab or not (0/1);
+#X msg 31 134 posY \$1 \$2;
+#X msg 30 210 forceY \$1 \$2;
+#X msg 31 307 Ymin \$1;
+#X msg 90 307 Ymax \$1;
+#X text 191 501 \$2 : New Id;
+#X msg 29 469 setMassId \$1 \$2;
+#X text 191 467 Change the Id of a mass;
+#X text 192 484 \$1 : mass (number or Id);
+#X msg 24 594 setSpeed \$1 \$2;
+#X text 186 548 \$1 : Id (symbol) or No;
+#X text 183 531 set force on mass(es);
+#X text 185 615 \$1 : Id (symbol) or No;
+#X text 182 598 set speed of a mass(es);
+#X text 178 694 \$1 : Id (symbol) or No;
+#X text 175 677 add pos of a mass(es);
+#X msg 27 764 grabMass \$1 \$2 \$3;
+#X text 183 733 grab a mass \, and move it;
+#X text 185 755 \$1 : mass number;
+#X text 185 771 \$2 : position;
+#X text 185 787 \$3 : grab or not (0 or 1);
+#X msg 24 514 setForce \$1 \$2 \$3;
+#X text 186 566 \$2 / \$3 : Value;
+#X msg 24 533 setForceX \$1 \$2;
+#X msg 24 552 setForceY \$1 \$2;
+#X msg 31 96 pos \$1 \$2 \$3;
+#X text 190 132 \$2 / \$3 : Value;
+#X msg 30 172 force \$1 \$2 \$3;
+#X text 191 213 \$2 / \$3 : Value;
+#X msg 29 811 setDEnv \$1;
+#X text 178 811 Change environement damping;
+#X text 190 828 \$1 : damping;
+#X msg 24 613 setSpeedX \$1 \$2;
+#X msg 24 632 setSpeedY \$1 \$2;
+#X text 185 632 \$2 / \$3 : Value;
+#X text 179 712 \$2 / \$3 : Value;
+#X msg 24 675 addPos \$1 \$2 \$3;
+#X msg 588 280 setLinkId \$1 \$2;
+#X text 742 281 Change the Id of a link;
+#X text 743 298 \$1 : link (number or Id);
+#X text 746 315 \$2 : New Id;
+#X msg 591 353 setLKTab \$1 \$2;
+#X text 750 353 change the table (K) size of a non linear link;
+#X text 751 373 \$1 : link (number or Id);
+#X text 752 390 \$2 : New KL;
+#X text 751 435 \$1 : link (number or Id);
+#X msg 591 415 setLDTab \$1 \$2;
+#X text 750 415 change the table (D) size of a non linear link;
+#X text 752 452 \$2 : New DL;
+#X msg 31 153 posZ \$1 \$2;
+#X msg 30 229 forceZ \$1 \$2;
+#X msg 31 249 min \$1 \$2;
+#X msg 31 269 max \$1 \$2;
+#X text 180 288 \$1 / \$2 / \$3 : Value;
+#X msg 31 326 Zmin \$1;
+#X msg 90 326 Zmax \$1;
+#X msg 24 571 setForceZ \$1 \$2;
+#X msg 24 651 setSpeedZ \$1 \$2;
+#X msg 24 694 addPosX \$1 \$2;
+#X msg 24 713 addPosY \$1 \$2;
+#X msg 25 732 addPosZ \$1 \$2;
+#X restore 12 478 pd dynamic settings;
+#N canvas 30 26 1236 814 attributes______ 0;
+#X obj 11 95 cnv 15 100 35 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 5 75 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 5 3 cnv 15 590 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 10 158 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 4 137 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X obj 616 422 cnv 15 110 330 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj 610 398 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 7 74 General :;
+#X text 7 2 ATTRIBUTES Messages;
+#X text 7 137 Lists :;
+#X text 136 104 Get infos on all masses and links on right outlet;
+#X text 170 170 Output all masses positions in a list on outlet No
+1;
+#X text 746 438 Get specific attribute on specific element;
+#X msg 626 436 get \$1 (\$2);
+#X text 613 398 Specific :;
+#X text 746 533 The get message return the asked attribute preceded
+by an identifier and the creation No of the element. The identifier
+is made of the asked parameter and the way you asked for it.;
+#X text 747 609 message;
+#X text 987 609 response;
+#X text 746 590 Examples with 3 masses numbered 0 \, 1 and 2 and named
+mas:;
+#X text 15 30 The attributes messages ask the object to output some
+of his internal parameters. They can be output by lists for positions
+and forces of masses.;
+#X text 172 399 Output all forces applied on masses in a list on outlet
+No 1;
+#X text 746 500 (\$2) : - If not defined all the attributes are send
+for all the elements. - Ids or/and creations No;
+#X text 170 202 Output all masses x or y in a list on outlet No 1;
+#X msg 33 104 print;
+#X text 170 230 Output all norm of position vector (sqrt(x*x+y*y))
+in a list on outlet No 1;
+#X obj 11 272 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 171 284 Output all masses speeds in a list on outlet No 1;
+#X text 172 316 Output all masses speeds in x or y in a list on outlet
+No 1;
+#X text 179 353 Output all norm of speed vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X obj 11 385 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 175 429 Output all masses forces in x or y in a list on outlet
+No 1;
+#X text 175 463 Output all norm of forces vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X text 745 457 \$1 : Attribute type ( massesPos / massesPosName /
+massesSpeeds / massesSpeedsName / massesForces / massesForcesName /
+linksPos / linksPosName );
+#X obj 611 26 cnv 15 150 110 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 605 5 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 796 264 Output all forces applied on masses in a list on outlet
+No 1;
+#X obj 612 140 cnv 15 150 110 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text 795 149 Output all masses speeds in a list on outlet No 1;
+#X text 796 181 Output all masses speeds in x or y in a list on outlet
+No 1;
+#X text 801 209 Output all norm of speed vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X obj 612 253 cnv 15 150 110 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text 799 294 Output all masses forces in x or y in a list on outlet
+No 1;
+#X text 804 322 Output all norm of forces vector (sqrt(x*x+y*y)) in
+a list on outlet No 1;
+#X msg 12 169 massesPosL (\$1);
+#X msg 12 188 massesPosXL (\$1);
+#X msg 12 207 massesPosYL (\$1);
+#X msg 12 245 massesPosNormL (\$1);
+#X msg 13 279 massesSpeedsL (\$1);
+#X msg 14 355 massesSpeedsNormL (\$1);
+#X msg 15 392 massesForcesL (\$1);
+#X msg 12 169 massesPosL (\$1);
+#X msg 14 468 massesSpeedsNormL (\$1);
+#X msg 615 38 massesPosT \$1 (\$2);
+#X msg 615 57 massesPosXT \$1 (\$2);
+#X msg 615 76 massesPosYT \$1 (\$2);
+#X msg 614 114 massesPosNormT \$1 (\$2);
+#X msg 616 152 massesSpeedsT \$1 (\$2);
+#X msg 616 228 massesSpeedsNormT \$1 (\$2);
+#X msg 616 335 massesSpeedsNormT \$1 (\$2);
+#X text 794 35 Output all masses positions in a table (\$1);
+#X text 794 67 Output all masses x or y in a table (\$1);
+#X text 794 95 Output all norm of position vector (sqrt(x*x+y*y)) in
+a table (\$1);
+#X text 174 498 \$1 (optional): Masses Id;
+#X text 815 376 \$2 (optional): Masses Id;
+#X text 814 363 \$1 : table name;
+#X obj 17 544 cnv 15 150 270 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 11 524 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577
+0;
+#X text 14 524 statistics :;
+#X msg 22 557 massesPosMean;
+#X text 177 573 \$1 : none or Id;
+#X msg 23 595 massesPosStd \$1;
+#X text 179 610 \$1 : none or Id;
+#X text 173 557 output the average position of masses;
+#X text 174 594 output the standard deviation of masses position;
+#X text 177 660 \$1 : none or Id;
+#X text 179 697 \$1 : none or Id;
+#X text 173 644 output the average position of masses;
+#X text 174 681 output the standard deviation of masses position;
+#X text 177 745 \$1 : none or Id;
+#X text 178 782 \$1 : none or Id;
+#X text 173 729 output the average position of masses;
+#X text 173 766 output the standard deviation of masses position;
+#X msg 22 682 massesForcesStd \$1;
+#X msg 22 644 massesForcesMean;
+#X msg 23 731 massesSpeedsMean;
+#X msg 22 767 massesSpeedsStd \$1;
+#X text 608 5 tables :;
+#X msg 12 226 massesPosZL (\$1);
+#X msg 14 298 massesSpeedsXL (\$1);
+#X msg 13 317 massesSpeedsYL (\$1);
+#X msg 14 336 massesSpeedsZL (\$1);
+#X msg 15 411 massesForcesXL (\$1);
+#X msg 15 430 massesForcesYL (\$1);
+#X msg 14 449 massesForcesZL (\$1);
+#X text 780 629 [get massesPos( -----> [massesPos 0 x0 y0 z0(;
+#X text 940 641 [massesPos 1 x1 y1 z1(;
+#X text 940 656 [massesPos 2 x2 y2 z2(;
+#X text 765 678 [get massesPos 1( -----> [massesPosNo 1 x1 y1 z1(;
+#X text 752 698 [get massesPos mas( -----> [massesPosId 0 x0 y0 z0(
+;
+#X text 941 714 [massesPosId 1 x1 y1 z1(;
+#X text 941 729 [massesPosId 2 x2 y2 z2(;
+#X text 753 750 [get massesPosName( -----> [massesPosName mas x0 y0
+z0(;
+#X text 942 765 [massesPosName mas x1 y1 z1(;
+#X text 941 780 [massesPosName mas x2 y2 z2(;
+#X msg 615 95 massesPosZT \$1 (\$2);
+#X msg 616 171 massesSpeedsXT \$1 (\$2);
+#X msg 616 190 massesSpeedsYT \$1 (\$2);
+#X msg 616 209 massesSpeedsZT \$1 (\$2);
+#X msg 616 259 massesForcesT \$1 (\$2);
+#X msg 616 278 massesForcesXT \$1 (\$2);
+#X msg 616 297 massesForcesYT \$1 (\$2);
+#X msg 616 316 massesForcesZT \$1 (\$2);
+#X restore 12 499 pd attributes______;
+#X text 9 649 KEYWORDS: physical model mass spring damper link;
+#X text 135 98 Sorry \, you need GEM for this example...;
+#X text 265 669 - Cyrille Henry 2011;
+#X text 265 681 based on MSD by Nicolas Montgermont \, 2005;
+#X text 12 8 HELP: pmpd3d;
+#X text 11 19 DESCRIPTION: Physical modeling for Pd in 3d;
+#X obj 157 48 pmpd3d;
+#N canvas 257 262 759 345 init 0;
+#X obj 89 215 t a;
+#X obj 89 33 loadbang;
+#X obj 89 241 s \$0-in;
+#X obj 89 59 t b b b b b;
+#X msg 161 80 reset;
+#X obj 44 13 inlet;
+#X msg 107 161 link souple fix mob 10 10 \, link souple mob mob 10
+10;
+#X msg 125 120 mass mob 1 100 0 -2 0 \, mass mob 1 100 2 0 0 \, mass
+mob 1 100 0 2 0 \, mass mob 1 100 -2 0 0;
+#X msg 89 187 Xmax 4 \, Xmin -4 \, Ymax 4 \, Ymin -4 \, Zmax 4 \, Zmin
+-4;
+#X msg 143 100 mass fix 0 10 0 0 0;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 3 0 8 0;
+#X connect 3 1 6 0;
+#X connect 3 2 7 0;
+#X connect 3 3 9 0;
+#X connect 3 4 4 0;
+#X connect 4 0 0 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 0 0;
+#X restore 17 156 pd init;
+#X obj 18 321 s \$0-out;
+#X obj 18 272 r \$0-in;
+#X obj 393 317 s \$0-in;
+#N canvas 565 515 355 193 compute 0;
+#X obj 27 29 inlet;
+#X obj 27 127 s \$0-in;
+#X msg 27 96 bang \, get massesPos \, get linksPos;
+#X obj 27 66 gemhead;
+#X obj 160 36 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X restore 17 209 pd compute;
+#X obj 17 181 tgl 15 0 empty empty ON/OFF 25 10 1 10 -262144 -1 -1
+1 1;
+#X obj 172 270 r \$0-out;
+#X obj 17 126 bng 15 250 50 0 empty empty reset 25 10 1 10 -262144
+-1 -1;
+#X obj 336 216 gemwin;
+#X msg 336 194 0 \, destroy;
+#N canvas 363 318 550 319 gemrender 0;
+#X obj 48 203 translateXYZ;
+#X obj 48 229 sphere 0.1;
+#X obj 127 24 inlet;
+#X obj 390 13 inlet;
+#X obj 303 213 curve 2;
+#X obj 125 136 t b f;
+#X obj 127 62 unpack f f f f;
+#X msg 390 58 \$2 \$3 \$4;
+#X msg 462 62 \$5 \$6 \$7;
+#X obj 48 167 gemhead;
+#X msg 48 143 0;
+#X obj 48 115 loadbang;
+#X obj 303 147 gemhead;
+#X msg 303 123 0;
+#X obj 303 95 loadbang;
+#X obj 390 86 t b l;
+#X connect 0 0 1 0;
+#X connect 2 0 6 0;
+#X connect 3 0 8 0;
+#X connect 3 0 7 0;
+#X connect 5 0 9 0;
+#X connect 5 1 0 1;
+#X connect 6 1 5 0;
+#X connect 6 2 0 2;
+#X connect 6 3 0 3;
+#X connect 7 0 15 0;
+#X connect 8 0 4 2;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 4 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 15 0 12 0;
+#X connect 15 1 4 1;
+#X restore 172 321 pd gemrender;
+#X msg 336 129 reset \, create \, 1;
+#X obj 18 296 pmpd3d;
+#X msg 393 271 forceZ mob -10;
+#X msg 393 293 forceZ mob 10;
+#X text 392 246 2 Send forces;
+#X text 170 132 1 Create window -->;
+#X text 170 195 3 And destroy it -->;
+#X obj 172 294 route massesPos linksPosNo;
+#X text 112 618 01_pmpd3dtest.pd;
+#X connect 40 0 50 0;
+#X connect 43 0 42 0;
+#X connect 44 0 56 0;
+#X connect 45 0 38 0;
+#X connect 47 0 46 0;
+#X connect 49 0 46 0;
+#X connect 50 0 39 0;
+#X connect 51 0 41 0;
+#X connect 52 0 41 0;
+#X connect 56 0 48 0;
+#X connect 56 1 48 1;