Re: Re: Problems updating Graphics3D Polygons
- To: mathgroup at smc.vnet.net
- Subject: [mg77715] Re: [mg77651] Re: Problems updating Graphics3D Polygons
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Fri, 15 Jun 2007 04:40:33 -0400 (EDT)
- References: <21792802.1181814725599.JavaMail.root@m35>
- Reply-to: drmajorbob at bigfoot.com
A solution doesn't HAVE to be this flexible, but... why the heck not?
Clear[scaleZ, array, threeD]
array[dims_List] = ArrayQ[#] && Dimensions[#] == dims &;
threeD[m_?(array[{3, 3}])] := m
threeD[m_?(array[{3}])] := DiagonalMatrix@m
threeD[f_?NumericQ] := DiagonalMatrix@{1, 1, f}
scaleZ[graphics_, m_] :=
graphics /. Polygon[pts_] :> Polygon[pts.threeD[m]]
Try it out:
gobject =
Graphics3D[{Polygon[{{0., 0.5, 1.28}, {0., 0., 1.}, {0.5, 0.,
1.28}, {0.5, 0.5, 1.64}}],
Polygon[{{0.5, 0.5, 1.64}, {0.5, 0., 1.28}, {1., 0., 2.71}, {1.,
0.5, 3.49}}]}]
scaleZ[gobject, 1/3]
scaleZ[gobject, {1, 2, 1}]
scaleZ[gobject, RandomReal[{1/2, 3/2}, {3, 3}]]
Bobby
On Thu, 14 Jun 2007 04:33:03 -0500, chuck009 <dmilioto at comcast.com> wrot=
e:
> Hey guys. I did make progress with this by coding:
>
> UpdatePoints[factor_][p_] := Block[{x, y, z},
> {x, y, z} = p;
> z *= factor;
> Return[{x, y, z}];
> ];
>
> ScaleZ[graphics_, factor_] := Module[{g2}, g2 = graphics /.Polygon=
[pts_] =
> :> Polygon[UpdatePoints[factor] /@ pts];
> Return[g2];
> ];
>
> Perhaps though someone can suggest a more elegant "one-liner"
>
>
-- =
DrMajorBob at bigfoot.com