This HTML document is based on Mathematica Graphics: An Intensive Tutorial by Tom WickhamJones. It was adapted by Martin Kraus for noncommercial use.
Mathematica and MathLink are registered trademarks, and MathReader, MathSource and 3Script are trademarks of Wolfram Research, Inc.
All other product names mentioned are trademarks of their producers.
Copyright 1992 by Wolfram Research, Inc.
All rights reserved. No part of this document may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without the prior written permission of the copyright holder.
In previous chapters we have seen how pictures can be made with the builtin functions. We have also seen how the picture which results is a side effect of the evaluation and that there is always a Mathematica expression which is returned. This expression contains a Mathematica representation of the image. If we have a little knowledge of the nature of this representation we can write our own code to generate similar graphics objects, or take existing objects and adapt them in some way. In this section we shall look a little at some of the components of the Mathematica expression which can be used by graphics commands.
Circle  Disk 
Line  Point 
Polygon  PostScript 
Raster  RasterArray 
Rectangle  Text 
Cuboid  Line 
Point  Polygon 
Text 
We can just build expressions containing graphics primitives. The types of coordinates which can be used are discussed in detail in the next chapter. Here the coordinates have their obvious meaning.
This builds a Mathematica expression using the graphics primitive Line.  In[1]:= Line[{{0, 0, 0}, {1, 1, 0}, {2, 2, 1}}] Out[1]= Line[{{0, 0, 0}, {1, 1, 0}, {2, 2, 2}}] 
The head of Graphics3D is necessary to label the object as containg threedimensional primitives. The head for twodimensional primitives is Graphics.  In[2]:= Graphics3D[Line[{{0, 0, 0}, {1, 1, 0}, {2, 2, 1}}]] Out[2]=  Graphics3D  
The first argument of Show must be a graphics object.  In[3]:= Show[Graphics3D[Line[{{0, 0, 0}, {1, 1, 0}, {2, 2, 1}}]]] 
Out[3]=  Graphics3D  

We do not have to explicitly enter numbers for a primitive. So long as we enter an expression which will evaluate to a valid primitive everything works.  In[4]:= Line[Table[{i, i, i^2}, {i, 0, 1, 0.1}]] Out[4]= Line[{{0, 0, 0}, {0.1, 0.1, 0.01}, {0.2, 0.2, 0.04}, {0.3, 0.3, 0.09}, {0.4, 0.4, 0.16}, {0.5, 0.5, 0.25}, {0.6, 0.6, 0.36}, {0.7, 0.7, 0.49}, {0.8, 0.8, 0.64}, {0.9, 0.9, 0.81}, {1., 1., 1.}}] 
This plots the primitives we just built.  In[5]:= Show[Graphics3D[%]] 
Out[5]=  Graphics3D  
The use of text in Mathematica graphics presents various special problems connected with placement and orientation and also with the font which is used to render it.
TextStyle  option to determine the text style used 
FormatType  option to determine the format type used 
Text[ expr , { x , y }]  primitive for text of expr at {x, y} 
Text[ expr , { x , y }, { xoff , yoff }]  text of expr with offset of {xoff, yoff} 
Text[ expr , { x , y }, { xoff , yoff }, { xvec , yvec }]  text of expr with direction {xvec, yvec} 
StyleForm[ expr , opts ]  prints expr using font options opts such as FontFamily, FontSize or FontColor 
All graphical commands possess the option TextStyle which defaults to the global variable $TextStyle.
This shows the value of $TextStyle. Without any setting a Courier font is used.  In[6]:= $TextStyle Out[6]= {} 
This changes the font used to render text in this plot to 14 printer's point Helvetica.  In[7]:= ParametricPlot3D[{Sin[t], Cos[t], Cos[2 t]}, {t, 0, 2 Pi},
TextStyle > {FontFamily > "Helvetica", FontSize > 14}] 
Out[7]=  Graphics3D  
To change the font for all graphics alter $TextStyle.
To include text into graphical images Mathematica provides the primitive Text. It can be used as a primitive in both Graphics and Graphics3D.
This shows some text.  In[8]:= Show[Graphics3D[{Text["this", {1, 0, 0}],
Text["is",{0, 1, 0}], Text["text", {1, 1, 0}]}, ViewPoint > {0, 3, 0}]] 
Out[8]=  Graphics3D  

The expression which Text takes does not have to be a string. The option FormatType specifies how to format expressions. By default StandardForm is used.  In[9]:= Show[Graphics3D[Text[Sin[p], {0, 0, 0}]]] 
Out[9]=  Graphics3D  
The position given to Text must be a pair of numbers for Graphics and a triple for Graphics3D. Mathematica will issue a warning message if this is not the case. The offset positions the text in relation to this position and is discussed in The Mathematica Book. The default value of the offset, {0, 0}, centers the string at the given position. The direction is used to rotate the text. It is the vector along which the text will lie.
For some window systems it is very hard to rotate text and consequently it will not appear rotated. When the output is printed to a PostScript printer the text will have the correct orientation.
This changes the font to 24 printer's points boldface Helvetica and adds some color.  In[10]:= Show[Graphics3D[Text[StyleForm["This is my string.",
FontFamily>"Helvetica", FontSize>24, FontWeight>"Bold", FontColor>RGBColor[0.5, 0, 0.5],
Background>RGBColor[1, 1, 0]], {0, 0, 0}]]] 
Out[10]=  Graphics3D  
AbsoluteDashing  AbsolutePointSize 
AbsoluteThickness  CMYKColor 
Dashing  GrayLevel 
Hue  RGBColor 
PointSize  Thickness 
AbsoluteDashing  AbsolutePointSize 
AbsoluteThickness  CMYKColor 
Dashing  EdgeForm 
FaceForm  GrayLevel 
Hue  PointSize 
RGBColor  SurfaceColor 
Thickness 
The directive Thickness changes the rendering of the Line primitive which follows it.  In[11]:= Show[Graphics3D[{Thickness[0.01], Line[{{0, 0, 0}, {1, 1, 1}}]}]] 
Out[11]=  Graphics3D  

The directive only affects primitives which follow it.  In[12]:= Show[Graphics3D[{Line[{{0, 0, 1}, {1, 1, 2}}],
Thickness[0.01], Line[{{0, 0, 0}, {1, 1, 1}}]}]] 
Out[12]=  Graphics3D  

The directive only affects primitives at that level or below. It does not travel back up the treestructure.  In[13]:= Show[Graphics3D[{{Thickness[0.01], Line[{{0, 0, 0}, {1, 1, 1}}]},
Line[{{0, 0, 1}, {1, 1, 2}}]}]] 
Out[13]=  Graphics3D  
Since we can build graphics objects from primitives we can easily write programs to construct these with the tools provided by Mathematica. This is how Mathematica packages generate their pictures. The idea of programming to produce pictures is explored in more detail in Chapter 6.
FaceForm and EdgeForm alter just the edge or the face of a polygon. In addition, FaceForm allows the front and back of the polygon to be described differently.
EdgeForm[]  do not draw polygons edges 
EdgeForm[ dir ]  use the directive or list of directives dir to draw polygons edges 
FaceForm[ dir ]  draw the polygon faces with dir 
FaceForm[ dirf , dirb ]  draw the front face with dirf and back face with dirb 
In[14]:= prims = First[ParametricPlot3D[{Sin[t] Cos[p], Sin[t] Sin[p], Cos[t]},
{t, 0, Pi}, {p, 0, 2 Pi}, PlotPoints > {10, 12},
DisplayFunction > Identity]]; 

This does not draw lines at the polygon edges.  In[15]:= Show[Graphics3D[{EdgeForm[], prims}]] 
Out[15]=  Graphics3D  

This makes them thick and gray.  In[16]:= Show[Graphics3D[{EdgeForm[{GrayLevel[0.5],
Thickness[0.01]}], prims}]] 
Out[16]=  Graphics3D  

This shows the top view of the polygon.  In[17]:= Show[Graphics3D[{FaceForm[GrayLevel[0],
GrayLevel[0.7]], Polygon[{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}}]}], Lighting > False] 
Out[17]=  Graphics3D  

This shows the bottom, which has a different color.  In[18]:= Show[%, ViewPoint > {1.3, 2.4, 2.}] 
Out[18]=  Graphics3D  
The SurfaceColor directive allows one to construct more complex surface properties. It defines the diffuse and specular reflectivities of polygons.
SurfaceColor[ difcol ]  diffuse reflector of color difcol 
SurfaceColor[ difcol , speccol ]  specular reflector of color speccol 
SurfaceColor[ difcol , speccol , exp ]  specular exponent exp 
next page: 4.2 Using Color and Lighting  back to table of contents 