MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: design question, how to have a set of manipulate controls, but have separate expression associated with each control?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg81108] Re: design question, how to have a set of manipulate controls, but have separate expression associated with each control?
  • From: "Nasser Abbasi" <nma at 12000.org>
  • Date: Wed, 12 Sep 2007 03:53:39 -0400 (EDT)
  • References: <fc5n1u$qt7$1@smc.vnet.net>

"Nasser Abbasi" <nma at 12000.org> wrote in message 
news:fc5n1u$qt7$1 at smc.vnet.net...
> hi;
>
> There is a design problem I am trying to solve.

SNIP

I got a helpful email suggesting to use a unamed Module (this will then act 
as global place to save parameters, and then check if each input has changed 
from last time.

I modified the code send to me, and this is the type of solution I am 
considering now based on the template send to me in the email:
First I check if first time being called, if so, I do all the work, saving 
the results in the global parameters, and make sure the firstTime flag is 
now False.
Next time called, check to see which parameter is changed. This assumes ONLY 
one parameter can be changed at a time in the call. This I need to make sure 
about, but the way Manipulate works now, this seems correct, since each time 
I modify a manipulate control, it right away calls the process function 
before I get the chance to chance the second control. So If I had 2 
controls, and I changed one, then process[] will always be called with at 
most one parameter changed from last time.

Again, thanks for the emailer who send me the answer for the idea of using 
global manipulate and flags. I did think a little about this before, but I 
am thinking in a large amount of code, this could get messy with too many 
checks all over the place, but it seems for now this is the only way to 
solve this design problem.

ps. on a side note: when I save as text the code into my email message, I 
can now indent it as I want to make it clearer to see, I wish I could do 
this inside Notebook as well.

-------- code -----
Module[{firstTime = True, savedn1, savedn2, savedg1, savedg2, proc},

  proc[n1_, n2__] := Module[{},
    Which[
        firstTime,
            {firstTime = False; savedg1 = Plot[Sin[n1*t], {t, -3*Pi, 3*Pi}, 
PlotStyle -> Red];
              savedg2 = Plot[Cos[n2*t], {t, -3*Pi, 3*Pi}, PlotStyle -> 
Blue]; savedn1 = n1; savedn2 = n2
             },
       True,
           If[savedn1 === n1,
                   {savedn2 = n2; savedg2 = Plot[Cos[n2*t], {t, -3*Pi, 
3*Pi}, PlotStyle -> Blue]},
                   {savedn1 = n1; savedg1 = Plot[Sin[n1*t], {t, -3*Pi, 
3*Pi},PlotStyle -> Red]}
             ]
      ];

     Show[{savedg1, savedg2}, PlotRange -> All ]
   ]
 ]

Manipulate[proc[n1, n2], {n1, 0.1, 1, 0.1}, {n2, 0.1, 1, 0.1}]

-- end code ----



  • Prev by Date: Re: Dt "gradient" (dumb title, sorry)
  • Next by Date: NIntegrate preprocessing and rule selection
  • Previous by thread: design question, how to have a set of manipulate controls, but have separate expression associated with each control?
  • Next by thread: Anomolous behaviour of Penrose Triangle Demonstration