On Dec 9, 2007 10:50 PM, Phil Stone pkstone@ucdavis.edu wrote:
Hi Chuck,
I think you're right; there's no way to avoid the copying. It's good to dream, though. :-)
I have done some experimenting, and I think I'm on to something. If you create a graph from the put menu, then right-click and select Open; and then Put an array on the opened subpatch, you can see the red outline where you can decide what will be graphed-on the parent graph.
It would not be too hard to send editmode and mouse movement messages to that canvas to move arrays around inside it; and it probably would actually be more efficient than copying. But I also notice that the graph subpatch has, in its options, an x and y margin, which moves the red outline. IF it's possible to change these values with messages, it could be trivial to move that red outline to cover several well-placed arrays, meaning that the graph would indeed switch arrays like you want. I started to look at the Pd code to see if I can find such a message mentioned; if I find it I'll let you know.
-Chuckk
Chuckk Hubbard wrote:
It would be possible, if not CPU-efficient, to have them all hidden in table objects, and simply use tabread and tabwrite to copy them to the skeleton array when you want to switch. You would only need one tabread and tabwrite pair, just different ways to specify the target of tabread. I would envision binding the tab key to page through them.
But it is possible to put several arrays in one graph which makes me wonder if there might even be a pure GUI way to do it. Kind of makes me want to take a look...
-Chuckk
On Dec 8, 2007 10:26 PM, Phil Stone pkstone@ucdavis.edu wrote:
This probably fits into the category of a wish for PD; I think there's no way to do it currently, but I'd love to be proven wrong!
I'd like to be able to change the data an array points to rather than actually change the data in the array. The scenario which me think of this is, I'd like to have a display of a currently-selected waveform (which could be one of many pre-allocated arrays). It would be wonderful to have a level of indirection where the display-array can be given a new address [object reference?] to one of the various pre-allocated arrays, after which it redraws itself.
I suppose this unleashes all the evils of pointers (multiple references to memory, etc.), but it would a serious advantage, performance-wise, for the scenario I'm envisioning.
I also think it would be very cool if arrays could act as buttons...but that's a different subject.
Phil Stone pkstonemusic.com
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
#N canvas 303 9 704 687 10; #N canvas 0 524 610 502 subpatch 0; #X obj 201 120 cnv 15 200 150 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 200 321 cnv 15 200 150 empty empty empty 20 12 0 14 -233017 -66577 0; #N canvas 0 0 450 300 graph4 0; #X array table2 100 float 1; #A 0 0 0 0 0.0714288 0.157143 0.171429 0.257144 0.314287 0.342858 0.400002 0.457145 0.514288 0.557145 0.600002 0.657145 0.700003 0.714288 0.757146 0.757146 0.771431 0.785717 0.785717 0.785717 0.800003 0.800003 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.800003 0.757146 0.614288 0.514287 0.414287 0.378573 0.342858 0.257144 0.200001 -0.471431 -0.500002 -0.600002 -0.600002 -0.600002 -0.600002 -0.600002 -0.600002 -0.585717 -0.571431 -0.557145 -0.542859 -0.514288 -0.500002 -0.485716 -0.47143 -0.450002 -0.428573 -0.414287 -0.400002 -0.392859 -0.385716 -0.357144 -0.328573 -0.285715 -0.200001 0.114286 0.142858 0.228572 0.242858 0.27143 0.300001 0.314287 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.300001 0.257144 0.171429 0.142858 0.128572 0.114286 0.128572 0.171429 0.228572 0.242858 0.257144 0.257144 0 0 0; #X coords 0 1 99 -1 200 140 1; #X restore 200 330 graph; #N canvas 0 0 450 300 graph3 0; #X array table1 100 float 1; #A 0 0 0 0 0 0 0 0 0 0.0142856 0.0571424 0.071428 0.114285 0.157142 0.164284 0.171427 0.214284 0.271426 0.299998 0.35714 0.399997 0.442854 0.471425 0.499996 0.528567 0.557138 0.557138 0.528567 0.499996 0.478568 0.457139 0.421425 0.385711 0.371426 0.35714 0.342854 0.314283 0.285712 0.249998 0.214284 0.195237 0.176189 0.157142 0.0999992 0.0571424 -0.171427 -0.121428 -0.071428 -0.0214284 0.0285712 0.0607138 0.0928564 0.124999 0.157142 0.190475 0.223808 0.257141 0.28095 0.304759 0.328569 0.342854 0.35714 0.371426 0.385711 0.399997 0.414282 0.428568 0.428568 0.428568 0.371426 0.328569 0.257141 0.22857 0.171427 0.157142 0.142856 0.114285 0.0999992 0.114285 0.12857 0.142856 0.164284 0.185713 0.22857 0.249998 0.271426 0.285712 0.299998 0.314283 0.321426 0.328569 0.35714 0.371426 0.378568 0.385711 0.385711 0 0 0 0 0; #X coords 0 1 99 -1 200 140 1; #X restore 200 130 graph; #X coords 0 -1 1 1 200 170 1 200 100; #X restore 71 139 pd subpatch; #X obj 61 534 s pd-subpatch; #X text 31 432 this controls graph-on-parent; #X msg 157 496 donecanvasdialog 1 -10 1 0 -1 1 1 200 170 200 300; #X msg 157 460 donecanvasdialog 1 -10 1 0 -1 1 1 200 170 200 100; #X text 64 370 message format :; #X text 189 372 donecanvasdialog <X units per pixel> <Y units per pixel> <graphOnParent> <X range from> <Y range from> <X range to> <Y range to> <x size> <y size> <x margin> <y margin>; #X text 480 477 <- click here to switch; #X text 145 598 from help/manuals/pd-msg/1.msg_and_patch/0.all_msg.pd ; #X connect 3 0 1 0; #X connect 4 0 1 0;
Well-done, that looks like the perfect solution. I did notice these functions mentioned in the code, with xmargin and ymargin as arguments of a longer function call, but I hadn't followed up to see what else went in the message. I believe this is your answer, Phil.
Another one for msg-docs, I think.
-Chuckk
On Dec 10, 2007 1:11 PM, Jean-Yves GRATIUS jygratius@freesurf.fr wrote:
Hi, I have tried to change graph-on-parents settings by message for displaying different arrays, it seems to work.. I did'nt test it with large tables. (included patch : switchingGOPtables.pd).
Jean Yves Gratius http://jy.gratius.free.fr
Chuckk Hubbard a écrit :
On Dec 9, 2007 10:50 PM, Phil Stone pkstone@ucdavis.edu wrote:
Hi Chuck,
I think you're right; there's no way to avoid the copying. It's good to dream, though. :-)
I have done some experimenting, and I think I'm on to something. If you create a graph from the put menu, then right-click and select Open; and then Put an array on the opened subpatch, you can see the red outline where you can decide what will be graphed-on the parent graph.
It would not be too hard to send editmode and mouse movement messages to that canvas to move arrays around inside it; and it probably would actually be more efficient than copying. But I also notice that the graph subpatch has, in its options, an x and y margin, which moves the red outline. IF it's possible to change these values with messages, it could be trivial to move that red outline to cover several well-placed arrays, meaning that the graph would indeed switch arrays like you want. I started to look at the Pd code to see if I can find such a message mentioned; if I find it I'll let you know.
-Chuckk
Chuckk Hubbard wrote:
It would be possible, if not CPU-efficient, to have them all hidden in table objects, and simply use tabread and tabwrite to copy them to the skeleton array when you want to switch. You would only need one tabread and tabwrite pair, just different ways to specify the target of tabread. I would envision binding the tab key to page through them.
But it is possible to put several arrays in one graph which makes me wonder if there might even be a pure GUI way to do it. Kind of makes me want to take a look...
-Chuckk
On Dec 8, 2007 10:26 PM, Phil Stone pkstone@ucdavis.edu wrote:
This probably fits into the category of a wish for PD; I think there's no way to do it currently, but I'd love to be proven wrong!
I'd like to be able to change the data an array points to rather than actually change the data in the array. The scenario which me think of this is, I'd like to have a display of a currently-selected waveform (which could be one of many pre-allocated arrays). It would be wonderful to have a level of indirection where the display-array can be given a new address [object reference?] to one of the various pre-allocated arrays, after which it redraws itself.
I suppose this unleashes all the evils of pointers (multiple references to memory, etc.), but it would a serious advantage, performance-wise, for the scenario I'm envisioning.
I also think it would be very cool if arrays could act as buttons...but that's a different subject.
Phil Stone pkstonemusic.com
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
#N canvas 303 9 704 687 10; #N canvas 0 524 610 502 subpatch 0; #X obj 201 120 cnv 15 200 150 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 200 321 cnv 15 200 150 empty empty empty 20 12 0 14 -233017 -66577 0; #N canvas 0 0 450 300 graph4 0; #X array table2 100 float 1; #A 0 0 0 0 0.0714288 0.157143 0.171429 0.257144 0.314287 0.342858 0.400002 0.457145 0.514288 0.557145 0.600002 0.657145 0.700003 0.714288 0.757146 0.757146 0.771431 0.785717 0.785717 0.785717 0.800003 0.800003 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.814289 0.800003 0.757146 0.614288 0.514287 0.414287 0.378573 0.342858 0.257144 0.200001 -0.471431 -0.500002 -0.600002 -0.600002 -0.600002 -0.600002 -0.600002 -0.600002 -0.585717 -0.571431 -0.557145 -0.542859 -0.514288 -0.500002 -0.485716 -0.47143 -0.450002 -0.428573 -0.414287 -0.400002 -0.392859 -0.385716 -0.357144 -0.328573 -0.285715 -0.200001 0.114286 0.142858 0.228572 0.242858 0.27143 0.300001 0.314287 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.328573 0.300001 0.257144 0.171429 0.142858 0.128572 0.114286 0.128572 0.171429 0.228572 0.242858 0.257144 0.257144 0 0 0; #X coords 0 1 99 -1 200 140 1; #X restore 200 330 graph; #N canvas 0 0 450 300 graph3 0; #X array table1 100 float 1; #A 0 0 0 0 0 0 0 0 0 0.0142856 0.0571424 0.071428 0.114285 0.157142 0.164284 0.171427 0.214284 0.271426 0.299998 0.35714 0.399997 0.442854 0.471425 0.499996 0.528567 0.557138 0.557138 0.528567 0.499996 0.478568 0.457139 0.421425 0.385711 0.371426 0.35714 0.342854 0.314283 0.285712 0.249998 0.214284 0.195237 0.176189 0.157142 0.0999992 0.0571424 -0.171427 -0.121428 -0.071428 -0.0214284 0.0285712 0.0607138 0.0928564 0.124999 0.157142 0.190475 0.223808 0.257141 0.28095 0.304759 0.328569 0.342854 0.35714 0.371426 0.385711 0.399997 0.414282 0.428568 0.428568 0.428568 0.371426 0.328569 0.257141 0.22857 0.171427 0.157142 0.142856 0.114285 0.0999992 0.114285 0.12857 0.142856 0.164284 0.185713 0.22857 0.249998 0.271426 0.285712 0.299998 0.314283 0.321426 0.328569 0.35714 0.371426 0.378568 0.385711 0.385711 0 0 0 0 0; #X coords 0 1 99 -1 200 140 1; #X restore 200 130 graph; #X coords 0 -1 1 1 200 170 1 200 100; #X restore 71 139 pd subpatch; #X obj 61 534 s pd-subpatch; #X text 31 432 this controls graph-on-parent; #X msg 157 496 donecanvasdialog 1 -10 1 0 -1 1 1 200 170 200 300; #X msg 157 460 donecanvasdialog 1 -10 1 0 -1 1 1 200 170 200 100; #X text 64 370 message format :; #X text 189 372 donecanvasdialog <X units per pixel> <Y units per pixel> <graphOnParent> <X range from> <Y range from> <X range to> <Y range to> <x size> <y size> <x margin> <y margin>; #X text 480 477 <- click here to switch; #X text 145 598 from help/manuals/pd-msg/1.msg_and_patch/0.all_msg.pd ; #X connect 3 0 1 0; #X connect 4 0 1 0;
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
A glorious hack, Jean-Yves! This should work well for what I am envisioning. One strange thing, though: if you move the subpatch (that displays the selected array), the other array is visible underneath it. I wonder what's up with that?
Thanks for the solution, Jean-Yves (and Chuck for suggesting it was possible in the first place).
Phil
Chuckk Hubbard wrote:
Well-done, that looks like the perfect solution. I did notice these functions mentioned in the code, with xmargin and ymargin as arguments of a longer function call, but I hadn't followed up to see what else went in the message. I believe this is your answer, Phil.
Another one for msg-docs, I think.
-Chuckk
On Dec 10, 2007 1:11 PM, Jean-Yves GRATIUS jygratius@freesurf.fr wrote:
Hi, I have tried to change graph-on-parents settings by message for displaying different arrays, it seems to work.. I did'nt test it with large tables. (included patch : switchingGOPtables.pd).
Jean Yves Gratius http://jy.gratius.free.fr
Chuckk Hubbard a écrit :
On Dec 9, 2007 10:50 PM, Phil Stone pkstone@ucdavis.edu wrote:
Hi Chuck,
I think you're right; there's no way to avoid the copying. It's good to dream, though. :-)
I have done some experimenting, and I think I'm on to something. If you create a graph from the put menu, then right-click and select Open; and then Put an array on the opened subpatch, you can see the red outline where you can decide what will be graphed-on the parent graph.
It would not be too hard to send editmode and mouse movement messages to that canvas to move arrays around inside it; and it probably would actually be more efficient than copying. But I also notice that the graph subpatch has, in its options, an x and y margin, which moves the red outline. IF it's possible to change these values with messages, it could be trivial to move that red outline to cover several well-placed arrays, meaning that the graph would indeed switch arrays like you want. I started to look at the Pd code to see if I can find such a message mentioned; if I find it I'll let you know.
-Chuckk
Chuckk Hubbard wrote:
It would be possible, if not CPU-efficient, to have them all hidden in table objects, and simply use tabread and tabwrite to copy them to the skeleton array when you want to switch. You would only need one tabread and tabwrite pair, just different ways to specify the target of tabread. I would envision binding the tab key to page through them.
But it is possible to put several arrays in one graph which makes me wonder if there might even be a pure GUI way to do it. Kind of makes me want to take a look...
-Chuckk
On Dec 8, 2007 10:26 PM, Phil Stone pkstone@ucdavis.edu wrote:
This probably fits into the category of a wish for PD; I think there's no way to do it currently, but I'd love to be proven wrong!
I'd like to be able to change the data an array points to rather than actually change the data in the array. The scenario which me think of this is, I'd like to have a display of a currently-selected waveform (which could be one of many pre-allocated arrays). It would be wonderful to have a level of indirection where the display-array can be given a new address [object reference?] to one of the various pre-allocated arrays, after which it redraws itself.
I suppose this unleashes all the evils of pointers (multiple references to memory, etc.), but it would a serious advantage, performance-wise, for the scenario I'm envisioning.
I also think it would be very cool if arrays could act as buttons...but that's a different subject.
Phil Stone pkstonemusic.com
On Dec 10, 2007 11:44 PM, Phil Stone pkstone@ucdavis.edu wrote:
A glorious hack, Jean-Yves! This should work well for what I am envisioning. One strange thing, though: if you move the subpatch (that displays the selected array), the other array is visible underneath it. I wonder what's up with that?
I noticed that experimenting too. It disappears on reopening, but that's not a solution. May be something to file a bug about?? I'm not surprised if this is a bug that was not previously discovered, because it is an unusual function.
Thanks for the solution, Jean-Yves (and Chuck for suggesting it was possible in the first place).
:)
-Chuckk