MathGroup Archive 2007

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

Search the Archive

Re: Re: Making sense of Directive[ ]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg75988] Re: [mg75865] Re: Making sense of Directive[ ]
  • From: Brett Champion <brettc at wolfram.com>
  • Date: Mon, 14 May 2007 03:50:03 -0400 (EDT)
  • References: <f1uohq$876$1@smc.vnet.net> <200705120707.DAA23936@smc.vnet.net>

On May 12, 2007, at 2:07 AM , Albert wrote:

> Forex Ample wrote:
>> I stumbled upon the new Directive[ ] function, used to group Graphics
>> directives into one compound directive. However, I fail to see  
>> what it is
>> good for. In every example in the documentation, replacing  
>> Directive with
>> List seems to produce the exact same results. Anybody got a clue?
>
> Not that I have a clue, but it is easy to make up examples, where  
> there
> _is_ a difference:
>
> Graphics[{{Red, Thick}, Line[{{0, 0}, {1, 1}}]}]
>
> Graphics[{Directive[Red, Thick], Line[{{0, 0}, {1, 1}}]}]
>
> the first line will not be red and thick, the second is. This makes
> something like the following easier:
>
> mystyle = Directive[Red, Thick];
>
> Graphics[{mystyle, Line[{{0, 0}, {1, 1}}]}]
>
> where without Directive you would need:
>
> mystylelist = {Red, Thick};
>
> Graphics[{Sequence @@ mystylelist, Line[{{0, 0}, {1, 1}}]}]
>
> anyway, I can hardly believe that this alone is enough to justify the
> introduction of Directive :-)
>

Also compare the inputs:

Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3},
  MeshShading -> {{Red,
     Directive[Yellow, Opacity[0.5]]}, {Directive[Pink, Opacity[0.3]],
     Orange}}]

Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3},
  MeshShading -> {{Red, {Yellow, Opacity[0.5`]}}, {{Pink, Opacity 
[0.3`]},
     Orange}}]


I think the former is easier to read, since lists are only used for  
the structure of the option, and not also for the merging of styles.   
There is no guarantee that Directive[style1, style2, ...] and  
{style1, style2, ...} will be interpreted the same.  Albert's  
example, using a simple Graphics construction, shows that in fact the  
two constructs have different behaviors at a very low level.

The fact that the various Plot functions work with both is a nod  
toward backward compatibility, but may not be continued when we add  
new features.  (In fact, I was surprised that the second MeshShading  
example above worked.)


Brett Champion


  • Prev by Date: Where is the Mathematica Book in Documentation Center?
  • Next by Date: RE: Mathematica 6.0 - Legend
  • Previous by thread: Re: Making sense of Directive[ ]
  • Next by thread: Re: Making sense of Directive[ ]