#N canvas 32 40 419 640 10; #X obj 9 50 cnv 15 400 200 empty empty EDIT 20 12 1 14 -233017 -66577 0; #X obj 9 256 cnv 15 400 60 empty empty CREATE 20 12 1 14 -195568 -66577 0; #X obj 10 321 cnv 15 400 140 empty empty CONTROL 20 12 1 14 -233017 -66577 0; #N canvas 0 64 1222 870 data 0; #X restore 21 191 pd data; #X obj 21 219 structures; #X obj 221 276 bng 24 250 50 0 \$0-generate \$0-generate generate 0 -6 0 8 -24198 -1 -1; #N canvas 257 131 781 748 generator 0; #N canvas 311 93 877 551 getter 0; #X obj 244 89 inlet; #X obj 330 145 outlet; #X text 91 57 First build masses \, then links!!; #X obj 234 285 outlet; #N canvas 629 18 551 784 fix-mass-ids 0; #X obj 43 72 t b b b b b b b; #X msg 79 168 traverse pd-data \, next; #X obj 79 200 pointer mass; #X obj 143 103 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 96 298 pd counter; #X obj 96 396 set mass mid; #X text 176 200 At end: fix links!; #X obj 186 300 get mass mid; #X obj 79 247 t b b b b p p; #X obj 211 375 pack 0 0; #X obj 211 404 tabwrite \$0-mid2msdid; #X text 125 434 Store a mapping mid => msdid for fixing links later ; #X obj 43 24 inlet; #X obj 158 221 outlet; #X text 96 52 Avoid stack overflow lops; #X obj 85 23 r \$0-stack-delay; #X obj 16 228 ds-next; #X obj 43 51 del 0; #X connect 0 5 1 0; #X connect 0 6 3 0; #X connect 1 0 2 0; #X connect 2 0 8 0; #X connect 2 1 16 0; #X connect 2 2 13 0; #X connect 4 0 9 0; #X connect 4 0 5 0; #X connect 7 0 9 1; #X connect 8 0 16 0; #X connect 8 1 4 0; #X connect 8 4 7 0; #X connect 8 5 5 1; #X connect 9 0 10 0; #X connect 12 0 17 0; #X connect 15 0 17 1; #X connect 16 0 2 0; #X connect 17 0 0 0; #X restore 244 173 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 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 70 inlet; #X obj 275 312 outlet; #X text 192 106 Avoid stack overflow lops; #X obj 188 68 r \$0-stack-delay; #X obj 113 282 ds-next; #X obj 139 105 del 0; #X connect 0 5 1 0; #X connect 1 0 3 0; #X connect 3 0 9 0; #X connect 3 1 14 0; #X connect 3 2 11 0; #X connect 5 0 6 0; #X connect 7 0 6 1; #X connect 8 0 5 0; #X connect 8 1 7 0; #X connect 9 0 14 0; #X connect 9 4 8 0; #X connect 9 5 6 2; #X connect 10 0 15 0; #X connect 13 0 15 1; #X connect 14 0 3 0; #X connect 15 0 0 0; #X restore 244 196 pd fix-links; #N canvas 236 8 602 856 get-masses 0; #X obj 148 80 t b b b b b b b; #X msg 184 176 traverse pd-data \, next; #X obj 184 206 pointer mass; #X obj 325 385 select 0; #X msg 365 410 0; #X msg 324 409 1; #X obj 248 111 s \$0-reset-counter; #X msg 248 131 const 0; #X obj 248 152 s \$0-mid; #X obj 310 152 s \$0-msdid; #X text 44 397 At end: start 2nd pass; #X obj 148 31 inlet; #X obj 214 494 outlet; #X obj 81 435 outlet; #X obj 214 362 get mass x y mid mob M; #X obj 214 444 pack 0 0 0 0 0; #X obj 184 255 t b p; #X obj 214 402 scale-ds2msd; #X obj 120 251 ds-next; #X connect 0 5 1 0; #X connect 0 6 6 0; #X connect 0 6 7 0; #X connect 1 0 2 0; #X connect 2 0 16 0; #X connect 2 1 18 0; #X connect 2 2 13 0; #X connect 3 0 5 0; #X connect 3 1 4 0; #X connect 4 0 15 3; #X connect 5 0 15 3; #X connect 7 0 8 0; #X connect 7 0 9 0; #X connect 11 0 0 0; #X connect 14 0 17 0; #X connect 14 1 17 1; #X connect 14 2 15 2; #X connect 14 3 3 0; #X connect 14 4 15 4; #X connect 15 0 12 0; #X connect 16 0 18 0; #X connect 16 1 14 0; #X connect 17 0 15 0; #X connect 17 1 15 1; #X connect 18 0 2 0; #X restore 244 115 pd get-masses; #N canvas 0 0 768 708 make-links 0; #X obj 316 252 pointer liaison; #X msg 354 227 traverse pd-data \, bang; #X obj 286 274 t b p; #X obj 334 374 outlet; #X obj 354 170 inlet; #X obj 192 389 outlet; #X text 142 412 Now set lid field of links.; #X obj 316 298 get liaison mid1 mid2 K D D2; #X obj 334 341 pack 0 0 0 0 0; #X text 407 200 Avoid stack overflow lops; #X obj 399 167 r \$0-stack-delay; #X obj 286 226 ds-next; #X obj 354 201 del 0; #X connect 0 0 2 0; #X connect 0 1 11 0; #X connect 0 2 5 0; #X connect 1 0 0 0; #X connect 2 0 11 0; #X connect 2 1 7 0; #X connect 4 0 12 0; #X connect 7 0 8 0; #X connect 7 1 8 1; #X connect 7 2 8 2; #X connect 7 3 8 3; #X connect 7 4 8 4; #X connect 8 0 3 0; #X connect 10 0 12 1; #X connect 11 0 0 0; #X connect 12 0 1 0; #X restore 148 257 pd make-links; #X text 284 418 TABLES USED:; #X text 364 174 Change DS mass ids to match msdIds \, store mid2msdid mapping; #X text 366 196 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 22 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 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 msg 175 332 \$1 \$3 \$4 \$5 \$6 \$7; #X obj 175 357 set liaison lid mid1 mid2 K D D2; #X text 291 52 Avoid stack overflow lops; #X obj 287 21 r \$0-stack-delay; #X obj 219 307 ds-next; #X msg 260 281 next; #X obj 238 51 del 0; #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 20 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 15 6; #X connect 7 1 19 0; #X connect 8 0 7 0; #X connect 9 0 1 0; #X connect 10 0 11 0; #X connect 11 0 19 0; #X connect 11 1 14 0; #X connect 14 0 15 0; #X connect 17 0 20 1; #X connect 19 0 7 0; #X connect 20 0 6 0; #X restore 148 322 pd set-lid; #X text 238 322 Correct lids to match what msd2D tells us; #X obj 146 446 table \$0-mid2msdid 4000; #X text 354 111 First get masses positions \, send to msd2D; #X text 324 446 mass id as index \, msdid as value. Size 4000 taken from the #define in msd sources.; #X connect 0 0 6 0; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 4 0; #X connect 6 1 1 0; #X connect 7 0 12 0; #X connect 7 1 3 0; #X restore 131 221 pd getter; #X obj 131 369 s \$0-msd; #X msg 170 159 reset; #X obj 170 184 s \$0-msd; #X obj 112 132 t b b b b; #N canvas 338 182 781 563 make-setters 0; #X obj 262 451 s pd-setter; #X obj 136 109 t b b b b; #X obj 262 337 get mass x y mid; #X msg 262 404 obj \$1 \$2 mass-set \$3; #X obj 262 360 pack 0 0 0; #X obj 171 335 s mypointer; #X msg 194 135 clear; #X obj 194 160 s pd-setter; #X obj 136 68 inlet; #X obj 174 240 pointer mass liaison; #X obj 506 373 pack 0 0 0; #X obj 506 350 get liaison x1 y1 lid; #X msg 506 417 obj \$1 \$2 link-set \$3; #X obj 506 462 s pd-lsetter; #X obj 194 186 s pd-lsetter; #X obj 399 350 s myliapointer; #X obj 136 487 outlet; #X text 196 487 Post-Actions; #X obj 401 270 t b p p; #X obj 174 272 t b p p; #N canvas 0 0 450 300 next 0; #X obj 140 92 inlet; #X obj 140 215 outlet; #X msg 140 169 next; #X obj 140 134 del 0; #X connect 0 0 3 0; #X connect 2 0 1 0; #X connect 3 0 2 0; #X restore 37 267 pd next; #X msg 174 213 traverse pd-data; #X obj 136 443 del 1; #X connect 1 0 22 0; #X connect 1 1 20 0; #X connect 1 2 21 0; #X connect 1 3 6 0; #X connect 2 0 4 0; #X connect 2 1 4 1; #X connect 2 2 4 2; #X connect 3 0 0 0; #X connect 4 0 3 0; #X connect 6 0 7 0; #X connect 6 0 14 0; #X connect 8 0 1 0; #X connect 9 0 19 0; #X connect 9 1 18 0; #X connect 10 0 12 0; #X connect 11 0 10 0; #X connect 11 1 10 1; #X connect 11 2 10 2; #X connect 12 0 13 0; #X connect 18 0 20 0; #X connect 18 1 15 0; #X connect 18 2 11 0; #X connect 19 0 20 0; #X connect 19 1 5 0; #X connect 19 2 2 0; #X connect 20 0 9 0; #X connect 21 0 9 0; #X connect 22 0 16 0; #X restore 112 428 pd make-setters; #X obj 181 344 r pointer2msd; #X msg 131 324 link ml \$1 \$2 \$3 \$4 \$5; #X msg 189 275 mass id \$4 \$5 \$1 \$2; #N canvas 382 305 870 520 set-min-max 0; #X obj 98 80 r \$0-min-DS; #X obj 240 84 r \$0-max-DS; #X obj 468 80 r \$0-min-MSD; #X obj 605 108 r \$0-max-MSD; #X obj 98 131 s DS-xmin; #X obj 240 145 s DS-xmax; #X obj 98 111 f; #X obj 240 113 f; #X obj 468 109 f; #X obj 605 143 f; #X obj 340 13 inlet; #X obj 339 41 t b b; #X text 252 195 reverse!; #X text 95 177 reverse!; #X obj 241 176 s DS-ymin; #X obj 98 158 s DS-ymax; #X obj 468 135 s MSD-xmin; #X obj 605 174 s MSD-xmax; #X obj 469 157 s MSD-ymin; #X obj 605 198 s MSD-ymax; #X obj 339 207 t b b; #X obj 339 344 s \$0-msd; #X obj 339 280 pack 0 0; #X obj 339 239 f -3; #X obj 376 245 f 3; #X obj 745 82 f 0; #X obj 761 54 r MSD-TYPE; #X obj 746 109 s MSD-TYPE; #X msg 339 306 Xmin \$1 \, Xmax \$2 \, Ymin \$1 \, Ymax \$2 \, Zmin \$1 \, Zmax \$2; #X connect 0 0 6 0; #X connect 1 0 7 0; #X connect 2 0 8 0; #X connect 3 0 9 0; #X connect 6 0 4 0; #X connect 6 0 15 0; #X connect 7 0 5 0; #X connect 7 0 14 0; #X connect 8 0 16 0; #X connect 8 0 18 0; #X connect 8 0 23 1; #X connect 9 0 17 0; #X connect 9 0 19 0; #X connect 9 0 24 1; #X connect 10 0 11 0; #X connect 11 0 20 0; #X connect 11 1 6 0; #X connect 11 1 7 0; #X connect 11 1 8 0; #X connect 11 1 9 0; #X connect 11 1 25 0; #X connect 20 0 23 0; #X connect 20 1 24 0; #X connect 22 0 28 0; #X connect 23 0 22 0; #X connect 24 0 22 1; #X connect 25 0 27 0; #X connect 26 0 25 1; #X connect 28 0 21 0; #X restore 112 468 pd set-min-max; #X text 283 344 <== messages coming from the data structure setters ; #X obj 112 399 del 200; #X obj 172 399 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #N canvas 0 0 450 300 demux 0; #X obj 91 69 inlet; #X obj 255 73 inlet; #X obj 223 106 select 0; #X obj 73 213 spigot 1; #X obj 165 219 spigot 0; #X obj 141 188 unpack 1 0; #X obj 96 255 outlet; #X obj 173 257 outlet; #X msg 174 140 1 0; #X msg 216 140 0 1; #X connect 0 0 3 0; #X connect 0 0 4 0; #X connect 1 0 2 0; #X connect 2 0 8 0; #X connect 2 1 9 0; #X connect 3 0 6 0; #X connect 4 0 7 0; #X connect 5 0 3 1; #X connect 5 1 4 1; #X connect 8 0 5 0; #X connect 9 0 5 0; #X restore 189 246 pd demux; #X obj 240 219 r MSD-TYPE; #X msg 341 275 mass id \$4 \$5 \$1 \$2 0; #X obj 112 93 r \$0-generate; #X connect 0 0 7 0; #X connect 0 1 13 0; #X connect 2 0 3 0; #X connect 4 0 11 0; #X connect 4 1 0 0; #X connect 4 3 2 0; #X connect 5 0 9 0; #X connect 6 0 1 0; #X connect 7 0 1 0; #X connect 8 0 1 0; #X connect 11 0 5 0; #X connect 12 0 5 0; #X connect 13 0 8 0; #X connect 13 1 15 0; #X connect 14 0 13 1; #X connect 15 0 1 0; #X connect 16 0 4 0; #X restore 287 276 pd generator; #N canvas 0 0 718 819 activate 0; #X obj 233 238 r \$0-msd; #X obj 233 453 gem_masses; #X obj 313 445 gem_links; #X msg 167 216 bang \, get massesPos \, get linksPos; #X obj 177 125 gemhead; #X obj 233 396 route massesPos linksPos; #X obj 97 710 gemwin; #X msg 97 683 0 \, destroy; #X obj 249 354 s \$0-msd-out; #X obj 97 597 select 1 0; #X obj 97 569 tgl 24 0 empty empty GEM 0 -6 0 8 -262144 -1 -1 0 1; #X obj 275 330 s \$0-msd-attr; #X obj 211 541 s masspositions; #X obj 313 515 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 559 sent to the data struct pointers; #X obj 167 149 t b b; #X obj 197 193 s pollpos; #X obj 167 44 inlet data_only; #X obj 39 488 inlet GEM; #X obj 341 40 inlet speed; #X obj 20 550 select 1; #X msg 20 575 0; #X obj 38 512 t f f; #X obj 54 90 select 1; #X msg 54 115 0; #X obj 72 52 t f f; #X msg 135 283 set \$1; #X msg 14 639 set \$1; #X obj 141 309 outlet; #X obj 15 665 outlet; #X obj 167 92 metro 20; #X obj 413 395 r \$0-gem-masses-on; #X obj 413 417 r \$0-gem-links-on; #X obj 197 174 spigot 1; #X obj 248 150 r \$0-poll-ds; #X obj 346 469 r \$0-set-ds; #X obj 233 516 spigot 1; #X obj 313 496 spigot 1; #X obj 297 238 r \$0-save-msd; #X obj 257 286 s \$0-msd2save; #X obj 255 261 spigot 0; #N canvas 0 0 788 568 msd 0; #N canvas 0 0 450 300 demux 0; #X obj 91 69 inlet; #X obj 255 73 inlet; #X obj 223 106 select 0; #X obj 73 213 spigot 1; #X obj 165 219 spigot 0; #X obj 141 188 unpack 1 0; #X obj 96 255 outlet; #X obj 173 257 outlet; #X msg 174 140 1 0; #X msg 216 140 0 1; #X connect 0 0 3 0; #X connect 0 0 4 0; #X connect 1 0 2 0; #X connect 2 0 8 0; #X connect 2 1 9 0; #X connect 3 0 6 0; #X connect 4 0 7 0; #X connect 5 0 3 1; #X connect 5 1 4 1; #X connect 8 0 5 0; #X connect 9 0 5 0; #X restore 195 170 pd demux; #X obj 262 133 r MSD-TYPE; #N canvas 0 0 450 300 demux 0; #X obj 91 69 inlet; #X obj 255 73 inlet; #X obj 223 106 select 0; #X obj 73 213 spigot 1; #X obj 165 219 spigot 0; #X obj 141 188 unpack 1 0; #X obj 96 255 outlet; #X obj 173 257 outlet; #X msg 174 140 1 0; #X msg 216 140 0 1; #X connect 0 0 3 0; #X connect 0 0 4 0; #X connect 1 0 2 0; #X connect 2 0 8 0; #X connect 2 1 9 0; #X connect 3 0 6 0; #X connect 4 0 7 0; #X connect 5 0 3 1; #X connect 5 1 4 1; #X connect 8 0 5 0; #X connect 9 0 5 0; #X restore 198 305 pd demux; #X obj 261 282 r MSD-TYPE; #X obj 195 136 inlet; #X obj 198 366 outlet; #N canvas 0 0 450 300 demux 0; #X obj 91 69 inlet; #X obj 255 73 inlet; #X obj 223 106 select 0; #X obj 73 213 spigot 1; #X obj 165 219 spigot 0; #X obj 141 188 unpack 1 0; #X obj 96 255 outlet; #X obj 173 257 outlet; #X msg 174 140 1 0; #X msg 216 140 0 1; #X connect 0 0 3 0; #X connect 0 0 4 0; #X connect 1 0 2 0; #X connect 2 0 8 0; #X connect 2 1 9 0; #X connect 3 0 6 0; #X connect 4 0 7 0; #X connect 5 0 3 1; #X connect 5 1 4 1; #X connect 8 0 5 0; #X connect 9 0 5 0; #X restore 377 303 pd demux; #X obj 442 280 r MSD-TYPE; #X obj 377 371 outlet; #X obj 200 233 msd2D; #X obj 350 233 msd3D; #X connect 0 0 9 0; #X connect 0 1 10 0; #X connect 1 0 0 1; #X connect 2 0 5 0; #X connect 2 1 5 0; #X connect 3 0 2 1; #X connect 4 0 0 0; #X connect 6 0 8 0; #X connect 6 1 8 0; #X connect 7 0 6 1; #X connect 9 0 2 0; #X connect 9 1 6 0; #X connect 10 0 2 0; #X connect 10 1 6 0; #X restore 233 308 pd msd; #X obj 357 676 gemhead; #X obj 357 699 world_light; #X obj 147 617 r \$0-fullscreen; #X obj 97 634 f 0; #X msg 97 659 reset \, lighting 1 \, fullscreen \$1 \, create \, 1 ; #X connect 0 0 43 0; #X connect 0 0 44 0; #X connect 3 0 44 0; #X connect 4 0 18 0; #X connect 5 0 15 0; #X connect 5 0 39 0; #X connect 5 1 16 0; #X connect 5 1 40 0; #X connect 7 0 6 0; #X connect 9 0 48 0; #X connect 9 1 7 0; #X connect 10 0 9 0; #X connect 10 0 15 1; #X connect 10 0 16 1; #X connect 10 0 30 0; #X connect 14 0 29 0; #X connect 14 0 33 0; #X connect 15 0 1 0; #X connect 16 0 2 0; #X connect 18 0 3 0; #X connect 18 1 36 0; #X connect 20 0 28 0; #X connect 21 0 25 0; #X connect 22 0 33 1; #X connect 23 0 24 0; #X connect 24 0 14 0; #X connect 25 0 10 0; #X connect 25 1 23 0; #X connect 26 0 27 0; #X connect 27 0 10 0; #X connect 28 0 14 0; #X connect 28 1 26 0; #X connect 29 0 31 0; #X connect 30 0 32 0; #X connect 33 0 18 0; #X connect 34 0 1 1; #X connect 35 0 2 1; #X connect 36 0 19 0; #X connect 37 0 36 1; #X connect 38 0 40 1; #X connect 38 0 39 1; #X connect 39 0 12 0; #X connect 40 0 13 0; #X connect 41 0 43 1; #X connect 43 0 42 0; #X connect 44 0 8 0; #X connect 44 0 5 0; #X connect 44 1 11 0; #X connect 45 0 46 0; #X connect 47 0 48 1; #X connect 48 0 49 0; #X connect 49 0 6 0; #X restore 31 397 pd activate; #X obj 31 362 tgl 24 0 empty empty GEM 0 -6 0 8 -195568 -1 -1 0 1; #X obj 67 362 tgl 24 0 empty empty Datastructures 0 -6 0 8 -1 -262144 -1 0 1; #X floatatom 103 377 5 10 1000 2 frequency - -; #N canvas 405 181 584 687 forces 0; #X obj 295 415 s \$0-msd; #X obj 394 355 hsl 128 24 -5 5 0 1 empty empty empty -2 -6 0 8 -262144 -1 -1 6350 1; #X obj 295 230 vsl 24 128 -5 5 0 1 empty empty empty 0 -8 0 8 -262144 -1 -1 4350 1; #X msg 295 388 forceY id \$1; #X msg 391 388 forceX id \$1; #X obj 295 174 tgl 24 0 empty empty constant? 0 -6 0 8 -262144 -1 -1 0 1; #X obj 391 295 tgl 24 0 empty empty constant? 0 -6 0 8 -262144 -1 -1 0 1; #X obj 295 205 metro 10; #X obj 391 326 metro 10; #X msg 455 325 0; #X msg 263 204 0; #X text 230 127 Add some forces to the system.; #X msg 63 158 forceX \$2 \$1; #X msg 63 272 forceY \$2 \$1; #X obj 63 137 pack 0 0; #X floatatom 114 114 5 0 0 2 Mass_ID - -; #X obj 63 249 pack 0 0; #X floatatom 63 115 5 0 0 0 forceX - -; #X floatatom 63 204 5 0 0 0 forceY - -; #X obj 63 299 s \$0-msd; #X obj 63 181 s \$0-msd; #X obj 63 224 * -1; #X obj 63 461 pack 0 0; #X floatatom 63 437 5 0 0 0 posY - -; #X obj 63 511 s \$0-msd; #X msg 63 484 posY \$2 \$1; #X obj 63 358 pack 0 0; #X floatatom 63 334 5 0 0 0 posX - -; #X obj 63 408 s \$0-msd; #X msg 63 381 posX \$2 \$1; #X text 31 74 Modify one mass:; #X obj 63 560 pack 0 0; #X floatatom 63 536 5 0 0 0 posZ - -; #X obj 63 610 s \$0-msd; #X msg 63 583 posZ \$2 \$1; #X connect 1 0 4 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 7 0 2 0; #X connect 8 0 1 0; #X connect 9 0 1 0; #X connect 10 0 2 0; #X connect 12 0 20 0; #X connect 13 0 19 0; #X connect 14 0 12 0; #X connect 15 0 14 1; #X connect 15 0 16 1; #X connect 15 0 22 1; #X connect 15 0 26 1; #X connect 15 0 31 1; #X connect 16 0 13 0; #X connect 17 0 14 0; #X connect 18 0 21 0; #X connect 21 0 16 0; #X connect 22 0 25 0; #X connect 23 0 22 0; #X connect 25 0 24 0; #X connect 26 0 29 0; #X connect 27 0 26 0; #X connect 29 0 28 0; #X connect 31 0 34 0; #X connect 32 0 31 0; #X connect 34 0 33 0; #X restore 176 429 pd forces; #N canvas 113 581 450 300 props 0; #X obj 121 232 s \$0-msd; #X msg 94 203 setK ml \$1; #X msg 121 179 setD ml \$1; #X msg 145 150 setD2 ml \$1; #X text 244 59 Edit properties of Links.; #X obj 77 36 inlet; #X obj 123 36 inlet; #X obj 169 36 inlet; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 5 0 1 0; #X connect 6 0 2 0; #X connect 7 0 3 0; #X restore 294 431 pd props; #X obj 115 57 morelinks; #X obj 261 231 s pd-data; #X msg 297 203 clear; #X msg 261 203 sort; #N canvas 702 626 136 139 minmax 0; #X obj 2 15 cnv 15 130 120 empty empty Min/Max 10 10 0 10 -195568 -1 0; #X obj 6 37 nbx 5 14 -1e+37 1e+37 0 0 \$0-min-DS \$0-min-DS Min-DS 60 8 0 10 -225271 -1 -1 0 256; #X obj 6 57 nbx 5 14 -1e+37 1e+37 0 0 \$0-max-DS \$0-max-DS Max-DS 60 8 0 10 -225271 -1 -1 1000 256; #X obj 6 85 nbx 5 14 -1e+37 1e+37 0 0 \$0-min-MSD \$0-min-MSD Min-MSD 60 8 0 10 -262131 -1 -1 -3 256; #X obj 6 105 nbx 5 14 -1e+37 1e+37 0 0 \$0-max-MSD \$0-max-MSD Max-MSD 60 8 0 10 -262131 -1 -1 3 256; #N canvas 0 0 450 300 l 0; #X msg 35 78 0; #X msg 128 75 1000; #X obj 35 41 loadbang; #X obj 36 136 loadbang; #X msg 129 170 3; #X msg 36 173 -3; #X obj 35 100 s \$0-min-DS; #X obj 128 101 s \$0-max-DS; #X obj 36 195 s \$0-min-MSD; #X obj 129 196 s \$0-max-MSD; #X connect 0 0 6 0; #X connect 1 0 7 0; #X connect 2 0 0 0; #X connect 2 0 1 0; #X connect 3 0 5 0; #X connect 3 0 4 0; #X connect 4 0 9 0; #X connect 5 0 8 0; #X restore 82 19 pd l; #X coords 0 0 1 1 132 135 1; #X restore 261 57 pd minmax; #X obj 178 276 tgl 24 0 MSD-TYPE \$0-MSD-TYPE 2-D 0 -6 0 8 -233017 -1 -1 0 1; #X obj 21 80 msd_append; #X obj 10 547 cnv 15 400 80 empty empty DOC 20 12 1 14 -233017 -66577 0; #X obj 182 362 tgl 15 0 \$0-gem-masses-on empty gem_m 0 -6 0 8 -225280 -1 -1 1 1; #X obj 218 362 tgl 15 0 \$0-gem-links-on empty gem_l 0 -6 0 8 -225271 -1 -1 0 1; #X obj 182 397 tgl 15 0 \$0-poll-ds \$0-poll-ds poll-ds -10 -6 0 8 -225280 -1 -1 0 1; #X obj 218 397 tgl 15 0 \$0-set-ds \$0-set-ds set-ds 0 -6 0 8 -225271 -1 -1 0 1; #X text 29 286 MSD-TYPE (2D or 3D):; #X obj 9 9 cnv 15 400 30 empty empty MSD-EDITOR 20 14 1 14 -128992 -262144 0; #X obj 10 466 cnv 15 400 75 empty empty PERSIST 20 12 1 14 -195568 -66577 0; #N canvas 460 399 104 45 save 0; #X obj 2 3 cnv 15 100 40 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 4 17 bng 20 250 50 0 empty empty load 0 -6 0 8 -258699 -1 -1 ; #X obj 34 17 bng 20 250 50 0 empty empty saveas 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 79 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 124 470 pd save; #N canvas 0 0 84 49 save 0; #X obj 2 3 cnv 15 75 40 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 37 18 bng 20 250 50 0 empty empty saveas 0 -6 0 8 -24198 -1 -1; #X obj 285 129 textfile; #X obj 285 64 r \$0-msd2save; #X obj 183 157 s \$0-generate; #X obj 166 270 s \$0-save-msd; #X msg 203 187 1; #X msg 138 193 0; #X obj 145 33 t b b b b; #X msg 213 55 clear; #X obj 285 88 prepend add; #X obj 138 126 del 500; #X obj 35 168 savepanel; #X msg 37 193 write \$1; #X obj 58 148 t b b; #X obj 292 202 s \$0-msd; #X msg 427 125 rewind; #X obj 7 18 bng 20 250 50 0 empty empty load 0 -6 0 8 -258699 -1 -1 ; #X obj 392 156 until; #X obj 396 102 t b b; #X obj 521 95 openpanel; #X msg 523 120 read \$1; #X obj 526 145 t b a; #X connect 1 0 8 0; #X connect 2 0 15 0; #X connect 2 1 18 1; #X connect 3 0 10 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 1 11 0; #X connect 8 2 4 0; #X connect 8 3 6 0; #X connect 8 3 9 0; #X connect 9 0 2 0; #X connect 10 0 2 0; #X connect 11 0 14 0; #X connect 12 0 13 0; #X connect 13 0 2 0; #X connect 14 0 12 0; #X connect 14 1 7 0; #X connect 16 0 2 0; #X connect 17 0 20 0; #X connect 18 0 2 0; #X connect 19 0 18 0; #X connect 19 1 16 0; #X connect 20 0 21 0; #X connect 21 0 22 0; #X connect 22 0 19 0; #X connect 22 1 2 0; #X coords 0 0 1 1 77 44 1; #X restore 266 470 pd save; #X text 124 524 Save DS to disk; #X text 266 524 Save MSD messages; #X obj 319 353 vsl 15 64 0 10 0 0 empty empty D 0 -8 0 8 -195568 -1 -1 300 1; #X obj 345 353 vsl 15 64 0 10 0 0 empty empty D2 0 -8 0 8 -195568 -1 -1 0 1; #X obj 294 353 vsl 15 64 0 100 0 0 empty empty K 0 -8 0 8 -195568 -1 -1 300 1; #N canvas 504 489 531 315 TODO 0; #X text 146 11 TODO :: IDEAS; #X text 39 50 Make symbolic ids of new masses/links editable. For this I need to add new fields \, probably called "sym" \, to masses and links. They have to be floats for now (symbols in DS don't work yet). Then [makefilename] symbolic ids of this.; #X text 39 122 Related to that the props and forces subpatches should be dynamic as well \, so that users can send messages to groups of masses/links using the different symbolic names.; #X text 42 178 Prepare for retirement of D2; #X restore 178 582 pd TODO; #N canvas 307 452 509 305 NEWS 0; #X text 32 24 RecentChanges; #X text 43 51 msd-editor now also can be used for msd3D objects.; #X text 41 77 Cosmetic overhaul; #X restore 117 582 pd NEWS; #N canvas 334 329 751 433 ignore 0; #X obj 46 264 print ToMSD; #X obj 46 234 spigot; #X obj 83 181 tgl 15 0 empty empty debug_ToMSD 0 -6 0 8 -262144 -1 -1 0 1; #X obj 46 207 r \$0-msd; #X obj 147 237 spigot; #X obj 184 184 tgl 15 0 empty empty debug_FromMSD 0 -6 0 8 -262144 -1 -1 0 1; #X obj 147 265 print FromMSD; #X obj 147 210 r \$0-msd-out; #N canvas 0 0 578 686 setter 0; #X restore 521 67 pd setter; #N canvas 0 0 822 675 lsetter 0; #X restore 520 90 pd lsetter; #X text 504 43 Automatic scripting targets; #X text 23 46 You can ignore this stuff here \, unless something goes wrong.; #X obj 269 233 spigot; #X obj 306 180 tgl 15 0 empty empty debug_AttrMSD 0 -6 0 8 -262144 -1 -1 0 1; #X obj 269 206 r \$0-msd-attr; #X obj 269 264 print AttrMSD; #X obj 532 270 s \$0-msd; #X msg 544 247 infosL; #X obj 143 363 spigot; #X obj 180 310 tgl 15 0 empty empty global-send 0 -6 0 8 -262144 -1 -1 1 1; #X obj 143 336 r \$0-msd-out; #X obj 143 391 s MSD-OUT-GLOBAL; #X msg 532 223 massesPosL; #X obj 532 199 metro 40; #X obj 532 177 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X floatatom 585 178 5 0 0 0 - - -; #X obj 280 365 spigot; #X obj 317 312 tgl 15 0 empty empty global-receive 0 -6 0 8 -262144 -1 -1 1 1; #X obj 280 338 r MSD-IN-GLOBAL; #X obj 280 393 s \$0-msd; #X obj 630 201 metro 40; #X obj 630 179 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X floatatom 683 180 5 0 0 0 - - -; #X obj 630 273 s \$0-msd; #X obj 531 322 metro 40; #X obj 531 300 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X floatatom 584 301 5 0 0 0 - - -; #X obj 531 394 s \$0-msd; #X msg 625 70 clear; #X obj 625 97 s pd-setter; #X obj 625 117 s pd-lsetter; #X msg 531 346 massesForcesL; #X msg 630 225 massesPosYL; #N canvas 0 0 450 300 msd-type 0; #X obj 94 78 r MSD-TYPE; #X obj 89 201 s \$0-MSD-TYPE; #X obj 98 136 select 0; #X msg 89 168 label 2-D; #X msg 185 170 label 3-D; #X connect 0 0 2 0; #X connect 2 0 3 0; #X connect 2 1 4 0; #X connect 3 0 1 0; #X connect 4 0 1 0; #X restore 524 126 pd msd-type; #N canvas 673 282 553 343 camera 0; #X obj 183 185 camera; #X obj 179 45 gemhead; #X obj 162 82 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 185 63 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 234 108 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 260 86 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 ; #X msg 234 124 left \$1; #X msg 260 102 right \$1; #X obj 75 120 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 101 98 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X msg 101 114 up \$1; #X msg 75 136 down \$1; #X msg 267 58 reset; #X msg 185 80 forward \$1; #X msg 162 98 reverse \$1; #X msg 66 252 speed \$1; #X floatatom 66 232 5 0 0 0 - - -; #X floatatom 67 195 5 0 0 0 - - -; #X msg 379 150 lookX \$1; #X msg 379 187 lookY \$1; #X msg 379 223 lookZ \$1; #X floatatom 379 134 5 0 0 0 - - -; #X floatatom 379 207 5 0 0 0 - - -; #X floatatom 379 170 5 0 0 0 - - -; #X msg 67 213 distance \$1; #X obj 114 182 f 4; #X obj 181 237 +; #X connect 1 0 0 0; #X connect 2 0 14 0; #X connect 3 0 13 0; #X connect 4 0 6 0; #X connect 5 0 7 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X connect 8 0 11 0; #X connect 9 0 10 0; #X connect 10 0 0 0; #X connect 11 0 0 0; #X connect 12 0 0 0; #X connect 13 0 0 0; #X connect 14 0 0 0; #X connect 15 0 0 0; #X connect 16 0 15 0; #X connect 17 0 24 0; #X connect 18 0 0 0; #X connect 19 0 0 0; #X connect 20 0 0 0; #X connect 21 0 18 0; #X connect 22 0 20 0; #X connect 23 0 19 0; #X connect 24 0 0 0; #X connect 25 0 24 0; #X restore 416 83 pd camera; #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 connect 12 0 15 0; #X connect 13 0 12 1; #X connect 14 0 12 0; #X connect 17 0 16 0; #X connect 18 0 21 0; #X connect 19 0 18 1; #X connect 20 0 18 0; #X connect 22 0 16 0; #X connect 23 0 22 0; #X connect 24 0 23 0; #X connect 25 0 23 1; #X connect 26 0 29 0; #X connect 27 0 26 1; #X connect 28 0 26 0; #X connect 30 0 42 0; #X connect 31 0 30 0; #X connect 32 0 30 1; #X connect 34 0 41 0; #X connect 35 0 34 0; #X connect 36 0 34 1; #X connect 38 0 39 0; #X connect 38 0 40 0; #X connect 41 0 37 0; #X connect 42 0 33 0; #X restore 241 582 pd ignore this; #N canvas 0 0 489 250 help 0; #N canvas 0 0 450 300 visualize? 0; #X text 18 91 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 19 172 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. Use the "forces" and "props" subpatches to change parameters of links and send forces.; #X text 56 39 Help on Visualization; #X restore 301 169 pd visualize?; #N canvas 0 0 450 300 append? 0; #X text 36 72 First create structure inside [pd data] using msd_append. Add mobile masses with black bang \, add fixed masses with the red bang. Set weight of mass with the "M" number box.; #X text 29 29 Help on Mass creation; #X text 34 122 Use the greenish "geos" bang to open a subwindow for creating masses in geometric formations: circles and rectangles.; #X restore 303 70 pd append?; #N canvas 0 0 537 336 links? 0; #X text 47 77 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 text 32 26 Help on Link Creation; #X text 44 148 The keyboard shortcut "L" is only active \, if the green toggle "Keys" is set to on. Otherwise use the yellow "link" bang.; #X text 45 196 More ways to create links: left-to-right connects masses from left to right. The keyboard shortcut for this is "R" (for "Right" \, as "L" is for "Links"). one2many will connect one mass to many others and has no shortcuts. First select the first mass \, then set the toggle to 1 \, after that select the other masses and set toggle to 0; #X restore 302 94 pd links?; #N canvas 0 0 450 300 generate? 0; #X text 19 98 Press "generate" to generate messages to the msd object and create the physical model inside. You can select which type of msd* to use as well: msd2D or msd3D. With 3-D \, the Z-coordinate will default to a value of zero.; #X text 31 38 Help on MSD generation; #X restore 302 144 pd generate?; #N canvas 0 0 215 157 minmax? 0; #X text 38 35 Data structs and; #X text 38 49 GEM like different; #X text 38 63 coordinate systems.; #X text 38 87 Set the mapping; #X text 38 101 between both here.; #X restore 302 118 pd minmax?; #X text 39 18 HELP / USAGE; #X text 143 71 How to create masses:; #X text 143 94 How to create links:; #X text 102 118 Coordinates in MSD-Editor:; #X text 109 146 Generate the MSD-Network:; #X text 17 170 Visualize the network using GEM or DS:; #X restore 53 582 pd help; #X obj 32 431 tgl 16 0 \$0-fullscreen \$0-fullscreen fullscreen 0 -6 0 8 -195568 -1 -1 0 1; #X connect 7 0 8 0; #X connect 7 1 9 0; #X connect 8 0 7 0; #X connect 9 0 7 1; #X connect 10 0 7 2; #X connect 15 0 14 0; #X connect 16 0 14 0; #X connect 32 0 12 1; #X connect 33 0 12 2; #X connect 34 0 12 0;