Re: The size of a 3D plot
- To: mathgroup at smc.vnet.net
- Subject: [mg86721] Re: The size of a 3D plot
- From: m.r at inbox.ru
- Date: Wed, 19 Mar 2008 05:26:12 -0500 (EST)
- References: <fripuj$r23$1@smc.vnet.net>
On Mar 16, 3:40 am, Mariano Su=E1rez-Alvarez <mariano.suarezalva... at gmail.com> wrote: > Hi all, > > is there a way to have a 3D graphic be sized so that it fits tightly > in its bounding box? I seem to only be able to have it sized so that > the *box* circumscribing it fits in the bounding box, as in > > Graphics[{Sphere[]}] > > -- m Here's some code that may do what you need, assuming you have a 3D graphic with white background: DynamicModule[ {update, gr, gr2, k = 4, w = 360, h = 360, xmarg = 0, ymarg = 0, xd = 0, yd = 0, vp = {1.3, -2.4, 2.}, va = Automatic, vv = {0, 0, 1}}, update[] := (gr = Rasterize[ Graphics3D[Cylinder[], Boxed -> False, ImageSize -> w, ViewAngle -> va, ViewPoint -> vp, ViewVertical -> vv], "Data", ImageResolution -> 72/k]; {w, h} = k Dimensions[gr][[{2, 1}]]; gr2 = Split[gr, Min[##] == 255 &]; {ymarg, yd} = k {# + #2 - 2, (#2 - #)/2} & @@ Length /@ gr2[[{1, -1}]]; gr2 = Split[Transpose@gr, Min[##] == 255 &]; {xmarg, xd} = k {# + #2 - 2, (#2 - #)/2} & @@ Length /@ gr2[[{-1, 1}]] ); update[]; EventHandler[ Graphics[Inset[ Graphics3D[Cylinder[], Boxed -> False, ImageSize -> w, RotationAction -> "Clip", ViewAngle -> Dynamic[va], ViewPoint -> Dynamic[vp], ViewVertical -> Dynamic[vv]], {0, 0}, Dynamic@Offset[{xd, yd}, ImageScaled at {.5, .5}], Dynamic@Offset@{w, h}, ContentSelectable -> True], ImageSize -> Dynamic[{w - xmarg, h - ymarg}, (w = #[[1]] + xmarg; update[]) &], ContentSelectable -> True] // Framed[#, FrameMargins -> 0] &, {"MouseUp" :> update[]}] ] Maxim Rytin m.r at inbox.ru