From 4320ffda8665dea49e81aa79bd414a1885bee6ed Mon Sep 17 00:00:00 2001 From: Frank Barknecht Date: Wed, 11 May 2005 09:09:47 +0000 Subject: Support for msd3D added. svn path=/trunk/externals/nusmuk/; revision=2943 --- msd2D/editor/README | 14 +- msd2D/editor/gem_links.pd | 46 +- msd2D/editor/gem_masses.pd | 41 +- msd2D/editor/link-set.pd | 46 +- msd2D/editor/mass-set.pd | 8 +- msd2D/editor/msd-editor.pd | 1064 ++++++++++++++++++++++++++++++++++++++++++ msd2D/editor/msd2d-editor.pd | 855 --------------------------------- msd2D/editor/msd_append.pd | 40 +- 8 files changed, 1228 insertions(+), 886 deletions(-) create mode 100644 msd2D/editor/msd-editor.pd delete mode 100644 msd2D/editor/msd2d-editor.pd diff --git a/msd2D/editor/README b/msd2D/editor/README index 12e4ad0..e6253db 100644 --- a/msd2D/editor/README +++ b/msd2D/editor/README @@ -1,10 +1,14 @@ -msd2d-editor +msd-editor ------------ patched by Frank Barknecht with a big hand from Nicolas -Montgermont who wrote the msd2D external required -for using this patch. GEM is used to provide an alternative visualization, but -it is not required for the patch to work. +Montgermont who wrote the msd2D and msd3D externals +required for using this patch. GEM is used to provide an alternative +visualization, but it is not required for the patch to work. + +If you want to export the messages to msd2d, that are created, you also need a +[prepend] external, preferably the one from the Cyclone library. + Thanks Nicolas for a great external colletion. -msd2d-editor.pd is the patch to open, further documentation is inside. +msd-editor.pd is the patch to open, further documentation is inside. diff --git a/msd2D/editor/gem_links.pd b/msd2D/editor/gem_links.pd index 99a138c..6c9f1b0 100644 --- a/msd2D/editor/gem_links.pd +++ b/msd2D/editor/gem_links.pd @@ -6,13 +6,38 @@ #X obj 147 166 t b f; #X obj 156 432 curve 2; #X obj 178 210 pack 0 0 0; -#X obj 255 189 pack 0 0 0; -#X obj 141 62 unpack 0 0 0 0 0; -#X obj 248 322 inlet; +#X obj 269 213 pack 0 0 0; +#X obj 141 97 unpack 0 0 0 0 0; +#X obj 282 324 inlet; #X obj 109 364 spigot; -#X msg 247 300 1; -#X obj 247 275 loadbang; -#X connect 0 0 8 0; +#X msg 281 302 1; +#X obj 281 277 loadbang; +#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 141 64 pd demux; +#X obj 192 37 r MSD-TYPE; +#X obj 280 97 unpack 0 0 0 0 0 0 0; +#X connect 0 0 13 0; #X connect 1 0 3 1; #X connect 2 0 5 0; #X connect 3 0 10 0; @@ -28,3 +53,12 @@ #X connect 10 0 2 0; #X connect 11 0 10 1; #X connect 12 0 11 0; +#X connect 13 0 8 0; +#X connect 13 1 15 0; +#X connect 14 0 13 1; +#X connect 15 1 4 0; +#X connect 15 2 6 1; +#X connect 15 3 6 2; +#X connect 15 4 7 0; +#X connect 15 5 7 1; +#X connect 15 6 7 2; diff --git a/msd2D/editor/gem_masses.pd b/msd2D/editor/gem_masses.pd index bd0c3d3..094be63 100644 --- a/msd2D/editor/gem_masses.pd +++ b/msd2D/editor/gem_masses.pd @@ -7,13 +7,38 @@ #X obj 166 162 t b f; #X msg 47 325 draw line; #X obj 48 300 loadbang; -#X obj 141 61 unpack 0 0 0; +#X obj 141 104 unpack 0 0 0; #X obj 150 453 circle 0.05; -#X obj 240 311 inlet; +#X obj 338 297 inlet; #X obj 150 362 spigot; -#X msg 239 289 1; -#X obj 239 264 loadbang; -#X connect 0 0 8 0; +#X msg 337 275 1; +#X obj 337 250 loadbang; +#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 141 71 pd demux; +#X obj 192 44 r MSD-TYPE; +#X obj 238 104 unpack 0 0 0 0; +#X connect 0 0 14 0; #X connect 1 0 9 0; #X connect 2 0 4 1; #X connect 3 0 1 0; @@ -28,3 +53,9 @@ #X connect 11 0 3 0; #X connect 12 0 11 1; #X connect 13 0 12 0; +#X connect 14 0 8 0; +#X connect 14 1 16 0; +#X connect 15 0 14 1; +#X connect 16 1 5 0; +#X connect 16 2 1 2; +#X connect 16 3 1 3; diff --git a/msd2D/editor/link-set.pd b/msd2D/editor/link-set.pd index 3e9646f..ec9edda 100644 --- a/msd2D/editor/link-set.pd +++ b/msd2D/editor/link-set.pd @@ -1,4 +1,4 @@ -#N canvas 511 393 574 502 10; +#N canvas 449 81 747 726 10; #X obj 251 159 pack 0 p; #X obj 251 187 route \$1; #X obj 251 100 t p p; @@ -12,11 +12,38 @@ #X text 81 137 lid \, x1 \, y1 \, x2 \, y2; #X obj 251 131 get liaison lid; #X text 261 220 Select pointer with lid matching \$1; -#X obj 90 349 set liaison x1 y1 x2 y2; +#X obj 90 526 set liaison x1 y1 x2 y2; #X obj 251 73 r myliapointer; -#X obj 90 292 unpack 0 0 0 0; -#X obj 92 320 scale-msd2ds; -#X obj 183 319 scale-msd2ds; +#X obj 90 337 unpack 0 0 0 0; +#X obj 90 497 scale-msd2ds; +#X obj 181 496 scale-msd2ds; +#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 90 292 pd demux; +#X obj 272 340 unpack 0 0 0 0 0 0; +#X text 198 336 msd2D; +#X text 410 338 msd3D: skip Z; +#X obj 157 255 r MSD-TYPE; #X connect 0 0 1 0; #X connect 1 0 5 0; #X connect 2 0 10 0; @@ -26,7 +53,7 @@ #X connect 4 0 7 0; #X connect 5 0 4 0; #X connect 5 1 12 4; -#X connect 6 0 14 0; +#X connect 6 0 17 0; #X connect 8 0 3 0; #X connect 10 0 0 0; #X connect 13 0 2 0; @@ -38,3 +65,10 @@ #X connect 15 1 12 1; #X connect 16 0 12 2; #X connect 16 1 12 3; +#X connect 17 0 14 0; +#X connect 17 1 18 0; +#X connect 18 0 15 0; +#X connect 18 1 15 1; +#X connect 18 3 16 0; +#X connect 18 4 16 1; +#X connect 21 0 17 1; diff --git a/msd2D/editor/mass-set.pd b/msd2D/editor/mass-set.pd index 1f036b3..1c53605 100644 --- a/msd2D/editor/mass-set.pd +++ b/msd2D/editor/mass-set.pd @@ -1,7 +1,7 @@ #N canvas 471 153 686 707 10; #X obj 251 159 pack 0 p; #X obj 251 187 route \$1; -#X obj 130 347 set mass x y; +#X obj 118 383 set mass x y; #X obj 251 100 t p p; #X obj 251 131 get mass mid; #X text 261 220 Select pointer with mid matching \$1; @@ -29,8 +29,9 @@ ; #X msg 307 536 posX \$2 \$3; #X msg 327 562 posY \$2 \$4; -#X obj 51 319 scale-msd2ds; +#X obj 39 355 scale-msd2ds; #X obj 337 422 scale-ds2msd; +#X msg 95 323 \$1 \$2; #X connect 0 0 1 0; #X connect 1 0 8 0; #X connect 3 0 4 0; @@ -44,7 +45,7 @@ #X connect 8 1 2 2; #X connect 8 1 14 1; #X connect 9 0 6 0; -#X connect 11 0 27 2; +#X connect 11 0 29 0; #X connect 13 0 3 0; #X connect 14 0 22 0; #X connect 16 1 11 0; @@ -64,3 +65,4 @@ #X connect 27 2 2 0; #X connect 28 0 21 2; #X connect 28 1 21 3; +#X connect 29 0 27 2; diff --git a/msd2D/editor/msd-editor.pd b/msd2D/editor/msd-editor.pd new file mode 100644 index 0000000..2925052 --- /dev/null +++ b/msd2D/editor/msd-editor.pd @@ -0,0 +1,1064 @@ +#N canvas 33 84 866 562 10; +#N canvas 0 64 1222 870 data 0; +#X restore 719 42 pd data; +#X obj 24 523 structures; +#X obj 30 314 bng 24 250 50 0 empty \$0-generate generate 0 -6 0 8 +-24198 -1 -1; +#X text 25 499 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 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 703 139 pd save; +#X text 712 17 Edit here:; +#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 obj 112 91 inlet; +#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 connect 0 0 8 0; +#X connect 0 1 14 0; +#X connect 2 0 3 0; +#X connect 4 0 12 0; +#X connect 4 1 0 0; +#X connect 4 3 2 0; +#X connect 5 0 10 0; +#X connect 6 0 1 0; +#X connect 7 0 4 0; +#X connect 8 0 1 0; +#X connect 9 0 1 0; +#X connect 12 0 5 0; +#X connect 13 0 5 0; +#X connect 14 0 9 0; +#X connect 14 1 16 0; +#X connect 15 0 14 1; +#X connect 16 0 1 0; +#X restore 30 343 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 670 gemwin; +#X msg 97 643 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 msg 97 619 reset \, lighting 1 \, create \, 1; +#X obj 357 676 gemhead; +#X obj 357 699 world_light; +#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 45 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 6 0; +#X connect 46 0 47 0; +#X restore 29 420 pd activate; +#X obj 29 384 tgl 24 0 empty empty GEM 0 -6 0 8 -233017 -1 -1 0 1; +#X obj 65 384 tgl 24 0 empty empty Graphical_Datastructures 0 -6 0 +8 -1 -262144 -1 0 1; +#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 0 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 244 458 450 300 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 0 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 234 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 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 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 117 523 pd ignore this; +#X floatatom 101 391 5 10 1000 1 frequency - -; +#X text 240 370 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 241 116 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. :); +#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 6650 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 28 463 pd forces; +#X obj 254 524 tgl 15 0 \$0-gem-masses-on empty gem_m 0 -6 0 8 -225280 +-1 -1 0 1; +#X obj 296 524 tgl 15 0 \$0-gem-links-on empty gem_l 0 -6 0 8 -225271 +-1 -1 0 1; +#N canvas 113 581 450 300 props 0; +#X obj 117 204 s \$0-msd; +#X obj 117 46 vsl 15 64 0 10 0 0 empty empty D 0 -8 0 8 -262144 -1 +-1 3000 1; +#X obj 141 46 vsl 15 64 0 10 0 0 empty empty D2 0 -8 0 8 -262144 -1 +-1 3800 1; +#X obj 90 46 vsl 15 64 0 100 0 0 empty empty K 0 -8 0 8 -262144 -1 +-1 1000 1; +#X msg 90 175 setK ml \$1; +#X msg 117 151 setD ml \$1; +#X msg 141 122 setD2 ml \$1; +#X text 192 47 Edit properties of Links.; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X restore 102 464 pd props; +#X text 337 521 Toggle display of masses and links in GEM.; +#X text 241 451 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 685 122 Save network to disk:; +#X obj 24 120 morelinks; +#X text 242 29 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 obj 120 92 s pd-data; +#X msg 120 52 clear; +#X msg 120 72 sort; +#X text 118 27 Clear or 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 703 259 pd minmax; +#X text 696 409 Data structs and; +#X text 696 423 GEM like different; +#X text 696 437 coordinate systems.; +#X text 696 461 Set the mapping; +#X text 696 475 between both here.; +#X text 238 187 The keyboard shortcut "L" is only active \, if the +green toggle "Key:L" is set to on. Otherwise use the yellow "link" +bang.; +#X text 239 235 More ways to create links: left-to-right connects masses +from left to right. one2many will connect one mass to many others. +First select the first mass \, then set the toggle to 1 \, after that +select the other masses and set toggle to 0; +#X obj 707 97 tgl 15 0 \$0-poll-ds \$0-poll-ds poll-ds 0 -6 0 8 -225280 +-1 -1 0 1; +#X obj 765 97 tgl 15 0 \$0-set-ds \$0-set-ds set-ds 0 -6 0 8 -225271 +-1 -1 0 1; +#X text 669 66 Data struct anim ON/OFF:; +#N canvas 504 489 531 315 TODO 0; +#X text 146 11 TODO :: IDEAS; +#X text 41 92 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 41 48 Save/load of MSD messages: Route [r \$0-msd] to a [textfile] +or [qlist]; +#X text 41 164 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 232 msd3D-editor: edit both kinds of mass/spring networks. +; +#X restore 777 529 pd TODO; +#N canvas 307 452 509 305 NEWS 0; +#X text 32 24 RecentChanges; +#X text 39 90 Geos: Now it's possible to add masses in geometric formations: +rectangles (2d-networks) and circles (set center point \, radius and +number of masses).; +#X text 43 51 I think I now really have fixed the "stack overflows" +when creating lots of masses.; +#X restore 777 508 pd NEWS; +#N canvas 0 0 84 49 save 0; +#X obj 2 3 cnv 15 75 40 empty empty empty 20 12 0 14 -257472 -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 703 208 pd save; +#X text 683 188 Save MSD messages:; +#X obj 92 315 tgl 24 0 MSD-TYPE \$0-MSD-TYPE 3-D 0 -6 0 8 -233017 -1 +-1 1 1; +#X text 120 320 MSD-TYPE; +#X obj 25 14 msd_append; +#X text 240 304 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 connect 2 0 6 0; +#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 11 0 7 2; +#X connect 24 0 23 0; +#X connect 25 0 23 0; diff --git a/msd2D/editor/msd2d-editor.pd b/msd2D/editor/msd2d-editor.pd deleted file mode 100644 index 72b07f0..0000000 --- a/msd2D/editor/msd2d-editor.pd +++ /dev/null @@ -1,855 +0,0 @@ -#N canvas 191 137 866 562 10; -#N canvas 565 411 1222 870 data 0; -#X restore 719 42 pd data; -#X obj 24 523 structures; -#X obj 30 314 bng 24 250 50 0 empty \$0-generate generate 0 -6 0 8 --24198 -1 -1; -#X text 25 499 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 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 703 139 pd save; -#X text 712 17 Edit here:; -#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 obj 112 91 inlet; -#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 msg 339 306 Xmin \$1 \, Xmax \$2 \, Ymin \$1 \, Ymax \$2; -#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 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 24 1; -#X connect 9 0 17 0; -#X connect 9 0 19 0; -#X connect 9 0 25 1; -#X connect 10 0 11 0; -#X connect 11 0 21 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 20 0 22 0; -#X connect 21 0 24 0; -#X connect 21 1 25 0; -#X connect 23 0 20 0; -#X connect 24 0 23 0; -#X connect 25 0 23 1; -#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; -#X connect 0 0 8 0; -#X connect 0 1 9 0; -#X connect 2 0 3 0; -#X connect 4 0 12 0; -#X connect 4 1 0 0; -#X connect 4 3 2 0; -#X connect 5 0 10 0; -#X connect 6 0 1 0; -#X connect 7 0 4 0; -#X connect 8 0 1 0; -#X connect 9 0 1 0; -#X connect 12 0 5 0; -#X connect 13 0 5 0; -#X restore 30 343 pd generator; -#N canvas 0 0 718 819 activate 0; -#X obj 233 307 msd2D; -#X obj 233 238 r \$0-msd; -#X obj 233 449 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 99 496 gemwin; -#X msg 99 469 0 \, destroy; -#X obj 249 354 s \$0-msd-out; -#X obj 99 423 select 1 0; -#X obj 99 395 tgl 24 0 empty empty GEM 0 -6 0 8 -262144 -1 -1 0 1; -#X obj 279 324 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 41 314 inlet GEM; -#X obj 341 40 inlet speed; -#X obj 22 376 select 1; -#X msg 22 401 0; -#X obj 40 338 t f f; -#X obj 54 90 select 1; -#X msg 54 115 0; -#X obj 72 52 t f f; -#X msg 124 585 set \$1; -#X msg 16 465 set \$1; -#X obj 130 611 outlet; -#X obj 17 491 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 msg 99 445 reset \, create \, 1; -#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; -#X connect 0 0 6 0; -#X connect 0 0 9 0; -#X connect 0 1 12 0; -#X connect 1 0 0 0; -#X connect 1 0 45 0; -#X connect 4 0 0 0; -#X connect 5 0 19 0; -#X connect 6 0 16 0; -#X connect 6 0 41 0; -#X connect 6 1 17 0; -#X connect 6 1 42 0; -#X connect 8 0 7 0; -#X connect 10 0 37 0; -#X connect 10 1 8 0; -#X connect 11 0 10 0; -#X connect 11 0 16 1; -#X connect 11 0 17 1; -#X connect 11 0 31 0; -#X connect 15 0 30 0; -#X connect 15 0 34 0; -#X connect 16 0 2 0; -#X connect 17 0 3 0; -#X connect 19 0 4 0; -#X connect 19 1 38 0; -#X connect 21 0 29 0; -#X connect 22 0 26 0; -#X connect 23 0 34 1; -#X connect 24 0 25 0; -#X connect 25 0 15 0; -#X connect 26 0 11 0; -#X connect 26 1 24 0; -#X connect 27 0 28 0; -#X connect 28 0 11 0; -#X connect 29 0 15 0; -#X connect 29 1 27 0; -#X connect 30 0 32 0; -#X connect 31 0 33 0; -#X connect 34 0 19 0; -#X connect 35 0 2 1; -#X connect 36 0 3 1; -#X connect 37 0 7 0; -#X connect 38 0 20 0; -#X connect 39 0 38 1; -#X connect 40 0 42 1; -#X connect 40 0 41 1; -#X connect 41 0 13 0; -#X connect 42 0 14 0; -#X connect 43 0 45 1; -#X connect 45 0 44 0; -#X restore 29 420 pd activate; -#X obj 29 384 tgl 24 0 empty empty GEM 0 -6 0 8 -233017 -1 -1 0 1; -#X obj 65 384 tgl 24 0 empty empty Graphical_Datastructures 0 -6 0 -8 -1 -262144 -1 0 1; -#X text 243 312 Press "generate" to generate messages to msd2D and -create the physical model inside.; -#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 0 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 0 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; -#X obj 28 133 nbx 5 14 -1e+37 1e+37 0 0 \$0-delay-stack empty delay-stack -0 -6 0 10 -262144 -1 -1 0 256; -#X text 25 92 If you experience stack overflows \, try setting this -larger than 10; -#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 117 523 pd ignore this; -#X floatatom 101 391 5 10 1000 1 frequency - -; -#X text 240 370 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 241 116 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. :); -#N canvas 423 517 576 613 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 6350 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 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 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 restore 28 463 pd forces; -#X obj 254 524 tgl 15 0 \$0-gem-masses-on empty gem_m 0 -6 0 8 -225280 --1 -1 0 1; -#X obj 296 524 tgl 15 0 \$0-gem-links-on empty gem_l 0 -6 0 8 -225271 --1 -1 0 1; -#N canvas 779 673 450 300 props 0; -#X obj 117 204 s \$0-msd; -#X obj 117 46 vsl 15 64 0 10 0 0 empty empty D 0 -8 0 8 -262144 -1 --1 0 1; -#X obj 141 46 vsl 15 64 0 10 0 0 empty empty D2 0 -8 0 8 -262144 -1 --1 0 1; -#X obj 90 46 vsl 15 64 0 100 0 0 empty empty K 0 -8 0 8 -262144 -1 --1 0 1; -#X msg 90 175 setK ml \$1; -#X msg 117 151 setD ml \$1; -#X msg 141 122 setD2 ml \$1; -#X text 192 47 Edit properties of Links.; -#X connect 1 0 5 0; -#X connect 2 0 6 0; -#X connect 3 0 4 0; -#X connect 4 0 0 0; -#X connect 5 0 0 0; -#X connect 6 0 0 0; -#X restore 102 464 pd props; -#X text 337 521 Toggle display of masses and links in GEM.; -#X text 241 451 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 685 122 Save network to disk:; -#X obj 24 120 morelinks; -#X obj 25 14 msd_append; -#X text 242 29 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 obj 120 92 s pd-data; -#X msg 120 52 clear; -#X msg 120 72 sort; -#X text 118 27 Clear or 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 703 259 pd minmax; -#X text 696 409 Data structs and; -#X text 696 423 GEM like different; -#X text 696 437 coordinate systems.; -#X text 696 461 Set the mapping; -#X text 696 475 between both here.; -#X text 238 187 The keyboard shortcut "L" is only active \, if the -green toggle "Key:L" is set to on. Otherwise use the yellow "link" -bang.; -#X text 239 235 More ways to create links: left-to-right connects masses -from left to right. one2many will connect one mass to many others. -First select the first mass \, then set the toggle to 1 \, after that -select the other masses and set toggle to 0; -#X obj 707 97 tgl 15 0 \$0-poll-ds \$0-poll-ds poll-ds 0 -6 0 8 -225280 --1 -1 0 1; -#X obj 765 97 tgl 15 0 \$0-set-ds \$0-set-ds set-ds 0 -6 0 8 -225271 --1 -1 0 1; -#X text 669 66 Data struct anim ON/OFF:; -#N canvas 504 489 531 315 TODO 0; -#X text 146 11 TODO :: IDEAS; -#X text 41 92 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 41 48 Save/load of MSD messages: Route [r \$0-msd] to a [textfile] -or [qlist]; -#X text 41 164 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 232 msd3D-editor: edit both kinds of mass/spring networks. -; -#X restore 777 529 pd TODO; -#N canvas 307 452 509 305 NEWS 0; -#X text 32 24 RecentChanges; -#X text 39 90 Geos: Now it's possible to add masses in geometric formations: -rectangles (2d-networks) and circles (set center point \, radius and -number of masses).; -#X text 43 51 I think I now really have fixed the "stack overflows" -when creating lots of masses.; -#X restore 777 508 pd NEWS; -#N canvas 0 0 84 49 save 0; -#X obj 2 3 cnv 15 75 40 empty empty empty 20 12 0 14 -257472 -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 703 208 pd save; -#X text 683 188 Save MSD messages:; -#X connect 2 0 6 0; -#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 12 0 7 2; -#X connect 26 0 25 0; -#X connect 27 0 25 0; diff --git a/msd2D/editor/msd_append.pd b/msd2D/editor/msd_append.pd index b8a6a1b..78d8e07 100644 --- a/msd2D/editor/msd_append.pd +++ b/msd2D/editor/msd_append.pd @@ -29,7 +29,7 @@ #X obj 296 425 s \$0-counter-in; #X obj 66 203 + 20; #X obj 105 148 + 20; -#X obj 192 177 r \$0-M; +#X obj 208 133 r \$0-M; #X obj 68 231 append mass x y mid mob M; #X obj 553 175 f \$1; #X obj 553 199 select 0; @@ -38,6 +38,9 @@ #X obj 558 152 loadbang; #X obj 21 135 r \$0-geos; #X obj 252 77 r \$0-start-traverse; +#X obj 179 204 f 0; +#X obj 21 158 t a b; +#X obj 195 173 r \$0-mfds; #X connect 0 0 24 5; #X connect 1 0 21 0; #X connect 2 0 0 0; @@ -68,13 +71,17 @@ #X connect 26 1 27 0; #X connect 28 0 27 0; #X connect 29 0 25 0; -#X connect 30 0 24 0; +#X connect 30 0 33 0; #X connect 31 0 2 0; +#X connect 32 0 24 3; +#X connect 33 0 24 0; +#X connect 33 1 32 0; +#X connect 34 0 32 1; #X restore 105 79 pd guts; #X obj 126 6 inlet; #X obj 169 5 inlet; #X obj 25 59 nbx 5 14 -1e+37 1e+37 0 0 \$0-counter \$0-counter-in id --22 8 0 10 -262144 -1 -1 0 256; +-22 8 0 10 -262144 -1 -1 400 256; #X obj 2 77 cnv 15 80 30 empty empty empty 10 10 0 10 -195568 -1 0 ; #X obj 26 85 nbx 5 14 -1e+37 1e+37 0 0 \$0-M \$0-M M -12 8 0 10 -225271 @@ -85,7 +92,7 @@ #X obj 93 188 s \$0-counter-bng; #X obj 48 33 r \$0-make-rect; #X msg 93 67 bang; -#N canvas 449 480 450 300 1016-geos 1; +#N canvas 449 480 450 300 6969-geos 0; #X obj 48 82 bng 24 250 50 0 \$0-make-rect empty make-rect 0 -6 0 8 -24198 -1 -1; #X floatatom 151 76 5 0 0 0 x0 - #0-x0; @@ -104,6 +111,10 @@ #X floatatom 251 166 5 0 0 0 radius - #0-radius; #X floatatom 251 184 5 0 0 0 masses_# - #0-masses-circ; #X text 107 266 All coords as used by data structs.; +#X obj 54 233 hradio 15 1 0 2 \$0-mf \$0-mf Mobile/Fix 0 -6 0 8 -262144 +-1 -1 0; +#X obj 91 234 cnv 15 60 15 \$0-mobfix \$0-mobfix mobile 2 6 0 10 -233017 +-66577 0; #X restore 518 165 pd \$0-geos; #X msg 519 125 \; \$1 vis 1; #X obj 518 96 makefilename pd-%s; @@ -111,7 +122,7 @@ #X msg 516 22 bang; #X obj 48 66 t b b; #X obj 78 226 s \$0-start-traverse; -#N canvas 0 0 930 534 1016-sixpack 0; +#N canvas 0 0 930 534 6969-sixpack 0; #X obj 250 282 r \$0-x0; #X text 452 208 Args; #X obj 320 310 sixpack --------------------; @@ -132,7 +143,7 @@ #X obj 93 128 t b a; #X obj 524 45 r \$0-show-geos; #X obj 63 322 r \$0-make-circ; -#N canvas 0 0 930 534 1016-fourpack 0; +#N canvas 0 0 930 534 6969-fourpack 0; #X text 452 208 Args; #X obj 320 310 sixpack --------------------; #X obj 319 390 outlet; @@ -154,6 +165,14 @@ #X obj 93 505 s \$0-start-traverse; #X obj 106 407 t b a; #X obj 63 370 make_circ 300 300 100 8; +#X obj 368 266 select 0; +#X msg 368 306 label mobile; +#X obj 368 329 s \$0-mobfix; +#X msg 420 288 label fix; +#X obj 368 236 r \$0-mf; +#X obj 507 332 s \$0-mfds; +#X msg 508 301 0; +#X msg 544 299 900; #X connect 0 0 13 0; #X connect 3 0 10 0; #X connect 4 0 0 0; @@ -173,6 +192,15 @@ #X connect 21 0 18 0; #X connect 21 1 17 0; #X connect 22 0 21 0; +#X connect 23 0 24 0; +#X connect 23 0 29 0; +#X connect 23 1 26 0; +#X connect 23 1 30 0; +#X connect 24 0 25 0; +#X connect 26 0 25 0; +#X connect 27 0 23 0; +#X connect 29 0 28 0; +#X connect 30 0 28 0; #X restore 113 41 pd geos; #X obj 59 29 bng 15 250 50 0 \$0-show-geos \$0-show-geos geos 0 -6 0 8 -225271 -1 -1; -- cgit v1.2.1