Re: Missing Graphics

*To*: mathgroup at smc.vnet.net*Subject*: [mg54315] Re: [mg54248] Missing Graphics*From*: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>*Date*: Thu, 17 Feb 2005 10:30:37 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

>-----Original Message----- >From: Andrzej Kozlowski [mailto:akoz at mimuw.edu.pl] To: mathgroup at smc.vnet.net >Sent: Thursday, February 17, 2005 12:24 AM >To: Wolf, Hartmut >Cc: mathgroup at smc.vnet.net >Subject: [mg54315] Re: > > >On 16 Feb 2005, at 20:35, Wolf, Hartmut wrote: > >> >>> -----Original Message----- >>> From: Bruce Colletti [mailto:vze269bv at verizon.net] To: mathgroup at smc.vnet.net >> To: mathgroup at smc.vnet.net >>> Sent: Tuesday, February 15, 2005 3:51 AM >>> To: mathgroup at smc.vnet.net >>> Subject: [mg54315] [mg54279] [mg54248] Missing Graphics >>> >>> Re Mathematica 5.1. >>> >>> This code displays (as intended) five versions of g (first two are >>> same): >>> >>> g = Plot3D[Sin@x Cos@y, {x, -PI, PI}, {y, -PI, PI}]; >>> >>> Scan[Show@#@g &, {SurfaceGraphics, Graphics, ContourGraphics, >>> DensityGraphics}]; >>> >>> However, when DisplayFunction->Identity is added to Plot3D, >only the >>> SurfaceGraphics plot appears. Why don't the others? >>> >>> Thankx. >>> >>> Bruce >>> >>> >> >> Bruce, >> >> it's not the SurfaceGraphics which appears -- that would be queer -- >> yet the Graphics, which is ok, see: >> >> In[10]:= Options[#[g], DisplayFunction] & /@ >> {SurfaceGraphics, Graphics, ContourGraphics, DensityGraphics} >> >> From In[10]:= >> Options::"optnf": DisplayFunction is not a known option for - Graphics - >> >> Out[10]= >> {{DisplayFunction -> Identity}, {}, {DisplayFunction -> Identity}, >> {DisplayFunction -> Identity}} >> >> >> As DisplayFunction is no option for Graphics it cannot be retained; in >> fact no option of g is retained. If you look at >> >> In[13]:= Options[g] >> >> you'll indeed note that none of those would make sense after the >> conversion of g to a 2D object. >> >> >> -- >> Hartmut Wolf >> >> > > >Hartmut is as usual right but the way the explanation is >expressed is confusing. DisplayFunction is certainly an option >for Graphics and >indeed: > > > >Options[Plot[x^2, {x, -1, 1}], DisplayFunction] > > >{DisplayFunction :> $DisplayFunction} > >but not for Graphics objects that result by converting >Graphics3D or SurfaceGraphics objects: > > >Options[Graphics[Plot3D[x^2 + y^2, {x, -1, 1}, > {y, -1, 1}]], DisplayFunction] > > DisplayFunction is not a known option for Graphics > >{} > >As stated literally this message actually looks false! > > > >Andrzej Kozlowski >Chiba, Japan >http://www.akikoz.net/andrzej/index.html >http://www.mimuw.edu.pl/~akoz/ > > Yes, Andrzej, Graphics here appears as a chimaera: it is (1) an inert _container_ for (structures of) 2D graphical primitives as Point, Line etc. to be displayed by Show and (optionally) including certain options associated with the object, which wait to be interpreted by Show (as well as the primitives do). As Options[Graphics] tells, there are even defaults, which however, are not passed to the graphical objects, but wait for interpretation at Show (if not supplied with the object): In[8]:= l2D = Graphics[Line[{{0, 0}, {1, 1}}]] Out[8]= - Graphics - In[10]:= Options[l2D] Out[10]= {} In[18]:= Show[l2D] Out[18]= - Graphics - just draws the line. If we reset a default, e.g. In[21]:= SetOptions[Graphics, Background -> Hue[1/6, .5, 1]] and then draw In[22]:= Show[l2D] Out[22]= - Graphics - the same object now is drawn in front of a yellow background. If we put specific options into the Graphics container these will be used: In[27]:= Show[l2D0 = Append[l2D, Background -> Automatic]] Out[27]= - Graphics - In[28]:= Options[l2D0] Out[28]= {Background -> Automatic} This however is not an Option associated with the symbol l2D0, but just read from its container. In[25]:= SetOptions[Unevaluated[l2D], Background -> Automatic] >From In[25]:= SetOptions::"optnf": Background is not a known option for l2D. Deplorably the options for Graphics do not work as a filter in a similar sense, it is possible to put nonsensical options into the container waiting to be spotted by Show: In[16]:= Graphics[Line[{{0, 0}, {1, 1}}], WorkingPrecision -> 16] Out[16]= - Graphics - In[17]:= % // Show >From In[17]:= Graphics::"optx": Unknown option WorkingPrecision in - Graphics - (2) At the other side Graphics is a _function_ to convert 3D graphical objects to a 2D object, whose primitives are now enclosed in the _container_ graphics -- of course. As I had stated, the usual options associated with a 3D graphics object are not to be retained, so it obviously was the choice of WRI not to keep any of them when converting. I tend to defend this. Interestingly, with In[36]:= Show[Append[Graphics[g], Options[g]]] Out[36]= - Graphics - DisplayFunction -> Identity becomes effective, and no error occurs, but when trying In[37]:= Show[Append[Graphics[g], Options[g]], DisplayFunction -> $DisplayFunction] >From In[37]:= Graphics::"optx": Unknown option ViewPoint in - Graphics - Show bails out at the first nonsensical option it encounters. The whole scheme seems to be quite reasonable, in particular not to associate defaults to Show but to the symbols that constitute the containers (or say "data types") for the graphical objects. Thus you may invent your own graphical types and extend Show to display them. Definitely my first explanation as stated is wrong and void; we just observe the fact that the option DisplayFunction (as any option) is not retained with the conversion. The error message refers to the converted object -- expressed as container Graphics -- and does not refer to the symbol Graphics! Thanks, Andrzej! Hartmut