MathGroup Archive 2007

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

Search the Archive

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


  • Prev by Date: Re: In Out question
  • Next by Date: Re: Second argument of BeginPackage, revisited
  • Previous by thread: Re: Rotable Graphics and ViewPoint
  • Next by thread: Re: Re: Rotable Graphics and ViewPoint