Yo all, My usual caveat applies: that I'm as nearly unconscious as I always am when I'm releasing public works :)
I had a flight today which gave me a chance to finish up [canvasselect] (by merging in some code from zexy's tabdump in my usual naive fashion to make it output index-lists rather than just post() the currently selected objects (thus, IO, you should probably double check my work :) )), and then put it to work starting to create some patching-assist functionality similar to max-toolbox.
I'm pretty excited for what can come out of this!
What I've got so far is the start of the [meta-abs] library, [meta-connect] - it works like: select one or more objects, press "[", select a new group of objects you'd like to connect the first group to, and press "]". [meta-connect] will magically connect them all (you can make some lovely line art selecting a big pile of [bng]s :) ).
Not amazingly useful, yet, but the start o' something good : ). I sketched a mini-domain language for this sort of thing here: http://puredata.info/dev/GuiIdeas#object-numbering a long while ago. I'd love to hear some ideas on how such complex autopatching would work ideally, as I'll be implementing a suite of this type of thing over the next couple weeks.
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
Back soon with more... Best Luke
Luke Iannini wrote:
Yo all, My usual caveat applies: that I'm as nearly unconscious as I always am when I'm releasing public works :)
I had a flight today which gave me a chance to finish up [canvasselect] (by merging in some code from zexy's tabdump in my usual naive fashion to make it output index-lists rather than just post() the currently selected objects (thus, IO, you should probably double check my work :) )), and then put it to work starting to create some patching-assist functionality similar to max-toolbox.
I'm pretty excited for what can come out of this!
wow sounds great! i will try it out asap.
i kind of abandoned work on [canvasselect] after i realized that it did not seem to work as i liked (e.g. you cannot select something in a closed patch). that's why there were post()s inside rather than useful output...
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object?
yes, i know this and it is on my todo list (it's not hard to do, i just did not find the time yet), i'm planning a separate class of objects like [canvas...] that operate on _other_ objects rather than self. http://lad.linuxaudio.org/events/2009_cdm/Saturday/18_Zmoelnig/index.html
Back soon with more...
really glad that you like it,
mf.asdr IOhannes
Hi Luke,
i tried it and i'm excited! i'm looking forward to further steps. georg
ps.: i attached a patched win32 version of canvasselect.dll.
Luke Iannini schrieb:
Yo all, My usual caveat applies: that I'm as nearly unconscious as I always am when I'm releasing public works :)
I had a flight today which gave me a chance to finish up [canvasselect] (by merging in some code from zexy's tabdump in my usual naive fashion to make it output index-lists rather than just post() the currently selected objects (thus, IO, you should probably double check my work :) )), and then put it to work starting to create some patching-assist functionality similar to max-toolbox.
I'm pretty excited for what can come out of this!
What I've got so far is the start of the [meta-abs] library, [meta-connect] - it works like: select one or more objects, press "[", select a new group of objects you'd like to connect the first group to, and press "]". [meta-connect] will magically connect them all (you can make some lovely line art selecting a big pile of [bng]s :) ).
Not amazingly useful, yet, but the start o' something good : ). I sketched a mini-domain language for this sort of thing here: http://puredata.info/dev/GuiIdeas#object-numbering a long while ago. I'd love to hear some ideas on how such complex autopatching would work ideally, as I'll be implementing a suite of this type of thing over the next couple weeks.
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
Back soon with more... Best Luke
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
Sounds very cool, but the [keynamedown] object seems to be missing. I got it from trunk/abstractions/sfruit/keynamedown.pd
Works wonderfully! For ideas, check out this wiki page: http://puredata.info/dev/GuiIdeas plus I think the DesireData people put out a couple video demos.
.hc
On Jun 16, 2009, at 8:55 PM, Luke Iannini wrote:
Yo all, My usual caveat applies: that I'm as nearly unconscious as I always am when I'm releasing public works :)
I had a flight today which gave me a chance to finish up [canvasselect] (by merging in some code from zexy's tabdump in my usual naive fashion to make it output index-lists rather than just post() the currently selected objects (thus, IO, you should probably double check my work :) )), and then put it to work starting to create some patching-assist functionality similar to max-toolbox.
I'm pretty excited for what can come out of this!
What I've got so far is the start of the [meta-abs] library, [meta-connect] - it works like: select one or more objects, press "[", select a new group of objects you'd like to connect the first group to, and press "]". [meta-connect] will magically connect them all (you can make some lovely line art selecting a big pile of [bng]s :) ).
Not amazingly useful, yet, but the start o' something good : ). I sketched a mini-domain language for this sort of thing here: http://puredata.info/dev/GuiIdeas#object-numbering a long while ago. I'd love to hear some ideas on how such complex autopatching would work ideally, as I'll be implementing a suite of this type of thing over the next couple weeks.
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
Back soon with more... Best Luke <canvasselect-list_of_selected_objects.diff><meta-connect.pd><meta- connect- help .pd
< canvasselect.pd_darwin>_______________________________________________ Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
----------------------------------------------------------------------------
I spent 33 years and four months in active military service and during that period I spent most of my time as a high class muscle man for Big Business, for Wall Street and the bankers. - General Smedley Butler
Hi,
i replaced the [keynamedown] and added the possibility to choose inlets and outlets by number (select an object e.g. demux in the help-patch press a number [first outlet is 1] select another object e.g. mux and press the number representing the inlet [if you want to abort after the first object press ESC]) its really promising. (i used it to connect the message boxes to [demux] ;) ) cant await the canvasposition object being working on other "third party" objects. g.
Hans-Christoph Steiner:
Sounds very cool, but the [keynamedown] object seems to be missing. I got it from trunk/abstractions/sfruit/keynamedown.pd
Works wonderfully! For ideas, check out this wiki page: http://puredata.info/dev/GuiIdeas plus I think the DesireData people put out a couple video demos.
.hc
On Jun 16, 2009, at 8:55 PM, Luke Iannini wrote:
Yo all, My usual caveat applies: that I'm as nearly unconscious as I always am when I'm releasing public works :)
I had a flight today which gave me a chance to finish up [canvasselect] (by merging in some code from zexy's tabdump in my usual naive fashion to make it output index-lists rather than just post() the currently selected objects (thus, IO, you should probably double check my work :) )), and then put it to work starting to create some patching-assist functionality similar to max-toolbox.
I'm pretty excited for what can come out of this!
What I've got so far is the start of the [meta-abs] library, [meta-connect] - it works like: select one or more objects, press "[", select a new group of objects you'd like to connect the first group to, and press "]". [meta-connect] will magically connect them all (you can make some lovely line art selecting a big pile of [bng]s :) ).
Not amazingly useful, yet, but the start o' something good : ). I sketched a mini-domain language for this sort of thing here: http://puredata.info/dev/GuiIdeas#object-numbering a long while ago. I'd love to hear some ideas on how such complex autopatching would work ideally, as I'll be implementing a suite of this type of thing over the next couple weeks.
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
Back soon with more... Best Luke <canvasselect-list_of_selected_objects.diff><meta-connect.pd><meta-connect-help.pd><canvasselect.pd_darwin>_______________________________________________
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
I spent 33 years and four months in active military service and during that period I spent most of my time as a high class muscle man for Big Business, for Wall Street and the bankers. - General Smedley Butler
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
#N canvas 0 22 498 408 10; #X obj 48 108 meta-connect; #X obj 338 150 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 211 143 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 297 142 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 262 137 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 188 229 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 310 232 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 381 243 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 242 249 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 10 17 [meta-connect] alpha 0.1 - select any number of the bangs above and press [ , then select any number of the bangs below and press ]. The first group will automatically connect themselves to the second group.; #X obj 222 322 demux 1 2 3 4 5 6 7 8; #X obj 222 374 mux 12 2 3 4 5 6 7; #X connect 7 0 7 0;
#N canvas 529 32 667 661 10; #X obj 169 334 route connect to; #X msg 169 163 connect; #X msg 193 198 to; #X obj 148 386 list; #X obj 215 387 t b a; #X obj 148 411 list-drip; #X obj 221 453 list; #X obj 169 311 list trim; #X obj 146 523 list prepend; #X obj 148 454 t b a; #X obj 146 499 list-drip; #X text 271 370 i am exhausted making this , probably a much more efficient way exists; #X obj 146 599 sendcanvas 1; #X obj 232 265 canvasselect 1; #X obj 169 233 t a b; #X obj 169 288 list append; #X obj 259 -16 key; #X msg 332 128 0; #X msg 342 138 1; #X msg 352 148 2; #X msg 362 158 3; #X msg 372 128 4; #X msg 382 138 5; #X msg 392 148 6; #X msg 402 158 7; #X msg 412 128 8; #X obj 249 514 list; #X obj 377 52 expr if($f1 > 48 && $f1 < 58 , 1 , 0); #X obj 332 271 demux; #X obj 378 226 f; #X obj 405 227 + 1; #X obj 378 246 mod 2; #X obj 377 73 sel 1; #X obj 332 100 route 49 50 51 52 53 54 55 56 57 27; #X msg 146 569 connect $1 $4 $2 $3; #X msg 518 169 0; #X obj 259 7 t f f f; #X obj 259 81 f; #X obj 286 82 + 1; #X obj 259 101 mod 2; #X obj 259 121 sel 0; #X obj 259 29 expr if($f1 > 48 && $f1 < 58 , 1 , 0); #X obj 259 50 sel 1; #X obj 146 544 list append; #X connect 0 0 3 1; #X connect 0 1 4 0; #X connect 1 0 14 0; #X connect 2 0 14 0; #X connect 3 0 5 0; #X connect 4 0 3 0; #X connect 4 1 6 1; #X connect 5 0 9 0; #X connect 6 0 10 0; #X connect 7 0 0 0; #X connect 8 0 43 0; #X connect 9 0 6 0; #X connect 9 1 8 1; #X connect 10 0 8 0; #X connect 13 0 15 1; #X connect 14 0 15 0; #X connect 14 1 13 0; #X connect 15 0 7 0; #X connect 16 0 36 0; #X connect 17 0 28 0; #X connect 18 0 28 0; #X connect 19 0 28 0; #X connect 20 0 28 0; #X connect 21 0 28 0; #X connect 22 0 28 0; #X connect 23 0 28 0; #X connect 24 0 28 0; #X connect 25 0 28 0; #X connect 26 0 43 1; #X connect 27 0 32 0; #X connect 28 0 26 1; #X connect 28 1 26 0; #X connect 29 0 30 0; #X connect 29 0 31 0; #X connect 30 0 29 1; #X connect 31 0 28 1; #X connect 32 0 29 0; #X connect 33 0 17 0; #X connect 33 1 18 0; #X connect 33 2 19 0; #X connect 33 3 20 0; #X connect 33 4 21 0; #X connect 33 5 22 0; #X connect 33 6 23 0; #X connect 33 7 24 0; #X connect 33 8 25 0; #X connect 33 9 15 1; #X connect 33 9 3 1; #X connect 33 9 6 1; #X connect 33 9 8 1; #X connect 33 9 26 1; #X connect 33 9 35 0; #X connect 33 9 43 1; #X connect 34 0 12 0; #X connect 35 0 29 1; #X connect 35 0 37 1; #X connect 36 0 41 0; #X connect 36 1 33 0; #X connect 36 2 27 0; #X connect 37 0 38 0; #X connect 37 0 39 0; #X connect 38 0 37 1; #X connect 39 0 40 0; #X connect 40 0 1 0; #X connect 40 1 2 0; #X connect 41 0 42 0; #X connect 42 0 37 0; #X connect 43 0 34 0;
Luke Iannini wrote:
Yo all,
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
do you mean like [canvasobjectposition]?
fgamsdr IOhannes
great! thanks! georg
IOhannes m zmoelnig schrieb:
Luke Iannini wrote:
Yo all,
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
do you mean like [canvasobjectposition]?
fgamsdr IOhannes
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
hi,
i did an abstraction for aligning objects. thanks to canvasobjectposition this was not too hard. if you put it in your search path you can create an [align] object which provides keyboard shortcuts for left-align and top-align. and i did another option for distribution in equal distances both x and y. e.g. press "|" and x for left-align there is also an undo (hit "ESC") function since such actions are not undoable with ctrl-z. @luke: i hope there are some inspirations for your autoconnection patch inside (it was very inspiring for me)
cheers georg
IOhannes m zmoelnig schrieb:
Luke Iannini wrote:
Yo all,
IOhannes, do you know if it's possible to get and set the coordinates of arbitrary objects simply by index, much like [canvasposition] can do now but including externals etc. where you can't place a [canvasposition] object? This would enable the final piece of maxtoolbox layout stuff, which was Pd's Tidy... function times 10000, and would let me do stuff like "connect the 4 horizontally-aligned selected objects above to the 4 selected objects below" or simply "connect these all top to bottom" with a single keycommand.
do you mean like [canvasobjectposition]?
fgamsdr IOhannes
Pd-dev mailing list Pd-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
#N canvas 746 112 594 442 10; #X obj 93 237 canvasselect 1; #X obj 81 18 key; #N canvas 1065 466 450 300 sortobjectsbyxy 0; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 120 138 t b b; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj -72 114 canvasobjectposition 2; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X connect 0 0 11 0; #X connect 0 1 12 0; #X connect 1 0 13 0; #X connect 2 0 14 0; #X connect 2 1 10 0; #X connect 3 0 4 0; #X connect 3 0 16 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 17 0; #X connect 9 0 0 0; #X connect 10 0 9 0; #X connect 10 0 19 0; #X connect 10 1 16 0; #X connect 13 0 2 0; #X connect 13 1 4 1; #X connect 13 1 3 1; #X connect 13 1 5 1; #X connect 13 1 6 1; #X connect 13 1 17 1; #X connect 13 1 18 1; #X connect 14 0 3 0; #X connect 14 1 15 0; #X connect 14 2 15 1; #X connect 15 0 7 0; #X connect 15 0 8 0; #X connect 16 0 0 1; #X connect 16 0 20 1; #X connect 17 0 18 0; #X connect 17 0 19 1; #X connect 18 0 17 1; #X connect 19 0 20 0; #X connect 20 0 21 0; #X connect 20 1 22 0; #X restore 93 278 pd sortobjectsbyxy; #N canvas 0 0 450 466 undo 0; #X obj 51 24 inlet; #X obj 51 47 t l b; #X obj 49 150 list; #X obj 88 150 list; #X obj 28 177 list; #X obj 149 150 list; #X obj 188 150 list; #X obj 183 179 list; #X obj 51 68 list-drip; #X obj -51 110 canvasobjectposition 2; #X obj 51 89 t b f; #X obj 261 19 inlet; #X obj 28 222 list split 2; #X obj 183 222 list split 1; #X obj 28 245 list; #X obj 67 243 list; #X obj 183 246 t b b b f; #X obj 248 246 list; #X obj 256 69 t b b; #X obj 207 44 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 183 199 t l b; #X obj 28 199 t l b; #X obj 28 283 canvasobjectposition 2; #X connect 0 0 1 0; #X connect 1 0 8 0; #X connect 1 1 2 1; #X connect 1 1 3 1; #X connect 1 1 5 1; #X connect 1 1 6 1; #X connect 2 0 3 0; #X connect 2 0 4 1; #X connect 3 0 2 1; #X connect 4 0 21 0; #X connect 5 0 6 0; #X connect 5 0 7 1; #X connect 6 0 5 1; #X connect 7 0 20 0; #X connect 8 0 10 0; #X connect 9 0 2 0; #X connect 10 0 9 0; #X connect 10 1 9 1; #X connect 10 1 5 0; #X connect 11 0 18 0; #X connect 12 0 14 1; #X connect 12 1 15 1; #X connect 13 0 16 0; #X connect 13 1 17 1; #X connect 14 0 22 0; #X connect 15 0 4 0; #X connect 16 0 17 0; #X connect 16 1 15 0; #X connect 16 2 14 0; #X connect 16 3 22 1; #X connect 17 0 7 0; #X connect 18 0 7 0; #X connect 18 1 4 0; #X connect 19 0 18 0; #X connect 20 0 13 0; #X connect 20 1 7 1; #X connect 21 0 12 0; #X connect 21 1 4 1; #X restore 42 279 pd undo; #X obj 93 257 t l l; #X obj 72 302 list; #X obj 107 302 list; #X obj 142 302 list; #X obj 177 302 list; #N canvas 0 0 450 300 align 0; #X obj 17 8 inlet; #X obj 17 39 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 83 pd once; #X obj 17 60 t b f f; #X msg 17 144 $2; #X obj 17 165 list prepend; #X obj 166 103 t b f; #X msg 166 144 $1; #X obj 166 123 canvasobjectposition 2; #X obj 17 123 canvasobjectposition 2; #X obj 17 185 canvasobjectposition 2; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 2 0 6 0; #X connect 3 0 9 0; #X connect 3 1 9 1; #X connect 3 1 10 1; #X connect 3 2 2 0; #X connect 4 0 5 0; #X connect 5 0 10 0; #X connect 6 0 8 0; #X connect 6 1 8 1; #X connect 7 0 5 1; #X connect 8 0 7 0; #X connect 9 0 4 0; #X restore 107 328 pd align x; #N canvas 0 0 450 300 align 0; #X obj 17 8 inlet; #X obj 17 39 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 83 pd once; #X obj 17 60 t b f f; #X obj 166 103 t b f; #X obj 166 123 canvasobjectposition 2; #X obj 17 123 canvasobjectposition 2; #X obj 17 215 canvasobjectposition 2; #X obj 17 195 list; #X msg 17 144 $1; #X msg 166 144 $2; #X obj 38 174 t f b; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 2 0 4 0; #X connect 3 0 6 0; #X connect 3 1 6 1; #X connect 3 1 7 1; #X connect 3 2 2 0; #X connect 4 0 5 0; #X connect 4 1 5 1; #X connect 5 0 10 0; #X connect 6 0 9 0; #X connect 8 0 7 0; #X connect 9 0 8 0; #X connect 10 0 11 0; #X connect 11 0 8 1; #X restore 177 329 pd align y; #N canvas 0 0 450 300 2once 0; #X obj 169 77 inlet; #X msg 202 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 73 inlet; #X obj 169 202 spigot; #X obj 79 77 inlet; #X msg 112 171 0; #X obj 79 251 outlet; #X obj 79 121 t b a; #X obj 79 202 spigot; #X msg 291 171 1; #X obj 264 121 sel 0; #X obj 264 99 route bang float; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 10 1; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 13 0; #X connect 5 0 2 0; #X connect 6 0 9 0; #X connect 7 0 10 1; #X connect 7 0 5 1; #X connect 9 0 7 0; #X connect 9 1 10 0; #X connect 10 0 8 0; #X connect 11 0 5 1; #X connect 11 0 10 1; #X connect 12 0 1 0; #X connect 12 0 7 0; #X connect 12 1 11 0; #X connect 13 0 11 0; #X connect 13 1 12 0; #X connect 13 2 11 0; #X restore 154 112 pd 2once; #N canvas 0 0 450 300 avg-dist 0; #X obj 19 96 list-minmax; #X obj 57 71 t l l; #X obj 96 97 list-len; #X obj 43 153 -; #X obj 43 181 / 1; #X obj 43 201 int; #X obj 57 25 inlet; #X obj 43 249 outlet; #X obj 96 151 - 1; #X connect 0 0 3 1; #X connect 0 1 3 0; #X connect 1 0 0 0; #X connect 1 1 2 0; #X connect 2 0 8 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 1 0; #X connect 8 0 4 1; #X restore 72 384 pd avg-dist; #X obj 107 359 list; #X obj 177 359 list; #N canvas 0 0 450 300 2once 0; #X obj 169 77 inlet; #X msg 202 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X obj 169 202 spigot; #X obj 79 77 inlet; #X msg 112 171 0; #X obj 79 251 outlet; #X obj 79 121 t b a; #X obj 79 202 spigot; #X msg 303 171 1; #X obj 264 121 route 0; #X obj 264 99 route bang float; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 10 1; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 13 0; #X connect 5 0 2 0; #X connect 6 0 9 0; #X connect 7 0 10 1; #X connect 7 0 5 1; #X connect 9 0 7 0; #X connect 9 1 10 0; #X connect 10 0 8 0; #X connect 11 0 5 1; #X connect 11 0 10 1; #X connect 12 0 1 0; #X connect 12 1 11 0; #X connect 13 0 11 0; #X connect 13 1 12 0; #X connect 13 2 11 0; #X restore 157 142 pd 2once; #X obj 157 163 t b b; #X obj 202 163 t b b; #N canvas 0 0 450 300 avg-dist 0; #X obj 19 96 list-minmax; #X obj 57 71 t l l; #X obj 96 97 list-len; #X obj 43 153 -; #X obj 43 181 / 1; #X obj 43 201 int; #X obj 57 25 inlet; #X obj 43 249 outlet; #X obj 96 151 - 1; #X connect 0 0 3 1; #X connect 0 1 3 0; #X connect 1 0 0 0; #X connect 1 1 2 0; #X connect 2 0 8 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 7 0; #X connect 6 0 1 0; #X connect 8 0 4 1; #X restore 142 384 pd avg-dist; #N canvas 9 373 450 300 algneq 0; #X obj 17 8 inlet; #X obj 17 69 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 113 pd once; #X obj 17 90 t b f f; #X obj 166 133 t b f; #X obj 166 153 canvasobjectposition 2; #X obj 17 153 canvasobjectposition 2; #X obj 17 275 canvasobjectposition 2; #X obj 310 20 inlet; #X obj 86 204 f; #X obj 113 204 + 0; #X msg 128 184 0; #X obj 17 250 t l b; #X msg 166 174 $1; #X msg 17 174 $2; #X obj 17 225 list prepend; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 1 1 11 0; #X connect 2 0 4 0; #X connect 3 0 6 0; #X connect 3 1 6 1; #X connect 3 1 7 1; #X connect 3 2 2 0; #X connect 4 0 5 0; #X connect 4 1 5 1; #X connect 5 0 13 0; #X connect 6 0 14 0; #X connect 8 0 10 1; #X connect 9 0 10 0; #X connect 9 0 15 1; #X connect 10 0 9 1; #X connect 11 0 10 1; #X connect 12 0 7 0; #X connect 12 1 9 0; #X connect 13 0 9 0; #X connect 14 0 15 0; #X connect 15 0 12 0; #X restore 9 413 pd algneq x; #N canvas 0 0 450 300 algneq 0; #X obj 17 8 inlet; #X obj 17 69 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 113 pd once; #X obj 17 90 t b f f; #X obj 166 133 t b f; #X obj 166 153 canvasobjectposition 2; #X obj 17 153 canvasobjectposition 2; #X obj 17 275 canvasobjectposition 2; #X obj 310 20 inlet; #X obj 86 204 f; #X obj 113 204 + 0; #X msg 128 184 0; #X obj 17 250 t l b; #X msg 166 174 $2; #X msg 17 174 $1; #X obj 17 225 list; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 1 1 11 0; #X connect 2 0 4 0; #X connect 3 0 6 0; #X connect 3 1 6 1; #X connect 3 1 7 1; #X connect 3 2 2 0; #X connect 4 0 5 0; #X connect 4 1 5 1; #X connect 5 0 13 0; #X connect 6 0 14 0; #X connect 8 0 10 1; #X connect 9 0 10 0; #X connect 9 0 15 1; #X connect 10 0 9 1; #X connect 11 0 10 1; #X connect 12 0 7 0; #X connect 12 1 9 0; #X connect 13 0 9 0; #X connect 14 0 15 0; #X connect 15 0 12 0; #X restore 79 413 pd algneq y; #X obj 157 183 delay 4; #X obj 202 183 delay 4; #X text 286 18 align; #X text 287 88 USAGE:; #X text 287 39 automatically align objects by x- or y- axis; #X text 287 49 or distribute them with equal distances (beta); #X text 287 99 place align.pd in your search path; #X text 287 109 create an [align] object inside the patch where; #X text 287 119 you want to use it.; #X text 287 139 Keyboard commands; #X text 287 159 "x" for left-align or; #X text 287 169 "y" for top-align; #X obj 81 40 sel 27 124 35 120 121; #X text 287 149 for aligning press "|" (pipe) and; #X text 287 189 for equal distance distribution; #X text 287 199 press "#" (grid metaphor) and; #X text 287 209 "x" for horizontal or; #X text 287 219 "y" for vertical; #X text 287 269 undo function; #X text 287 279 hit "ESC" after one of this actions; #X msg 199 90 0; #X msg 202 70 0; #X text 287 239 object this means not space between.; #X text 287 229 ! since ther is no way to get the size of an; #X text 287 322 this is based on iem_guts; #X text 287 332 thanks to IOhannes m zmoelnig; #X text 288 380 (cc) 2009 Georg Werner; #X connect 0 0 4 0; #X connect 1 0 33 0; #X connect 2 0 5 1; #X connect 2 1 6 1; #X connect 2 1 13 1; #X connect 2 2 7 1; #X connect 2 3 8 1; #X connect 2 3 14 1; #X connect 4 0 2 0; #X connect 4 1 3 0; #X connect 5 0 12 0; #X connect 6 0 9 0; #X connect 7 0 18 0; #X connect 8 0 10 0; #X connect 11 0 6 0; #X connect 11 1 8 0; #X connect 12 0 19 1; #X connect 13 0 19 0; #X connect 14 0 20 0; #X connect 15 0 16 0; #X connect 15 1 17 0; #X connect 16 0 21 0; #X connect 16 1 5 0; #X connect 17 0 22 0; #X connect 17 1 7 0; #X connect 18 0 20 1; #X connect 21 0 13 0; #X connect 22 0 14 0; #X connect 33 0 3 1; #X connect 33 1 11 2; #X connect 33 1 0 0; #X connect 33 1 42 0; #X connect 33 2 15 2; #X connect 33 2 0 0; #X connect 33 2 41 0; #X connect 33 3 11 0; #X connect 33 3 15 0; #X connect 33 4 11 1; #X connect 33 4 15 1; #X connect 41 0 11 2; #X connect 42 0 15 2;
Georg Werner wrote:
hi,
i did an abstraction for aligning objects. thanks to canvasobjectposition this was not too hard. if you put it in your search path you can create an [align] object which provides keyboard shortcuts for left-align and top-align. and i did another option for distribution in equal distances both x and y.
"2list-sort"?
fgamsdr IOhannes
this is a little workaround for not having associative arrays ... ;) sorting 2 lists by the first one. (in this case e.g. the x-values and ids of objects) g.
IOhannes m zmoelnig schrieb:
Georg Werner wrote:
hi,
i did an abstraction for aligning objects. thanks to canvasobjectposition this was not too hard. if you put it in your search path you can create an [align] object which provides keyboard shortcuts for left-align and top-align. and i did another option for distribution in equal distances both x and y.
"2list-sort"?
fgamsdr IOhannes
Georg Werner wrote:
this is a little workaround for not having associative arrays ... ;) sorting 2 lists by the first one. (in this case e.g. the x-values and ids of objects)
yes, but i don't have it... where can i find it? don't want to do exercises that late...
fgmasdr IOhannes
oh sorry - there u are ... ;) Georg
IOhannes m zmoelnig schrieb:
Georg Werner wrote:
this is a little workaround for not having associative arrays ... ;) sorting 2 lists by the first one. (in this case e.g. the x-values and ids of objects)
yes, but i don't have it... where can i find it? don't want to do exercises that late...
fgmasdr IOhannes
#N canvas 69 56 782 540 10; #X obj 129 310 list split 1; #X obj 57 266 list-len; #X obj 163 331 list split 1; #X obj 129 373 list append; #X obj 57 347 list; #X obj 57 287 > 0; #X obj 150 472 outlet; #X obj 57 308 sel 1 0; #X obj 163 49 inlet; #X obj 233 393 list prepend; #X obj 150 450 list append; #X obj 727 133 loadbang; #X obj 662 45 inlet; #N canvas 0 0 552 424 mux 0; #X obj 40 52 inlet; #X obj 153 52 inlet; #X obj 255 49 inlet; #X obj 40 266 spigot 1; #X obj 153 266 spigot; #X obj 255 223 unpack 0 0; #X msg 255 177 1 0; #X msg 306 195 0 1; #X obj 357 92 select 0; #X obj 255 70 select asc desc; #X obj 40 317 outlet; #X connect 0 0 3 0; #X connect 1 0 4 0; #X connect 2 0 9 0; #X connect 3 0 10 0; #X connect 4 0 10 0; #X connect 5 0 3 1; #X connect 5 1 4 1; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 9 0 6 0; #X connect 9 1 7 0; #X connect 9 2 8 0; #X restore 226 236 pd mux; #X obj 662 194 list append $1; #X obj 662 164 t b a; #X obj 330 392 t a; #N canvas 855 132 842 735 minmaxpos 0; #X obj 128 97 list-drip; #X obj 128 120 route float; #X obj 159 256 f; #X obj 106 664 outlet; #X obj 165 639 f; #X obj 165 666 outlet; #X obj 106 575 t b b; #X obj 106 10 inlet; #X obj 106 636 f; #N canvas 0 0 450 300 once 0; #X obj 110 75 inlet; #X obj 105 187 spigot 1; #X obj 110 104 t b f; #X msg 125 151 0; #X msg 165 99 1; #X obj 165 63 inlet; #X obj 102 219 outlet; #X connect 0 0 2 0; #X connect 1 0 6 0; #X connect 2 0 3 0; #X connect 2 1 1 0; #X connect 3 0 1 1; #X connect 4 0 1 1; #X connect 5 0 4 0; #X restore 262 183 pd once; #X obj 275 258 f; #X obj 244 257 max; #X obj 128 256 min; #X text 323 183 prime [min] and [max] with first item once; #N canvas 0 0 450 300 count 0; #X obj 120 148 f 0; #X obj 148 149 + 1; #X obj 163 100 0; #X obj 117 24 inlet; #X obj 119 176 outlet; #X obj 181 25 inlet; #X obj 114 47 b; #X connect 0 0 1 0; #X connect 0 0 4 0; #X connect 1 0 0 1; #X connect 2 0 0 1; #X connect 3 0 6 0; #X connect 5 0 2 0; #X connect 6 0 0 0; #X restore 168 371 pd count; #X obj 128 470 change; #X obj 244 472 change; #X obj 128 527 f; #X obj 244 525 f; #X obj 128 495 b; #X obj 244 496 b; #X msg 429 356 set $1; #X msg 601 357 0; #X obj 106 30 t b a b b; #X obj 128 150 t a a b a; #X text 637 358 reset positions; #X text 483 356 set change; #X text 302 475 if min or max changes , store the new positions.; #X text 227 24 output positions of min and max float in a list (zero-based) ; #X connect 0 0 1 0; #X connect 1 0 24 0; #X connect 2 0 12 1; #X connect 4 0 5 0; #X connect 6 0 8 0; #X connect 6 1 4 0; #X connect 7 0 23 0; #X connect 8 0 3 0; #X connect 9 0 11 1; #X connect 9 0 12 1; #X connect 9 0 21 0; #X connect 9 0 22 0; #X connect 10 0 11 1; #X connect 11 0 10 0; #X connect 11 0 16 0; #X connect 12 0 2 0; #X connect 12 0 15 0; #X connect 14 0 18 1; #X connect 14 0 17 1; #X connect 15 0 19 0; #X connect 16 0 20 0; #X connect 17 0 8 1; #X connect 18 0 4 1; #X connect 19 0 17 0; #X connect 20 0 18 0; #X connect 21 0 16 0; #X connect 21 0 15 0; #X connect 22 0 4 1; #X connect 22 0 8 1; #X connect 23 0 6 0; #X connect 23 1 0 0; #X connect 23 2 14 1; #X connect 23 3 9 1; #X connect 24 0 12 0; #X connect 24 1 11 0; #X connect 24 2 14 0; #X connect 24 3 9 0; #X restore 226 199 pd minmaxpos; #X obj 163 86 list-filter; #N canvas 0 0 677 293 checknum 0; #X obj 131 95 route float; #X msg 131 116 1; #X obj 205 149 print; #X msg 205 119 list-sort: Warning: dropped a non-number from list; #X obj 131 70 inlet; #X obj 131 149 outlet; #X connect 0 0 1 0; #X connect 0 1 3 0; #X connect 1 0 5 0; #X connect 3 0 2 0; #X connect 4 0 0 0; #X restore 252 86 pd checknum; #X obj 495 295 list split 1; #X obj 529 316 list split 1; #X obj 495 358 list append; #X obj 599 378 list prepend; #X obj 516 435 list append; #X obj 696 377 t a; #X obj 163 120 t a b b; #X obj 494 199 list; #X obj 495 251 list; #X obj 515 154 t l b; #X obj 163 163 t a a b a a; #X obj 515 45 inlet; #X obj 516 468 outlet; #X text 56 513 2009 Georg Werner (based on list-sort by Michal Seta) ; #X text 11 6 [2list-sort] sort two incoming lists of numerical values by the first list in an ascending or descending order; #X connect 0 0 3 0; #X connect 0 1 2 0; #X connect 1 0 5 0; #X connect 2 0 9 0; #X connect 2 1 3 1; #X connect 3 0 4 1; #X connect 4 0 30 0; #X connect 5 0 7 0; #X connect 7 0 4 0; #X connect 7 1 10 0; #X connect 7 1 24 0; #X connect 8 0 18 0; #X connect 9 0 10 1; #X connect 9 0 16 0; #X connect 10 0 6 0; #X connect 11 0 14 0; #X connect 12 0 15 0; #X connect 13 0 0 1; #X connect 13 0 20 1; #X connect 14 0 13 2; #X connect 15 0 14 0; #X connect 15 1 14 1; #X connect 16 0 9 1; #X connect 17 0 13 0; #X connect 17 1 13 1; #X connect 18 0 26 0; #X connect 18 1 19 0; #X connect 19 0 18 1; #X connect 20 0 22 0; #X connect 20 1 21 0; #X connect 21 0 23 0; #X connect 21 1 22 1; #X connect 22 0 28 1; #X connect 23 0 24 1; #X connect 23 0 25 0; #X connect 24 0 32 0; #X connect 25 0 23 1; #X connect 26 0 30 0; #X connect 26 1 9 1; #X connect 26 1 23 1; #X connect 26 2 27 0; #X connect 27 0 28 1; #X connect 28 0 20 0; #X connect 29 0 27 1; #X connect 29 1 28 1; #X connect 30 0 1 0; #X connect 30 1 0 0; #X connect 30 2 28 0; #X connect 30 4 17 0; #X connect 31 0 29 0;
On Tue, Jun 30, 2009 at 10:40 AM, Georg Wernergeorg@fricklr.de wrote:
this is a little workaround for not having associative arrays ... ;) sorting 2 lists by the first one. (in this case e.g. the x-values and ids of objects) g.
I think IOhannes means that the object is missing ; )
I also made some alignment patches, ha, but forgot to announce them - I'm keeping stuff in the SVN under abstractions/meta-abs/experimental. Looks like yours is cooler anyway!
By the way, check out [sort] in zexy - it outputs both a sorted list as well as indices of the original positions in the input list, so you can get "sort-one-list-by-another" functionality out of it (it's what i'm using in my alignment patches) - and it's sure to be quicker. (oh, I suppose you could already be using it in 2list-sort but I can't know : ) )
Very glad an ecosystem is blooming!
Best Luke
IOhannes m zmoelnig schrieb:
Georg Werner wrote:
hi,
i did an abstraction for aligning objects. thanks to canvasobjectposition this was not too hard. if you put it in your search path you can create an [align] object which provides keyboard shortcuts for left-align and top-align. and i did another option for distribution in equal distances both x and y.
"2list-sort"?
fgamsdr IOhannes
Hi Luke, i saw your patches now and thought of how to combine our efforts instead of doing the same work twice. i can imagine a modular system. like a core with the keyboard shortcuts and different modules which are triggered by them (each module gets the list of canvasselect as input). a next step would be to form a consistent set of shortcuts and to build the core (i think we could use my attempt as a starting point). this could end in an abstraction [meta] which includes all the functionality like aligning and connecting objects. cheers georg
Luke Iannini schrieb:
On Tue, Jun 30, 2009 at 10:40 AM, Georg Wernergeorg@fricklr.de wrote:
this is a little workaround for not having associative arrays ... ;) sorting 2 lists by the first one. (in this case e.g. the x-values and ids of objects) g.
I think IOhannes means that the object is missing ; )
I also made some alignment patches, ha, but forgot to announce them - I'm keeping stuff in the SVN under abstractions/meta-abs/experimental. Looks like yours is cooler anyway!
By the way, check out [sort] in zexy - it outputs both a sorted list as well as indices of the original positions in the input list, so you can get "sort-one-list-by-another" functionality out of it (it's what i'm using in my alignment patches) - and it's sure to be quicker. (oh, I suppose you could already be using it in 2list-sort but I can't know : ) )
Very glad an ecosystem is blooming!
Best Luke
IOhannes m zmoelnig schrieb:
Georg Werner wrote:
hi,
i did an abstraction for aligning objects. thanks to canvasobjectposition this was not too hard. if you put it in your search path you can create an [align] object which provides keyboard shortcuts for left-align and top-align. and i did another option for distribution in equal distances both x and y.
"2list-sort"?
fgamsdr IOhannes
hi,
where is [canvasobjectposition] ?
I could not find it.
I am using pd-extended 0.41
abraço glerm
glerm soares wrote:
hi,
where is [canvasobjectposition] ?
it's in iemguts.
I could not find it.
I am using pd-extended 0.41
afaik iemguts are not included in Pd-extended ieven if they were, [canvasobjectposition] would not be included, as it was only published (and written) after PdX-0.41 was released.
you have to grab it from source and compile it on your own...
gamsdr IOhannes
On Jul 1, 2009, at 8:02 AM, IOhannes m zmoelnig wrote:
glerm soares wrote:
hi, where is [canvasobjectposition] ?
it's in iemguts.
I could not find it. I am using pd-extended 0.41
afaik iemguts are not included in Pd-extended ieven if they were, [canvasobjectposition] would not be included, as it was only published (and written) after PdX-0.41 was released.
you have to grab it from source and compile it on your own...
Once you are ready for a stable release with iemguts, it would be nice to have it in Pd-extended. Please add it when you are ready (should just be a matter of adding 'iemguts' to the TARGETS in externals/ Makefile).
It could be added to the nightly builds for now, then we can make the call whether to include it in the 0.42 release when that time comes.
.hc
----------------------------------------------------------------------------
I spent 33 years and four months in active military service and during that period I spent most of my time as a high class muscle man for Big Business, for Wall Street and the bankers. - General Smedley Butler
Georg Werner wrote:
Hi Luke, i saw your patches now and thought of how to combine our efforts instead of doing the same work twice. i can imagine a modular system. like a core with the keyboard shortcuts and different modules which are triggered by them (each module gets the list of canvasselect as input).
which reminds me: your current patches all use [key] which gives you any key in the entire Pd-environment. [receivecanvas] will give you (among other things) keyboard input for a single canvas. thus you can use several [meta...]s in different patches at the same time without interfering.
fgamsdr IOhannes
cool. didn't see that. g.
IOhannes m zmoelnig schrieb:
Georg Werner wrote:
Hi Luke, i saw your patches now and thought of how to combine our efforts instead of doing the same work twice. i can imagine a modular system. like a core with the keyboard shortcuts and different modules which are triggered by them (each module gets the list of canvasselect as input).
which reminds me: your current patches all use [key] which gives you any key in the entire Pd-environment. [receivecanvas] will give you (among other things) keyboard input for a single canvas. thus you can use several [meta...]s in different patches at the same time without interfering.
fgamsdr IOhannes
Georg Werner wrote:
cool. didn't see that.
well, there are objects popping up constantly... i admit that [receivecanvas] might not be the most intuitive name for this kind of functionality.
asdrm IOhannes
hi,
here is my new version of align its completely reorganized and the structure is prepared to host also the connectivity functions. @Luke: feel free to insert and change things. if the connection functions are ready we should rename it ;) my proposasl for shortcuts is "|" for aligning in a straight line (x and y), "#" other aligning types (equal distribution, grid, staircase) and "[" for connecting functions. cheers g.
IOhannes m zmoelnig schrieb:
Georg Werner wrote:
cool. didn't see that.
well, there are objects popping up constantly... i admit that [receivecanvas] might not be the most intuitive name for this kind of functionality.
asdrm IOhannes
#N canvas 746 112 610 518 10; #X text 286 78 align; #X text 287 148 USAGE:; #X text 287 99 automatically align objects by x- or y- axis; #X text 287 109 or distribute them with equal distances (beta); #X text 287 159 place align.pd in your search path; #X text 287 169 create an [align] object inside the patch where; #X text 287 179 you want to use it.; #X text 287 199 Keyboard commands; #X text 287 219 "x" for left-align or; #X text 287 229 "y" for top-align; #X text 287 209 for aligning press "|" (pipe) and; #X text 287 249 for equal distance distribution; #X text 287 259 press "#" (grid metaphor) and; #X text 287 269 "x" for horizontal or; #X text 287 279 "y" for vertical; #X text 287 339 undo function; #X text 287 349 hit "ESC" after one of this actions; #X text 287 299 object this means not space between.; #X text 287 289 ! since ther is no way to get the size of an; #X text 287 392 this is based on iem_guts; #X text 288 440 (cc) 2009 Georg Werner; #N canvas 248 449 450 300 align_x 0; #N canvas 1065 466 450 300 sortobjectsbyxy 0; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 120 138 t b b; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X obj -72 114 canvasobjectposition 3; #X connect 0 0 11 0; #X connect 0 1 12 0; #X connect 1 0 13 0; #X connect 2 0 14 0; #X connect 2 1 10 0; #X connect 3 0 4 0; #X connect 3 0 15 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 16 0; #X connect 9 0 0 0; #X connect 10 0 9 0; #X connect 10 0 18 0; #X connect 10 1 15 0; #X connect 13 0 2 0; #X connect 13 1 4 1; #X connect 13 1 3 1; #X connect 13 1 5 1; #X connect 13 1 6 1; #X connect 13 1 16 1; #X connect 13 1 17 1; #X connect 14 0 3 0; #X connect 14 1 22 0; #X connect 14 2 22 1; #X connect 15 0 0 1; #X connect 15 0 19 1; #X connect 16 0 17 0; #X connect 16 0 18 1; #X connect 17 0 16 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 19 1 21 0; #X connect 22 0 7 0; #X connect 22 0 8 0; #X restore 83 86 pd sortobjectsbyxy; #X obj 83 64 inlet; #X obj 97 128 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 246 172 pd once; #X obj 97 149 t b f f; #X msg 97 233 $2; #X obj 97 254 list prepend; #X obj 246 192 t b f; #X msg 246 233 $1; #X obj 246 212 canvasobjectposition 2; #X obj 97 212 canvasobjectposition 2; #X obj 97 274 canvasobjectposition 2; #X connect 0 3 2 0; #X connect 1 0 0 0; #X connect 2 0 4 0; #X connect 2 1 3 1; #X connect 3 0 7 0; #X connect 4 0 10 0; #X connect 4 1 10 1; #X connect 4 1 11 1; #X connect 4 2 3 0; #X connect 5 0 6 0; #X connect 6 0 11 0; #X connect 7 0 9 0; #X connect 7 1 9 1; #X connect 8 0 6 1; #X connect 9 0 8 0; #X connect 10 0 5 0; #X restore 25 120 pd align_x; #N canvas 862 232 450 300 align_y 0; #N canvas 1065 466 450 300 sortobjectsbyxy 0; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 120 138 t b b; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X obj -72 114 canvasobjectposition 3; #X connect 0 0 11 0; #X connect 0 1 12 0; #X connect 1 0 13 0; #X connect 2 0 14 0; #X connect 2 1 10 0; #X connect 3 0 4 0; #X connect 3 0 15 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 16 0; #X connect 9 0 0 0; #X connect 10 0 9 0; #X connect 10 0 18 0; #X connect 10 1 15 0; #X connect 13 0 2 0; #X connect 13 1 4 1; #X connect 13 1 3 1; #X connect 13 1 5 1; #X connect 13 1 6 1; #X connect 13 1 16 1; #X connect 13 1 17 1; #X connect 14 0 3 0; #X connect 14 1 22 0; #X connect 14 2 22 1; #X connect 15 0 0 1; #X connect 15 0 19 1; #X connect 16 0 17 0; #X connect 16 0 18 1; #X connect 17 0 16 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 19 1 21 0; #X connect 22 0 7 0; #X connect 22 0 8 0; #X restore 83 56 pd sortobjectsbyxy; #X obj 83 34 inlet; #X obj 109 84 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 258 128 pd once; #X obj 109 105 t b f f; #X obj 258 148 t b f; #X obj 258 168 canvasobjectposition 2; #X obj 109 168 canvasobjectposition 2; #X obj 109 260 canvasobjectposition 2; #X obj 109 240 list; #X msg 109 189 $1; #X msg 258 189 $2; #X obj 130 219 t f b; #X connect 0 1 2 0; #X connect 1 0 0 0; #X connect 2 0 4 0; #X connect 2 1 3 1; #X connect 3 0 5 0; #X connect 4 0 7 0; #X connect 4 1 7 1; #X connect 4 1 8 1; #X connect 4 2 3 0; #X connect 5 0 6 0; #X connect 5 1 6 1; #X connect 6 0 11 0; #X connect 7 0 10 0; #X connect 9 0 8 0; #X connect 10 0 9 0; #X connect 11 0 12 0; #X connect 12 0 9 1; #X restore 36 140 pd align_y; #N canvas 69 452 450 300 align_equal_x 0; #X obj 103 121 t b l; #N canvas 1065 466 450 300 sortobjectsbyxy 0; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 120 138 t b b; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X obj -72 114 canvasobjectposition 3; #X connect 0 0 11 0; #X connect 0 1 12 0; #X connect 1 0 13 0; #X connect 2 0 14 0; #X connect 2 1 10 0; #X connect 3 0 4 0; #X connect 3 0 15 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 16 0; #X connect 9 0 0 0; #X connect 10 0 9 0; #X connect 10 0 18 0; #X connect 10 1 15 0; #X connect 13 0 2 0; #X connect 13 1 4 1; #X connect 13 1 3 1; #X connect 13 1 5 1; #X connect 13 1 6 1; #X connect 13 1 16 1; #X connect 13 1 17 1; #X connect 14 0 3 0; #X connect 14 1 22 0; #X connect 14 2 22 1; #X connect 15 0 0 1; #X connect 15 0 19 1; #X connect 16 0 17 0; #X connect 16 0 18 1; #X connect 17 0 16 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 19 1 21 0; #X connect 22 0 7 0; #X connect 22 0 8 0; #X restore 103 98 pd sortobjectsbyxy; #N canvas 613 140 310 300 avg-dist 0; #X obj 19 96 list-minmax; #X obj 96 97 list-len; #X obj 43 153 -; #X obj 43 181 / 1; #X obj 43 201 int; #X obj 57 25 inlet; #X obj 43 249 outlet; #X obj 96 151 - 1; #X obj 41 122 swap; #X obj 57 71 t l l; #X connect 0 0 8 0; #X connect 0 1 8 1; #X connect 1 0 7 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 9 0; #X connect 7 0 3 1; #X connect 8 0 2 0; #X connect 8 1 2 1; #X connect 9 0 0 0; #X connect 9 1 1 0; #X restore 130 204 pd avg-dist; #X obj 117 171 list; #X obj 103 31 inlet; #N canvas 9 373 450 300 algneq 0; #X obj 17 8 inlet; #X obj 17 69 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 113 pd once; #X obj 17 90 t b f f; #X obj 166 133 t b f; #X obj 310 20 inlet; #X obj 86 204 f; #X obj 113 204 + 0; #X msg 128 184 0; #X obj 17 250 t l b; #X obj 166 153 canvasobjectposition 3; #X obj 17 153 canvasobjectposition 3; #X obj 17 275 canvasobjectposition 3; #X msg 166 174 $1; #X msg 17 174 $2; #X obj 17 225 list prepend; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 1 1 8 0; #X connect 2 0 4 0; #X connect 3 0 11 0; #X connect 3 1 11 1; #X connect 3 1 12 1; #X connect 3 2 2 0; #X connect 4 0 10 0; #X connect 4 1 10 1; #X connect 5 0 7 1; #X connect 6 0 7 0; #X connect 6 0 15 1; #X connect 7 0 6 1; #X connect 8 0 7 1; #X connect 9 0 12 0; #X connect 9 1 6 0; #X connect 10 0 13 0; #X connect 11 0 14 0; #X connect 13 0 6 0; #X connect 14 0 15 0; #X connect 15 0 9 0; #X restore 67 233 pd algneq x; #X obj 103 143 delay 20; #X obj 103 59 t l b; #X connect 0 0 6 0; #X connect 0 1 2 0; #X connect 1 0 0 0; #X connect 1 1 3 1; #X connect 2 0 5 1; #X connect 3 0 5 0; #X connect 4 0 7 0; #X connect 6 0 3 0; #X connect 7 0 1 0; #X connect 7 1 3 1; #X restore 48 160 pd align_equal_x; #N canvas 856 668 450 300 align_equal_y 0; #X obj 173 121 t b l; #N canvas 1065 466 450 300 sortobjectsbyxy 0; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 120 138 t b b; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X obj -72 114 canvasobjectposition 3; #X connect 0 0 11 0; #X connect 0 1 12 0; #X connect 1 0 13 0; #X connect 2 0 14 0; #X connect 2 1 10 0; #X connect 3 0 4 0; #X connect 3 0 15 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 16 0; #X connect 9 0 0 0; #X connect 10 0 9 0; #X connect 10 0 18 0; #X connect 10 1 15 0; #X connect 13 0 2 0; #X connect 13 1 4 1; #X connect 13 1 3 1; #X connect 13 1 5 1; #X connect 13 1 6 1; #X connect 13 1 16 1; #X connect 13 1 17 1; #X connect 14 0 3 0; #X connect 14 1 22 0; #X connect 14 2 22 1; #X connect 15 0 0 1; #X connect 15 0 19 1; #X connect 16 0 17 0; #X connect 16 0 18 1; #X connect 17 0 16 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 19 1 21 0; #X connect 22 0 7 0; #X connect 22 0 8 0; #X restore 103 98 pd sortobjectsbyxy; #N canvas 279 411 450 300 avg-dist 0; #X obj 19 96 list-minmax; #X obj 96 97 list-len; #X obj 43 153 -; #X obj 43 181 / 1; #X obj 43 201 int; #X obj 57 25 inlet; #X obj 43 249 outlet; #X obj 96 151 - 1; #X obj 41 122 swap; #X obj 57 71 t l l; #X connect 0 0 8 0; #X connect 0 1 8 1; #X connect 1 0 7 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 9 0; #X connect 7 0 3 1; #X connect 8 0 2 0; #X connect 8 1 2 1; #X connect 9 0 0 0; #X connect 9 1 1 0; #X restore 200 204 pd avg-dist; #X obj 187 171 list; #X obj 103 31 inlet; #N canvas 9 373 450 300 algneq 0; #X obj 17 8 inlet; #X obj 17 69 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 113 pd once; #X obj 17 90 t b f f; #X obj 166 133 t b f; #X obj 310 20 inlet; #X obj 86 204 f; #X obj 113 204 + 0; #X msg 128 184 0; #X obj 17 250 t l b; #X obj 166 153 canvasobjectposition 3; #X obj 17 153 canvasobjectposition 3; #X obj 17 275 canvasobjectposition 3; #X msg 166 174 $2; #X msg 17 174 $1; #X obj 17 225 list; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 1 1 8 0; #X connect 2 0 4 0; #X connect 3 0 11 0; #X connect 3 1 11 1; #X connect 3 1 12 1; #X connect 3 2 2 0; #X connect 4 0 10 0; #X connect 4 1 10 1; #X connect 5 0 7 1; #X connect 6 0 7 0; #X connect 6 0 15 1; #X connect 7 0 6 1; #X connect 8 0 7 1; #X connect 9 0 12 0; #X connect 9 1 6 0; #X connect 10 0 13 0; #X connect 11 0 14 0; #X connect 13 0 6 0; #X connect 14 0 15 0; #X connect 15 0 9 0; #X restore 137 233 pd algneq y; #X obj 173 141 delay 20; #X obj 103 69 t l b; #X connect 0 0 6 0; #X connect 0 1 2 0; #X connect 1 2 0 0; #X connect 1 3 3 1; #X connect 2 0 5 1; #X connect 3 0 5 0; #X connect 4 0 7 0; #X connect 6 0 3 0; #X connect 7 0 1 0; #X connect 7 1 3 1; #X restore 59 180 pd align_equal_y; #N canvas 0 0 450 300 align_equal_x 0; #X obj 103 121 t b l; #N canvas 1065 466 450 300 sortobjectsbyxy 0; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X obj -72 114 canvasobjectposition 3; #X obj 120 138 t b b b; #X connect 0 0 10 0; #X connect 0 1 11 0; #X connect 1 0 12 0; #X connect 2 0 13 0; #X connect 2 1 22 0; #X connect 3 0 4 0; #X connect 3 0 14 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 15 0; #X connect 9 0 0 0; #X connect 12 0 2 0; #X connect 12 1 4 1; #X connect 12 1 3 1; #X connect 12 1 5 1; #X connect 12 1 6 1; #X connect 12 1 15 1; #X connect 12 1 16 1; #X connect 13 0 3 0; #X connect 13 1 21 0; #X connect 13 2 21 1; #X connect 14 0 0 1; #X connect 14 0 18 1; #X connect 15 0 16 0; #X connect 15 0 17 1; #X connect 16 0 15 1; #X connect 17 0 18 0; #X connect 18 0 19 0; #X connect 18 1 20 0; #X connect 21 0 7 0; #X connect 21 0 8 0; #X connect 22 0 9 0; #X connect 22 1 17 0; #X connect 22 2 14 0; #X restore 103 98 pd sortobjectsbyxy; #N canvas 0 0 450 300 avg-dist 0; #X obj 19 96 list-minmax; #X obj 96 97 list-len; #X obj 43 153 -; #X obj 43 181 / 1; #X obj 43 201 int; #X obj 57 25 inlet; #X obj 43 249 outlet; #X obj 96 151 - 1; #X obj 41 122 swap; #X obj 57 71 t l l; #X obj 43 226 max 5; #X connect 0 0 8 0; #X connect 0 1 8 1; #X connect 1 0 7 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 10 0; #X connect 5 0 9 0; #X connect 7 0 3 1; #X connect 8 0 2 0; #X connect 8 1 2 1; #X connect 9 0 0 0; #X connect 9 1 1 0; #X connect 10 0 6 0; #X restore 130 204 pd avg-dist; #X obj 103 179 list; #X obj 103 31 inlet; #N canvas 9 373 450 300 algneq 0; #X obj 17 8 inlet; #X obj 17 69 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 113 pd once; #X obj 17 90 t b f f; #X obj 166 133 t b f; #X obj 310 20 inlet; #X obj 86 204 f; #X obj 113 204 + 0; #X msg 128 184 0; #X obj 17 250 t l b; #X obj 166 153 canvasobjectposition 3; #X obj 17 153 canvasobjectposition 3; #X obj 17 275 canvasobjectposition 3; #X msg 166 174 $1; #X msg 17 174 $2; #X obj 17 225 list prepend; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 1 1 8 0; #X connect 2 0 4 0; #X connect 3 0 11 0; #X connect 3 1 11 1; #X connect 3 1 12 1; #X connect 3 2 2 0; #X connect 4 0 10 0; #X connect 4 1 10 1; #X connect 5 0 7 1; #X connect 6 0 7 0; #X connect 6 0 15 1; #X connect 7 0 6 1; #X connect 8 0 7 1; #X connect 9 0 12 0; #X connect 9 1 6 0; #X connect 10 0 13 0; #X connect 11 0 14 0; #X connect 13 0 6 0; #X connect 14 0 15 0; #X connect 15 0 9 0; #X restore 67 233 pd algneq x; #X obj 103 69 t l b; #X connect 0 0 3 0; #X connect 0 1 2 0; #X connect 1 0 0 0; #X connect 1 3 3 1; #X connect 2 0 5 1; #X connect 3 0 5 0; #X connect 4 0 6 0; #X connect 6 0 1 0; #X connect 6 1 3 1; #X restore 82 242 pd align_equal_x; #N canvas 0 0 450 300 align_equal_y 0; #N canvas 1065 466 450 300 sortobjectsbyxy 1; #X obj 20 247 2list-sort; #X obj 69 18 inlet; #X obj 69 60 list-drip; #X obj 69 196 list; #X obj 108 196 list; #X obj -72 176 list; #X obj -33 176 list; #X msg -72 135 $1; #X msg -41 135 $2; #X obj -93 223 list; #X obj 20 272 outlet; #X obj 77 272 outlet; #X obj 69 38 t l b; #X obj 69 80 t f b f; #X obj 48 223 list; #X obj -41 196 list; #X obj -2 196 list; #X obj 160 224 list; #X obj 160 247 2list-sort; #X obj 160 272 outlet; #X obj 217 272 outlet; #X obj -72 114 canvasobjectposition 3; #X obj 120 138 t b b b; #X connect 0 0 10 0; #X connect 0 1 11 0; #X connect 1 0 12 0; #X connect 2 0 13 0; #X connect 2 1 22 0; #X connect 3 0 4 0; #X connect 3 0 14 1; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 0 9 1; #X connect 6 0 5 1; #X connect 7 0 5 0; #X connect 8 0 15 0; #X connect 9 0 0 0; #X connect 12 0 2 0; #X connect 12 1 4 1; #X connect 12 1 3 1; #X connect 12 1 5 1; #X connect 12 1 6 1; #X connect 12 1 15 1; #X connect 12 1 16 1; #X connect 13 0 3 0; #X connect 13 1 21 0; #X connect 13 2 21 1; #X connect 14 0 0 1; #X connect 14 0 18 1; #X connect 15 0 16 0; #X connect 15 0 17 1; #X connect 16 0 15 1; #X connect 17 0 18 0; #X connect 18 0 19 0; #X connect 18 1 20 0; #X connect 21 0 7 0; #X connect 21 0 8 0; #X connect 22 0 9 0; #X connect 22 1 17 0; #X connect 22 2 14 0; #X restore 103 98 pd sortobjectsbyxy; #N canvas 0 0 450 300 avg-dist 0; #X obj 19 96 list-minmax; #X obj 96 97 list-len; #X obj 43 153 -; #X obj 43 181 / 1; #X obj 43 201 int; #X obj 57 25 inlet; #X obj 43 249 outlet; #X obj 96 151 - 1; #X obj 41 122 swap; #X obj 57 71 t l l; #X obj 43 228 max 5; #X connect 0 0 8 0; #X connect 0 1 8 1; #X connect 1 0 7 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 10 0; #X connect 5 0 9 0; #X connect 7 0 3 1; #X connect 8 0 2 0; #X connect 8 1 2 1; #X connect 9 0 0 0; #X connect 9 1 1 0; #X connect 10 0 6 0; #X restore 180 204 pd avg-dist; #X obj 117 179 list; #X obj 103 31 inlet; #N canvas 9 373 450 300 algneq 0; #X obj 17 8 inlet; #X obj 17 69 list-drip; #N canvas 0 0 450 300 once 0; #X obj 169 77 inlet; #X msg 214 171 0; #X obj 169 251 outlet; #X obj 169 121 t b a; #X obj 264 78 inlet; #X msg 264 169 1; #X obj 169 202 spigot 1; #X connect 0 0 3 0; #X connect 1 0 6 1; #X connect 3 0 1 0; #X connect 3 1 6 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 2 0; #X restore 166 113 pd once; #X obj 17 90 t b f f; #X obj 166 133 t b f; #X obj 310 20 inlet; #X obj 86 204 f; #X obj 113 204 + 0; #X msg 128 184 0; #X obj 17 250 t l b; #X obj 166 153 canvasobjectposition 3; #X obj 17 153 canvasobjectposition 3; #X obj 17 275 canvasobjectposition 3; #X msg 166 174 $2; #X msg 17 174 $1; #X obj 17 225 list; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 1 2 1; #X connect 1 1 8 0; #X connect 2 0 4 0; #X connect 3 0 11 0; #X connect 3 1 11 1; #X connect 3 1 12 1; #X connect 3 2 2 0; #X connect 4 0 10 0; #X connect 4 1 10 1; #X connect 5 0 7 1; #X connect 6 0 7 0; #X connect 6 0 15 1; #X connect 7 0 6 1; #X connect 8 0 7 1; #X connect 9 0 12 0; #X connect 9 1 6 0; #X connect 10 0 13 0; #X connect 11 0 14 0; #X connect 13 0 6 0; #X connect 14 0 15 0; #X connect 15 0 9 0; #X restore 117 233 pd algneq y; #X obj 103 66 t l b; #X obj 180 178 list; #X obj 117 148 t b l b; #X connect 0 1 7 0; #X connect 0 2 6 1; #X connect 1 0 4 1; #X connect 2 0 4 0; #X connect 3 0 5 0; #X connect 5 0 0 0; #X connect 5 1 2 1; #X connect 6 0 1 0; #X connect 7 0 2 0; #X connect 7 1 2 1; #X connect 7 2 6 0; #X restore 102 302 pd align_equal_y; #X obj 102 282 list; #X obj 82 222 t l b l; #X obj 102 262 delay 100; #N canvas 0 0 450 300 align_grid 0; #X obj -131 81 list-drip; #X obj -131 22 inlet; #X obj 47 63 loadbang; #N canvas 0 22 399 321 quantize 0; #X obj 200 172 / 2; #X obj 168 200 >; #X obj 57 219 +; #X obj 57 246 *; #X obj 237 202 t a; #X obj 57 119 t a a; #X obj 162 172 fmod; #X obj 57 172 /; #X obj 57 195 int; #X obj 166 120 t a a a a; #X obj 166 49 inlet; #X obj 24 49 inlet; #X obj 36 295 outlet; #X text 233 159 if remainder is > 1/2 ,; #X text 234 173 quantize to next snappoint; #X text 222 167 <; #X obj 7 219 +; #X obj 7 246 *; #X obj 7 119 t a a; #X obj 7 172 /; #X obj 7 195 int; #X obj 36 270 pack; #X obj 24 82 unpack; #X obj 122 172 fmod; #X obj 130 201 >; #X connect 0 0 1 1; #X connect 0 0 24 1; #X connect 1 0 2 1; #X connect 2 0 3 0; #X connect 3 0 21 1; #X connect 4 0 3 1; #X connect 4 0 17 1; #X connect 5 0 7 0; #X connect 5 1 6 0; #X connect 6 0 1 0; #X connect 7 0 8 0; #X connect 8 0 2 0; #X connect 9 0 7 1; #X connect 9 0 19 1; #X connect 9 1 6 1; #X connect 9 1 23 1; #X connect 9 2 0 0; #X connect 9 3 4 0; #X connect 10 0 9 0; #X connect 11 0 22 0; #X connect 16 0 17 0; #X connect 17 0 21 0; #X connect 18 0 19 0; #X connect 18 1 23 0; #X connect 19 0 20 0; #X connect 20 0 16 0; #X connect 21 0 12 0; #X connect 22 0 18 0; #X connect 22 1 5 0; #X connect 23 0 24 0; #X connect 24 0 16 1; #X restore -131 166 pd quantize; #X obj -131 107 t b a a; #X obj 47 145 t a; #X obj -131 137 canvasobjectposition 2; #X obj -131 195 canvasobjectposition 2; #X msg 47 123 15; #X text 92 172 by Luke Iannini; #X connect 0 0 4 0; #X connect 1 0 0 0; #X connect 2 0 8 0; #X connect 3 0 7 0; #X connect 4 0 6 0; #X connect 4 1 6 1; #X connect 4 2 7 1; #X connect 5 0 3 1; #X connect 6 0 3 0; #X connect 8 0 5 0; #X restore 72 200 pd align_grid; #X text 287 402 thanks to IOhannes m zmoelnig & Luke Iannini; #N canvas 278 583 986 415 core 1; #N canvas 0 0 450 466 undo 0; #X obj 51 24 inlet; #X obj 51 47 t l b; #X obj 49 150 list; #X obj 88 150 list; #X obj 28 177 list; #X obj 149 150 list; #X obj 188 150 list; #X obj 183 179 list; #X obj 51 68 list-drip; #X obj 51 89 t b f; #X obj 261 19 inlet; #X obj 28 222 list split 2; #X obj 183 222 list split 1; #X obj 28 245 list; #X obj 67 243 list; #X obj 183 246 t b b b f; #X obj 248 246 list; #X obj 256 69 t b b; #X obj 207 44 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 183 199 t l b; #X obj 28 199 t l b; #X obj 28 283 canvasobjectposition 3; #X obj -51 110 canvasobjectposition 3; #X connect 0 0 1 0; #X connect 1 0 8 0; #X connect 1 1 2 1; #X connect 1 1 3 1; #X connect 1 1 5 1; #X connect 1 1 6 1; #X connect 2 0 3 0; #X connect 2 0 4 1; #X connect 3 0 2 1; #X connect 4 0 20 0; #X connect 5 0 6 0; #X connect 5 0 7 1; #X connect 6 0 5 1; #X connect 7 0 19 0; #X connect 8 0 9 0; #X connect 9 0 22 0; #X connect 9 1 5 0; #X connect 9 1 22 1; #X connect 10 0 17 0; #X connect 11 0 13 1; #X connect 11 1 14 1; #X connect 12 0 15 0; #X connect 12 1 16 1; #X connect 13 0 21 0; #X connect 14 0 4 0; #X connect 15 0 16 0; #X connect 15 1 14 0; #X connect 15 2 13 0; #X connect 15 3 21 1; #X connect 16 0 7 0; #X connect 17 0 7 0; #X connect 17 1 4 0; #X connect 18 0 17 0; #X connect 19 0 12 0; #X connect 19 1 7 1; #X connect 20 0 11 0; #X connect 20 1 4 1; #X connect 22 0 2 0; #X restore 52 261 pd undo; #X obj 103 211 t l l; #X msg 348 117 0; #X msg 185 118 0; #X obj 91 22 route key; #X obj 91 41 route 1; #X msg 91 60 $1; #N canvas 0 0 301 300 r_once| 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 221 80 r active_|; #X obj 221 212 s active_|; #X obj 92 212 s inactive_|; #X obj 92 152 r inactive_|; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 13 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 12 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 11 0 10 0; #X connect 14 0 9 0; #X restore 150 158 pd r_once|; #N canvas 0 0 301 300 r_once| 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 92 212 s inactive_|; #X obj 92 152 r inactive_|; #X obj 221 212 s active_|; #X obj 221 80 r active_|; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 11 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 13 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 12 0 9 0; #X connect 14 0 10 0; #X restore 221 157 pd r_once|; #N canvas 0 0 301 300 r_once# 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 221 80 r active_#; #X obj 221 212 s active_#; #X obj 92 212 s inactive_#; #X obj 92 152 r inactive_#; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 13 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 12 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 11 0 10 0; #X connect 14 0 9 0; #X restore 291 157 pd r_once#; #N canvas 0 0 301 300 r_once# 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 221 80 r active_#; #X obj 222 212 s active_#; #X obj 92 212 s inactive_#; #X obj 92 152 r inactive_#; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 13 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 12 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 11 0 10 0; #X connect 14 0 9 0; #X restore 362 157 pd r_once#; #X obj 91 3 receivecanvas 2; #X obj 103 191 canvasselect 2; #X obj 150 281 list; #X obj 180 281 list; #X obj 210 281 list; #X obj 270 281 list; #X obj 240 281 list; #N canvas 1028 673 301 300 r_once# 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 221 80 r active_#; #X obj 222 212 s active_#; #X obj 92 212 s inactive_#; #X obj 92 152 r inactive_#; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 13 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 12 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 11 0 10 0; #X connect 14 0 9 0; #X restore 432 157 pd r_once#; #X obj 147 362 outlet; #X obj 197 362 outlet; #X obj 247 362 outlet; #X obj 297 362 outlet; #X obj 347 362 outlet; #X obj 300 281 list; #N canvas 0 0 301 300 r_once# 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 221 80 r active_#; #X obj 222 212 s active_#; #X obj 92 212 s inactive_#; #X obj 92 152 r inactive_#; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 13 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 12 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 11 0 10 0; #X connect 14 0 9 0; #X restore 502 157 pd r_once#; #X obj 397 362 outlet; #X obj 91 79 sel 27 124 35 120 121 115 103 91; #N canvas 0 0 301 300 r_once[ 0; #X obj 29 25 inlet; #X msg 62 153 0; #X obj 29 251 outlet; #X obj 29 51 t b a; #X obj 118 23 inlet; #X obj 29 202 spigot; #X msg 191 171 1; #X obj 164 81 sel 0; #X obj 118 49 route bang float; #X msg 92 171 0; #X msg 221 181 1; #X obj 221 80 r active_[; #X obj 222 212 s active_[; #X obj 92 212 s inactive_[; #X obj 92 152 r inactive_[; #X connect 0 0 3 0; #X connect 1 0 5 1; #X connect 1 0 13 0; #X connect 3 0 1 0; #X connect 3 1 5 0; #X connect 4 0 8 0; #X connect 5 0 2 0; #X connect 6 0 5 1; #X connect 6 0 12 0; #X connect 7 0 1 0; #X connect 7 1 6 0; #X connect 8 0 6 0; #X connect 8 1 7 0; #X connect 8 2 6 0; #X connect 9 0 5 1; #X connect 10 0 5 1; #X connect 11 0 10 0; #X connect 14 0 9 0; #X restore 572 157 pd r_once[; #X obj 330 281 list; #X obj 447 362 outlet; #X msg 572 118 0; #X text 579 189 this is a preparation for connection funtionality "[x" ; #X text 579 179 ^; #X connect 1 0 13 1; #X connect 1 0 14 1; #X connect 1 0 15 1; #X connect 1 0 17 1; #X connect 1 0 16 1; #X connect 1 0 24 1; #X connect 1 0 29 1; #X connect 1 1 0 0; #X connect 2 0 9 1; #X connect 3 0 7 1; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 27 0; #X connect 7 0 13 0; #X connect 8 0 14 0; #X connect 9 0 15 0; #X connect 10 0 17 0; #X connect 11 0 4 0; #X connect 12 0 1 0; #X connect 13 0 19 0; #X connect 14 0 20 0; #X connect 15 0 21 0; #X connect 16 0 23 0; #X connect 17 0 22 0; #X connect 18 0 16 0; #X connect 24 0 26 0; #X connect 25 0 24 0; #X connect 27 0 0 1; #X connect 27 1 3 0; #X connect 27 1 12 0; #X connect 27 1 7 1; #X connect 27 1 31 0; #X connect 27 1 2 0; #X connect 27 2 12 0; #X connect 27 2 9 1; #X connect 27 2 31 0; #X connect 27 3 7 0; #X connect 27 3 9 0; #X connect 27 3 28 0; #X connect 27 4 10 0; #X connect 27 4 8 0; #X connect 27 5 25 0; #X connect 27 6 18 0; #X connect 27 7 28 1; #X connect 27 7 2 0; #X connect 27 7 3 0; #X connect 28 0 29 0; #X connect 29 0 30 0; #X connect 31 0 28 0; #X restore 25 89 pd core ----; #X text 287 309 "g" place objects on a grid (by Luke Iannini); #X text 287 319 "s" place objects like a staircase; #X connect 27 0 26 0; #X connect 28 0 25 0; #X connect 28 1 29 0; #X connect 28 2 27 1; #X connect 29 0 27 0; #X connect 32 0 21 0; #X connect 32 1 22 0; #X connect 32 2 23 0; #X connect 32 3 24 0; #X connect 32 4 30 0; #X connect 32 5 28 0;