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