A dynamic display will have primary dynamic variables that are set by
controls (Sliders, InputFields, etc.) and dependent variables that are
calculated from the primary dynamic variables.
The trick to handling this is to use the second argument of Dynamic. This
allows us to call a calculation routine that will calculate all of the
dependent variables. The calculation can even do more; it can apply a
constraint to the primary dynamic variable.
Here is a modification of your example that illustrates these things.
DynamicModule[
{(* Primary dynamic variables *)
b = 3,
(* Dependent dynamic variables *)
a, c,
(* Routine to calculate dependent variables *)
calcAll},
calcAll[bvar_] :=
((* Constrain the b variable to 1 <= b <= 5 *)
b = Max[1, Min[5, bvar]];
(* Calcuate the dependent dynamic variables *)
a = Sin[b];
c = a + 1);
(* Initialze *)
calcAll[b];
Column[
{Dynamic@{b, a, c},
Slider[Dynamic[b, (b = #; calcAll[b]) &], {0, 2*Pi}]}]
]
This simple form is easily generalize to create very complex custom
displays. You have complete control of how you place controls and how you
display information and you can dynamically calculate very complicated
objects from the primary dynamic variables.
Throw Manipulate into the ashcan. You will never need it again.
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
From: Patrick Scheibe [mailto:pscheibe at trm.uni-leipzig.de]
Hi,
assume the following code lines:
DynamicModule[{a, b = 0},
a = Dynamic[Sin[b]];
Column[{
Dynamic[a],
Slider[Dynamic[b], {0, 2*Pi}]
}]
]
In order to update "a" with the actual value of Sin[b] I need
Dynamic around it. Unfortunately, now the variable "a" is invisibly
wrapped and completely useless for further calculations. I'm not able to
calculate even a+1 inside the DynamicModule.
DynamicModule[{a, b = 0},
a = Dynamic[Sin[b]];
Column[{
Dynamic[a+1],
Slider[Dynamic[b], {0, 2*Pi}]
}]
]
If I'm not just too stupid and this behaviour is intended, then I'm
wondering whether this doesn't lead to problems when you have more
complex constructs with several dynamic variables.
Cheers
Patrick
PS: I was just pointed by another person on this and I found a way
around it. So cannot provide a real problem I'm having. Nevertheless, I
would be glad to know what you think since I couldn't really find the
point in the documentation where this is explained.