%%%% 3DLDF.texi
   
%% This file is part of the 3DLDF User and Reference Manual.
%% Copyright (C) 2003, 2004 Laurence D. Finston 
%% See the section "GNU Free Documentation License" in the file 
%% fdl.texi for copying conditions.

%%%% $Id: 3DLDF.texi,v 1.17 2004/01/14 20:51:45 lfinsto1 Exp $

  
%%%% LDF 2002.11.16.  I hope doing this before I load texinfo.tex doesn't cause a problem.
\font\ninerm=cmr9
\font\tenbbb=msbm10 % Blackboard bold


\newlinechar=`^^J

%% Kludge!!  Actually, Kludges.  LDF 2002.11.19.
%% How do I define new macros for 
%% math mode??  Also, I'm not sure that these are the best 
%% symbols.

  

\newbox\PPbox % symbol for ++
\setbox\PPbox=\hbox{\kern.5pt\raise1pt\hbox{\sevenrm+\kern-1pt+}\kern.5pt}
\def\PP{\copy\PPbox}
%%\let\mc=\ninerm % medium caps
\let\mc=\tenrm % LDF 2002.11.16.  Trying this out. 
\def\CPLUSPLUS{{\mc C\PP\spacefactor1000}}
\def\newline{\hfil\break}

\newskip\displayskip


%%%% LDF 2002.12.20.  !! Explain this in README!
%%%% Examples of drawings in Encapsulated PostScript format can be
%%%% included in the printed version of this Texinfo documentation if 
%%%% dvips is used.  If it's 
%%%% available, and the user wants to use it, then the line with
%%%% "\doepsftrue" should _not_ be commented-out, and the line with
%%%% "\doepsffalse" _should_ be commented-out.  Otherwise, 
%%%% "\doepsftrue" should be commented-out, and 
%%%% "\doepsffalse" shouldn't be.  This has the effect that the examples will
%%%% be included, or not.  

%%%% LOG: 
%%%% LDF 2003.01.15.  Modified the following text.
%%%% END LOG.

%%%% LDF 2003.01.12.  To write examples:  

%%%% 1.  Use the macro \BEX to start an example.  It should be in a TeX
%%%%     environment. 

%%%% 2.  Use \BGRP if you want the 3DLDF code to be within a group.
%%%%     \BGRP just writes an open curly brace to subex.web.  Use 
%%%%     \EGRP to end the group.          

%%%% 3.  Use \write\example{...} to write 3DLDF code for the example
%%%%     to subex.web.
%%%%     Remember, if you change the code in the @example environment, you must
%%%%     change the code in \write\example to correspond.

%%%% 4. Use \OEX to call current_picture.output().  \OEX takes an
%%%%    argument which it passes to current_picture.output().  Usually,
%%%%    this will be an argument for the projection, but it can be a
%%%%    complete set of arguments for current_picture.output().  Note
%%%%    that from the point of view of TeX (and texi2dvi), it's a single
%%%%    argument. 
%%%%    This macro also writes its code to subex.web. 

%%%% 5.  Use \EEX to end an example.  Use the argument 1 to draw a box
%%%%     around the example, or 0 to suppress drawing it.

%%%% 6.  Use \PEX to print the example.  It calls \epsffile and inputs
%%%%     the EPS (Encapsulated PostScript) file "3DLDFmp.<\the\figcnt>".
%%%%     It also writes TeX code to 
%%%%     extext.tex for inputting the EPS file.  extext.tex can be input by
%%%%     another TeX file, which makes it possible to view the examples
%%%%     separately.  Currently, it is input by 3DLDFtex.tex.

%%%% 7.  Run texi2dvi to get the example code printed to subex.web.
%%%%     Don't worry if you get an error message, if you've added a new
%%%%     example. 
%%%%     Just type "s" to continue.  If the file 3DLDFmp.<number> hasn't
%%%%     been generated by a previous run throught the procedure, it won't be
%%%%     possible to open it.
%%%%     If all goes
%%%%     well, the next time texi2dvi is run (step 9), it will be available.

%%%% 8.  Make a change to examples.web, so that it will be recompiled.  Then
%%%%     recompile 3DLDF.

%%%% 9.  Run 3DLDF to generate 3DLDFput.mp.

%%%% 10.  Run mp-file to generate the EPS files.

%%%% 11.  Run texi2dvi again.

%%%% 12.  Run d2ps on 3DLDF. 

%%%% 13.  Now you can view 3DLDF.ps using gv (Ghostview), for example.

%% If \makeexamplestrue, 3DLDF code for the example figures is written
%% to \filename{examples.web}.  If \makeexamplesfalse, examples.web
%% isn't written at all.  However, if the Encapsulated PostScript files 
%% \filename{3DLDFmp.1}, \filename{3DLDFmp.2}, etc., containing the figures
%% exist, they will be included by \PEX, unless \doepsffalse.
%% In other words, generating the example figures can be suppressed, for
%% the final version, or for some other purpose.
%% In addition, if \doepsffalse is set, then \makeexamplesfalse is also
%% set.  This is because it doesn't probably doesn't make sense to
%% generate the illustrations, if we're not including them.
%% LDF 2003.08.29.

\newif\ifmakeexamples
\newif\ifdoepsf

%\makeexamplestrue    %% One of these two lines should be commented-out. 
\makeexamplesfalse    

\doepsftrue    %% One of these two lines should be commented-out. 
%\doepsffalse  

\ifdoepsf
\message{^^J\noexpand\doepsftrue. Will include figures.}
\else
\message{^^J\noexpand\doepsffalse. Won't include figures.}
\message{^^JSetting \noexpand\makeexamplesfalse.}
\makeexamplesfalse
\fi

\ifmakeexamples
\message{^^J\noexpand\makeexamplestrue. Will write 3DLDF code to examples.web.}
\else
\message{^^J\noexpand\makeexamplesfalse. Won't write 3DLDF code to examples.web.}
\fi


%%%% LDF 2002.12.20.
\ifdoepsf
\input epsf
\def\epsfsize#1#2{#1}  %% This sets the magnification factor for the
                       %% included graphics.
\fi

%% LDF 2003.01.12.  This is for writing the 3DLDF code for the figures 
%% to the file "../examples.web" and code for inputting them into
%% a TeX file to "../extext.tex".

%% This is for writing a double backslash to ../examples.web.
\begingroup
\catcode`\|=0
|catcode`|\=12
|gdef|DBKS#1{\\#1}
|endgroup

\newwrite\examples
\newwrite\extext

\ifdoepsf
\ifmakeexamples
\openout\examples=examples.web
\openout\extext=extext.tex

%% !! GET DATESTAMP TO WORK!!
%% ?? \immediate doesn't work here!!  This means that a figure can't
%% appear on the first page.  It won't, anyway, so it doesn't really
%% matter.   I would like to know why \immediate doesn't work here,
%% though. 

\write\examples{@q examples.web. @>^^J%
@q Generated by running texi2dvi 3DLDF.texi.@>^^J^^J%
@i subex1.web^^J}
\fi
\fi

\newcount\figcnt
\figcnt=0

%% Begin example.
\def\BEX{\ifmakeexamples\global\advance\figcnt by 1
   \immediate\write\examples{beginfig(\the\figcnt);}\fi}

%% Write open curly brace to begin group.
\def\BGRP{\ifmakeexamples\immediate\write\examples{\OCB}\fi}

%% Write closing curly brace to end group.
\def\EGRP{\ifmakeexamples\immediate\write\examples{\CCB}\fi}

%% Write output command for current_picture to example file.
%% The argument to \OEX is the argument to output().
\def\OEX#1{\ifmakeexamples\immediate\write\examples{current_picture.output(#1);}\fi}

%% End example.  Use any number >= 1 as argument #1 to draw a box around
%% the example, or 0 to suppress drawing it.

%% LDF 2003.01.31.  The figure number written to stdout will be
%% incorrect, if the figure is not the first one on a page.  The TeXbook
%% describes a way around this problem, but my first attempt at fixing
%% the problem didn't work (TeXbook, p.~323, 21.10).

\def\EEX#1{\ifmakeexamples
\ifnum#1>0
\immediate\write\examples{out_stream << "boxit.b(currentpicture);" << endl;}%
\fi
\ifcase#1            %% 0:  Do nothing.
\or                  %% 1:  Make box using defaultdx and defaultdy (defined
                     %%     in 3DLDFmp.mp).  Do nothing here.
\or                  %% 2:  Make box smaller on all sides.
\immediate\write\examples{out_stream << "b.dx=.5cm; b.dy=.5cm;";}% 
\or                  %% 3:  Make box smaller on the left and right sides.
\immediate\write\examples{out_stream << "b.dx=.5cm;";}% 
\or                  %% 3:  Make box smaller on the top and bottom.
\immediate\write\examples{out_stream << "b.dy=.5cm;";}% 
\fi
\ifnum#1>0
\immediate\write\examples{out_stream << "draw bpath b withpen pencircle scaled .25mm;" << endl;}% 
\fi
\immediate\write\examples{endfig(\the\figcnt);^^Jcurrent_picture.clear();^^J}%
\write16{FIGURE \the\figcnt\space is on page \the\count0.}\fi}

%% Special End Example.  Added LDF 2003.05.16.  It takes arguments for
%% sizing and positioning the box, if none of the arguments to \EEX does
%% the trick.
%% @c !! TO DO:  CHECK:  Arguments #3 and #4 don't seem to have any effect.  

\def\SEEX#1#2#3#4{\ifmakeexamples
\immediate\write\examples{out_stream << "boxit.b(currentpicture);" %
<< endl;}%
\immediate\write\examples{out_stream << "b.dx=#1; b.dy=#2;" << endl;}%
\immediate\write\examples{out_stream << "b.c := b.c shifted (#3, #4);" %
<< endl;^^J}%
\immediate\write\examples{out_stream << "draw bpath b withpen pencircle scaled .25mm;" << endl;}% 
\immediate\write\examples{endfig(\the\figcnt);^^Jcurrent_picture.clear();^^J}%
\write16{FIGURE \the\figcnt\space is on page \the\count0.}\fi}


%% Print example
%% LDF 2003.04.27.  Added \vbox, to prevent illustration from being
%% separated from the caption.
\def\PEX{\ifdoepsf
  \ifmakeexamples\else\global\advance\figcnt by 1\fi
  \vskip\parskip
  \vbox{\centerline{\epsffile{%
%%
./graphics/eps/%
3DLDFmp.\the\figcnt}}\nobreak
   \centerline{Figure \the\figcnt.}}%
%%
%% LDF 2003.01.15.  Added the following code.
%% Write to TeX file.  This makes it possible to look at the examples
%% separately.
\ifmakeexamples
   \immediate\write\extext{\vbox to \vsize{\vskip 2cm
                  \line{\hskip 2cm Example \the\figcnt.\hss}%
                  \vfil
                  \line{\hskip 2cm\noexpand\epsffile{3DLDFmp.\the\figcnt}\hss}%
                  \vss}^^J}\fi
%% LDF 2003.01.15.  End of new code.
%%
\fi %% \ifdoepsf
} 

\newcount\tempcnt
\let\NBKS=~ %% No break space.




%%%% LDF 2003.05.02.  Added the following code For "dangerous bend"
%%%% paragraphs.  This may cause problems, so I've marked the end of
%%%% this section, in case it needs to be deleted.

\font\manual=manfnt % font used for the METAFONT logo, etc.
\def\dbend{{\manual\char127}} % dangerous bend sign

\catcode`\@=11

%% I've had to play with the definition of \danger a bit, because the
%% way it was interfered with my footnotes. It's not very robust, it
%% has problems with \verbatim, \display, and 
%% \lispdisplay. In my version, it doesn't change the font, but it
%% will be very tricky, if you decide to use a smaller font for the
%% dangerous bend paragraphs. I end the \danger environment before
%% \display or \verbatim, and just continue afterwards, making sure
%% there is no \par in between, so the \danger
%% is past before the paragraph ends. 

\def\dd@nger{\medbreak\begingroup\clubpenalty=10000
  \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
  \hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}}
\outer\def\ddanger{\dd@nger}

\def\d@nger{\medbreak\begingroup\clubpenalty=10000
  %\def\par{\endgraf\endgroup\medbreak} 
  \noindent\hang\hangafter=-2
  \hbox to0pt{\hskip-\hangindent\dbend\hfill}}
\outer\def\danger{\d@nger}
\def\enddanger{\par\endgroup\medbreak} 

\catcode`\@=12

%%%% LDF 2003.05.02.  End of code added for "dangerous bend"
%%%% paragraphs. 




\input texinfo   @c -*-texinfo-*-




@c %**start of header
@setfilename 3DLDF.info
@settitle 3DLDF User and Reference Manual


@syncodeindex tp vr @c This merges the Data Type Index with the Variable
                    @c Index, because the former has so few entries.
                    @c LDF 2003.09.01.
@c %**end of header


@set EDITION 1.1.5
@set VERSION 1.1.5
@set UPDATED 14 January 2004
@set UPDATE-MONTH January 2004


@c *********************

@copying
This is the 3DLDF User and Reference Manual, edition @value{EDITION} for
3DLDF @value{VERSION}.  This manual was last updated on
@value{UPDATED}. 
3DLDF is a GNU package for three-dimensional drawing with MetaPost
output. 
The author is Laurence D. Finston.

Copyright @copyright{} 2003, 2004 Laurence D. Finston.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts.  A copy of the license is included in the section entitled 
``GNU Free Documentation License''.
@end quotation
@end copying

@c *********************

@c Added @dircategory and @direntry at the suggestion of 
@c Andreas Voegele.  LDF 2003.12.01.

@dircategory GNU packages
@direntry
* 3DLDF: (3DLDF).            3D drawing with MetaPost output.
@end direntry


@c *********************


@c @setchapternewpage odd
@c @setchapternewpage off  @c For saving paper.  LDF 2003.08.20.



@c *********************




@c !! REMEMBER TO COMMENT THIS BACK IN, IF I WANT A TITLE PAGE!!
@titlepage
@title 3DLDF User and Reference Manual
@subtitle 3-dimensional drawing with MetaPost output.
@subtitle Manual edition @value{EDITION} for 3DLDF Version @value{VERSION}
@subtitle @value{UPDATE-MONTH}
@author Laurence D. Finston

@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@headings on


@c Comment-out to save paper.
@shortcontents

@contents

@comment  node-name,  next,  previous,  up
@node Top, Introduction, (dir), (dir)

@ifnottex
@insertcopying

Please note that the figures cannot be shown in the Info output
format.  
@end ifnottex

@menu
* Introduction::                
* Contributing to 3DLDF::       
* Using 3DLDF::                 
* Points::                      
* Transforming Points::         
* Transforms::                  
* Drawing and Labeling Points::  
* Paths::                       
* Plane Figures::               
* Solid Figures::               
* Pictures::                    
* Intersections::               
* Installing and Running 3DLDF::  
* Typedefs and Utility Structures::  
* Global Constants and Variables::  
* Dynamic Allocation of Shapes::  
* System Information::          
* Color Reference::             
* Input and Output::            
* Shape Reference::             
* Transform Reference::         
* Label Reference::             
* Picture Reference::           
* Point Reference::             
* Focus Reference::             
* Line Reference::              
* Plane Reference::             
* Path Reference::              
* Polygon Reference::           
* Regular Polygon Reference::   
* Rectangle Reference::         
* Regular Closed Plane Curve Reference::  
* Ellipse Reference::           
* Circle Reference::            
* Pattern Reference::           
* Solid Reference::             
* Faced Solid Reference::       
* Cuboid Reference::            
* Polyhedron Reference::        
* Utility Functions::           
* Adding a File::               
* Future Plans::                
* Changes::                     
* Bibliography::                
* GNU Free Documentation License::  
* Data Type and Variable Index::  
* Function Index::              
* Concept Index::               
 
@detailmenu --- The Detailed Node Listing ---

Introduction

* Sources of Information::      
* About This Manual::           
* CWEB Documentation::          
* Metafont and MetaPost::       
* Caveats::                     
* Ports::                       

About This Manual

* Manual Conventions::          
* Illustrations::               

Caveats

* Accuracy::                    
* No Input Routine::            

Points

* Declaring and Initializing Points::  
* Setting and Assigning to Points::  

* Shifting Points::             
* Scaling Points::              
* Shearing Points::             
* Rotating Points::             

Transforms

* Applying Transforms to Points Intro::  
* Inverting Transforms::        

Drawing and Labeling Points

* Drawing Points Intro::        
* Labeling Points Intro::       

Paths

* Declaring and Initializing Paths::  
* Drawing and Filling Paths Intro::  

Plane Figures

* Regular Polygons Getstart::   
* Rectangles Getstart::         
* Ellipses Getstart::           
* Circles Getstart::            

Solid Figures

* Cuboid Getstart::             
* Polyhedron Getstart::         

Polyhedron

* Tetrahedron Getstart::        
* Dodecahedron Getstart::       
* Icosahedron Getstart::        

Pictures

* Projections::                 
* Focuses Getstart::            
* Surface Hiding::              

Projections

* Parallel Projections::        
* The Perspective Projection::  

Installing and Running 3DLDF

* Installing 3DLDF::            
* Running 3DLDF::               

Installing 3DLDF

* Template Functions::          

Running 3DLDF

* Converting EPS Files::        
* Command Line Arguments::      

Converting EPS Files

* Converting EPS Files ELISP::  

System Information

* Endianness::                  
* Register Width::              
* Get Second Largest Real::     

Color Reference

* Color Data Members::          
* Color Constructors and Setting Functions::  
* Color Operators::             
* Modifying Colors::            
* Showing Colors::              
* Querying Colors::             
* Defining and Initializing Colors::  
* Namespace Colors::            

Input and Output

* I/O Global Variables::        
* I/O Functions::               

Shape Reference

* Shape Data Members::          
* Shape Operators::             
* Copying Shapes::              
* Modifying Shapes::            
* Affine Transformations for Shapes::  
* Applying Transformations to Shapes::  
* Clearing Shapes::             
* Querying Shapes::             
* Showing Shapes::              
* Outputting Shapes::           

Transform Reference

* Transform Data Members::      
* Transform Global Variables and Constants::  
* Transform Constructors ::     
* Transform Operators::         
* Matrix Inversion::            
* Setting Values Transforms::   
* Querying Transforms::         
* Returning Information for Transforms::  
* Showing Transforms::          
* Affine Transformations for Transforms::  
* Alignment with an Axis for Transforms::  
* Resetting Transforms::        
* Cleaning Transforms::         

Label Reference

* Label Data Members::          
* Copying Labels::              
* Outputting Labels::           

Picture Reference

* Picture Data Members::        
* Picture Global Variables::    
* Picture Constructors::        
* Picture Operators::           
* Affine Transformations for Pictures::  
* Modifying Pictures::          
* Showing Pictures::            
* Outputting Pictures::         

Outputting 

* Picture Output Namespaces::   
* Picture Output Functions::    

Namespaces

* Namespace Projections::       
* Namespace Sorting::           

Point Reference

* Point Data Members::          
* Point Typedefs and Utility Structures::  
* Point Global Constants and Variables::  
* Point Constructors and Setting Functions::  
* Point Destructor::            
* Point Operators::             
* Copying Points::              
* Querying Points::             
* Returning Coordinates::       
* Returning Information for Points::  
* Modifying Points::            
* Affine Transformations for Points::  
* Applying Transformations to Points::  
* Projecting Points::           
* Vector Operations::           
* Points and Lines::            
* Point Intersections::         
* Point Drawing Functions::     
* Labelling Points::            
* Showing Points::              
* Outputting Points::           

Focus Reference

* Focus Data Members::          
* Focus Global Variables::      
* Focus Constructors and Setting Functions::  
* Focus Operators::             
* Modifying Focuses::           
* Querying Focuses::            
* Showing Focuses::             

Line Reference

* Line Data Members::           
* Line Global Constants::       
* Line Constructors::           
* Line Operators::              
* Get Path::                    
* Showing::                     

Plane Reference

* Planes Data Members::         
* Planes Global Constants::     
* Planes Constructors::         
* Planes Operators::            
* Planes Returning Information::  
* Plane Intersections::         
* Planes Showing::              

Path Reference

* Path Data Members::           
* Path Constructors and Setting Functions::  
* Path Destructor::             
* Path Operators::              
* Appending to Paths ::         
* Copying Paths::               
* Clearing Paths ::             
* Modifying Paths ::            
* Affine Transformations for Paths::  
* Aligning Paths with an Axis::  
* Applying Transformations to Paths::  
* Drawing and Filling Paths::   
* Labelling Paths::             
* Showing Paths::               
* Querying Paths::              
* Outputting Paths::            
* Path Intersections::          

Polygon Reference 

* Polygon Data Members::        
* Polygon Operators::           
* Querying Polygons::           
* Affine Transformations for Polygons::  
* Polygon Intersections::       

Regular Polygon Reference 

* Regular Polygon Data Members::  
* Regular Polygon Constructors and Setting Functions::  
* Regular Polygon Operators::   
* Querying Regular Polygons::   
* Circles for Regular Polygons::  

Rectangle Reference

* Rectangle Data Members::      
* Rectangle Constructors and Setting Functions::  
* Rectangle Operators::         
* Returning Points for Rectangles::  
* Querying Rectangles::         
* Ellipses for Rectangles::     

Regular Closed Plane Curve Reference

* Regular Closed Plane Curve Data Members::  
* Querying Regular Closed Plane Curves::  
* Regular Closed Plane Curve Intersections::  
* Regular Closed Plane Curve Segments::  

Ellipse Reference

* Ellipse Data Members::        
* Ellipse Constructors and Setting Functions::  
* Performing Transformations on Ellipses::  
* Ellipse Operators::           
* Labeling Ellipses::           
* Affine Transformations for Ellipses::  
* Querying Ellipses::           
* Returning Elements and Information for Ellipses::  
* Ellipse Intersections::       
* Solving Ellipses::            
* Rectangles for Ellipses::     

Circle Reference

* Circle Data Members::         
* Circle Constructors and Setting Functions::  
* Circle Operators::            
* Querying Circles::            
* Circle Intersections::        

Pattern Reference

* Plane Tesselations::          
* Roulettes and Involutes::     

Roulettes and Involutes

* Epicycloids::                 

Solid Reference

* Solid Data Members::          
* Solid Constructors and Setting Functions::  
* Solid Destructor::            
* Solid Operators::             
* Copying Solids::              
* Setting Solid Members::       
* Querying Solids::             
* Returning Elements and Information Solids::  
* Showing Solids::              
* Affine Transformations for Solids::  
* Applying Transformations to Solids::  
* Outputting Solids::           
* Drawing and Filling Solids::  
* Clearing Solids::             

Returning Elements and Information 

* Getting Shape Centers Solids::  
* Getting Shapes Solids::       

Faced Solid Reference

* Solid_Faced Data Members::    

Cuboid Reference

* Cuboid Data Members::         
* Cuboid Constructors and Setting Functions::  
* Cuboid Operators::            

Polyhedron Reference

* Polyhedron Data Members::     
* Regular Platonic Polyhedra::  
* Semi-Regular Archimedean Polyhedra::  

Regular Platonic Polyhedra

* Tetrahedron::                 
* Dodecahedron::                
* Icosahedron::                 

Tetrahedron 

* Tetrahedron Data Members::    
* Tetrahedron Constructors and Setting Functions::  
* Tetrahedron Net::             

Dodecahedron 

* Dodecahedron Data Members::   
* Dodecahedron Constructors and Setting Functions::  
* Dodecahedron Net::            

Icosahedron 

* Icosahedron Data Members::    
* Icosahedron Constructors and Setting Functions::  
* Icosahedron Net::             

Semi-Regular Archimedean Polyhedra

* Truncated Octahedron::        

Truncated Octahedron 

* Truncated Octahedron Data Members::  
* Truncated Octahedron Constructors and Setting Functions::  
* Truncated Octahedron Net::    

Utility Functions

* Perspective Functions::       

Future Plans

* Geometry::                    
* Curves and Surfaces::         
* Shadows::                     
* Multi-Threading::             

Changes

* Changes in 3DLDF 1.1.5::      
* Changes in 3DLDF 1.1.4.2::    
* Changes in 3DLDF 1.1.4.1::    
* Changes in 3DLDF 1.1.4::      
* Initial version::             

@end detailmenu
@end menu

@macro bibskip {}
@iftex 
@tex 
@medskip
@end tex
@end iftex
@ifnottex 
@sp 1
@end ifnottex 
@end macro

@macro cpp {}
@iftex
@tex
@CPLUSPLUS
@end tex
@end iftex
@ifnottex
C++
@end ifnottex
@end macro


@macro NATURAL {}
@iftex 
@tex 
@hbox{{@tenbbb N}} 
@end tex
@end iftex
@ifnottex
N
@end ifnottex
@end macro


@macro REAL {}
@iftex 
@tex
@hbox{{@tenbbb R}} 
@end tex
@end iftex
@ifnottex 
R
@end ifnottex
@end macro

@macro INT {}
@iftex 
@tex 
@hbox{{@tenbbb Z}} %% Integers.
@end tex
@end iftex
@ifnottex 
I
@end ifnottex
@end macro

@c UBAR is only used in code written to examples.web.  There's no need
@c for versions for it for Info or HTML.  LDF 2003.12.07. 
@c
@c 
@c
@iftex 
@tex 
\gdef\UBAR{$\noexpand\\underline{\noexpand\\hbox to 1ex%
  {\noexpand\\hfil}}$}
@end tex
@end iftex
@ifnottex 
@macro UBAR {}
_@c
@end macro
@end ifnottex 
  
@macro NEXTFIG {}
@iftex
@tex 
\\tempcnt=\\figcnt\\advance\\tempcnt by 1
Fig.\\NBKS\\the\\tempcnt
@end tex
@end iftex
@ifnottex 
[next figure]
@end ifnottex
@end macro

@macro TWOPREFIG {}
@iftex
@tex 
\\tempcnt=\\figcnt\\advance\\tempcnt by -1
Fig.\\NBKS\\the\\tempcnt
@end tex
@end iftex
@ifnottex 
[the second-to-last figure]
@end ifnottex
@end macro

@macro PREFIG {}
@iftex 
@tex
Fig.\\NBKS\\the\\figcnt
@end tex
@end iftex
@ifnottex
[the previous figure]
@end ifnottex
@end macro

@c Kludge!  This won't work for 1 degree in the Info version!
@c LDF 2003.11.25.
@macro DEG{NUMBER}
@iftex
@tex
{$\NUMBER\^@circ$}%
@end tex
@end iftex
@ifnottex
\NUMBER\ degrees 
@end ifnottex
@end macro

@macro PRM{NUMBER}  
@iftex
@tex
{$\NUMBER\^\\prime$}%
@end tex
@end iftex
@ifnottex
\NUMBER\'
@end ifnottex
@end macro



@macro SECT {}
@iftex 
@tex
@S
@end tex
@end iftex
@ifnottex 
section
@end ifnottex
@end macro

@c %% \OCB and \CCB are used in \BGRP and \EGRP (begin group and end group)
@c %% for writing curly braces to the file of 3DLDF example code.

@iftex 
@tex 
\begingroup
\catcode`\{=12
\catcode`\}=12
\catcode`\<=1
\catcode`\>=2
\gdef\OCB<{>  % Open curly brace.
\gdef\CCB<}>  % Closing curly brace
\endgroup
@end tex
@end iftex
@ifnottex
@macro OCB
@{
@end macro
@macro CCB
@}
@end macro
@end ifnottex


@macro angles{arg}
@iftex 
@tex 
$\\langle$\\it{\arg\\\/}$\\rangle$%
@end tex
@end iftex
@ifnottex 
<\arg\>
@end ifnottex
@end macro

@macro NEQ {arg}
@iftex 
@tex
$\\neq \arg\$ 
@end tex
@end iftex
@c
@ifnottex 
@math{!= \arg\}
@end ifnottex 
@end macro

@c Calling this `@TIMES' caused problems.  Maybe the name wasn't the
@c reason, though.  But I don't feel like experimenting to find out.  
@c LDF 2003.12.08.
@c
@macro TMS {arg1, arg2}
@iftex 
@tex
$\arg1\ \\times \arg2\$% 
@end tex
@end iftex
@c
@ifnottex 
@math{\arg1\ * \arg2\}
@end ifnottex 
@end macro

@c ``By'' for matrices.
@macro BYM {arg1, arg2}
@iftex 
@tex
$\arg1\ \\times \arg2\$% 
@end tex
@end iftex
@c
@ifnottex 
@math{\arg1\ X \arg2\}
@end ifnottex 
@end macro
  


@macro OVERRTARROW {arg}
@iftex 
@tex
$\\overrightarrow{\arg\}$%
@end tex
@end iftex
@c
@ifnottex 
@math{\arg\}
@end ifnottex 
@end macro

@macro PLUSMINUS {arg}
@iftex 
@tex
$\\pm{\arg\}$%
@end tex
@end iftex
@c
@ifnottex 
@math{+ or - \arg\}
@end ifnottex 
@end macro

@include intro.texi     



@include contrib.texi

@c @c Got rid of getstart.texi, because it confuses Emacs and makeinfo
@c @c to have files nested too deeply.

@include using.texi

@c chapter Points
@include gspoint.texi   

@c chapter Transforming Points
@include gstranpt.texi      

@c chapter Transforms
@include gstransf.texi      

@c chapter Drawing and Labeling Points
@include gsdlpt.texi        

@c chapter Paths  
@include gspaths.texi       

@c chapter Plane Figures
@include gsplane.texi       

@c chapter Solid Figures
@include gssolfig.texi      

@c chapter Pictures
@include gspict.texi        


@include intersct.texi

@include instlrun.texi


@c @c Unless otherwise stated, all of the functions described in the following
@c @c chapters are @dfn{member functions} of the  
@c @c the @code{class} currently under discussion.

@include typeglb.texi 

@include glbcnvar.texi 

@include creatnew.texi

@include system.texi

@include color.texi 

@include io.texi  

@include shape.texi 

@include transfor.texi  

@include label.texi

@include picture.texi

@include point.texi  

@include focus.texi  

@include line.texi   

@include plane.texi  

@include path.texi

@include polygon.texi

@include regpolyg.texi 

@include rectang.texi

@include rcpcurve.texi 

@include ellipse.texi  

@include circle.texi

@include pattern.texi

@include solid.texi

@include solfaced.texi

@include cuboid.texi

@include polyhed.texi

@include utility.texi

@include addfile.texi

@include future.texi

@include changes.texi

@include biblio.texi
     
@iftex 
@tex
\ifdoepsf
\ifmakeexamples
\write\examples{@@i subex2.web^^J^^J}
\closeout\examples
\closeout\extext
\fi %% \makeexamples
\fi %% \doepsf
@end tex
@end iftex

@page


@include fdl.texi

@c The Data Type Index is merged with the Variable Index, because the
@c former has so few entries.
@c "@syncodeindex tp vr" appears after "@c %**end of header", above.
@c LDF 2003.09.01.

@page
@include varidx.texi

@page
@include funcidx.texi

@page

@include concidx.texi

@bye
