public class CubeSurface extends Object implements Surface
Part of the surface definition involves a rotation matrix by which the data positions are rotated before being plotted to the screen. If the rotation matrix is a unit matrix, the data X coord is screen X increasing left to right (graphics positive), the data Z coord is screen Y increasing bottom to top (graphics negative), and the data Y coord is into the screen increasing front to back.
Constructor and Description |
---|
CubeSurface(int gxlo,
int gxhi,
int gylo,
int gyhi,
double[] dlos,
double[] dhis,
boolean[] logFlags,
boolean[] flipFlags,
double[] rotmat,
double zoom,
double xoff,
double yoff,
Tick[][] ticks,
String[] labels,
Captioner captioner,
boolean frame,
boolean antialias)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
static CubeSurface |
createSurface(Rectangle plotBounds,
CubeAspect aspect,
boolean[] logFlags,
boolean[] flipFlags,
String[] labels,
double[] crowdFactors,
Captioner captioner,
boolean frame,
boolean minor,
boolean antialias)
Utility method to create a CubeSurface from available requirements.
|
boolean |
dataToGraphics(double[] dataPos,
boolean visibleOnly,
Point2D.Double gPos)
Converts a data space position to a graphics position.
|
boolean |
dataToGraphicsOffset(double[] dataPos0,
Point2D.Double gPos0,
double[] dataPos1,
boolean visibleOnly,
Point2D.Double gpos1)
Converts an offset data space position to a graphics position.
|
boolean |
dataToGraphicZ(double[] dataPos,
boolean visibleOnly,
GPoint3D gPos)
Returns graphics position plus Z coordinate for a data point.
|
boolean |
equals(Object o) |
String |
formatPosition(double[] dataPos)
Returns null.
|
Captioner |
getCaptioner()
Returns a captioner suitable for drawing general purpose labels
annotating the plot.
|
int |
getDataDimCount()
Returns 3.
|
double[] |
getDataLimits(int idim)
Returns the data range boundaries in a specified dimension.
|
boolean[] |
getFlipFlags()
Indicates which axes are reversed.
|
boolean[] |
getLogFlags()
Indicates the scaling along the three axes.
|
Rectangle |
getPlotBounds()
Returns the rectangle within which all of the plot data will appear.
|
int[] |
getScreenDirections()
Identifies which data space axes are closest to the screen
horizontal, vertical and normal directions in the current state
of rotation.
|
Surround |
getSurround(boolean withScroll)
Returns the surround that this surface would like to reserve outside
the plot bounds.
|
double[] |
graphicsToData(Point2D gpos0,
java.util.function.Supplier<CoordSequence> dposSupplier)
Only works if a point iterator is supplied, because of degeneracy
in mapping a cube to a plane.
|
int |
hashCode() |
boolean |
inRange(double[] dataPos)
Determines whether a given data position is within the data space
cube represented by this surface.
|
boolean |
isContinuousLine(double[] dpos0,
double[] dpos1)
Indicates whether a line in graphics space between
two given data space positions is continuous.
|
double |
normalise(double[] dataPos,
int idim)
Maps a data space coordinate to a normalised space coordinate.
|
void |
normalisedToGraphicZ(double sx,
double sy,
double sz,
GPoint3D gPos)
Converts normalised 3d coordinates to a graphics position plus Z
coordinate.
|
void |
paintBackground(Graphics g)
Paints the plot surface background.
|
void |
paintForeground(Graphics g)
Paints the plot surface foreground.
|
Point2D.Double |
projectNormalisedPos(double[] nPos)
Determines the graphics position to which a normalised space
point will map.
|
public CubeSurface(int gxlo, int gxhi, int gylo, int gyhi, double[] dlos, double[] dhis, boolean[] logFlags, boolean[] flipFlags, double[] rotmat, double zoom, double xoff, double yoff, Tick[][] ticks, String[] labels, Captioner captioner, boolean frame, boolean antialias)
gxlo
- graphics X coordinate lower boundgxhi
- graphics X coordinate upper boundgylo
- graphics Y coordinate lower boundgyhi
- graphics Y coordinate upper bounddlos
- 3-element array giving X,Y,Z data coordinate lower boundsdhis
- 3-element array giving X,Y,Z data coordinate upper boundslogFlags
- 3-element array flagging log scaling on X,Y,Z axisflipFlags
- 3-element array flagging axis inversion for X,Y,Zrotmat
- 9-element array giving graphics space rotation matrixzoom
- zoom factor, 1 means cube roughly fills plot boundsxoff
- graphics X offset in pixels, 0 means centred in plot boundsyoff
- graphics Y offset in pixels, 0 means centred in plot boundsticks
- 3-element array X,Y,Z tickmark arrayslabels
- 3-element array of X,Y,Z axis label stringscaptioner
- text rendererframe
- whether to draw wire frameantialias
- whether to antialias grid linespublic int getDataDimCount()
getDataDimCount
in interface Surface
public Rectangle getPlotBounds()
Surface
getPlotBounds
in interface Surface
public Surround getSurround(boolean withScroll)
Surface
Surface.getPlotBounds()
to be used for axis labels etc.
If the withScroll
parameter is set, then an attempt
will be made to return a surround that will not alter if the current
plot is scrolled around a moderate amount.
For a one-time plot that's not important, but for an interactive
plot it prevents the actual plot position jumping around to
accommodate more or less space on the axes according to exactly
where ticks happen to fall on the axes.
This method is supposed to return only the space that may actually be touched by the plot. The calling code may wish to apply additional padding on top of this for cosmetic reasons.
getSurround
in interface Surface
withScroll
- true to reserve space for nicer scrollingpublic Captioner getCaptioner()
Surface
getCaptioner
in interface Surface
public boolean dataToGraphics(double[] dataPos, boolean visibleOnly, Point2D.Double gPos)
Surface
visibleOnly
is true, then if the return value
is true, the exit value of gPos
is guaranteed
to be within the plot bounds of this surface.
If visibleOnly
is false, there are no guarantees
about the exit value of gPos
, and its coordinates
could be infinite or NaN. In this case you might want to perform
additional checking, for instance with the utility methods
PlotUtil.isPointFinite
or
isPointReal
.
dataToGraphics
in interface Surface
dataPos
- dataDimCount-element array containing data space
coordinatesvisibleOnly
- if true, then the conversion will only succeed
when the result falls within the plot bounds
of this surfacegPos
- point object into which the graphics position will
be written on successpublic boolean dataToGraphicsOffset(double[] dataPos0, Point2D.Double gPos0, double[] dataPos1, boolean visibleOnly, Point2D.Double gpos1)
Surface
This (somewhat hacky) method is required for surfaces in which a
data position may map to more than one position in graphics space,
for instance sky surfaces with discontinuous longitude.
The result does not need to be the same as the result of
calling Surface.dataToGraphics(double[], boolean, java.awt.geom.Point2D.Double)
, and is not required to be a legal
graphics position, but it must make visual sense, for instance
when plotting error bars.
The semantics of a "nearby point" is not very well defined.
There are probably situations in which calling this will not
give the result that's wanted, but they will probably be rare.
dataToGraphicsOffset
in interface Surface
dataPos0
- context position in data spacegPos0
- context position in graphics space
(result of calling dataToGraphics on dpos0)dataPos1
- query position in data spacevisibleOnly
- if true, the call only succeeds if the result is
within the plot bounds of this surfacegpos1
- point object to which the graphics position of
dpos1 will be written on successpublic boolean dataToGraphicZ(double[] dataPos, boolean visibleOnly, GPoint3D gPos)
dataPos
- 3-element X,Y,Z position in data coordinatesvisibleOnly
- true if only data points that will be visible
on this surface are of interestgPos
- the 3-d graphics position will be written into this point
on successdataToGraphics(double[], boolean, java.awt.geom.Point2D.Double)
public void normalisedToGraphicZ(double sx, double sy, double sz, GPoint3D gPos)
normalise
. If coordinates
outside of the normalised range (-1,1) are submitted, the output
position will be outside the visible cube.sx
- normalised X coordinatesy
- normalised Y coordinatesz
- normalised Z coordinategPos
- the graphics position will be written into this pointpublic boolean inRange(double[] dataPos)
dataPos
- 3-element array of non-normalised data coordinatespublic double[] getDataLimits(int idim)
idim
- dimension index (0..2)public boolean[] getLogFlags()
public boolean[] getFlipFlags()
public double normalise(double[] dataPos, int idim)
dataPos
- 3-element data space coordinate arrayidim
- index of dimension to convert (0, 1 or 2)public Point2D.Double projectNormalisedPos(double[] nPos)
nPos
- 3-element coordinate array in normalised spacepublic String formatPosition(double[] dataPos)
formatPosition
in interface Surface
dataPos
- dataDimCount-element array giving data space positionpublic double[] graphicsToData(Point2D gpos0, java.util.function.Supplier<CoordSequence> dposSupplier)
graphicsToData
in interface Surface
gpos0
- graphics pointdposSupplier
- iterable over dataDimCount-element arrays
representing all the data space positions plotted,
or nullgPos
, or null if it cannot be determinedpublic boolean isContinuousLine(double[] dpos0, double[] dpos1)
Surface
This is not very well-defined, but if drawing a line in graphics coordinates between the graphics coordinates corresponding to the two data coordinates is likely to do something badly wrong, this method should return false. It is intended to deal with the case where a short offset in data coordinates would lead to a line going the wrong way round the sky when it crosses the longitude=+/-PI boundary in an Aitoff projection.
isContinuousLine
in interface Surface
dpos0
- first dataDimCount-element array containing
data space coordinatesdpos1
- second dataDimCount-element array containing
data space coordinatespublic void paintBackground(Graphics g)
Surface
paintBackground
in interface Surface
g
- graphics contextpublic void paintForeground(Graphics g)
Surface
paintForeground
in interface Surface
g
- graphics contextpublic int[] getScreenDirections()
public static CubeSurface createSurface(Rectangle plotBounds, CubeAspect aspect, boolean[] logFlags, boolean[] flipFlags, String[] labels, double[] crowdFactors, Captioner captioner, boolean frame, boolean minor, boolean antialias)
plotBounds
- rectangle within which the plot should be drawnaspect
- surface view configurationlogFlags
- 3-element array flagging log scaling on X,Y,Z axisflipFlags
- 3-element array flagging axis inversion for X,Y,Zlabels
- 3-element array of X,Y,Z axis label stringscrowdFactors
- 3-element array giving tick mark crowding factors
for X,Y,Z axes; 1 is normalcaptioner
- text rendererframe
- whether to draw wire frameminor
- whether to draw minor tickmarksantialias
- whether to antialias grid linesCopyright © 2024 Central Laboratory of the Research Councils. All Rights Reserved.