MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: The size of a 3D plot

  • To: mathgroup at smc.vnet.net
  • Subject: [mg86735] Re: The size of a 3D plot
  • From: Mariano Suárez-Alvarez <mariano.suarezalvarez at gmail.com>
  • Date: Thu, 20 Mar 2008 02:50:45 -0500 (EST)
  • References: <fripuj$r23$1@smc.vnet.net> <frqps5$57c$1@smc.vnet.net>

On Mar 19, 7:28 am, m... at inbox.ru wrote:
> 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... at inbox.ru


Ah. Very smart ;-)

I really can't believe it is that hard and manual to
remove the huge margins in

  Graphics3D[{Sphere[]}, Boxed->False]

They take up a good 60 percent of the area!

-- m


  • Prev by Date: texture mapping/memory leak?
  • Next by Date: Re: finding positions of elements in a list
  • Previous by thread: Re: The size of a 3D plot
  • Next by thread: Exporting Graphs