I am working on some code that allows me to auto-rotate graphics (including ParmetricPlot3D and Plot3D graphics) objects while preserving mouse dragging in a smooth fashion. It works great.
The code below includes three different types of graphics objects (Graphics3D, ParametricPlot3D, and Plot3D), but I have more types to implement. I should be able to Map the single geometric transformation over the list but can't figure it out. Independently it works fine and the code is repetitive. Seems like I should be able to condense but I'm not able.
You can see the repetition three times in the code below.
Manipulate[Show[
Map[(GeometricTransformation[#,
RotationTransform[Dynamic[\[Theta]], {0, 0, 1}, center]] &),
Graphics3D[{Arrow[Tube[{{-3.75, 0, 0}, {3.75, 0, 0}}, .01]],
Arrow[Tube[{{0, -3.75, 0}, {0, 3.75, 0}}, .01]],
Arrow[Tube[{{0, 0, -3.75}, {0, 0, 3.75}}, .01]]}]],
Map[GeometricTransformation[#,
RotationTransform[Dynamic[\[Theta]], {0, 0, 1}, center]] &,
ParametricPlot3D[{u, v, v^2}, {u, -4, 4}, {v, -4, 4}]],
Map[GeometricTransformation[#,
RotationTransform[Dynamic[\[Theta]], {0, 0, 1}, center]] &,
Plot3D[x^2 + y^2, {x, -4, 4}, {y, -4, 4}]],
PlotRange -> 4, SphericalRegion -> True], {\[Theta], 0, 2 Pi,
ControlType -> Animator, AnimationRate -> .03},
Initialization :> {center =
Mean /@ (PlotRange /.
AbsoluteOptions[
Graphics3D[{Arrow[Tube[{{-3.75, 0, 0}, {3.75, 0, 0}}, .01]],
Arrow[Tube[{{0, -3.75, 0}, {0, 3.75, 0}}, .01]],
Arrow[Tube[{{0, 0, -3.75}, {0, 0, 3.75}}, .01]]}],
PlotRange])}]
As you can see I have mapped the GeometricTransformation over Graphics3D and ParametricPlot3D and Plot3D independently which I believe is overkill. I have more types to plot as well. I would like to call the Map function only once for all graphics objects.
I tried using Map to push through the list of graphics objects it doesn't seem to work. I've also tried, MapThread, MapApply, Apply, etc.
It's probably a very simple solution, but it escapes me. Any ideas?