aboutsummaryrefslogtreecommitdiff
path: root/msd2D/editor/msd2d-editor.pd
diff options
context:
space:
mode:
authorFrank Barknecht <fbar@users.sourceforge.net>2005-04-29 19:28:36 +0000
committerFrank Barknecht <fbar@users.sourceforge.net>2005-04-29 19:28:36 +0000
commit4246735fbfbf7a9ef9cc25386381a215054ae8b4 (patch)
tree8155b0363ff3d74055b43168fa61eae906acae33 /msd2D/editor/msd2d-editor.pd
parent1d77ab8203fa300ba6c0e1ff4c846b4008602b8c (diff)
* Initial import of the msd2d-editor.
* Changes compared to previous version available on footils.org: * Link creation now done by selectind two or more masses, then the link-bang will connect each two masses with a link. svn path=/trunk/externals/nusmuk/; revision=2856
Diffstat (limited to 'msd2D/editor/msd2d-editor.pd')
-rw-r--r--msd2D/editor/msd2d-editor.pd634
1 files changed, 634 insertions, 0 deletions
diff --git a/msd2D/editor/msd2d-editor.pd b/msd2D/editor/msd2d-editor.pd
new file mode 100644
index 0000000..7e060e0
--- /dev/null
+++ b/msd2D/editor/msd2d-editor.pd
@@ -0,0 +1,634 @@
+#N struct liaison float x1 float y1 float x2 float y2 float mid1 float
+mid2 float lid;
+#N struct mass float x float y float mid float mob;
+#N canvas 0 192 837 493 10;
+#N canvas 601 27 617 552 data 1;
+#X scalar liaison 160.067 196.866 175.068 187.056 9 6 0 \;;
+#X scalar liaison 122.843 187.056 137.844 196.866 5 12 1 \;;
+#X scalar liaison 164.966 167.633 149 100 11 0 2 \;;
+#X scalar liaison 149 100 133.946 167.633 0 10 3 \;;
+#X scalar mass 149 100 0 900 \;;
+#X scalar liaison 173.155 235.499 184.692 300 4 2 4 \;;
+#X scalar liaison 184.692 300 122.843 187.056 2 5 5 \;;
+#X scalar liaison 113.219 300 124.756 235.499 1 3 6 \;;
+#X scalar liaison 113.219 300 175.068 187.056 1 6 7 \;;
+#X scalar liaison 215.173 220.483 122.843 187.056 8 5 8 \;;
+#X scalar liaison 175.068 187.056 215.173 220.483 6 8 9 \;;
+#X scalar liaison 82.7376 220.483 175.068 187.056 7 6 10 \;;
+#X scalar liaison 122.843 187.056 82.7376 220.483 5 7 11 \;;
+#X scalar liaison 175.068 187.056 122.843 187.056 6 5 12 \;;
+#X scalar liaison 124.756 235.499 173.155 235.499 3 4 13 \;;
+#X scalar liaison 122.843 187.056 124.756 235.499 5 3 14 \;;
+#X scalar liaison 173.155 235.499 122.843 187.056 4 5 15 \;;
+#X scalar liaison 175.068 187.056 173.155 235.499 6 4 16 \;;
+#X scalar liaison 124.756 235.499 175.068 187.056 3 6 17 \;;
+#X scalar liaison 133.946 167.633 164.966 167.633 10 11 18 \;;
+#X scalar liaison 133.946 167.633 137.844 196.866 10 12 19 \;;
+#X scalar liaison 137.844 196.866 160.067 196.866 12 9 20 \;;
+#X scalar liaison 164.966 167.633 137.844 196.866 11 12 21 \;;
+#X scalar liaison 160.067 196.866 164.966 167.633 9 11 22 \;;
+#X scalar liaison 133.946 167.633 160.067 196.866 10 9 23 \;;
+#X scalar mass 113.219 300 1 0 \;;
+#X scalar mass 184.692 300 2 0 \;;
+#X scalar mass 124.756 235.499 3 0 \;;
+#X scalar mass 173.155 235.499 4 0 \;;
+#X scalar mass 122.843 187.056 5 0 \;;
+#X scalar mass 175.068 187.056 6 0 \;;
+#X scalar mass 82.7376 220.483 7 0 \;;
+#X scalar mass 215.173 220.483 8 0 \;;
+#X scalar mass 160.067 196.866 9 0 \;;
+#X scalar mass 133.946 167.633 10 0 \;;
+#X scalar mass 164.966 167.633 11 0 \;;
+#X scalar mass 137.844 196.866 12 0 \;;
+#X restore 106 64 pd data;
+#X obj 274 105 keyup;
+#X obj 274 150 select 108;
+#X text 354 151 "L";
+#X obj 274 126 spigot;
+#X obj 311 82 tgl 20 0 empty empty add_links_with_L 0 -6 0 8 -24198
+-1 -1 0 1;
+#X obj 70 439 structures;
+#X msg 54 138 \; pd-data clear;
+#X obj 58 214 bng 24 250 50 0 empty \$0-generate generate 0 -6 0 8
+-24198 -1 -1;
+#X text 74 417 Data Struct Definitions;
+#N canvas 460 399 104 45 save 0;
+#X obj 2 3 cnv 15 100 40 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 4 17 bng 20 250 50 0 empty empty load 0 -6 0 8 -258699 -1 -1
+;
+#X obj 62 17 bng 20 250 50 0 empty empty save_as 0 -6 0 8 -24198 -1
+-1;
+#X obj 101 60 savepanel;
+#X obj 50 168 s pd-data;
+#X msg 101 115 write \$1;
+#X obj 20 91 openpanel;
+#X msg 20 115 read \$1;
+#X obj 20 138 t b a;
+#X obj 20 195 s \$0-generate;
+#X obj 33 17 bng 20 250 50 0 empty empty save 0 -6 0 8 -241291 -1 -1
+;
+#X obj 100 91 symbol;
+#X connect 1 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 6 0 11 1;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 1 4 0;
+#X connect 10 0 11 0;
+#X connect 11 0 5 0;
+#X coords 0 0 1 1 102 44 1;
+#X restore 55 88 pd save;
+#X text 31 61 Edit here:;
+#N canvas 0 0 781 748 generator 0;
+#N canvas 210 99 931 555 getter 0;
+#X obj 244 89 inlet;
+#X obj 244 141 outlet;
+#X text 91 57 First build masses \, then links!!;
+#X obj 148 281 outlet;
+#X obj 547 456 table \$0-mid;
+#X obj 531 482 table \$0-msdid;
+#N canvas 403 15 685 826 fix-mass-ids 0;
+#X obj 139 158 t b b b b b b b;
+#X msg 175 254 traverse pd-data \, next;
+#X msg 116 316 next;
+#X obj 175 284 pointer mass;
+#X obj 239 189 s \$0-reset-counter;
+#N canvas 331 520 708 349 counter 0;
+#X obj 156 125 f 0;
+#X msg 172 102 0;
+#X obj 172 74 r \$0-reset-counter;
+#X obj 188 125 + 1;
+#X obj 156 179 outlet;
+#X obj 156 50 inlet;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 0 1;
+#X connect 5 0 0 0;
+#X restore 192 384 pd counter;
+#X obj 192 420 tabread \$0-msdid;
+#X obj 192 482 set mass mid;
+#X text 272 286 At end: fix links!;
+#X obj 282 386 get mass mid;
+#X obj 175 333 t b b b b p p;
+#X obj 307 461 pack 0 0;
+#X obj 307 490 tabwrite \$0-mid2msdid;
+#X text 269 520 Store a mapping mid => msdid for fixing links later
+;
+#X obj 139 116 inlet;
+#X obj 254 307 outlet;
+#X connect 0 5 1 0;
+#X connect 0 6 4 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 0;
+#X connect 3 0 10 0;
+#X connect 3 1 2 0;
+#X connect 3 2 15 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 11 0;
+#X connect 9 0 11 1;
+#X connect 10 0 2 0;
+#X connect 10 1 5 0;
+#X connect 10 4 9 0;
+#X connect 10 5 7 1;
+#X connect 11 0 12 0;
+#X connect 14 0 0 0;
+#X restore 330 177 pd fix-mass-ids;
+#N canvas 403 15 685 826 fix-links 0;
+#X obj 139 158 t b b b b b b b;
+#X msg 175 254 traverse pd-data \, next;
+#X msg 116 316 next;
+#X obj 239 189 s \$0-reset-counter;
+#X obj 175 284 pointer liaison;
+#X text 293 285 At end: make links in msd*!;
+#X obj 192 420 tabread \$0-mid2msdid;
+#X obj 192 482 set liaison mid1 mid2;
+#X obj 343 418 tabread \$0-mid2msdid;
+#X obj 192 389 get liaison mid1 mid2;
+#X obj 175 333 t b b b b p p;
+#X obj 139 128 inlet;
+#X obj 275 312 outlet;
+#X connect 0 5 1 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 0;
+#X connect 4 0 10 0;
+#X connect 4 1 2 0;
+#X connect 4 2 12 0;
+#X connect 6 0 7 0;
+#X connect 8 0 7 1;
+#X connect 9 0 6 0;
+#X connect 9 1 8 0;
+#X connect 10 0 2 0;
+#X connect 10 4 9 0;
+#X connect 10 5 7 2;
+#X connect 11 0 0 0;
+#X restore 330 200 pd fix-links;
+#X obj 505 510 table \$0-mid2msdid;
+#N canvas 0 0 920 707 get-masses 0;
+#X obj 228 162 t b b b b b b b;
+#X msg 264 258 traverse pd-data \, next;
+#X msg 215 362 next;
+#X obj 264 288 pointer mass;
+#X obj 347 432 get mass x y mid mob;
+#X obj 482 459 select 0;
+#X msg 522 484 0;
+#X obj 347 514 pack 0 0 0 0;
+#X msg 481 483 1;
+#X obj 328 193 s \$0-reset-counter;
+#N canvas 331 520 708 349 counter 0;
+#X obj 156 125 f 0;
+#X msg 172 102 0;
+#X obj 172 74 r \$0-reset-counter;
+#X obj 188 125 + 1;
+#X obj 156 179 outlet;
+#X obj 156 50 inlet;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 0 1;
+#X connect 5 0 0 0;
+#X restore 364 362 pd counter;
+#X obj 264 337 t b b b b p p b;
+#X obj 364 385 s \$0-current-mass-idx;
+#X obj 437 537 s \$0-current-mid;
+#X msg 328 213 const 0;
+#X obj 328 234 s \$0-mid;
+#X obj 390 234 s \$0-msdid;
+#X text 575 330 At end: start 2nd pass;
+#X obj 228 113 inlet;
+#X obj 347 564 outlet;
+#X obj 656 566 r \$0-current-mass-idx;
+#X obj 605 539 r \$0-current-mid;
+#X obj 605 616 tabwrite \$0-mid;
+#X obj 605 592 pack 0 0;
+#X text 598 515 Write old mids to table;
+#X obj 605 640 print mass-as-in-struct;
+#X obj 612 368 outlet;
+#X connect 0 5 1 0;
+#X connect 0 6 9 0;
+#X connect 0 6 14 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#X connect 3 1 2 0;
+#X connect 3 2 26 0;
+#X connect 4 0 7 0;
+#X connect 4 1 7 1;
+#X connect 4 2 7 2;
+#X connect 4 2 13 0;
+#X connect 4 3 5 0;
+#X connect 5 0 8 0;
+#X connect 5 1 6 0;
+#X connect 6 0 7 3;
+#X connect 7 0 19 0;
+#X connect 8 0 7 3;
+#X connect 10 0 12 0;
+#X connect 11 0 2 0;
+#X connect 11 5 4 0;
+#X connect 11 6 10 0;
+#X connect 14 0 15 0;
+#X connect 14 0 16 0;
+#X connect 18 0 0 0;
+#X connect 20 0 23 1;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 23 0 25 0;
+#X restore 244 115 pd get-masses;
+#N canvas 0 0 768 708 make-links 0;
+#X obj 156 275 get liaison mid1 mid2;
+#X obj 174 318 pack 0 0;
+#X obj 156 229 pointer liaison;
+#X msg 156 203 next;
+#X msg 194 204 traverse pd-data \, bang;
+#X obj 126 251 t b p;
+#X obj 357 240 print endmasses;
+#X obj 194 177 r \$0-make-links;
+#X obj 174 351 outlet;
+#X obj 191 147 inlet;
+#X obj 388 303 outlet;
+#X text 440 302 Now set lid field of links.;
+#X connect 0 0 1 0;
+#X connect 0 1 1 1;
+#X connect 1 0 8 0;
+#X connect 2 0 5 0;
+#X connect 2 1 3 0;
+#X connect 2 2 10 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 3 0;
+#X connect 5 1 0 0;
+#X connect 7 0 4 0;
+#X connect 9 0 4 0;
+#X restore 148 257 pd make-links;
+#N canvas 0 0 590 588 get-ids-from-msd 0;
+#X obj 176 209 r \$0-msd-attr;
+#X msg 287 189 infosL;
+#X obj 176 277 route Mass;
+#N canvas 331 520 708 349 counter 0;
+#X obj 156 125 f 0;
+#X msg 172 102 0;
+#X obj 172 74 r \$0-reset-counter;
+#X obj 188 125 + 1;
+#X obj 156 179 outlet;
+#X obj 156 50 inlet;
+#X connect 0 0 3 0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 0 1;
+#X connect 5 0 0 0;
+#X restore 206 324 pd counter;
+#X obj 176 301 t a b;
+#X obj 287 233 s \$0-msd;
+#X obj 176 249 spigot;
+#X msg 347 187 1;
+#X msg 237 185 0;
+#X obj 176 350 pack 0 0;
+#X obj 176 374 tabwrite \$0-msdid;
+#X obj 176 412 print mass-as-in-msd;
+#X msg 176 325 \$1;
+#X obj 239 151 t b b b b;
+#X obj 239 120 inlet;
+#X obj 94 208 outlet;
+#X text 71 167 Then fix mass ids;
+#X connect 0 0 6 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 9 1;
+#X connect 4 0 12 0;
+#X connect 4 1 3 0;
+#X connect 6 0 2 0;
+#X connect 7 0 6 1;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 9 0 11 0;
+#X connect 12 0 9 0;
+#X connect 13 0 15 0;
+#X connect 13 1 8 0;
+#X connect 13 2 1 0;
+#X connect 13 3 7 0;
+#X connect 14 0 13 0;
+#X restore 330 151 pd get-ids-from-msd;
+#X text 569 416 TABLES USED:;
+#X text 639 457 ordered mass ids;
+#X text 639 481 ordered mass ids as in [msd*];
+#X text 639 510 mass id as index \, msdid as value;
+#X text 354 111 First get masses positions \, send to msd2D \, store
+in table mid;
+#X text 482 152 Then get numercial ids from msd2D \, store in table
+msdid;
+#X text 484 174 Change DS mass ids to match msdIds \, store mid2msdid
+mapping;
+#X text 480 200 Fix mid1 and mid2 in links to match what msd2D thinks
+is right.;
+#X text 257 258 Create messages to msd2D to create links;
+#N canvas 209 87 622 579 set-lid 0;
+#X obj 162 163 r \$0-msd-attr;
+#X obj 288 201 s \$0-msd;
+#X obj 162 203 spigot;
+#X msg 292 129 1;
+#X msg 236 127 0;
+#X obj 238 62 inlet;
+#X obj 238 93 t b b b b b;
+#X obj 310 307 pointer liaison;
+#X msg 310 281 traverse pd-data \, next;
+#X msg 288 163 infosL;
+#X obj 162 231 route Link;
+#X obj 175 352 set liaison lid mid1 mid2;
+#X msg 175 327 \$1 \$3 \$4;
+#X msg 272 307 next;
+#X obj 145 254 t b a;
+#X text 105 394 This will move around the links \, but it's not critical
+as long as we have the same number of graphical links as we have inside
+the msd2D object. And we'd better damn sure should have the same amount
+\, otherwise somethings went really \, really wrong and took a bad
+turn and crashed the car and left the toilet seat open.;
+#X text 104 481 Shouldn't happen.;
+#X connect 0 0 2 0;
+#X connect 2 0 10 0;
+#X connect 3 0 2 1;
+#X connect 4 0 2 1;
+#X connect 5 0 6 0;
+#X connect 6 1 4 0;
+#X connect 6 2 9 0;
+#X connect 6 3 3 0;
+#X connect 6 4 8 0;
+#X connect 7 0 11 3;
+#X connect 7 1 13 0;
+#X connect 8 0 7 0;
+#X connect 9 0 1 0;
+#X connect 10 0 14 0;
+#X connect 12 0 11 0;
+#X connect 13 0 7 0;
+#X connect 14 0 13 0;
+#X connect 14 1 12 0;
+#X restore 234 286 pd set-lid;
+#X text 314 284 Correct lids to match what msd2D tells us;
+#X connect 0 0 9 0;
+#X connect 6 0 7 0;
+#X connect 7 0 10 0;
+#X connect 9 0 1 0;
+#X connect 9 1 11 0;
+#X connect 10 0 3 0;
+#X connect 10 1 21 0;
+#X connect 11 0 6 0;
+#X restore 131 221 pd getter;
+#X obj 131 369 s \$0-msd;
+#X msg 175 154 reset;
+#X obj 175 200 s \$0-msd;
+#X msg 175 175 Xmin 0 \, Xmax 800 \, Ymin 0 \, Ymax 800;
+#X msg 239 300 mass fix 0 100 \$1 \$2;
+#X msg 189 275 mass id \$4 100 \$1 \$2;
+#X obj 112 132 t b b b b;
+#N canvas 376 279 682 601 make-setters 0;
+#X obj 236 443 s pd-setter;
+#X msg 206 213 traverse pd-data \, next;
+#X obj 168 109 t b b b b;
+#X obj 236 329 get mass x y mid;
+#X msg 236 396 obj \$1 \$2 mass-set \$3;
+#X obj 236 352 pack 0 0 0;
+#X msg 151 239 next;
+#X obj 145 327 s mypointer;
+#X obj 206 272 t p p;
+#X msg 226 135 clear;
+#X obj 226 160 s pd-setter;
+#X obj 168 68 inlet;
+#X obj 206 240 pointer mass liaison;
+#X obj 480 365 pack 0 0 0;
+#X obj 389 340 s mypointer;
+#X obj 450 285 t p p;
+#X obj 480 342 get liaison x1 y1 lid;
+#X msg 480 409 obj \$1 \$2 link-set \$3;
+#X obj 480 454 s pd-lsetter;
+#X obj 226 186 s pd-lsetter;
+#X connect 1 0 12 0;
+#X connect 2 2 1 0;
+#X connect 2 3 9 0;
+#X connect 3 0 5 0;
+#X connect 3 1 5 1;
+#X connect 3 2 5 2;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 12 0;
+#X connect 8 0 7 0;
+#X connect 8 1 3 0;
+#X connect 9 0 10 0;
+#X connect 9 0 19 0;
+#X connect 11 0 2 0;
+#X connect 12 0 6 0;
+#X connect 12 0 8 0;
+#X connect 12 1 6 0;
+#X connect 12 1 15 0;
+#X connect 12 2 6 0;
+#X connect 13 0 17 0;
+#X connect 15 0 14 0;
+#X connect 15 1 16 0;
+#X connect 16 0 13 0;
+#X connect 16 1 13 1;
+#X connect 16 2 13 2;
+#X connect 17 0 18 0;
+#X restore 112 401 pd make-setters;
+#X obj 201 354 r pointer2msd;
+#X obj 112 91 inlet;
+#X msg 131 326 link ml \$1 \$2 10 2.5 1.5;
+#X connect 0 0 11 0;
+#X connect 0 1 6 0;
+#X connect 2 0 3 0;
+#X connect 4 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 8 0;
+#X connect 7 1 0 0;
+#X connect 7 2 4 0;
+#X connect 7 3 2 0;
+#X connect 9 0 1 0;
+#X connect 10 0 7 0;
+#X connect 11 0 1 0;
+#X restore 58 245 pd generator;
+#N canvas 0 0 718 819 activate 0;
+#X obj 233 284 msd2D;
+#X obj 233 215 r \$0-msd;
+#X msg 317 213 infosL;
+#X obj 263 325 print msd-attr;
+#X msg 300 256 get linksPos;
+#X obj 233 449 gem_masses;
+#X obj 313 445 gem_links;
+#X msg 167 193 bang \, get massesPos \, get linksPos;
+#X obj 177 125 gemhead;
+#X obj 233 396 route massesPos linksPos;
+#X obj 139 498 gemwin;
+#X msg 139 447 create \, 1;
+#X msg 139 471 0 \, destroy;
+#X msg 315 233 forceX id 200;
+#X obj 249 354 s \$0-msd-out;
+#X obj 139 425 select 1 0;
+#X obj 139 397 tgl 24 0 empty empty GEM 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 279 301 s \$0-msd-attr;
+#X obj 233 510 s masspositions;
+#X obj 313 488 s linkspositions;
+#X obj 167 69 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 233 421 spigot;
+#X obj 313 421 spigot;
+#X text 238 532 sent to the data struct pointers;
+#X obj 167 149 t b b;
+#X obj 197 172 s pollpos;
+#X obj 167 44 inlet data_only;
+#X obj 81 316 inlet GEM;
+#X obj 341 40 inlet speed;
+#X obj 62 378 select 1;
+#X msg 62 403 0;
+#X obj 80 340 t f f;
+#X obj 54 90 select 1;
+#X msg 54 115 0;
+#X obj 72 52 t f f;
+#X msg 225 622 set \$1;
+#X msg 56 467 set \$1;
+#X obj 231 648 outlet;
+#X obj 57 493 outlet;
+#X obj 167 92 metro 20;
+#X connect 0 0 9 0;
+#X connect 0 0 14 0;
+#X connect 0 1 17 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 24 0;
+#X connect 9 0 18 0;
+#X connect 9 0 21 0;
+#X connect 9 1 19 0;
+#X connect 9 1 22 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 0;
+#X connect 13 0 0 0;
+#X connect 15 0 11 0;
+#X connect 15 1 12 0;
+#X connect 16 0 15 0;
+#X connect 16 0 21 1;
+#X connect 16 0 22 1;
+#X connect 16 0 36 0;
+#X connect 20 0 35 0;
+#X connect 20 0 39 0;
+#X connect 21 0 5 0;
+#X connect 22 0 6 0;
+#X connect 24 0 7 0;
+#X connect 24 1 25 0;
+#X connect 26 0 34 0;
+#X connect 27 0 31 0;
+#X connect 28 0 39 1;
+#X connect 29 0 30 0;
+#X connect 30 0 20 0;
+#X connect 31 0 16 0;
+#X connect 31 1 29 0;
+#X connect 32 0 33 0;
+#X connect 33 0 16 0;
+#X connect 34 0 20 0;
+#X connect 34 1 32 0;
+#X connect 35 0 37 0;
+#X connect 36 0 38 0;
+#X connect 39 0 24 0;
+#X restore 59 330 pd activate;
+#X obj 59 294 tgl 24 0 empty empty GEM 0 -6 0 8 -233017 -1 -1 0 1;
+#X obj 95 294 tgl 24 0 empty empty Graphical_Datastructures 0 -6 0
+8 -1 -262144 -1 0 1;
+#X text 426 173 "L" is only active \, if the green toggle is set to
+on. Otherwise use the yellow "link" bang.;
+#X text 261 222 Press "generate" to generate messages to msd2D and
+create the physical model inside.;
+#N canvas 0 0 751 433 ignore 0;
+#X obj 102 264 print ToMSD;
+#X obj 102 234 spigot;
+#X obj 139 181 tgl 15 0 empty empty debug 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 102 207 r \$0-msd;
+#X obj 281 239 spigot;
+#X obj 318 186 tgl 15 0 empty empty debug 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 281 267 print FromMSD;
+#X obj 281 212 r \$0-msd-out;
+#N canvas 0 0 578 686 setter 0;
+#X obj 137 196 mass-set 12;
+#X obj 164 167 mass-set 11;
+#X obj 133 167 mass-set 10;
+#X obj 160 196 mass-set 9;
+#X obj 215 220 mass-set 8;
+#X obj 82 220 mass-set 7;
+#X obj 175 187 mass-set 6;
+#X obj 122 187 mass-set 5;
+#X obj 173 235 mass-set 4;
+#X obj 124 235 mass-set 3;
+#X obj 184 300 mass-set 2;
+#X obj 113 300 mass-set 1;
+#X obj 149 100 mass-set 0;
+#X restore 305 122 pd setter;
+#N canvas 0 0 822 675 lsetter 0;
+#X obj 133 167 link-set 23;
+#X obj 160 196 link-set 22;
+#X obj 164 167 link-set 21;
+#X obj 137 196 link-set 20;
+#X obj 133 167 link-set 19;
+#X obj 133 167 link-set 18;
+#X obj 124 235 link-set 17;
+#X obj 175 187 link-set 16;
+#X obj 173 235 link-set 15;
+#X obj 122 187 link-set 14;
+#X obj 124 235 link-set 13;
+#X obj 175 187 link-set 12;
+#X obj 122 187 link-set 11;
+#X obj 82 220 link-set 10;
+#X obj 175 187 link-set 9;
+#X obj 215 220 link-set 8;
+#X obj 113 300 link-set 7;
+#X obj 113 300 link-set 6;
+#X obj 184 300 link-set 5;
+#X obj 173 235 link-set 4;
+#X obj 149 100 link-set 3;
+#X obj 164 167 link-set 2;
+#X obj 122 187 link-set 1;
+#X obj 160 196 link-set 0;
+#X restore 304 145 pd lsetter;
+#X text 288 98 Automatic scripting targets;
+#X text 65 66 You can ignore this stuff here \, unless something goes
+wrong.;
+#X connect 1 0 0 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 1;
+#X connect 7 0 4 0;
+#X restore 163 439 pd ignore this;
+#X floatatom 131 301 5 20 1000 1 frequency - -;
+#X text 258 280 Visualization is done using either a GEM OpenGL window
+\, or just animate the data structure alone. Better don't use both
+at the same time. In GDS-mode you can set the frequency of the internal
+metro \, to accelerate or slow down the simulation.;
+#X text 429 53 First create structure inside [pd data] using msd_append.
+Add mobile masses with black bang \, add fixed masses with the red
+bang.;
+#X obj 166 88 msd_append;
+#X text 259 361 In edit mode and while visualization is active \, you
+can move around the masses. The red masses will not receive any other
+forces from the model.;
+#X text 429 102 Links are created by selecting at least two masses
+in edit mode \, then press "L" to connect those with a link. If you
+select more than two masses \, then all possible links between those
+masses will get created. Use this to mass-connect masses. :);
+#X connect 1 0 4 0;
+#X connect 2 0 22 2;
+#X connect 4 0 2 0;
+#X connect 5 0 4 1;
+#X connect 8 0 12 0;
+#X connect 13 0 14 0;
+#X connect 13 1 15 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 1;
+#X connect 19 0 13 2;