Re: is the visibility of a Polygon[] exposed?
- To: mathgroup at smc.vnet.net
- Subject: [mg83749] Re: is the visibility of a Polygon[] exposed?
- From: m.r at inbox.ru
- Date: Thu, 29 Nov 2007 06:37:51 -0500 (EST)
- References: <figuou$foo$1@smc.vnet.net> <fijick$io6$1@smc.vnet.net>
On Nov 28, 5:11 am, m... at inbox.ru wrote: > On Nov 27, 5:24 am, congruentialumina... at yahoo.com wrote: > > > > > Hello Mathematica UG: > > > Is it possible for my code to tell if a Polygon (in my graphics > > object) is visible? > > > I assume that this is based upon (or is affected by) the ViewPoint-> > > setting. > > > Further, I assume that the kernel is deriving this somewhere to do > > rendering. Do I have any access to this? > > > If I evaluate: > > > q = PolyhedronData["SnubCube"] > > > I can see the component Polygon[] and GraphicsComplex[] objects that > > make up the Graphics3D[]. I want to make a code decision based on > > whether a face is showing. > > > TIA. > > > Regards..Roger W. > > This doesn't look perfect because it draws every edge twice, but it > gives a general idea: > > DynamicModule[{gr, p, cent}, > {p, cent} = {Max@ #, Mean@ #}&@ > N@ PolyhedronData["SnubCube", "VertexCoordinates"]; > p *= 2 {1.3, -2.4, 2.}; > gr = PolyhedronData["SnubCube", "Faces"] // N // Normal; > gr = gr /. Polygon[L_?MatrixQ, ___] :> > {Dynamic@ If[Det@ > {L[[2]] - L[[1]], L[[3]] - L[[1]], p - cent - L[[1]]} >= 0, > Thick, Dashed], > Line@ Append[L, L[[1]]]}; > Graphics3D[gr, Boxed -> False, > ViewCenter -> Dynamic[Automatic, None], > ViewVector -> Dynamic@ {p, cent}] > ] > > Maxim Rytin > m... at inbox.ru Except I made a mistake, p - cent - L[[1]] should be just p - L[[1]]. cent can be anywhere: DynamicModule[{gr, p, cent, cent1, cent2, r}, {p, cent1, cent2} = {Max@ Abs@ #, Mean@ #, First@ #}&@ N@ PolyhedronData["SnubCube", "VertexCoordinates"]; p *= 2 {1.3, -2.4, 2.}; cent = cent1; r = Norm[p - cent]; gr = PolyhedronData["SnubCube", "Faces"] // N // Normal; gr = gr /. Polygon[L_?MatrixQ, ___] :> {Dynamic@ If[Det@ {L[[2]] - L[[1]], L[[3]] - L[[1]], p - L[[1]]} >= 0, Thick, Dashed], Line@ Append[L, L[[1]]]}; Manipulate[ Graphics3D[{gr, {Red, AbsolutePointSize[5], Point[Dynamic@ cent]}}, Boxed -> False, ViewCenter -> Dynamic[Automatic, None], ViewVector -> Dynamic[{p, cent}, (p = r Normalize[#[[1]] - #[[2]]] + #[[2]])&]], {{s, False, "Fixed Vertex"}, Checkbox[Dynamic[s, (cent = If[s = #, cent2, cent1])&]]&}] ] Maxim Rytin m.r at inbox.ru