Package uk.ac.starlink.ttools.plot2.geom
Class PlaneSurfaceFactory
- java.lang.Object
-
- uk.ac.starlink.ttools.plot2.geom.PlaneSurfaceFactory
-
- All Implemented Interfaces:
SurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>
public class PlaneSurfaceFactory extends java.lang.Object implements SurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>
Surface factory for flat 2-d plotting.- Since:
- 19 Feb 2013
- Author:
- Mark Taylor
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPlaneSurfaceFactory.ProfileProfile class which defines fixed configuration items for a PlaneSurface.
-
Field Summary
Fields Modifier and Type Field Description static ConfigKey<java.lang.Boolean>GRID_KEYConfig key to determine if grid lines are drawn.static ConfigKey<boolean[]>NAVAXES_KEYConfig key to select which axes navigation actions will operate on.static ConfigKey<java.lang.Boolean>XANCHOR_KEYConfig key to anchor X axis during zooms.static ConfigKey<java.lang.Double>XCROWD_KEYConfig key to control tick mark crowding on X axis.static ConfigKey<java.lang.Boolean>XFLIP_KEYConfig key for X axis flip flag.static ConfigKey<java.lang.String>XLABEL_KEYConfig key for X axis text label.static ConfigKey<java.lang.Boolean>XLOG_KEYConfig key for X axis log scale flag.static ConfigKey<java.lang.Double>XMAX_KEYConfig key for X axis upper bound, before subranging.static ConfigKey<java.lang.Double>XMIN_KEYConfig key for X axis lower bound, before subranging.static ConfigKey<Subrange>XSUBRANGE_KEYConfig key for X axis subrange.static ConfigKey<java.lang.Double>XYFACTOR_KEYConfig key for axis aspect ratio fix.static ConfigKey<java.lang.Boolean>YANCHOR_KEYConfig key to anchor Y axis during zooms.static ConfigKey<java.lang.Double>YCROWD_KEYConfig key to control tick mark crowding on Y axis.static ConfigKey<java.lang.Boolean>YFLIP_KEYConfig key for Y axis flip flag.static ConfigKey<java.lang.String>YLABEL_KEYConfig key for Y axis text label.static ConfigKey<java.lang.Boolean>YLOG_KEYConfig key for Y axis log scale flag.static ConfigKey<java.lang.Double>YMAX_KEYConfig key for Y axis upper bound, before subranging.static ConfigKey<java.lang.Double>YMIN_KEYConfig key for Y axis lower bound, before subranging.static ConfigKey<Subrange>YSUBRANGE_KEYConfig key for Y axis subrange.
-
Constructor Summary
Constructors Constructor Description PlaneSurfaceFactory()Constructs a PlaneSurfaceFactory with default characteristics.PlaneSurfaceFactory(boolean has2dMetric)Constructs a PlaneSurfaceFactory with configurable characteristics.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description PlaneAspectcreateAspect(PlaneSurfaceFactory.Profile profile, ConfigMap config, Range[] ranges)Creates an aspect from configuration information.static ConfigKey<java.lang.Boolean>createAxisAnchorKey(java.lang.String axname, boolean dflt)Creates a config key for determining whether a named axis is to be anchored at a data value of zero.static ConfigKey<java.lang.Double>createAxisCrowdKey(java.lang.String axname)Creates a config key for determining tickmark crowding on a named axis.static ConfigKey<java.lang.Boolean>createAxisFlipKey(java.lang.String axname)Creates a config key for determining whether a named Cartesian axis is to be reversed.static ConfigKey<java.lang.Double>createAxisLimitKey(java.lang.String axname, boolean isMax)Creates a config key for fixing a minimum or maximum limit for a named axis.static ConfigKey<java.lang.Boolean>createAxisLogKey(java.lang.String axname)Creates a config key for determining whether a named Cartesian axis is logarithmic or linear.static ConfigKey<Subrange>createAxisSubrangeKey(java.lang.String axname)Creates a config key for selecting a subrange on a named Cartesian axis.Navigator<PlaneAspect>createNavigator(ConfigMap navConfig)Creates a navigator from configuration information.PlaneSurfaceFactory.ProfilecreateProfile(ConfigMap config)Creates a profile that can be used when creating a plot surface.SurfacecreateSurface(java.awt.Rectangle plotBounds, PlaneSurfaceFactory.Profile profile, PlaneAspect aspect)Returns a new plot surface.ConfigMapgetAspectConfig(Surface surf)Returns a ConfigMap that corresponds to the configuration of the given surface, which must have been created by this factory.ConfigKey<?>[]getAspectKeys()Returns the configuration keys that may be used to configure aspect for this surface factory.static double[]getLimits(double lo, double hi, Subrange subrange, boolean isLog, Range range)Utility method to determine actual axis limits based on requested high/low values and a subrange.static double[]getLimits(ConfigMap config, ConfigKey<java.lang.Double> minKey, ConfigKey<java.lang.Double> maxKey, ConfigKey<Subrange> subrangeKey, boolean isLog, Range range)Utility method to interrogate axis range configuration variables and work out the actual range to use on a given Cartesian axis.ConfigKey<?>[]getNavigatorKeys()Returns the configuration keys that may be used to configure a navigator for use with this surface factory.PlotMetricgetPlotMetric()Returns an object that can assess distances between graphic positions on the plot surface.ConfigKey<?>[]getProfileKeys()Returns the configuration keys used to configure profile for this surface factory.Range[]readRanges(PlaneSurfaceFactory.Profile profile, PlotLayer[] layers, DataStore dataStore)Provides the ranges that may be passed tocreateAspect.booleanuseRanges(PlaneSurfaceFactory.Profile profile, ConfigMap config)Indicates whether ranges should be provided to generate an aspect.
-
-
-
Field Detail
-
XMIN_KEY
public static final ConfigKey<java.lang.Double> XMIN_KEY
Config key for X axis lower bound, before subranging.
-
XMAX_KEY
public static final ConfigKey<java.lang.Double> XMAX_KEY
Config key for X axis upper bound, before subranging.
-
YMIN_KEY
public static final ConfigKey<java.lang.Double> YMIN_KEY
Config key for Y axis lower bound, before subranging.
-
YMAX_KEY
public static final ConfigKey<java.lang.Double> YMAX_KEY
Config key for Y axis upper bound, before subranging.
-
XLOG_KEY
public static final ConfigKey<java.lang.Boolean> XLOG_KEY
Config key for X axis log scale flag.
-
YLOG_KEY
public static final ConfigKey<java.lang.Boolean> YLOG_KEY
Config key for Y axis log scale flag.
-
XFLIP_KEY
public static final ConfigKey<java.lang.Boolean> XFLIP_KEY
Config key for X axis flip flag.
-
YFLIP_KEY
public static final ConfigKey<java.lang.Boolean> YFLIP_KEY
Config key for Y axis flip flag.
-
XLABEL_KEY
public static final ConfigKey<java.lang.String> XLABEL_KEY
Config key for X axis text label.
-
YLABEL_KEY
public static final ConfigKey<java.lang.String> YLABEL_KEY
Config key for Y axis text label.
-
XYFACTOR_KEY
public static final ConfigKey<java.lang.Double> XYFACTOR_KEY
Config key for axis aspect ratio fix.
-
GRID_KEY
public static final ConfigKey<java.lang.Boolean> GRID_KEY
Config key to determine if grid lines are drawn.
-
XCROWD_KEY
public static final ConfigKey<java.lang.Double> XCROWD_KEY
Config key to control tick mark crowding on X axis.
-
YCROWD_KEY
public static final ConfigKey<java.lang.Double> YCROWD_KEY
Config key to control tick mark crowding on Y axis.
-
NAVAXES_KEY
public static final ConfigKey<boolean[]> NAVAXES_KEY
Config key to select which axes navigation actions will operate on.
-
XANCHOR_KEY
public static final ConfigKey<java.lang.Boolean> XANCHOR_KEY
Config key to anchor X axis during zooms.
-
YANCHOR_KEY
public static final ConfigKey<java.lang.Boolean> YANCHOR_KEY
Config key to anchor Y axis during zooms.
-
-
Constructor Detail
-
PlaneSurfaceFactory
public PlaneSurfaceFactory()
Constructs a PlaneSurfaceFactory with default characteristics.
-
PlaneSurfaceFactory
public PlaneSurfaceFactory(boolean has2dMetric)
Constructs a PlaneSurfaceFactory with configurable characteristics.- Parameters:
has2dMetric- true if it may make sense to measure distances that are not parallel to either axis
-
-
Method Detail
-
createSurface
public Surface createSurface(java.awt.Rectangle plotBounds, PlaneSurfaceFactory.Profile profile, PlaneAspect aspect)
Description copied from interface:SurfaceFactoryReturns a new plot surface.- Specified by:
createSurfacein interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
plotBounds- rectangle to containing actual plot data (not insets)profile- configuration object defining plot styleaspect- configuration object defining plot viewpoint- Returns:
- new plot surface
-
getProfileKeys
public ConfigKey<?>[] getProfileKeys()
Description copied from interface:SurfaceFactoryReturns the configuration keys used to configure profile for this surface factory. The returned keys are used in the map supplied to thecreateProfilemethod.- Specified by:
getProfileKeysin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Returns:
- profile configuration keys
-
createProfile
public PlaneSurfaceFactory.Profile createProfile(ConfigMap config)
Description copied from interface:SurfaceFactoryCreates a profile that can be used when creating a plot surface. The keys that are significant in the supplied config map are those returned bygetProfileKeys. The return value can be used as input tocreateSurfaceand other methods in this class.- Specified by:
createProfilein interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
config- map of profile configuration items- Returns:
- factory-specific plot surface profile
-
getAspectKeys
public ConfigKey<?>[] getAspectKeys()
Description copied from interface:SurfaceFactoryReturns the configuration keys that may be used to configure aspect for this surface factory. The returned keys are used in the map supplied to theuseRangesandcreateAspectmethods.- Specified by:
getAspectKeysin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Returns:
- aspect configuration keys
-
useRanges
public boolean useRanges(PlaneSurfaceFactory.Profile profile, ConfigMap config)
Description copied from interface:SurfaceFactoryIndicates whether ranges should be provided to generate an aspect. If true, it is beneficial to pass the result ofreadRangestocreateAspectalongside the arguments of this method. If false, any such ranges will be ignored.- Specified by:
useRangesin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
profile- surface configuration profileconfig- configuration map that may contain keys fromgetAspectKeys- Returns:
- true iff calculated ranges will be of use
-
createAspect
public PlaneAspect createAspect(PlaneSurfaceFactory.Profile profile, ConfigMap config, Range[] ranges)
Description copied from interface:SurfaceFactoryCreates an aspect from configuration information. The ranges argument will be used only ifuseRangesreturns true. It is legal to give the ranges argument as null in any case. In all cases, the returned value must be non-null and usable bycreateSurface.- Specified by:
createAspectin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
profile- surface configuration profileconfig- configuration map that may contain keys fromgetAspectKeysranges- range data filled in from layers, or null- Returns:
- new aspect
-
getAspectConfig
public ConfigMap getAspectConfig(Surface surf)
Description copied from interface:SurfaceFactoryReturns a ConfigMap that corresponds to the configuration of the given surface, which must have been created by this factory. The intention is that supplying the returned config items to this object'screateAspectmethod with the right profile should come up with approximately the same surface, preferably without reference to any supplied ranges.The returned config items should be optimised for presentation to the user, so that for instance decimal values are reported to a reasonable level of precision. Because of this, and perhaps for other reasons related to implementation, a surface resulting from feeding the returned config back to this factory may not be identical to the supplied surface, so round-tripping is not guaranteed to be exact.
- Specified by:
getAspectConfigin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
surf- plot surface; if it was not created by this factory, behaviour is undefined- Returns:
- config map populated with items that should approximately reproduce the supplied surface
-
readRanges
public Range[] readRanges(PlaneSurfaceFactory.Profile profile, PlotLayer[] layers, DataStore dataStore)
Description copied from interface:SurfaceFactoryProvides the ranges that may be passed tocreateAspect. There is only any point calling this ifuseRangesreturns true.- Specified by:
readRangesin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
profile- surface configuration profilelayers- plot layers to be plotteddataStore- contains actual data- Returns:
- data ranges covered by the given layers filled in from data
-
getNavigatorKeys
public ConfigKey<?>[] getNavigatorKeys()
Description copied from interface:SurfaceFactoryReturns the configuration keys that may be used to configure a navigator for use with this surface factory. The returned keys are used in the map supplied to theSurfaceFactory.createNavigator(uk.ac.starlink.ttools.plot2.config.ConfigMap)method.- Specified by:
getNavigatorKeysin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Returns:
- navigator configuration keys
-
createNavigator
public Navigator<PlaneAspect> createNavigator(ConfigMap navConfig)
Description copied from interface:SurfaceFactoryCreates a navigator from configuration information. The returned value will be non-null.- Specified by:
createNavigatorin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Parameters:
navConfig- configuration map that may contain keys fromgetNavigatorKeys- Returns:
- navigator for use with surfaces produced by this factory
-
getPlotMetric
public PlotMetric getPlotMetric()
Description copied from interface:SurfaceFactoryReturns an object that can assess distances between graphic positions on the plot surface. If no such metric exists, null may be returned.- Specified by:
getPlotMetricin interfaceSurfaceFactory<PlaneSurfaceFactory.Profile,PlaneAspect>- Returns:
- plot metric, or null
-
createAxisAnchorKey
public static ConfigKey<java.lang.Boolean> createAxisAnchorKey(java.lang.String axname, boolean dflt)
Creates a config key for determining whether a named axis is to be anchored at a data value of zero.- Parameters:
axname- axis namedflt- anchor default value- Returns:
- config key
-
createAxisLimitKey
public static ConfigKey<java.lang.Double> createAxisLimitKey(java.lang.String axname, boolean isMax)
Creates a config key for fixing a minimum or maximum limit for a named axis.- Parameters:
axname- axis nameisMax- true for upper limit, false for lower limit- Returns:
- new config key
-
createAxisLogKey
public static ConfigKey<java.lang.Boolean> createAxisLogKey(java.lang.String axname)
Creates a config key for determining whether a named Cartesian axis is logarithmic or linear.- Parameters:
axname- axis name- Returns:
- new config key, true for log scaling
-
createAxisFlipKey
public static ConfigKey<java.lang.Boolean> createAxisFlipKey(java.lang.String axname)
Creates a config key for determining whether a named Cartesian axis is to be reversed.- Parameters:
axname- axis name- Returns:
- new config key, true if sense is reversed
-
createAxisSubrangeKey
public static ConfigKey<Subrange> createAxisSubrangeKey(java.lang.String axname)
Creates a config key for selecting a subrange on a named Cartesian axis.- Parameters:
axname- axis name- Returns:
- new config key
-
createAxisCrowdKey
public static ConfigKey<java.lang.Double> createAxisCrowdKey(java.lang.String axname)
Creates a config key for determining tickmark crowding on a named axis.- Parameters:
axname- axis name- Returns:
- new config key for dimensionless crowding figure
-
getLimits
public static double[] getLimits(ConfigMap config, ConfigKey<java.lang.Double> minKey, ConfigKey<java.lang.Double> maxKey, ConfigKey<Subrange> subrangeKey, boolean isLog, Range range)
Utility method to interrogate axis range configuration variables and work out the actual range to use on a given Cartesian axis. If not enough information is supplied to determine the definite range, null is returned.- Parameters:
config- config map containing config valuesminKey- config key giving axis lower bound before subrangingmaxKey- config key giving axis upper bound before subrangingsubrangeKey- config key giving subrange valueisLog- true for logarithmic axis, false for linearrange- data range on axis; may be partially populated or null- Returns:
- 2-element array giving definite axis (lower,upper) bounds, or null
-
getLimits
public static double[] getLimits(double lo, double hi, Subrange subrange, boolean isLog, Range range)Utility method to determine actual axis limits based on requested high/low values and a subrange. If not enough information is supplied to determine the definite range, null is returned.- Parameters:
lo- requested lower bound before subranging, may be NaNhi- requested upper bound before subranging, may be NaNsubrange- requested subrangeisLog- true for logarithmic axis, false for linearrange- actual data range on axis; may be partially populated or null- Returns:
- 2-element array giving definite axis (lower,upper) bounds, or null
-
-