Re: Rotable Graphics and ViewPoint
- To: mathgroup at smc.vnet.net
- Subject: [mg78541] Re: Rotable Graphics and ViewPoint
- From: Albert <awnl at arcor.net>
- Date: Tue, 3 Jul 2007 06:54:04 -0400 (EDT)
- References: <f67mco$2vu$1@smc.vnet.net> <f6d5jp$i8p$1@smc.vnet.net>
Hi,
> CADView[pl_, opts___?OptionQ] := DynamicModule[{vpv, vv, vp},
> Panel[
> {
> vpv = { {1.3, -2.4, 2}, Automatic };
> Row[{
> Button["Automatic", vpv = { {1.3, -2.4, 2},
> Automatic }],
> Button["Top", vpv = {{0, 0, }, {0, 1, 0} }],
> Button["Bottom", vpv = { {0, 0, - }, {0, 1, 0} }],
> Button["Left", vpv = { {- , 0, 0}, {0, 0, 1} }],
> Button["Right", vpv = { { , 0, 0}, {0, 0, 1} }],
> Button["Front", vpv = { {0, - , 0}, {0, 0, 1} }],
> Button["Back", vpv = { {0, , 0}, {0, 0, 1} }]
> }],
>
> Dynamic[{vp, vv} = vpv;
> Show[pl, ViewPoint -> vp, ViewVertical ->
> vv, opts, ImageSize -> 400]]
> } // Column
> ]]
>
> One bug with this is that you can't press one button, rotate the
> graphic and then press that same button. I don't really understand
> why that doesn't work. The work-around is easy enough; simply press a
> different button before pressing the first one a second time.
I think that happens because vpv does not dynamically update when either
vp or vv change, you either need to make it aware of these changes or
directly use vp and vv in the assignments. Also it would make the thing
more reactive if you restrict the Dynamics to the Option-Values (which
will not recreate the whole graphics). Have you noticed that you can use
Front, Back etc. directly as Option-Values for ViewPoint? Here is a
slightly modified version of your code:
CADView[pl_, opts___?OptionQ] := DynamicModule[{vv, vp},
vp = {1.3, -2.4, 2};
vv = Automatic;
Panel[Column[{
Row[{
Button["Automatic", {vp, vv} = {{1.3, -2.4, 2}, Automatic}],
Button["Top", {vp, vv} = {Top, {0, 1, 0}}],
Button["Bottom", {vp, vv} = {Bottom, {0, 1, 0}}],
Button["Left", {vp, vv} = {Left, {0, 0, 1}}],
Button["Right", {vp, vv} = {Right, {0, 0, 1}}],
Button["Front", {vp, vv} = {Front, {0, 0, 1}}],
Button["Back", {vp, vv} = {Back, {0, 0, 1}}]
}],
Grid[{
{ViewPoint, InputField[Dynamic[vp]]},
{ViewVertical, InputField[Dynamic[vv]]}
}],
Show[pl, ViewPoint -> Dynamic[vp], ViewVertical -> Dynamic[vv],
opts, ImageSize -> 600]
}]]
]
Anyway, the following would probably be just be enough functionality for
what Helen needs:
v=Front;
Column[{
InputField[Dynamic[v]],
Plot3D[Sin[x y], {x, -5, 5}, {y, -5, 5}, ViewPoint -> Dynamic[v],
ImageSize -> 500]
}]
I think that Helen needs something without extra code and that is
simpler than what is suggested. Although I agree that it would be nice
if Wolfram would implement some standard things for graphics (reading
and copying coordinates from a 2d-Graphics has come up already) in such
a way that you wouldn't need extra code to do them. On the other hand I
can imagine that there is disagreement about what would be important
enough to be a build-in and what not. And to have everything available
doesn't make the program easier to use, too...
after all I guess we have to live with what WRI decides to do...
albert
- Follow-Ups:
- Re: Re: Rotable Graphics and ViewPoint
- From: Murray Eisenberg <murray@math.umass.edu>
- Re: Re: Rotable Graphics and ViewPoint