uk.ac.starlink.ttools.plot2.geom
Class SkySurface

java.lang.Object
  extended by uk.ac.starlink.ttools.plot2.geom.SkySurface
All Implemented Interfaces:
Surface

public class SkySurface
extends Object
implements Surface

Surface implementation for plotting on the celestial sphere. The data coordinates are direction cosines: 3-element arrays containing normalised X,Y,Z coordinates, where each coordinate is in the range -1..+1 and the sum of squares is 1.

Since:
20 Feb 2013
Author:
Mark Taylor

Constructor Summary
SkySurface(Rectangle plotBounds, Projection projection, double[] rotmat, double zoom, double xoff, double yoff, SkySys viewSystem, SkyAxisLabeller axLabeller, Color gridColor, Color axlabelColor, boolean sexagesimal, double crowd, Captioner captioner, boolean antialias)
          Constructor.
 
Method Summary
 boolean dataToGraphics(double[] dpos, boolean visibleOnly, Point2D.Double gpos)
          Converts a data space position to a graphics position.
 boolean dataToGraphicsOffset(double[] dpos0, Point2D.Double gpos0, double[] dpos1, boolean visibleOnly, Point2D.Double gpos1)
          Converts an offset data space position to a graphics position.
 boolean equals(Object o)
           
 SkyAspect flatPan(Point2D pos0, Point2D pos1)
          Pan gesture which just translates the entire graphics plane.
 SkyAspect flatZoom(Point2D pos, double factor)
          Zoom gesture which just magnifies the entire graphics plane.
 String formatPosition(double[] dpos)
          Formats the given data space position as a coordinate string.
 Captioner getCaptioner()
          Returns a captioner suitable for drawing general purpose labels annotating the plot.
 int getDataDimCount()
          Returns 3.
 Rectangle getPlotBounds()
          Returns the rectangle within which all of the plot data will appear.
 Insets getPlotInsets(boolean withScroll)
          Returns the insets that this surface would like to reserve outside the plot bounds.
 double[] graphicsToData(Point2D gpos, Iterable<double[]> dposIt)
          Attempst to turn a graphics position into a data position.
 int hashCode()
           
 void paintBackground(Graphics g)
          Paints the plot surface background.
 void paintForeground(Graphics g)
          Paints the plot surface foreground.
 SkyAspect projPan(Point2D pos0, Point2D pos1)
          Pan gesture which attempts to rotate the sky while leaving the size and location of the graphics plane unchanged.
 SkyAspect projZoom(Point2D pos, double factor)
          Zoom gesture which attempts to zoom the sky, with the cursor staying at the same sky position, while leaving the size and location of the graphics plane unchanged.
 SkyAspect reframe(Point2D center, double factor)
          Returns a plot aspect giving the data region defined by a graphics position and zoom factor adjustment.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SkySurface

public SkySurface(Rectangle plotBounds,
                  Projection projection,
                  double[] rotmat,
                  double zoom,
                  double xoff,
                  double yoff,
                  SkySys viewSystem,
                  SkyAxisLabeller axLabeller,
                  Color gridColor,
                  Color axlabelColor,
                  boolean sexagesimal,
                  double crowd,
                  Captioner captioner,
                  boolean antialias)
Constructor.

Parameters:
plotBounds - graphics region within which the plot must fall
projection - sky projection
rotmat - 9-element rotation matrix
zoom - zoom factor; 1 means the sky is approximately the same size as plot bounds
xoff - x offset of plot centre from plot bounds centre in dimensionless units; 0 is centred
yoff - y offset of plot centre from plot bounds centre in dimensionless units; 0 is centred
viewSystem - sky system into which coordinates are projected
axLabeller - sky axis labelling object
gridColor - colour for grid drawing, or null if no grid
axlabelColor - colour for axis labels, or null if no labels
sexagesimal - whether to use sexagesimal coordinates
crowd - tick mark crowding factor, 1 is normal
captioner - text rendering object
antialias - whether to antialias grid lines
Method Detail

getDataDimCount

public int getDataDimCount()
Returns 3.

Specified by:
getDataDimCount in interface Surface
Returns:
number of elements in data space coordinate array

getPlotBounds

public Rectangle getPlotBounds()
Description copied from interface: Surface
Returns the rectangle within which all of the plot data will appear. This includes anything that might get drawn by a plot layer, but does not necessarily include axis labels etc.

Specified by:
getPlotBounds in interface Surface
Returns:
plot data area bounds

getPlotInsets

public Insets getPlotInsets(boolean withScroll)
Description copied from interface: Surface
Returns the insets that this surface would like to reserve outside the plot bounds. This is space outside the rectangle returned by Surface.getPlotBounds() to be used for axis labels etc.

If the withScroll parameter is set, then an attempt will be made to return insets 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.

Specified by:
getPlotInsets in interface Surface
Parameters:
withScroll - true to reserve space for nicer scrolling
Returns:
plot data area insets

paintBackground

public void paintBackground(Graphics g)
Description copied from interface: Surface
Paints the plot surface background. Anything that appears within the plot bounds underneath the data markings must go here.

Specified by:
paintBackground in interface Surface
Parameters:
g - graphics context

paintForeground

public void paintForeground(Graphics g)
Description copied from interface: Surface
Paints the plot surface foreground. Anything that appears on top of the data markings or outside the plot bounds must go here. This may include axes.

Specified by:
paintForeground in interface Surface
Parameters:
g - graphics context

getCaptioner

public Captioner getCaptioner()
Description copied from interface: Surface
Returns a captioner suitable for drawing general purpose labels annotating the plot.

Specified by:
getCaptioner in interface Surface
Returns:
captioner

dataToGraphics

public boolean dataToGraphics(double[] dpos,
                              boolean visibleOnly,
                              Point2D.Double gpos)
Description copied from interface: Surface
Converts a data space position to a graphics position. If 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.

Specified by:
dataToGraphics in interface Surface
Parameters:
dpos - dataDimCount-element array containing data space coordinates
visibleOnly - if true, then the conversion will only succeed when the result falls within the plot bounds of this surface
gpos - point object into which the graphics position will be written on success
Returns:
true iff the conversion succeeds

dataToGraphicsOffset

public boolean dataToGraphicsOffset(double[] dpos0,
                                    Point2D.Double gpos0,
                                    double[] dpos1,
                                    boolean visibleOnly,
                                    Point2D.Double gpos1)
Description copied from interface: Surface
Converts an offset data space position to a graphics position. Context is given in the form of an existing converted nearby point (both data and graphics positions).

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.

Specified by:
dataToGraphicsOffset in interface Surface
Parameters:
dpos0 - context position in data space
gpos0 - context position in graphics space (result of calling dataToGraphics on dpos0)
dpos1 - query position in data space
visibleOnly - if true, the call only succeeds if the result is within the plot bounds of this surface
gpos1 - point object to which the graphics position of dpos1 will be written on success
Returns:
true for success, false for no result

graphicsToData

public double[] graphicsToData(Point2D gpos,
                               Iterable<double[]> dposIt)
Description copied from interface: Surface
Attempst to turn a graphics position into a data position. This is not always trivial, for instance in a 3D plot one graphics position maps to a line of data positions. The dposIt argument can optionally be supplied to cope with such instances. If a data pos cannot be determined, null is returned. If dposIt is absent, the method will run quickly. If it's present, it may or may not run slowly.

Specified by:
graphicsToData in interface Surface
Parameters:
gpos - graphics point
dposIt - iterable over dataDimCount-element arrays representing all the data space positions plotted, or null
Returns:
dataDimCount-element array giving data space position for gPos, or null if it cannot be determined

formatPosition

public String formatPosition(double[] dpos)
Description copied from interface: Surface
Formats the given data space position as a coordinate string. If possible the returned string should have the same length and formatting over the whole visible plot surface, so that the representation doesn't jump around when the cursor is moved.

Specified by:
formatPosition in interface Surface
Parameters:
dpos - dataDimCount-element array giving data space position
Returns:
human-readable string representing position

flatPan

public SkyAspect flatPan(Point2D pos0,
                         Point2D pos1)
Pan gesture which just translates the entire graphics plane.

Parameters:
pos0 - source graphics position
pos1 - destination graphics position
Returns:
panned sky aspect

flatZoom

public SkyAspect flatZoom(Point2D pos,
                          double factor)
Zoom gesture which just magnifies the entire graphics plane.

Parameters:
pos - reference graphics position
factor - zoom factor
Returns:
zoomed sky aspect

projPan

public SkyAspect projPan(Point2D pos0,
                         Point2D pos1)
Pan gesture which attempts to rotate the sky while leaving the size and location of the graphics plane unchanged. If that functionality is not supported by the projection, it will fall back to flat panning.

Parameters:
pos0 - source graphics position
pos1 - destination graphics position
Returns:
panned sky aspect

projZoom

public SkyAspect projZoom(Point2D pos,
                          double factor)
Zoom gesture which attempts to zoom the sky, with the cursor staying at the same sky position, while leaving the size and location of the graphics plane unchanged. If that functionality is not supported by the projection, it will fall back to flat zooming.

Parameters:
pos - reference graphics position
factor - zoom factor
Returns:
zoomed sky aspect

reframe

public SkyAspect reframe(Point2D center,
                         double factor)
Returns a plot aspect giving the data region defined by a graphics position and zoom factor adjustment.

Parameters:
center - position in current graphics coordinates of the sky position requested as the new center
factor - zoom factor (from current)
Returns:
reframed sky aspect

equals

public boolean equals(Object o)
Overrides:
equals in class Object

hashCode

public int hashCode()
Overrides:
hashCode in class Object


Copyright © 2015 Central Laboratory of the Research Councils. All Rights Reserved.