Provide facilities for 3D graphical output
"
graphical"
coordinate system. The
axes of this coordinate system are assumed to be right-handed (that is, if X
appears horizontally to the right and Y vertically upwards, then Z is out of the
screen towards the viewer), and are assumed to be equally scaled (that is, the
same units are used to measure positions on each of the 3 axes). The upper and
lower bounds of a volume within this graphical coordinate system is specified
when the Plot3D is created, and all subsequent graphics are "
drawn"
in this
volume.
The Plot3D class does not itself include any ability to draw on a graphics device.
Instead it calls upon function in an externally supplied module (the "
grf3d"
module)
to do the required drawing. A module should be written that implements the functions of
the grf3d interface using the facilities of a specific graphics system This module
should then be linked into the application so that the Plot3D class can use its
functions (see the description of the ??link
commands for details of how to do this). The grf3d interface defines a few simple
functions for drawing primitives such as straight lines, markers and character strings.
These functions all accept positions in the 3D graphics coordinate system (the base
Frame of the Plot3D), and so the grf3d module must also manage the projection of these
3D coordinates onto the 2D viewing surface, including the choice of "
eye"
/"
camera"
position, direction of viewing, etc. The AST library includes a
sample implementation of the grf3d interface based on the PGPLOT graphics system
(see file grf3d_pgplot.c). This implementation also serves to document the
grf3d interface itself and should be consulted for details before writing a new
implementation.
The current Frame of a Plot3D describes a "
physical"
3-dimensional coordinate system,
which is the coordinate system in which plotting operations are specified when invoking
the methods of the Plot3D class. The results of each plotting operation are
automatically transformed into 3D graphical coordinates before being plotted using the
facilities of the grf3d module linked into the application. Note, at least one of the
three axes of the current Frame must be independent of the other two current Frame
axes.
You may select different physical coordinate systems in which to plot (including the native graphical coordinate system itself) by selecting different Frames as the current Frame of a Plot3D, using its Current attribute.
Like any FrameSet, a Plot3D may also be used as a Frame. In this case, it behaves like its current Frame, which describes the physical coordinate system.
When used as a Mapping, a Plot3D describes the inter-relation between 3D graphical coordinates (its base Frame) and 3D physical coordinates (its current Frame).
Although the Plot3D class inherits from the Plot class, several of the facilities of the Plot class are not available in the Plot3D class, and an error will be reported if any attempt is made to use them. Specifically, the Plot3D class does not support clipping using the astClip function. Nor does it support the specification of graphics primitive functions at run-time using the astGrfSet, astGrfPop, astGrfPush and astGetGrfContext functions.
Norm: Normal vector defining the 2D plane used for text and markers
RootCorner: Specifies which edges of the 3D box should be annotated.
Some attributes of the Plot class refer to specific physical coordinate axes (e.g. Gap, LabelUp, DrawAxes, etc). For a basic Plot, the axis index must be 1 or 2, but for a Plot3D the axis index can be 1, 2 or 3.
Certain Plot attributes are ignored by the Plot3D class (e.g. Edge, DrawTitle,
TitleGap, etc). Consult the Plot attribute documentation for details. All other
Plot attributes can be set for a specific plane of the 3-d plot by appending
one of the strings "
_XY"
, "
_XZ"
or "
_YZ"
to the end of the Plot attribute
name. For instance, "
Grid_YZ"
refers to the "
Grid"
attribute for the plane
spanning the second (Y) and third (Z) axes of the 3-d plot.
astBoundingBox, astClip, astCurve, astGenCurve, astGetGrfContext, astGrfPop, astGrfPush, astGrfSet, astGridLine, astPolyCurve.