aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Henry <nusmuk@users.sourceforge.net>2007-01-13 11:40:44 +0000
committerCyrille Henry <nusmuk@users.sourceforge.net>2007-01-13 11:40:44 +0000
commit5587b9a0f1768206a9037b86a7ce3b81a1bd17f7 (patch)
tree2862667597642a1ec22ab76c9d7ce85f0cbcd0c7
parentc68540d494272de1baabdae875e95fbd02e7ea60 (diff)
*** empty log message ***
svn path=/trunk/externals/mapping/; revision=7332
-rw-r--r--help/pmattractor_2d-help.pd60
-rw-r--r--help/pmattractor_3d-help.pd66
-rw-r--r--help/pmcloud_1d-help.pd44
-rw-r--r--help/pmcloud_2d-help.pd65
-rw-r--r--help/pmcloud_3d-help.pd72
-rw-r--r--help/pmcube_3d-help.pd66
-rw-r--r--help/pmmulti_stable_2d-help.pd88
-rw-r--r--help/pmopen_string_1d-help.pd107
-rw-r--r--help/pmrepulsor_1d-help.pd42
-rw-r--r--help/pmrepulsor_2d-help.pd60
-rw-r--r--help/pmrepulsor_3d-help.pd66
-rw-r--r--help/pmrigid_open_string_2d-help.pd58
-rw-r--r--help/pmrigid_string_2d-help.pd57
-rw-r--r--help/pmsquare_2d-help.pd60
-rw-r--r--pmattractor_2d.pd52
-rw-r--r--pmattractor_3d.pd56
-rw-r--r--pmcloud_1d.pd107
-rw-r--r--pmcloud_2d.pd132
-rw-r--r--pmcloud_3d.pd146
-rw-r--r--pmcube_3d.pd56
-rw-r--r--pmmulti_stable_2d.pd116
-rw-r--r--pmopen_string_1d.pd94
-rw-r--r--pmrepulsor_1d.pd51
-rw-r--r--pmrepulsor_2d.pd52
-rw-r--r--pmrepulsor_3d.pd55
-rw-r--r--pmrigid_open_string_2d.pd144
-rw-r--r--pmrigid_string_2d.pd145
-rw-r--r--pmsquare_2d.pd52
28 files changed, 2169 insertions, 0 deletions
diff --git a/help/pmattractor_2d-help.pd b/help/pmattractor_2d-help.pd
new file mode 100644
index 0000000..9e590aa
--- /dev/null
+++ b/help/pmattractor_2d-help.pd
@@ -0,0 +1,60 @@
+#N canvas 535 89 583 724 10;
+#X obj 161 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X obj 44 418 unpack f f;
+#X obj 368 21 gcanvas 100 100;
+#X floatatom 193 370 5 0 0 0 - - -;
+#X floatatom 118 369 5 0 0 0 - - -;
+#X obj 44 538 timeroll;
+#X obj 44 491 min 1;
+#X obj 44 511 max 0;
+#X obj 368 129 - 50;
+#X obj 461 127 - 50;
+#X obj 44 442 + 1;
+#X obj 44 466 / 2;
+#X obj 368 151 / 100;
+#X obj 461 149 / 100;
+#X obj 212 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X msg 368 220 grab \$1 \$2;
+#X obj 368 174 pack f f;
+#X obj 368 197 t l b;
+#X msg 398 270 0;
+#X msg 398 295 grab_on \$1;
+#X msg 161 190 force \$1 0;
+#X msg 212 212 force 0 \$1;
+#X obj 44 283 metro 50;
+#X obj 44 259 loadbang;
+#X obj 44 391 pmattractor_2d 0.3 0.3;
+#X obj 398 244 delay 200;
+#X msg 432 271 0.3;
+#X connect 0 0 20 0;
+#X connect 1 0 10 0;
+#X connect 1 1 10 0;
+#X connect 2 0 8 0;
+#X connect 2 1 9 0;
+#X connect 3 0 24 2;
+#X connect 4 0 24 1;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 12 0;
+#X connect 9 0 13 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 1;
+#X connect 14 0 21 0;
+#X connect 15 0 24 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 17 1 26 0;
+#X connect 17 1 25 0;
+#X connect 18 0 19 0;
+#X connect 19 0 24 0;
+#X connect 20 0 24 0;
+#X connect 21 0 24 0;
+#X connect 22 0 24 0;
+#X connect 23 0 22 0;
+#X connect 24 0 1 0;
+#X connect 25 0 18 0;
+#X connect 26 0 19 0;
diff --git a/help/pmattractor_3d-help.pd b/help/pmattractor_3d-help.pd
new file mode 100644
index 0000000..54d6ee1
--- /dev/null
+++ b/help/pmattractor_3d-help.pd
@@ -0,0 +1,66 @@
+#N canvas 809 60 642 776 10;
+#X floatatom 194 377 5 0 0 0 - - -;
+#X floatatom 119 376 5 0 0 0 - - -;
+#X obj 45 500 min 1;
+#X obj 45 520 max 0;
+#X obj 45 427 unpack f f f;
+#X obj 162 45 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 12700 0;
+#X obj 369 28 gcanvas 100 100;
+#X obj 369 136 - 50;
+#X obj 462 134 - 50;
+#X obj 369 158 / 100;
+#X obj 462 156 / 100;
+#X obj 213 45 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 12700 0;
+#X obj 369 181 pack f f;
+#X obj 369 204 t l b;
+#X msg 399 277 0;
+#X msg 399 302 grab_on \$1;
+#X obj 45 290 metro 50;
+#X obj 45 266 loadbang;
+#X obj 399 251 delay 200;
+#X msg 433 278 0.3;
+#X msg 369 227 grab \$1 \$2 0;
+#X obj 258 47 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 12700 0;
+#X msg 162 197 force \$1 0 0;
+#X msg 213 219 force 0 \$1 0;
+#X msg 259 250 force 0 0 \$1;
+#X obj 45 451 + 1;
+#X obj 45 475 / 2;
+#X obj 45 547 timeroll;
+#X obj 45 400 pmattractor_3d 0.3 0.3;
+#X connect 0 0 28 2;
+#X connect 1 0 28 1;
+#X connect 2 0 3 0;
+#X connect 3 0 27 0;
+#X connect 4 0 25 0;
+#X connect 4 1 25 0;
+#X connect 4 2 25 0;
+#X connect 5 0 22 0;
+#X connect 6 0 7 0;
+#X connect 6 1 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 12 0;
+#X connect 10 0 12 1;
+#X connect 11 0 23 0;
+#X connect 12 0 13 0;
+#X connect 13 0 20 0;
+#X connect 13 1 19 0;
+#X connect 13 1 18 0;
+#X connect 14 0 15 0;
+#X connect 15 0 28 0;
+#X connect 16 0 28 0;
+#X connect 17 0 16 0;
+#X connect 18 0 14 0;
+#X connect 19 0 15 0;
+#X connect 20 0 28 0;
+#X connect 21 0 24 0;
+#X connect 22 0 28 0;
+#X connect 23 0 28 0;
+#X connect 24 0 28 0;
+#X connect 25 0 26 0;
+#X connect 26 0 2 0;
+#X connect 28 0 4 0;
diff --git a/help/pmcloud_1d-help.pd b/help/pmcloud_1d-help.pd
new file mode 100644
index 0000000..3efd9ec
--- /dev/null
+++ b/help/pmcloud_1d-help.pd
@@ -0,0 +1,44 @@
+#N canvas 23 56 665 645 10;
+#X text 106 339 outlet 1 : position of masses;
+#X obj 38 451 gemhead;
+#X obj 38 369 t b l;
+#X obj 38 546 translateXYZ;
+#X obj 96 499 - 0.5;
+#X obj 249 490 gemwin;
+#X msg 249 438 create \, 1;
+#X msg 266 461 destroy;
+#X obj 54 395 loadbang;
+#X msg 54 418 0;
+#X obj 38 571 square 0.1;
+#X obj 89 203 gemhead;
+#X obj 89 227 b;
+#X obj 95 519 * 2;
+#X floatatom 87 286 5 0 0 0 - - -;
+#X floatatom 187 285 5 0 0 0 - - -;
+#X floatatom 137 286 5 0 0 0 - - -;
+#X msg 25 13 reset;
+#X msg 61 77 force 0.2;
+#X obj 89 252 f;
+#X obj 147 105 vsl 15 128 -1 1 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 7900 1;
+#X obj 38 307 pmcloud_1d 16 0.02 0.01;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 4 0;
+#X connect 3 0 10 0;
+#X connect 4 0 13 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 11 0 12 0;
+#X connect 12 0 19 0;
+#X connect 13 0 3 1;
+#X connect 14 0 21 1;
+#X connect 15 0 21 3;
+#X connect 16 0 21 2;
+#X connect 17 0 21 0;
+#X connect 18 0 21 0;
+#X connect 19 0 21 0;
+#X connect 20 0 19 1;
+#X connect 21 0 2 0;
diff --git a/help/pmcloud_2d-help.pd b/help/pmcloud_2d-help.pd
new file mode 100644
index 0000000..a9c6b50
--- /dev/null
+++ b/help/pmcloud_2d-help.pd
@@ -0,0 +1,65 @@
+#N canvas 23 56 665 645 10;
+#X text 106 339 outlet 1 : position of masses;
+#X obj 38 451 gemhead;
+#X obj 38 369 t b l;
+#X obj 38 546 translateXYZ;
+#X obj 96 499 - 0.5;
+#X obj 161 499 - 0.5;
+#X obj 249 490 gemwin;
+#X msg 249 438 create \, 1;
+#X msg 266 461 destroy;
+#X obj 54 395 loadbang;
+#X msg 54 418 0;
+#X obj 38 571 square 0.1;
+#X obj 89 203 gemhead;
+#X obj 89 227 b;
+#X obj 96 477 unpack f f;
+#X obj 89 252 l;
+#X obj 174 57 gcanvas 100 100;
+#X obj 174 165 - 50;
+#X obj 267 163 - 50;
+#X obj 174 187 / 100;
+#X obj 174 212 pack f f;
+#X obj 95 519 * 2;
+#X obj 160 519 * 2;
+#X obj 267 185 / -100;
+#X floatatom 87 286 5 0 0 0 - - -;
+#X floatatom 187 285 5 0 0 0 - - -;
+#X floatatom 137 286 5 0 0 0 - - -;
+#X msg 25 13 reset;
+#X obj 38 307 pmcloud_2d 16 0.1 0.05;
+#X msg 42 36 forceX 0.1;
+#X msg 61 77 force 0.2 0.1;
+#X msg 50 56 forceY -0.1;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 14 0;
+#X connect 3 0 11 0;
+#X connect 4 0 21 0;
+#X connect 5 0 22 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X connect 12 0 13 0;
+#X connect 13 0 15 0;
+#X connect 14 0 4 0;
+#X connect 14 1 5 0;
+#X connect 15 0 28 0;
+#X connect 16 0 17 0;
+#X connect 16 1 18 0;
+#X connect 17 0 19 0;
+#X connect 18 0 23 0;
+#X connect 19 0 20 0;
+#X connect 20 0 15 1;
+#X connect 21 0 3 1;
+#X connect 22 0 3 2;
+#X connect 23 0 20 1;
+#X connect 24 0 28 1;
+#X connect 25 0 28 3;
+#X connect 26 0 28 2;
+#X connect 27 0 28 0;
+#X connect 28 0 2 0;
+#X connect 29 0 28 0;
+#X connect 30 0 28 0;
+#X connect 31 0 28 0;
diff --git a/help/pmcloud_3d-help.pd b/help/pmcloud_3d-help.pd
new file mode 100644
index 0000000..28131ab
--- /dev/null
+++ b/help/pmcloud_3d-help.pd
@@ -0,0 +1,72 @@
+#N canvas 23 56 665 645 10;
+#X text 106 339 outlet 1 : position of masses;
+#X obj 38 451 gemhead;
+#X obj 38 369 t b l;
+#X obj 38 546 translateXYZ;
+#X obj 96 499 - 0.5;
+#X obj 142 500 - 0.5;
+#X obj 249 490 gemwin;
+#X msg 249 438 create \, 1;
+#X msg 266 461 destroy;
+#X obj 54 395 loadbang;
+#X msg 54 418 0;
+#X obj 38 571 square 0.1;
+#X obj 89 203 gemhead;
+#X obj 89 227 b;
+#X obj 89 252 l;
+#X obj 174 57 gcanvas 100 100;
+#X obj 174 165 - 50;
+#X obj 267 163 - 50;
+#X obj 174 187 / 100;
+#X obj 95 519 * 2;
+#X obj 141 520 * 2;
+#X obj 267 185 / -100;
+#X floatatom 87 286 5 0 0 0 - - -;
+#X floatatom 187 285 5 0 0 0 - - -;
+#X floatatom 137 286 5 0 0 0 - - -;
+#X msg 25 13 reset;
+#X msg 42 36 forceX 0.1;
+#X msg 50 56 forceY -0.1;
+#X obj 38 307 pmcloud_3d 16 0.1 0.05;
+#X msg 58 80 forceZ -0.1;
+#X msg 60 111 force 0.2 0 0.1;
+#X obj 96 477 unpack f f f;
+#X obj 184 501 - 0.5;
+#X obj 183 521 * 2;
+#X obj 174 212 pack f f 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 31 0;
+#X connect 3 0 11 0;
+#X connect 4 0 19 0;
+#X connect 5 0 20 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 28 0;
+#X connect 15 0 16 0;
+#X connect 15 1 17 0;
+#X connect 16 0 18 0;
+#X connect 17 0 21 0;
+#X connect 18 0 34 0;
+#X connect 19 0 3 1;
+#X connect 20 0 3 2;
+#X connect 21 0 34 1;
+#X connect 22 0 28 1;
+#X connect 23 0 28 3;
+#X connect 24 0 28 2;
+#X connect 25 0 28 0;
+#X connect 26 0 28 0;
+#X connect 27 0 28 0;
+#X connect 28 0 2 0;
+#X connect 29 0 28 0;
+#X connect 30 0 28 0;
+#X connect 31 0 4 0;
+#X connect 31 1 5 0;
+#X connect 31 2 32 0;
+#X connect 32 0 33 0;
+#X connect 33 0 3 3;
+#X connect 34 0 14 1;
diff --git a/help/pmcube_3d-help.pd b/help/pmcube_3d-help.pd
new file mode 100644
index 0000000..06244d6
--- /dev/null
+++ b/help/pmcube_3d-help.pd
@@ -0,0 +1,66 @@
+#N canvas 331 29 611 832 10;
+#X floatatom 199 344 5 0 0 0 - - -;
+#X floatatom 119 343 5 0 0 0 - - -;
+#X obj 44 514 timeroll;
+#X obj 44 467 min 1;
+#X obj 44 487 max 0;
+#X obj 44 418 + 1;
+#X obj 44 442 / 2;
+#X obj 44 394 unpack f f f;
+#X obj 44 367 pmcube_3d 0.3 0.3;
+#X obj 162 45 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 6300 0;
+#X obj 369 28 gcanvas 100 100;
+#X obj 369 136 - 50;
+#X obj 462 134 - 50;
+#X obj 369 158 / 100;
+#X obj 462 156 / 100;
+#X obj 213 45 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 9500 0;
+#X obj 369 181 pack f f;
+#X obj 369 204 t l b;
+#X msg 399 277 0;
+#X msg 399 302 grab_on \$1;
+#X obj 44 290 metro 50;
+#X obj 44 266 loadbang;
+#X obj 399 251 delay 200;
+#X msg 433 278 0.3;
+#X msg 369 227 grab \$1 \$2 0;
+#X obj 258 47 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 9500 0;
+#X msg 162 197 force \$1 0 0;
+#X msg 213 219 force 0 \$1 0;
+#X msg 259 250 force 0 0 \$1;
+#X connect 0 0 8 2;
+#X connect 1 0 8 1;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 7 0 5 0;
+#X connect 7 1 5 0;
+#X connect 7 2 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 26 0;
+#X connect 10 0 11 0;
+#X connect 10 1 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 16 0;
+#X connect 14 0 16 1;
+#X connect 15 0 27 0;
+#X connect 16 0 17 0;
+#X connect 17 0 24 0;
+#X connect 17 1 23 0;
+#X connect 17 1 22 0;
+#X connect 18 0 19 0;
+#X connect 19 0 8 0;
+#X connect 20 0 8 0;
+#X connect 21 0 20 0;
+#X connect 22 0 18 0;
+#X connect 23 0 19 0;
+#X connect 24 0 8 0;
+#X connect 25 0 28 0;
+#X connect 26 0 8 0;
+#X connect 27 0 8 0;
+#X connect 28 0 8 0;
diff --git a/help/pmmulti_stable_2d-help.pd b/help/pmmulti_stable_2d-help.pd
new file mode 100644
index 0000000..65d67ad
--- /dev/null
+++ b/help/pmmulti_stable_2d-help.pd
@@ -0,0 +1,88 @@
+#N canvas 604 59 724 805 10;
+#X text 122 399 outlet 1 : position of masses;
+#X obj 54 511 gemhead;
+#X obj 54 429 t b l;
+#X obj 54 606 translateXYZ;
+#X obj 112 537 unpack f f f;
+#X obj 112 582 * 4;
+#X obj 151 583 * 4;
+#X obj 458 526 gemwin;
+#X msg 458 474 create \, 1;
+#X msg 475 497 destroy;
+#X obj 70 455 loadbang;
+#X msg 70 478 0;
+#X obj 54 632 square 0.1;
+#X obj 164 30 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X obj 371 13 gcanvas 100 100;
+#X obj 371 121 - 50;
+#X obj 464 119 - 50;
+#X obj 371 143 / 100;
+#X obj 464 141 / 100;
+#X obj 215 30 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 0;
+#X msg 371 212 grab \$1 \$2;
+#X obj 371 166 pack f f;
+#X obj 371 189 t l b;
+#X msg 401 262 0;
+#X msg 401 287 grab_on \$1;
+#X msg 164 182 force \$1 0;
+#X msg 215 204 force 0 \$1;
+#X obj 47 275 metro 50;
+#X obj 47 251 loadbang;
+#X obj 401 236 delay 200;
+#X msg 435 263 0.3;
+#X text 262 366 arguments : number of stable point \, rigidity \, damping
+;
+#X obj 96 204 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X msg 115 481 1;
+#X obj 32 299 gemhead;
+#X obj 34 323 b;
+#X obj 54 367 pmmulti_stable_2d 9 0.1 0.1;
+#X obj 195 589 cart2pol;
+#X floatatom 195 623 5 0 0 0 - - -;
+#X floatatom 236 623 5 0 0 0 - - -;
+#X text 202 643 r;
+#X text 247 645 phy;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 1 4 0;
+#X connect 3 0 12 0;
+#X connect 4 0 37 0;
+#X connect 4 0 5 0;
+#X connect 4 1 37 1;
+#X connect 4 1 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 3 2;
+#X connect 8 0 7 0;
+#X connect 9 0 7 0;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X connect 13 0 25 0;
+#X connect 14 0 15 0;
+#X connect 14 1 16 0;
+#X connect 15 0 17 0;
+#X connect 16 0 18 0;
+#X connect 17 0 21 0;
+#X connect 18 0 21 1;
+#X connect 19 0 26 0;
+#X connect 20 0 36 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 22 1 30 0;
+#X connect 22 1 29 0;
+#X connect 23 0 24 0;
+#X connect 24 0 36 0;
+#X connect 25 0 36 0;
+#X connect 26 0 36 0;
+#X connect 28 0 27 0;
+#X connect 29 0 23 0;
+#X connect 30 0 24 0;
+#X connect 32 0 27 0;
+#X connect 33 0 1 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 2 0;
+#X connect 37 0 38 0;
+#X connect 37 1 39 0;
diff --git a/help/pmopen_string_1d-help.pd b/help/pmopen_string_1d-help.pd
new file mode 100644
index 0000000..37af3f8
--- /dev/null
+++ b/help/pmopen_string_1d-help.pd
@@ -0,0 +1,107 @@
+#N canvas 209 108 665 618 10;
+#X obj 39 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 6093 1;
+#X obj 56 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 3535 1;
+#X obj 73 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 1392 1;
+#X obj 90 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 0 1;
+#X obj 107 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 0 1;
+#X obj 124 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 0 1;
+#X obj 141 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 502 1;
+#X obj 158 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 1464 1;
+#X obj 175 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 2322 1;
+#X obj 192 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 2911 1;
+#X obj 39 456 route 0 1 2 3 4 5 6 7 8 9 10;
+#X obj 209 487 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 3217 1;
+#X text 256 307 arguments : number of moving masses \, rigidity \,
+damping;
+#X text 210 19 simple Physical model of "string";
+#X text 164 40 usefull to create different correlated output with few
+input.;
+#X msg 102 232 3 1;
+#X text 133 234 mass 3 \, force = 1;
+#X obj 306 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 0 1;
+#X obj 323 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 10458 1;
+#X obj 340 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 12700 1;
+#X obj 357 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 12700 1;
+#X obj 374 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 12700 1;
+#X obj 391 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 12549 1;
+#X obj 408 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 8554 1;
+#X obj 425 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 5166 1;
+#X obj 442 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 3326 1;
+#X obj 459 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 2782 1;
+#X obj 306 437 route 0 1 2 3 4 5 6 7 8 9 10;
+#X obj 476 468 vsl 15 128 0 127 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 2670 1;
+#X obj 306 342 unpack f f;
+#X obj 306 412 pack f f;
+#X obj 371 367 * 100;
+#X obj 371 391 + 64;
+#X text 105 351 2 : forces apply to masses;
+#X text 57 334 outlet 1 : position of masses;
+#X obj 38 365 unpack f f;
+#X obj 102 390 + 64;
+#X obj 38 414 pack f f;
+#X text 123 113 inlet : 1 : metro;
+#X text 180 136 2 : forces apply to masses;
+#X text 180 158 3 : rigidity;
+#X text 180 178 4 : damping;
+#X obj 39 109 vsl 15 128 -30 30 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 5700 1;
+#X obj 39 307 pmopen_string_1d 10 0.1 0.01;
+#X obj 39 285 resample 22;
+#X connect 10 0 0 0;
+#X connect 10 1 1 0;
+#X connect 10 2 2 0;
+#X connect 10 3 3 0;
+#X connect 10 4 4 0;
+#X connect 10 5 5 0;
+#X connect 10 6 6 0;
+#X connect 10 7 7 0;
+#X connect 10 8 8 0;
+#X connect 10 9 9 0;
+#X connect 10 10 11 0;
+#X connect 15 0 43 1;
+#X connect 27 0 17 0;
+#X connect 27 1 18 0;
+#X connect 27 2 19 0;
+#X connect 27 3 20 0;
+#X connect 27 4 21 0;
+#X connect 27 5 22 0;
+#X connect 27 6 23 0;
+#X connect 27 7 24 0;
+#X connect 27 8 25 0;
+#X connect 27 9 26 0;
+#X connect 27 10 28 0;
+#X connect 29 0 30 0;
+#X connect 29 1 31 0;
+#X connect 30 0 27 0;
+#X connect 31 0 32 0;
+#X connect 32 0 30 1;
+#X connect 35 0 37 0;
+#X connect 35 1 36 0;
+#X connect 36 0 37 1;
+#X connect 37 0 10 0;
+#X connect 42 0 44 0;
+#X connect 43 0 35 0;
+#X connect 43 1 29 0;
+#X connect 44 0 43 0;
diff --git a/help/pmrepulsor_1d-help.pd b/help/pmrepulsor_1d-help.pd
new file mode 100644
index 0000000..5645db5
--- /dev/null
+++ b/help/pmrepulsor_1d-help.pd
@@ -0,0 +1,42 @@
+#N canvas 71 107 520 753 10;
+#X floatatom 196 374 5 0 0 0 - - -;
+#X floatatom 116 373 5 0 0 0 - - -;
+#X obj 41 397 pmrepulsor_1d 0.3 0.3;
+#X obj 41 523 timeroll 100;
+#X obj 41 475 min 1;
+#X obj 41 497 max 0;
+#X obj 41 451 + 0.5;
+#X obj 161 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 5900 0;
+#X msg 315 252 0;
+#X msg 315 277 grab_on \$1;
+#X obj 41 283 metro 50;
+#X obj 41 259 loadbang;
+#X obj 315 226 delay 200;
+#X msg 349 253 0.3;
+#X msg 161 190 force \$1;
+#X obj 285 43 vsl 15 128 -1 1 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 1100 1;
+#X obj 285 179 t f b;
+#X msg 285 202 grab \$1;
+#X obj 41 427 / 2;
+#X connect 0 0 2 2;
+#X connect 1 0 2 1;
+#X connect 2 0 18 0;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 2 0;
+#X connect 10 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 8 0;
+#X connect 13 0 9 0;
+#X connect 14 0 2 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 16 1 13 0;
+#X connect 16 1 12 0;
+#X connect 17 0 2 0;
+#X connect 18 0 6 0;
diff --git a/help/pmrepulsor_2d-help.pd b/help/pmrepulsor_2d-help.pd
new file mode 100644
index 0000000..46182ba
--- /dev/null
+++ b/help/pmrepulsor_2d-help.pd
@@ -0,0 +1,60 @@
+#N canvas 33 89 639 826 10;
+#X obj 44 460 unpack f f;
+#X floatatom 186 413 5 0 0 0 - - -;
+#X floatatom 115 412 5 0 0 0 - - -;
+#X obj 44 580 timeroll;
+#X obj 44 533 min 1;
+#X obj 44 553 max 0;
+#X obj 44 484 + 1;
+#X obj 44 508 / 2;
+#X obj 161 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 1200 0;
+#X obj 368 21 gcanvas 100 100;
+#X obj 368 129 - 50;
+#X obj 461 127 - 50;
+#X obj 368 151 / 100;
+#X obj 461 149 / 100;
+#X obj 212 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7900 0;
+#X msg 368 220 grab \$1 \$2;
+#X obj 368 174 pack f f;
+#X obj 368 197 t l b;
+#X msg 398 270 0;
+#X msg 398 295 grab_on \$1;
+#X msg 161 190 force \$1 0;
+#X msg 212 212 force 0 \$1;
+#X obj 44 283 metro 50;
+#X obj 44 259 loadbang;
+#X obj 398 244 delay 200;
+#X msg 432 271 0.3;
+#X obj 44 433 pmrepulsor_2d 0.3 0.3;
+#X connect 0 0 6 0;
+#X connect 0 1 6 0;
+#X connect 1 0 26 2;
+#X connect 2 0 26 1;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 0;
+#X connect 8 0 20 0;
+#X connect 9 0 10 0;
+#X connect 9 1 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 1;
+#X connect 14 0 21 0;
+#X connect 15 0 26 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 17 1 25 0;
+#X connect 17 1 24 0;
+#X connect 18 0 19 0;
+#X connect 19 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 22 0;
+#X connect 24 0 18 0;
+#X connect 25 0 19 0;
+#X connect 26 0 0 0;
diff --git a/help/pmrepulsor_3d-help.pd b/help/pmrepulsor_3d-help.pd
new file mode 100644
index 0000000..144d461
--- /dev/null
+++ b/help/pmrepulsor_3d-help.pd
@@ -0,0 +1,66 @@
+#N canvas 377 76 579 769 10;
+#X floatatom 157 380 5 0 0 0 - - -;
+#X floatatom 100 379 5 0 0 0 - - -;
+#X obj 43 550 timeroll;
+#X obj 43 503 min 1;
+#X obj 43 523 max 0;
+#X obj 43 454 + 1;
+#X obj 43 478 / 2;
+#X obj 43 430 unpack f f f;
+#X obj 160 54 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 4400 0;
+#X obj 367 37 gcanvas 100 100;
+#X obj 367 145 - 50;
+#X obj 460 143 - 50;
+#X obj 367 167 / 100;
+#X obj 460 165 / 100;
+#X obj 211 54 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 700 0;
+#X obj 367 190 pack f f;
+#X obj 367 213 t l b;
+#X msg 397 286 0;
+#X msg 397 311 grab_on \$1;
+#X obj 43 299 metro 50;
+#X obj 43 275 loadbang;
+#X obj 397 260 delay 200;
+#X msg 431 287 0.3;
+#X msg 367 236 grab \$1 \$2 0;
+#X obj 256 56 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 10100 0;
+#X msg 160 206 force \$1 0 0;
+#X msg 211 228 force 0 \$1 0;
+#X msg 257 259 force 0 0 \$1;
+#X obj 43 403 pmrepulsor_3d 0.3 0.3;
+#X connect 0 0 28 2;
+#X connect 1 0 28 1;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 7 0 5 0;
+#X connect 7 1 5 0;
+#X connect 7 2 5 0;
+#X connect 8 0 25 0;
+#X connect 9 0 10 0;
+#X connect 9 1 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 1;
+#X connect 14 0 26 0;
+#X connect 15 0 16 0;
+#X connect 16 0 23 0;
+#X connect 16 1 22 0;
+#X connect 16 1 21 0;
+#X connect 17 0 18 0;
+#X connect 18 0 28 0;
+#X connect 19 0 28 0;
+#X connect 20 0 19 0;
+#X connect 21 0 17 0;
+#X connect 22 0 18 0;
+#X connect 23 0 28 0;
+#X connect 24 0 27 0;
+#X connect 25 0 28 0;
+#X connect 26 0 28 0;
+#X connect 27 0 28 0;
+#X connect 28 0 7 0;
diff --git a/help/pmrigid_open_string_2d-help.pd b/help/pmrigid_open_string_2d-help.pd
new file mode 100644
index 0000000..984f3ec
--- /dev/null
+++ b/help/pmrigid_open_string_2d-help.pd
@@ -0,0 +1,58 @@
+#N canvas 556 69 665 645 10;
+#X obj 54 92 vsl 15 128 0 1 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 2800 1;
+#X obj 75 92 vsl 15 128 0 1 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 5200 1;
+#X text 289 306 arguments : number of moving masses \, rigidity \,
+damping;
+#X text 210 19 simple Physical model of "string";
+#X text 164 40 usefull to create different correlated output with few
+input.;
+#X text 111 113 inlet : 1 \, 2 : position of 1st mass and last mass
+;
+#X text 180 136 3 : forces apply to masses;
+#X text 180 158 4 : rigidity;
+#X text 180 178 5 : damping;
+#X text 171 279 mass 3 \, force = 1;
+#X text 106 339 outlet 1 : position of masses;
+#X msg 116 280 3 0.01;
+#X obj 38 451 gemhead;
+#X obj 38 369 t b l;
+#X obj 38 546 translateXYZ;
+#X obj 96 477 unpack f f f;
+#X obj 38 286 f;
+#X obj 135 500 - 0.5;
+#X obj 134 520 * 4;
+#X obj 175 500 - 0.5;
+#X obj 174 520 * 4;
+#X obj 249 490 gemwin;
+#X msg 249 438 create \, 1;
+#X msg 266 461 destroy;
+#X obj 54 395 loadbang;
+#X msg 54 418 0;
+#X obj 38 571 square 0.1;
+#X obj 38 236 gemhead;
+#X obj 38 260 b;
+#X obj 38 309 pmrigid_open_string_2d 9 0.1 0.01;
+#X obj 38 338 route 0 1;
+#X connect 0 0 16 1;
+#X connect 11 0 29 1;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 13 1 15 0;
+#X connect 14 0 26 0;
+#X connect 15 1 17 0;
+#X connect 15 2 19 0;
+#X connect 16 0 29 0;
+#X connect 17 0 18 0;
+#X connect 18 0 14 1;
+#X connect 19 0 20 0;
+#X connect 20 0 14 2;
+#X connect 22 0 21 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 25 0 12 0;
+#X connect 27 0 28 0;
+#X connect 28 0 16 0;
+#X connect 29 0 30 0;
+#X connect 30 2 13 0;
diff --git a/help/pmrigid_string_2d-help.pd b/help/pmrigid_string_2d-help.pd
new file mode 100644
index 0000000..1e774a8
--- /dev/null
+++ b/help/pmrigid_string_2d-help.pd
@@ -0,0 +1,57 @@
+#N canvas 657 101 665 645 10;
+#X obj 54 92 vsl 15 128 0 1 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 7400 1;
+#X obj 75 92 vsl 15 128 0 1 0 0 empty empty empty 0 -9 0 10 -262144
+-1 -1 2000 1;
+#X text 227 308 arguments : number of moving masses \, rigidity \,
+damping;
+#X text 210 19 simple Physical model of "string";
+#X text 164 40 usefull to create different correlated output with few
+input.;
+#X text 111 113 inlet : 1 \, 2 : position of 1st mass and last mass
+;
+#X text 180 136 3 : forces apply to masses;
+#X text 180 158 4 : rigidity;
+#X text 180 178 5 : damping;
+#X text 171 279 mass 3 \, force = 1;
+#X text 106 339 outlet 1 : position of masses;
+#X msg 116 280 3 0.01;
+#X obj 38 451 gemhead;
+#X obj 38 369 t b l;
+#X obj 38 546 translateXYZ;
+#X obj 96 477 unpack f f f;
+#X obj 38 286 f;
+#X obj 135 500 - 0.5;
+#X obj 134 520 * 4;
+#X obj 175 500 - 0.5;
+#X obj 174 520 * 4;
+#X obj 249 490 gemwin;
+#X msg 249 438 create \, 1;
+#X msg 266 461 destroy;
+#X obj 54 395 loadbang;
+#X msg 54 418 0;
+#X obj 38 571 square 0.1;
+#X obj 38 236 gemhead;
+#X obj 38 260 b;
+#X obj 38 307 pmrigid_string_2d 9 0.1 0.01;
+#X connect 0 0 16 1;
+#X connect 1 0 29 1;
+#X connect 11 0 29 2;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 13 1 15 0;
+#X connect 14 0 26 0;
+#X connect 15 1 17 0;
+#X connect 15 2 19 0;
+#X connect 16 0 29 0;
+#X connect 17 0 18 0;
+#X connect 18 0 14 1;
+#X connect 19 0 20 0;
+#X connect 20 0 14 2;
+#X connect 22 0 21 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 25 0 12 0;
+#X connect 27 0 28 0;
+#X connect 28 0 16 0;
+#X connect 29 0 13 0;
diff --git a/help/pmsquare_2d-help.pd b/help/pmsquare_2d-help.pd
new file mode 100644
index 0000000..d2b9e6a
--- /dev/null
+++ b/help/pmsquare_2d-help.pd
@@ -0,0 +1,60 @@
+#N canvas 127 86 677 796 10;
+#X obj 44 444 unpack f f;
+#X floatatom 199 394 5 0 0 0 - - -;
+#X floatatom 119 393 5 0 0 0 - - -;
+#X obj 44 564 timeroll;
+#X obj 44 517 min 1;
+#X obj 44 537 max 0;
+#X obj 44 468 + 1;
+#X obj 44 417 pmsquare_2d 0.3 0.3;
+#X obj 161 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 10700 0;
+#X obj 368 21 gcanvas 100 100;
+#X obj 368 129 - 50;
+#X obj 461 127 - 50;
+#X obj 368 151 / 100;
+#X obj 461 149 / 100;
+#X obj 212 38 vsl 15 128 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 2500 0;
+#X msg 368 220 grab \$1 \$2;
+#X obj 368 174 pack f f;
+#X obj 368 197 t l b;
+#X msg 398 270 0;
+#X msg 398 295 grab_on \$1;
+#X msg 161 190 force \$1 0;
+#X msg 212 212 force 0 \$1;
+#X obj 44 283 metro 50;
+#X obj 44 259 loadbang;
+#X obj 398 244 delay 200;
+#X msg 432 271 0.3;
+#X obj 44 493 / 2;
+#X connect 0 0 6 0;
+#X connect 0 1 6 0;
+#X connect 1 0 7 2;
+#X connect 2 0 7 1;
+#X connect 4 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 26 0;
+#X connect 7 0 0 0;
+#X connect 8 0 20 0;
+#X connect 9 0 10 0;
+#X connect 9 1 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 1;
+#X connect 14 0 21 0;
+#X connect 15 0 7 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
+#X connect 17 1 25 0;
+#X connect 17 1 24 0;
+#X connect 18 0 19 0;
+#X connect 19 0 7 0;
+#X connect 20 0 7 0;
+#X connect 21 0 7 0;
+#X connect 22 0 7 0;
+#X connect 23 0 22 0;
+#X connect 24 0 18 0;
+#X connect 25 0 19 0;
+#X connect 26 0 4 0;
diff --git a/pmattractor_2d.pd b/pmattractor_2d.pd
new file mode 100644
index 0000000..f08630d
--- /dev/null
+++ b/pmattractor_2d.pd
@@ -0,0 +1,52 @@
+#N canvas 736 156 871 573 10;
+#X obj 46 21 inlet;
+#X obj 174 278 loadbang;
+#X obj 46 495 outlet;
+#X obj 174 304 pack \$1 \$2;
+#X obj 526 16 inlet;
+#X msg 526 115 setK lnk \$1;
+#X obj 619 17 inlet;
+#X msg 619 115 setD lnk \$1;
+#X msg 194 110 bang \, get massesPos out \, get massesForces out;
+#X obj 46 467 route out;
+#X obj 155 496 outlet;
+#X obj 155 467 route out;
+#X obj 46 443 route massesPosId massesForcesId;
+#X obj 46 421 msd2D;
+#X msg 145 89 forceX out \$1 \, forceY out \$2;
+#X obj 254 273 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 174 330 reset \, mass border 0 1 -1 0 \, mass border 0 1 1 0
+\, mass border 0 1 0 -1 \, mass border 0 1 0 1 \, mass out 1 1 0 0
+\, link lnk border out \$1 \$2 \, mass grab 0 1 0 0 \, link lgrab out
+grab 0 0;
+#X obj 46 89 unpack f f;
+#X msg 46 113 posX grab \$1;
+#X msg 95 166 setK lgrab \$1;
+#X msg 111 135 posY grab \$1;
+#X obj 46 56 route grab grab_on force bang;
+#X connect 0 0 21 0;
+#X connect 1 0 3 0;
+#X connect 3 0 16 0;
+#X connect 4 0 5 0;
+#X connect 5 0 13 0;
+#X connect 6 0 7 0;
+#X connect 7 0 13 0;
+#X connect 8 0 13 0;
+#X connect 9 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 12 1 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 15 0 3 0;
+#X connect 16 0 13 0;
+#X connect 17 0 18 0;
+#X connect 17 1 20 0;
+#X connect 18 0 13 0;
+#X connect 19 0 13 0;
+#X connect 20 0 13 0;
+#X connect 21 0 17 0;
+#X connect 21 1 19 0;
+#X connect 21 2 14 0;
+#X connect 21 3 8 0;
diff --git a/pmattractor_3d.pd b/pmattractor_3d.pd
new file mode 100644
index 0000000..0f6cd4e
--- /dev/null
+++ b/pmattractor_3d.pd
@@ -0,0 +1,56 @@
+#N canvas 522 233 697 573 10;
+#X obj 31 34 inlet;
+#X obj 76 286 loadbang;
+#X obj 31 511 outlet;
+#X obj 76 312 pack \$1 \$2;
+#X obj 341 24 inlet;
+#X msg 341 71 setK lnk \$1;
+#X obj 434 25 inlet;
+#X msg 434 71 setD lnk \$1;
+#X msg 276 246 bang \, get massesPos out \, get massesForces out;
+#X obj 31 483 route out;
+#X obj 140 512 outlet;
+#X obj 140 484 route out;
+#X obj 31 459 route massesPosId massesForcesId;
+#X obj 156 281 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 209 217 forceX out \$1 \, forceY out \$2 \, forceZ out \$3;
+#X obj 31 437 msd3D;
+#X msg 31 112 posX grab \$1;
+#X msg 145 192 setK lgrab \$1;
+#X msg 70 136 posY grab \$1;
+#X obj 31 55 route grab grab_on force bang;
+#X obj 31 88 unpack f f f;
+#X msg 111 159 posZ grab \$1;
+#X msg 76 338 reset \, mass border 0 1 -1 0 0 \, mass border 0 1 1
+0 0 \, mass border 0 1 0 -1 0 \, mass border 0 1 0 1 0 \, mass border
+0 1 0 0 1 \, mass border 0 1 0 0 -1 \, mass out 1 1 0 0 0 \, link lnk
+border out \$1 \$2 \, mass grab 0 1 0 0 0 \, link lgrab out grab 0
+0;
+#X connect 0 0 19 0;
+#X connect 1 0 3 0;
+#X connect 3 0 22 0;
+#X connect 4 0 5 0;
+#X connect 5 0 15 0;
+#X connect 6 0 7 0;
+#X connect 7 0 15 0;
+#X connect 8 0 15 0;
+#X connect 9 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 12 1 11 0;
+#X connect 13 0 3 0;
+#X connect 14 0 15 0;
+#X connect 15 0 12 0;
+#X connect 16 0 15 0;
+#X connect 17 0 15 0;
+#X connect 18 0 15 0;
+#X connect 19 0 20 0;
+#X connect 19 1 17 0;
+#X connect 19 2 14 0;
+#X connect 19 3 8 0;
+#X connect 20 0 16 0;
+#X connect 20 1 18 0;
+#X connect 20 2 21 0;
+#X connect 21 0 15 0;
+#X connect 22 0 15 0;
diff --git a/pmcloud_1d.pd b/pmcloud_1d.pd
new file mode 100644
index 0000000..08854a2
--- /dev/null
+++ b/pmcloud_1d.pd
@@ -0,0 +1,107 @@
+#N canvas 374 197 743 397 10;
+#X obj 45 9 inlet;
+#X obj 42 350 outlet;
+#X obj 468 7 inlet;
+#X msg 468 54 setK lnk \$1;
+#X obj 561 8 inlet;
+#X obj 379 3 inlet;
+#N canvas 670 136 639 733 create_clouds 0;
+#X obj 70 30 loadbang;
+#X obj 175 649 t a;
+#X obj 173 677 outlet;
+#X obj 32 50 t b b b b b b;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 85 126 pd loop;
+#X obj 85 103 \$1;
+#X obj 145 229 random 1000;
+#X obj 145 253 / 1000;
+#X msg 126 419 link lnk cloud in \$1 0;
+#X msg 89 471 link lnk cloud cloud \$1 0;
+#X obj 126 391 \$2;
+#X obj 85 446 \$2;
+#X obj 48 421 \$3;
+#X obj 145 177 * 654543;
+#X msg 85 156 bang;
+#X msg 145 201 seed \$1;
+#X obj 145 145 \$1;
+#X obj 39 12 inlet;
+#X msg 145 312 mass cloud 1 1 \$1;
+#X msg 175 94 reset \, mass in 0 1 0 \, mass fixe 0 0 0;
+#X msg 48 504 link damp fixe cloud 0 \$1;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 3 1 11 0;
+#X connect 3 1 12 0;
+#X connect 3 2 10 0;
+#X connect 3 3 5 0;
+#X connect 3 4 19 0;
+#X connect 3 5 16 0;
+#X connect 4 0 14 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 18 0;
+#X connect 8 0 1 0;
+#X connect 9 0 1 0;
+#X connect 10 0 8 0;
+#X connect 11 0 9 0;
+#X connect 12 0 20 0;
+#X connect 13 0 15 0;
+#X connect 14 0 6 0;
+#X connect 15 0 6 0;
+#X connect 16 0 13 0;
+#X connect 17 0 3 0;
+#X connect 18 0 1 0;
+#X connect 19 0 1 0;
+#X connect 20 0 1 0;
+#X restore 46 169 pd create_clouds;
+#X obj 42 300 route massesPosId;
+#X obj 42 324 route cloud;
+#X obj 161 90 t b l;
+#X msg 192 138 posX in \$1;
+#X msg 561 54 setD damp \$1;
+#X msg 380 54 setL lnk \$1;
+#X msg 161 114 bang \, get massesPos cloud;
+#X obj 68 143 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 99 61 forceX cloud \$1;
+#X obj 42 278 msd;
+#X obj 46 30 route reset force;
+#X connect 0 0 17 0;
+#X connect 2 0 3 0;
+#X connect 3 0 16 0;
+#X connect 4 0 11 0;
+#X connect 5 0 12 0;
+#X connect 6 0 16 0;
+#X connect 7 0 8 0;
+#X connect 8 0 1 0;
+#X connect 9 0 13 0;
+#X connect 9 1 10 0;
+#X connect 10 0 16 0;
+#X connect 11 0 16 0;
+#X connect 12 0 16 0;
+#X connect 13 0 16 0;
+#X connect 14 0 6 0;
+#X connect 15 0 16 0;
+#X connect 16 0 7 0;
+#X connect 17 0 6 0;
+#X connect 17 1 15 0;
+#X connect 17 2 9 0;
diff --git a/pmcloud_2d.pd b/pmcloud_2d.pd
new file mode 100644
index 0000000..fa3e135
--- /dev/null
+++ b/pmcloud_2d.pd
@@ -0,0 +1,132 @@
+#N canvas 605 196 743 397 10;
+#X obj 45 9 inlet;
+#X obj 42 350 outlet;
+#X obj 643 48 inlet;
+#X msg 643 95 setK lnk \$1;
+#X obj 736 49 inlet;
+#X obj 554 44 inlet;
+#X obj 42 278 msd2D;
+#N canvas 880 117 639 733 create_clouds 0;
+#X obj 70 30 loadbang;
+#X obj 175 649 t a;
+#X obj 173 677 outlet;
+#X obj 32 50 t b b b b b b;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 85 126 pd loop;
+#X obj 85 103 \$1;
+#X obj 145 229 random 1000;
+#X obj 145 253 / 1000;
+#X msg 145 312 mass cloud 1 1 \$1 \$2;
+#X obj 274 230 random 1000;
+#X obj 274 254 / 1000;
+#X obj 145 283 pack f f;
+#X msg 126 419 link lnk cloud in \$1 0;
+#X msg 175 94 reset \, mass in 0 1 0 0 \, mass fixe 0 0 0 0;
+#X msg 48 504 nLink damp fixe cloud 0 \$1 0 1 \, nLink damp fixe cloud
+0 \$1 1 0;
+#X msg 89 471 link lnk cloud cloud \$1 0;
+#X obj 126 391 \$2;
+#X obj 85 446 \$2;
+#X obj 48 421 \$3;
+#X obj 274 179 * 243354;
+#X obj 145 177 * 654543;
+#X msg 85 156 bang;
+#X msg 145 201 seed \$1;
+#X msg 274 202 seed \$1;
+#X obj 145 145 \$1;
+#X obj 39 12 inlet;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 3 1 17 0;
+#X connect 3 1 18 0;
+#X connect 3 2 16 0;
+#X connect 3 3 5 0;
+#X connect 3 4 13 0;
+#X connect 3 5 24 0;
+#X connect 4 0 21 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 11 0;
+#X connect 8 0 1 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 1;
+#X connect 11 0 8 0;
+#X connect 12 0 1 0;
+#X connect 13 0 1 0;
+#X connect 14 0 1 0;
+#X connect 15 0 1 0;
+#X connect 16 0 12 0;
+#X connect 17 0 15 0;
+#X connect 18 0 14 0;
+#X connect 19 0 23 0;
+#X connect 20 0 22 0;
+#X connect 21 0 6 0;
+#X connect 21 0 9 0;
+#X connect 22 0 6 0;
+#X connect 23 0 9 0;
+#X connect 24 0 20 0;
+#X connect 24 0 19 0;
+#X connect 25 0 3 0;
+#X restore 46 169 pd create_clouds;
+#X obj 91 69 unpack f f;
+#X msg 346 141 posY in \$1;
+#X obj 42 300 route massesPosId;
+#X obj 42 324 route cloud;
+#X obj 251 51 t b l;
+#X obj 282 98 unpack f f;
+#X msg 282 121 posX in \$1;
+#X msg 736 95 setD damp \$1;
+#X msg 555 95 setL lnk \$1;
+#X msg 251 75 bang \, get massesPos cloud;
+#X obj 68 143 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 46 30 route reset force forceX forceY;
+#X msg 91 96 forceX cloud \$1;
+#X msg 155 119 forceY cloud \$1;
+#X connect 0 0 19 0;
+#X connect 2 0 3 0;
+#X connect 3 0 6 0;
+#X connect 4 0 15 0;
+#X connect 5 0 16 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 20 0;
+#X connect 8 1 21 0;
+#X connect 9 0 6 0;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X connect 12 0 17 0;
+#X connect 12 1 13 0;
+#X connect 13 0 14 0;
+#X connect 13 1 9 0;
+#X connect 14 0 6 0;
+#X connect 15 0 6 0;
+#X connect 16 0 6 0;
+#X connect 17 0 6 0;
+#X connect 18 0 7 0;
+#X connect 19 0 7 0;
+#X connect 19 1 8 0;
+#X connect 19 2 20 0;
+#X connect 19 3 21 0;
+#X connect 19 4 12 0;
+#X connect 20 0 6 0;
+#X connect 21 0 6 0;
diff --git a/pmcloud_3d.pd b/pmcloud_3d.pd
new file mode 100644
index 0000000..9ed05a4
--- /dev/null
+++ b/pmcloud_3d.pd
@@ -0,0 +1,146 @@
+#N canvas 605 196 743 397 10;
+#X obj 45 9 inlet;
+#X obj 42 350 outlet;
+#X obj 643 48 inlet;
+#X msg 643 95 setK lnk \$1;
+#X obj 736 49 inlet;
+#X obj 554 44 inlet;
+#N canvas 880 117 639 733 create_clouds 0;
+#X obj 70 30 loadbang;
+#X obj 175 649 t a;
+#X obj 173 677 outlet;
+#X obj 32 50 t b b b b b b;
+#X obj 85 103 \$1;
+#X obj 145 229 random 1000;
+#X obj 145 253 / 1000;
+#X obj 274 230 random 1000;
+#X obj 274 254 / 1000;
+#X msg 126 419 link lnk cloud in \$1 0;
+#X msg 89 471 link lnk cloud cloud \$1 0;
+#X obj 126 391 \$2;
+#X obj 85 446 \$2;
+#X obj 48 421 \$3;
+#X obj 274 179 * 243354;
+#X obj 145 177 * 654543;
+#X msg 85 156 bang;
+#X msg 145 201 seed \$1;
+#X msg 274 202 seed \$1;
+#X obj 145 145 \$1;
+#X obj 39 12 inlet;
+#X msg 175 95 reset \, mass in 0 1 0 0 0 \, mass fixe 0 0 0 0 0;
+#X obj 145 283 pack f f f;
+#X obj 367 230 random 1000;
+#X obj 367 254 / 1000;
+#X msg 367 202 seed \$1;
+#X obj 367 179 * 2.42455e+06;
+#X msg 145 312 mass cloud 1 1 \$1 \$2 \$3;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 85 126 pd loop;
+#X msg 48 504 nLink damp fixe cloud 0 \$1 0 0 1 \, nLink damp fixe
+cloud 0 \$1 0 1 0 \, nLink damp fixe cloud 0 \$1 1 0 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 3 1 12 0;
+#X connect 3 1 13 0;
+#X connect 3 2 11 0;
+#X connect 3 3 4 0;
+#X connect 3 4 21 0;
+#X connect 3 5 19 0;
+#X connect 4 0 28 0;
+#X connect 5 0 6 0;
+#X connect 6 0 22 0;
+#X connect 7 0 8 0;
+#X connect 8 0 22 1;
+#X connect 9 0 1 0;
+#X connect 10 0 1 0;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 13 0 29 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 16 0 5 0;
+#X connect 16 0 7 0;
+#X connect 16 0 23 0;
+#X connect 17 0 5 0;
+#X connect 18 0 7 0;
+#X connect 19 0 15 0;
+#X connect 19 0 14 0;
+#X connect 19 0 26 0;
+#X connect 20 0 3 0;
+#X connect 21 0 1 0;
+#X connect 22 0 27 0;
+#X connect 23 0 24 0;
+#X connect 24 0 22 2;
+#X connect 25 0 23 0;
+#X connect 26 0 25 0;
+#X connect 27 0 1 0;
+#X connect 28 0 16 0;
+#X connect 29 0 1 0;
+#X restore 46 169 pd create_clouds;
+#X msg 400 149 posY in \$1;
+#X obj 42 300 route massesPosId;
+#X obj 42 324 route cloud;
+#X obj 305 59 t b l;
+#X obj 336 106 unpack f f;
+#X msg 336 129 posX in \$1;
+#X msg 736 95 setD damp \$1;
+#X msg 555 95 setL lnk \$1;
+#X msg 305 83 bang \, get massesPos cloud;
+#X obj 68 143 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 91 96 forceX cloud \$1;
+#X msg 131 117 forceY cloud \$1;
+#X obj 46 30 route reset force forceX forceY forceZ;
+#X obj 91 69 unpack f f f;
+#X msg 173 139 forceZ cloud \$1;
+#X obj 42 278 msd3D;
+#X connect 0 0 19 0;
+#X connect 2 0 3 0;
+#X connect 3 0 22 0;
+#X connect 4 0 13 0;
+#X connect 5 0 14 0;
+#X connect 6 0 22 0;
+#X connect 7 0 22 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 10 0 15 0;
+#X connect 10 1 11 0;
+#X connect 11 0 12 0;
+#X connect 11 1 7 0;
+#X connect 12 0 22 0;
+#X connect 13 0 22 0;
+#X connect 14 0 22 0;
+#X connect 15 0 22 0;
+#X connect 16 0 6 0;
+#X connect 17 0 22 0;
+#X connect 18 0 22 0;
+#X connect 19 0 6 0;
+#X connect 19 1 20 0;
+#X connect 19 2 17 0;
+#X connect 19 3 18 0;
+#X connect 19 4 21 0;
+#X connect 19 5 10 0;
+#X connect 20 0 17 0;
+#X connect 20 1 18 0;
+#X connect 20 2 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 8 0;
diff --git a/pmcube_3d.pd b/pmcube_3d.pd
new file mode 100644
index 0000000..e2c551b
--- /dev/null
+++ b/pmcube_3d.pd
@@ -0,0 +1,56 @@
+#N canvas 146 213 871 573 10;
+#X obj 49 58 inlet;
+#X obj 79 291 loadbang;
+#X obj 39 524 outlet;
+#X obj 79 317 pack \$1 \$2;
+#X obj 436 59 inlet;
+#X msg 436 106 setK lnk \$1;
+#X obj 529 60 inlet;
+#X msg 529 106 setD lnk \$1;
+#X msg 267 296 bang \, get massesPos out \, get massesForces out;
+#X obj 39 496 route out;
+#X obj 148 525 outlet;
+#X obj 148 497 route out;
+#X obj 39 472 route massesPosId massesForcesId;
+#X obj 159 286 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 202 257 forceX out \$1 \, forceY out \$2 \, forceZ out \$3;
+#X obj 40 450 msd3D;
+#X msg 80 343 reset \, mass border 0 1 -1 -1 -1 \, mass border 0 1
+-1 -1 1 \, mass border 0 1 -1 1 -1 \, mass border 0 1 -1 1 1 \, mass
+border 0 1 1 -1 -1 \, mass border 0 1 1 -1 1 \, mass border 0 1 1 1
+-1 \, mass border 0 1 1 1 1 \, mass out 1 1 0 0 0 \, link lnk border
+out \$1 \$2 \, mass grab 0 1 0 0 0 \, link lgrab out grab 0 0;
+#X msg 56 151 posX grab \$1;
+#X msg 170 231 setK lgrab \$1;
+#X msg 95 175 posY grab \$1;
+#X obj 56 94 route grab grab_on force bang;
+#X obj 56 127 unpack f f f;
+#X msg 136 198 posZ grab \$1;
+#X connect 0 0 20 0;
+#X connect 1 0 3 0;
+#X connect 3 0 16 0;
+#X connect 4 0 5 0;
+#X connect 5 0 15 0;
+#X connect 6 0 7 0;
+#X connect 7 0 15 0;
+#X connect 8 0 15 0;
+#X connect 9 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 12 1 11 0;
+#X connect 13 0 3 0;
+#X connect 14 0 15 0;
+#X connect 15 0 12 0;
+#X connect 16 0 15 0;
+#X connect 17 0 15 0;
+#X connect 18 0 15 0;
+#X connect 19 0 15 0;
+#X connect 20 0 21 0;
+#X connect 20 1 18 0;
+#X connect 20 2 14 0;
+#X connect 20 3 8 0;
+#X connect 21 0 17 0;
+#X connect 21 1 19 0;
+#X connect 21 2 22 0;
+#X connect 22 0 15 0;
diff --git a/pmmulti_stable_2d.pd b/pmmulti_stable_2d.pd
new file mode 100644
index 0000000..742841f
--- /dev/null
+++ b/pmmulti_stable_2d.pd
@@ -0,0 +1,116 @@
+#N canvas 835 203 726 492 10;
+#X obj 42 34 inlet;
+#X obj 41 435 outlet;
+#X obj 510 34 inlet;
+#X msg 510 81 setK lnk \$1;
+#X obj 603 35 inlet;
+#X msg 603 81 setD lnk \$1;
+#X obj 41 363 msd2D;
+#N canvas 866 113 421 804 creation_multi_stable 0;
+#X obj 32 23 loadbang;
+#X obj 175 649 t a;
+#X obj 118 19 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 201 150 \$1;
+#X obj 145 198 /;
+#X obj 173 677 outlet;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 145 174 pd loop;
+#X obj 145 124 \$1;
+#X msg 145 361 mass fixe 0 1 \$1 \$2;
+#X obj 145 149 max 2;
+#X obj 201 173 max 2;
+#X obj 145 220 * 6.28;
+#X obj 145 241 t f f;
+#X obj 145 337 pack f f;
+#X obj 196 267 sin;
+#X obj 145 267 cos;
+#X obj 79 428 pack \$2 \$3;
+#X obj 145 290 * 0.5;
+#X obj 196 292 * 0.5;
+#X msg 79 450 link lnk fixe out \$1 \$2;
+#X obj 32 50 t b b b b b b b;
+#X msg 161 81 reset;
+#X msg 115 394 mass out 1 1 1 0;
+#X msg 63 481 setL lnk 1;
+#X msg 35 511 mass grab 0 1 1 0 \, link lgrab out grab 0 0;
+#X connect 0 0 20 0;
+#X connect 1 0 5 0;
+#X connect 2 0 20 0;
+#X connect 3 0 10 0;
+#X connect 4 0 11 0;
+#X connect 6 0 4 0;
+#X connect 7 0 9 0;
+#X connect 8 0 1 0;
+#X connect 9 0 6 0;
+#X connect 10 0 4 1;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 12 1 14 0;
+#X connect 13 0 8 0;
+#X connect 14 0 18 0;
+#X connect 15 0 17 0;
+#X connect 16 0 19 0;
+#X connect 17 0 13 0;
+#X connect 18 0 13 1;
+#X connect 19 0 1 0;
+#X connect 20 0 24 0;
+#X connect 20 1 23 0;
+#X connect 20 2 16 0;
+#X connect 20 3 22 0;
+#X connect 20 4 7 0;
+#X connect 20 5 3 0;
+#X connect 20 6 21 0;
+#X connect 21 0 1 0;
+#X connect 22 0 1 0;
+#X connect 23 0 1 0;
+#X connect 24 0 1 0;
+#X restore 195 310 pd creation_multi_stable;
+#X msg 140 90 forceX out \$1 \, forceY out \$2;
+#X obj 41 90 unpack f f;
+#X msg 41 114 posX grab \$1;
+#X msg 90 167 setK lgrab \$1;
+#X msg 106 136 posY grab \$1;
+#X obj 41 57 route grab grab_on force bang;
+#X obj 41 412 route out;
+#X obj 41 385 route massesPosId;
+#X msg 189 112 bang \, get massesPos out;
+#X connect 0 0 13 0;
+#X connect 2 0 3 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 15 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 10 0;
+#X connect 9 1 12 0;
+#X connect 10 0 6 0;
+#X connect 11 0 6 0;
+#X connect 12 0 6 0;
+#X connect 13 0 9 0;
+#X connect 13 1 11 0;
+#X connect 13 2 8 0;
+#X connect 13 3 16 0;
+#X connect 14 0 1 0;
+#X connect 15 0 14 0;
+#X connect 16 0 6 0;
diff --git a/pmopen_string_1d.pd b/pmopen_string_1d.pd
new file mode 100644
index 0000000..aad7eba
--- /dev/null
+++ b/pmopen_string_1d.pd
@@ -0,0 +1,94 @@
+#N canvas 267 388 662 400 10;
+#X obj 31 227 msd;
+#X obj 31 34 inlet;
+#X obj 31 301 outlet;
+#X obj 453 39 inlet;
+#X msg 453 86 setK lnk \$1;
+#X obj 546 40 inlet;
+#X msg 546 86 setD lnk \$1;
+#X obj 126 300 outlet;
+#N canvas 327 184 457 717 creation_corde 0;
+#X msg 143 117 0;
+#X obj 143 142 f;
+#X obj 143 193 + 1;
+#X obj 143 169 moses \$1;
+#X obj 165 220 t f f;
+#X obj 175 649 t a;
+#X obj 195 366 pack f f;
+#X obj 195 247 t f f;
+#X obj 241 248 \$1;
+#X msg 195 389 mass M-\$1 1 1 \$2;
+#X obj 225 300 /;
+#X msg 121 580 link lnk M-\$1 M-\$2 \$3 \$4;
+#X obj 121 552 pack f f \$2 \$3;
+#X obj 69 418 f;
+#X obj 69 445 moses \$1;
+#X obj 173 677 outlet;
+#X msg 31 578 setL lnk 0;
+#X obj 43 50 t b b b b b b;
+#X obj 43 23 inlet;
+#X msg 163 94 reset \, mass M-0 0 1 0;
+#X msg 69 392 0;
+#X obj 152 525 + 1;
+#X obj 69 495 + 1;
+#X obj 69 470 t f f f;
+#X obj 91 522 t f;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X connect 4 1 7 0;
+#X connect 5 0 15 0;
+#X connect 6 0 9 0;
+#X connect 7 0 6 0;
+#X connect 7 1 10 0;
+#X connect 8 0 10 1;
+#X connect 9 0 5 0;
+#X connect 10 0 6 1;
+#X connect 11 0 5 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 23 0;
+#X connect 16 0 5 0;
+#X connect 17 0 16 0;
+#X connect 17 1 20 0;
+#X connect 17 3 0 0;
+#X connect 17 4 19 0;
+#X connect 17 5 8 0;
+#X connect 18 0 17 0;
+#X connect 19 0 5 0;
+#X connect 20 0 13 0;
+#X connect 21 0 12 1;
+#X connect 22 0 24 0;
+#X connect 23 0 22 0;
+#X connect 23 1 12 0;
+#X connect 23 2 21 0;
+#X connect 24 0 13 0;
+#X restore 69 174 pd creation_corde;
+#X msg 317 84 forceX M-\$1 \$2;
+#X obj 31 249 route massesPos massesForces;
+#X obj 70 151 loadbang;
+#X obj 136 154 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 31 81 bang \, get massesPos \, get massesForces;
+#X obj 317 42 inlet;
+#X obj 31 57 t b f;
+#X msg 61 104 posX M-0 \$1;
+#X connect 0 0 10 0;
+#X connect 1 0 15 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 0 0;
+#X connect 10 0 2 0;
+#X connect 10 1 7 0;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 0 0;
+#X connect 14 0 9 0;
+#X connect 15 0 13 0;
+#X connect 15 1 16 0;
+#X connect 16 0 0 0;
diff --git a/pmrepulsor_1d.pd b/pmrepulsor_1d.pd
new file mode 100644
index 0000000..88b77ac
--- /dev/null
+++ b/pmrepulsor_1d.pd
@@ -0,0 +1,51 @@
+#N canvas 127 228 633 573 10;
+#X obj 31 34 inlet;
+#X obj 79 317 loadbang;
+#X obj 24 506 outlet;
+#X obj 79 343 pack \$1 \$2;
+#X obj 368 37 inlet;
+#X msg 368 84 setK lnk \$1;
+#X obj 461 38 inlet;
+#X msg 461 84 setD lnk \$1;
+#X obj 24 478 route out;
+#X obj 133 507 outlet;
+#X obj 133 479 route out;
+#X obj 24 454 route massesPosId massesForcesId;
+#X obj 159 312 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 24 432 msd;
+#X msg 79 369 reset \, mass border 0 1 0 \, mass out 1 1 0.5 \, link
+lnk border out \$1 \$2 \, mass grab 0 1 0 \, link lgrab out grab 0
+0;
+#X msg 213 129 bang \, get massesPos out \, get massesForces out;
+#X obj 29 88 unpack f f;
+#X msg 29 112 posX grab \$1;
+#X msg 78 165 setK lgrab \$1;
+#X msg 94 134 posY grab \$1;
+#X obj 29 55 route grab grab_on force bang;
+#X msg 132 89 forceX out \$1;
+#X connect 0 0 20 0;
+#X connect 1 0 3 0;
+#X connect 3 0 14 0;
+#X connect 4 0 5 0;
+#X connect 5 0 13 0;
+#X connect 6 0 7 0;
+#X connect 7 0 13 0;
+#X connect 8 0 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 8 0;
+#X connect 11 1 10 0;
+#X connect 12 0 3 0;
+#X connect 13 0 11 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 0;
+#X connect 16 0 17 0;
+#X connect 16 1 19 0;
+#X connect 17 0 13 0;
+#X connect 18 0 13 0;
+#X connect 19 0 13 0;
+#X connect 20 0 16 0;
+#X connect 20 1 18 0;
+#X connect 20 2 21 0;
+#X connect 20 3 15 0;
+#X connect 21 0 13 0;
diff --git a/pmrepulsor_2d.pd b/pmrepulsor_2d.pd
new file mode 100644
index 0000000..599d6fc
--- /dev/null
+++ b/pmrepulsor_2d.pd
@@ -0,0 +1,52 @@
+#N canvas 73 203 871 573 10;
+#X obj 31 34 inlet;
+#X obj 76 214 loadbang;
+#X obj 31 428 outlet;
+#X obj 76 240 pack \$1 \$2;
+#X obj 592 23 inlet;
+#X msg 592 70 setK lnk \$1;
+#X obj 685 24 inlet;
+#X msg 685 70 setD lnk \$1;
+#X msg 213 129 bang \, get massesPos out \, get massesForces out;
+#X obj 31 400 route out;
+#X obj 140 429 outlet;
+#X obj 140 401 route out;
+#X obj 31 376 route massesPosId massesForcesId;
+#X obj 31 354 msd2D;
+#X msg 132 89 forceX out \$1 \, forceY out \$2;
+#X obj 156 209 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 76 266 reset \, mass center 0 1 0 0 \, mass out 1 1 0.5 0 \,
+link lnk center out \$1 0 \, nLink damp center out 0 \$2 0 1 \, nLink
+damp center out 0 \$2 1 0 \, mass grab 0 1 0 0 \, link lgrab out grab
+0 0;
+#X obj 29 88 unpack f f;
+#X msg 29 112 posX grab \$1;
+#X msg 78 165 setK lgrab \$1;
+#X msg 94 134 posY grab \$1;
+#X obj 29 55 route grab grab_on force bang;
+#X connect 0 0 21 0;
+#X connect 1 0 3 0;
+#X connect 3 0 16 0;
+#X connect 4 0 5 0;
+#X connect 5 0 13 0;
+#X connect 6 0 7 0;
+#X connect 7 0 13 0;
+#X connect 8 0 13 0;
+#X connect 9 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 12 1 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 15 0 3 0;
+#X connect 16 0 13 0;
+#X connect 17 0 18 0;
+#X connect 17 1 20 0;
+#X connect 18 0 13 0;
+#X connect 19 0 13 0;
+#X connect 20 0 13 0;
+#X connect 21 0 17 0;
+#X connect 21 1 19 0;
+#X connect 21 2 14 0;
+#X connect 21 3 8 0;
diff --git a/pmrepulsor_3d.pd b/pmrepulsor_3d.pd
new file mode 100644
index 0000000..ca8ec36
--- /dev/null
+++ b/pmrepulsor_3d.pd
@@ -0,0 +1,55 @@
+#N canvas 146 213 871 573 10;
+#X obj 31 34 inlet;
+#X obj 59 326 loadbang;
+#X obj 32 535 outlet;
+#X obj 59 352 pack \$1 \$2;
+#X obj 368 37 inlet;
+#X msg 368 84 setK lnk \$1;
+#X obj 461 38 inlet;
+#X msg 461 84 setD lnk \$1;
+#X msg 206 239 bang \, get massesPos out \, get massesForces out;
+#X obj 32 507 route out;
+#X obj 141 536 outlet;
+#X obj 141 508 route out;
+#X obj 32 483 route massesPosId massesForcesId;
+#X obj 139 321 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 32 461 msd3D;
+#X msg 171 216 forceX out \$1 \, forceY out \$2 \, forceZ out \$3;
+#X msg 31 112 posX grab \$1;
+#X msg 145 192 setK lgrab \$1;
+#X msg 70 136 posY grab \$1;
+#X obj 31 55 route grab grab_on force bang;
+#X obj 31 88 unpack f f f;
+#X msg 111 159 posZ grab \$1;
+#X msg 59 378 reset \, mass center 0 1 0 0 0 \, mass out 1 1 0.5 0
+0 \, link lnk center out \$1 0 \, nLink damp center out 0 \$2 0 1 0
+\, nLink damp center out 0 \$2 1 0 0 \, nLink damp center out 0 \$2
+0 0 1 \, mass grab 0 1 0 0 0 \, link lgrab out grab 0 0;
+#X connect 0 0 19 0;
+#X connect 1 0 3 0;
+#X connect 3 0 22 0;
+#X connect 4 0 5 0;
+#X connect 5 0 14 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 14 0;
+#X connect 9 0 2 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X connect 12 1 11 0;
+#X connect 13 0 3 0;
+#X connect 14 0 12 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 14 0;
+#X connect 18 0 14 0;
+#X connect 19 0 20 0;
+#X connect 19 1 17 0;
+#X connect 19 2 15 0;
+#X connect 19 3 8 0;
+#X connect 20 0 16 0;
+#X connect 20 1 18 0;
+#X connect 20 2 21 0;
+#X connect 21 0 14 0;
+#X connect 22 0 14 0;
diff --git a/pmrigid_open_string_2d.pd b/pmrigid_open_string_2d.pd
new file mode 100644
index 0000000..37ec7e9
--- /dev/null
+++ b/pmrigid_open_string_2d.pd
@@ -0,0 +1,144 @@
+#N canvas 870 255 743 397 10;
+#X obj 42 34 inlet;
+#X obj 42 57 t b f;
+#X obj 42 350 outlet;
+#X obj 510 34 inlet;
+#X msg 510 81 setK lnk \$1;
+#X obj 603 35 inlet;
+#X msg 603 81 setD lnk \$1;
+#N canvas 746 115 421 804 creation_corde 0;
+#X obj 32 23 loadbang;
+#X msg 141 212 0;
+#X obj 141 237 f;
+#X obj 141 288 + 1;
+#X obj 141 264 moses \$1;
+#X obj 163 315 t f f;
+#X obj 175 649 t a;
+#X obj 239 366 + 1;
+#X obj 118 19 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 193 424 pack f f;
+#X obj 193 342 t f f;
+#X obj 239 343 \$1;
+#X obj 223 395 /;
+#X obj 205 168 + 1;
+#X obj 205 145 \$1;
+#X msg 121 580 link lnk M-\$1 M-\$2 \$3 \$4;
+#X obj 121 552 pack f f \$2 \$3;
+#X obj 173 677 outlet;
+#X msg 31 578 setL lnk 0;
+#X obj 32 50 t b b b b b b;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 70 417 pd loop;
+#X obj 71 361 \$1;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 71 477 pd loop;
+#X obj 71 451 t f f;
+#X obj 71 386 + 2;
+#X msg 175 94 reset \, mass M-0 0 1 0 0;
+#X msg 193 447 mass M-\$1 1 1 \$2 0;
+#X msg 205 192 mass M-\$1 0 1 -0.1 0;
+#X connect 0 0 19 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 2 0;
+#X connect 5 1 10 0;
+#X connect 6 0 17 0;
+#X connect 7 0 12 1;
+#X connect 8 0 19 0;
+#X connect 9 0 26 0;
+#X connect 10 0 9 0;
+#X connect 10 1 12 0;
+#X connect 11 0 7 0;
+#X connect 12 0 9 1;
+#X connect 13 0 27 0;
+#X connect 14 0 13 0;
+#X connect 15 0 6 0;
+#X connect 16 0 15 0;
+#X connect 19 0 18 0;
+#X connect 19 1 21 0;
+#X connect 19 2 1 0;
+#X connect 19 3 14 0;
+#X connect 19 4 25 0;
+#X connect 19 5 11 0;
+#X connect 20 0 23 0;
+#X connect 21 0 24 0;
+#X connect 22 0 16 0;
+#X connect 23 0 22 0;
+#X connect 23 1 16 1;
+#X connect 24 0 20 0;
+#X connect 25 0 6 0;
+#X connect 26 0 6 0;
+#X connect 27 0 6 0;
+#X restore 87 175 pd creation_corde;
+#X obj 395 31 inlet;
+#X obj 42 278 msd2D;
+#X msg 395 80 forceY M-\$1 \$2;
+#X msg 72 104 posY M-0 \$1;
+#X msg 169 130 posY M-\$2 \$1;
+#X obj 42 300 route massesPos;
+#X msg 42 81 bang \, get massesPos;
+#X obj 169 107 pack f f;
+#X obj 220 59 \$1;
+#X obj 220 81 + 1;
+#X obj 220 37 loadbang;
+#X connect 0 0 1 0;
+#X connect 1 0 14 0;
+#X connect 1 1 11 0;
+#X connect 1 1 15 0;
+#X connect 3 0 4 0;
+#X connect 4 0 9 0;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 12 0 9 0;
+#X connect 13 0 2 0;
+#X connect 14 0 9 0;
+#X connect 15 0 12 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 1;
+#X connect 18 0 16 0;
diff --git a/pmrigid_string_2d.pd b/pmrigid_string_2d.pd
new file mode 100644
index 0000000..52d36ea
--- /dev/null
+++ b/pmrigid_string_2d.pd
@@ -0,0 +1,145 @@
+#N canvas 605 196 743 397 10;
+#X obj 42 34 inlet;
+#X obj 42 57 t b f;
+#X obj 42 350 outlet;
+#X obj 269 31 inlet;
+#X obj 510 34 inlet;
+#X msg 510 81 setK lnk \$1;
+#X obj 603 35 inlet;
+#X msg 603 81 setD lnk \$1;
+#N canvas 746 115 421 804 creation_corde 0;
+#X obj 32 23 loadbang;
+#X msg 143 117 0;
+#X obj 143 142 f;
+#X obj 143 193 + 1;
+#X obj 143 169 moses \$1;
+#X obj 165 220 t f f;
+#X obj 175 649 t a;
+#X obj 241 271 + 1;
+#X obj 118 19 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 195 329 pack f f;
+#X obj 195 247 t f f;
+#X obj 241 248 \$1;
+#X obj 225 300 /;
+#X obj 119 291 + 1;
+#X obj 119 268 \$1;
+#X msg 121 580 link lnk M-\$1 M-\$2 \$3 \$4;
+#X obj 121 552 pack f f \$2 \$3;
+#X obj 173 677 outlet;
+#X msg 31 578 setL lnk 0;
+#X obj 32 50 t b b b b b b;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 70 417 pd loop;
+#X obj 71 361 \$1;
+#N canvas 0 0 259 330 loop 0;
+#X obj 74 149 f;
+#X obj 74 213 + 1;
+#X obj 74 171 moses \$1;
+#X obj 74 104 t b f;
+#X obj 104 281 outlet;
+#X obj 74 82 inlet;
+#X msg 74 126 0;
+#X obj 74 191 t f f;
+#X obj 96 240 t f;
+#X connect 0 0 2 0;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 6 0;
+#X connect 3 1 2 1;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 1 4 0;
+#X connect 8 0 0 0;
+#X restore 71 477 pd loop;
+#X obj 71 451 t f f;
+#X obj 71 386 + 2;
+#X msg 175 94 reset \, mass M-0 0 1 0 0;
+#X msg 195 352 mass M-\$1 1 1 \$2 0;
+#X msg 119 400 mass M-\$1 0 1 1 0;
+#X connect 0 0 19 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 2 0;
+#X connect 5 1 10 0;
+#X connect 6 0 17 0;
+#X connect 7 0 12 1;
+#X connect 8 0 19 0;
+#X connect 9 0 26 0;
+#X connect 10 0 9 0;
+#X connect 10 1 12 0;
+#X connect 11 0 7 0;
+#X connect 12 0 9 1;
+#X connect 13 0 27 0;
+#X connect 14 0 13 0;
+#X connect 15 0 6 0;
+#X connect 16 0 15 0;
+#X connect 19 0 18 0;
+#X connect 19 1 21 0;
+#X connect 19 2 14 0;
+#X connect 19 3 1 0;
+#X connect 19 4 25 0;
+#X connect 19 5 11 0;
+#X connect 20 0 23 0;
+#X connect 21 0 24 0;
+#X connect 22 0 16 0;
+#X connect 23 0 22 0;
+#X connect 23 1 16 1;
+#X connect 24 0 20 0;
+#X connect 25 0 6 0;
+#X connect 26 0 6 0;
+#X connect 27 0 6 0;
+#X restore 87 175 pd creation_corde;
+#X obj 269 96 pack f f;
+#X obj 320 30 loadbang;
+#X obj 320 72 + 1;
+#X obj 320 51 \$1;
+#X obj 395 31 inlet;
+#X obj 42 278 msd2D;
+#X msg 395 80 forceY M-\$1 \$2;
+#X msg 72 104 posY M-0 \$1;
+#X msg 268 124 posY M-\$2 \$1;
+#X obj 42 300 route massesPos;
+#X msg 42 81 bang \, get massesPos;
+#X connect 0 0 1 0;
+#X connect 1 0 19 0;
+#X connect 1 1 16 0;
+#X connect 3 0 9 0;
+#X connect 4 0 5 0;
+#X connect 5 0 14 0;
+#X connect 6 0 7 0;
+#X connect 7 0 14 0;
+#X connect 8 0 14 0;
+#X connect 9 0 17 0;
+#X connect 10 0 12 0;
+#X connect 11 0 9 1;
+#X connect 12 0 11 0;
+#X connect 13 0 15 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 14 0;
+#X connect 18 0 2 0;
+#X connect 19 0 14 0;
diff --git a/pmsquare_2d.pd b/pmsquare_2d.pd
new file mode 100644
index 0000000..0c6e1f4
--- /dev/null
+++ b/pmsquare_2d.pd
@@ -0,0 +1,52 @@
+#N canvas 222 210 871 573 10;
+#X obj 31 34 inlet;
+#X obj 82 304 loadbang;
+#X obj 48 508 outlet;
+#X obj 82 330 pack \$1 \$2;
+#X obj 368 37 inlet;
+#X msg 368 84 setK lnk \$1;
+#X obj 461 38 inlet;
+#X msg 461 84 setD lnk \$1;
+#X obj 48 480 route out;
+#X obj 157 509 outlet;
+#X obj 157 481 route out;
+#X obj 48 456 route massesPosId massesForcesId;
+#X obj 49 434 msd2D;
+#X obj 162 299 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 179 116 bang \, get massesPos out \, get massesForces out;
+#X msg 130 95 forceX out \$1 \, forceY out \$2;
+#X obj 31 95 unpack f f;
+#X msg 31 119 posX grab \$1;
+#X msg 80 172 setK lgrab \$1;
+#X msg 96 141 posY grab \$1;
+#X obj 31 62 route grab grab_on force bang;
+#X msg 82 356 reset \, mass corner 0 1 -1 -1 \, mass corner 0 1 1 -1
+\, mass corner 0 1 1 1 \, mass corner 0 1 -1 1 \, mass out 1 1 0 0
+\, link lnk corner out \$1 \$2 \, mass grab 0 1 0 0 \, link lgrab out
+grab 0 0;
+#X connect 0 0 20 0;
+#X connect 1 0 3 0;
+#X connect 3 0 21 0;
+#X connect 4 0 5 0;
+#X connect 5 0 12 0;
+#X connect 6 0 7 0;
+#X connect 7 0 12 0;
+#X connect 8 0 2 0;
+#X connect 10 0 9 0;
+#X connect 11 0 8 0;
+#X connect 11 1 10 0;
+#X connect 12 0 11 0;
+#X connect 13 0 3 0;
+#X connect 14 0 12 0;
+#X connect 15 0 12 0;
+#X connect 16 0 17 0;
+#X connect 16 1 19 0;
+#X connect 17 0 12 0;
+#X connect 18 0 12 0;
+#X connect 19 0 12 0;
+#X connect 20 0 16 0;
+#X connect 20 1 18 0;
+#X connect 20 2 15 0;
+#X connect 20 3 14 0;
+#X connect 21 0 12 0;