How can I make sure that 3D plots have the exact same orientation and viewpoint?
If the issue is that internally Graphics3D sets any scaling and view based on what's in the object being displayed, how about making all objects with the same "stuff" but different colors? In other words, include all of the possible pieces but use Transparent
for the color of the pieces not to be seen in a particular image.
image1 = Graphics3D[{{Red, polygons1}, {Transparent,EdgeForm[None], polygons2},
model}, ViewPoint -> {0.14, 0.2, -3.4},
ViewVertical -> {0.04, 0.01, -2.0}, Boxed -> False]
image2 = Graphics3D[{{Blue, polygons2}, {Transparent,EdgeForm[None], polygons1},
model}, ViewPoint -> {0.14, 0.2, -3.4},
ViewVertical -> {0.04, 0.01, -2.0}, Boxed -> False]
Manipulate[Show[{image1, image2}[[image]]], {image, {1, 2}}]
Users N.J.Evans and SquareOne came up with this, but I'll post it just so the question can be answered.
I had originally made these plots using the functions here and they are essentially made via commands like
Show[ model, ListContourPlot3D[ data, options]]
where model
is the 3D chemical model and options
would include things like PlotRange
. I had tried to be specific and give the exact same PlotRange
to every molecule plot. But it would seem that the PlotRange
given to ListContourPlot3D
did not directly affect the PlotRange
of the combined graphic created with Show
. You can see this by
Charting`get3DPlotRange /@ {image1, image2}
(* {{{-277.634, 287.701}, {-170.275, 172.791}, {-135.625,
135.624}}, {{-276.904, 286.273}, {-170.267, 172.414}, {-115.797,
115.742}}} *)
So the answer to my original question, "What option, in addition to ViewPoint
, ViewAngle
, and ViewVertical
, do I have to set to ensure that the 3D graphics viewpoint is the same?" is that you have to have the same PlotRange
in the final display of the Graphics3D
object.
Manipulate[
Show[{image1, image2}[[image]],
PlotRange -> {{-278, 288}, {-170, 173}, {-136, 136}}], {image, {1,
2}}]