Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Say I make a set of three Graphics3D images, here of three different cones, by evaluating:

{Graphics3D[{Cone[{{0, 0, 0}, {2, 3, 4}}, 3]}], 
 Graphics3D[{Cone[{{1, 0, 1}, {1, 1, 1}}, 4]}], 
 Graphics3D[{Cone[{{1, 1, 1}, {9, 9, 9}}, 4]}]}

I would like to manually rotate one of the images showing a single cone, and have the other objects follow that rotation, or at least rotate to the final state once I let go of my mouse. Is this possible?

share|improve this question
    
Are you asking how to couple the mouse actions that Mathematica supports automatically when a Graphics3D image is displayed? Or are you asking how to do it using some dynamic construct such as Manipulate. I don't think the first is possible. At least, I don't how to do it. I'm sure the second can be done. However, in both cases, you are asking for others to do a heck of a lot work for you with no effort on your part. –  m_goldberg Mar 17 '13 at 7:18
    
@m_goldberg I just want to do the following: rotate one image manually some number of degrees $(\theta,\phi)$, then apply that same rotation to the other images. Surely there must be some simple way to do this? I don't necessarily need the other images to follow dynamically. –  Roger Harris Mar 17 '13 at 7:23
    
What do you mean by "manually"? –  m_goldberg Mar 17 '13 at 7:26
    
@m_goldberg I want to click and drag to orient the image how I'd like. –  Roger Harris Mar 17 '13 at 7:27
1  
show 1 more comment

1 Answer

up vote 9 down vote accepted

Make the settings for both ViewPoint and ViewVertical dynamic:

DynamicModule[{vp = {2, -2, 1}, vv = {0, 0, 1}}, 
GraphicsRow[{Graphics3D[{Cone[{{0, 0, 0}, {2, 3, 4}}, 3]}, SphericalRegion -> True,
  ViewPoint -> Dynamic[vp], ViewVertical -> Dynamic[vv]], 
 Graphics3D[{Cone[{{1, 0, 1}, {1, 1, 1}}, 4]}, SphericalRegion -> True,
  ViewPoint -> Dynamic[vp], ViewVertical -> Dynamic[vv]], 
 Graphics3D[{Cone[{{1, 1, 1}, {9, 9, 9}}, 4]}, SphericalRegion -> True,
  ViewPoint -> Dynamic[vp], ViewVertical -> Dynamic[vv]]}]]

enter image description here


enter image description here


Thanks: @Szabolcs for pointing out the need for ViewVertical in addition to ViewPoint to have the three graphics line up properly.

See also: Yu-Sung Chang's answer/tutorial in response to a related question.

share|improve this answer
    
Great - perfect! –  Roger Harris Mar 17 '13 at 7:35
1  
+1. Well, I knew it could done with a dynamic construct, but I didn't realize it could be done this easily. –  m_goldberg Mar 17 '13 at 7:40
    
A more elaborate answer can be found here. –  Sjoerd C. de Vries Mar 17 '13 at 8:00
    
@Sjoerd, thank you. I was looking for that link. –  kguler Mar 17 '13 at 8:07
    
You should also include ViewVertical for full synchronization. Otherwise they will not line up properly. –  Szabolcs Mar 17 '13 at 16:40
show 1 more comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.