# Class ShapePlotter

java.lang.Object
uk.ac.starlink.ttools.plot2.layer.AbstractPlotter<ShapeStyle>
uk.ac.starlink.ttools.plot2.layer.ShapePlotter

All Implemented Interfaces:
  `ModePlotter<ShapeStyle>, ShapeModePlotter, Plotter<ShapeStyle>`

Direct Known Subclasses:
  `ArrayShapePlotter`

public class ShapePlotter extends AbstractPlotter<ShapeStyle> implements ShapeModePlotter
Plotter that plots shapes at each data point. This is pretty flexible, and forms the basis for most of the plot types available.

The shape plotted at each point is determined by the `ShapeForm` and may be fixed (by Style) or parameterised by some other data coordinates. The colouring for each shape may be fixed (by Style), or influenced by additional data coordinates and/or by the number of points plotted in the same place (though the latter may also be implemented by the PaperType).

The clever stuff is all in the ShapeForm and ShapeMode implementations. This class just combines the characteristics of the two.

Since:
  18 Feb 2013
Author:
  Mark Taylor

## Nested Class Summary

### Nested classes/interfaces inherited from interface ModePlotter

`ModePlotter.Form, ModePlotter.Mode`

## Constructor Summary

Constructors
Modifier
Constructor
Description
``
`ShapePlotter(String name, ShapeForm form, ShapeMode mode)`
Constructs a ShapePlotter with a coord group determined from its supplied form and mode.
`protected`
`ShapePlotter(String name, ShapeForm form, ShapeMode mode, CoordGroup cgrp)`
Constructs a ShapePlotter with a given coord group.

## Method Summary

Modifier and Type
Method
Description
`static ShapePlotter`
`createFlat2dPlotter(ShapeForm form)`
Creates a single ShapePlotter using mode flat.
`PlotLayer`
`createLayer(DataGeom geom, DataSpec dataSpec, ShapeStyle style)`
Creates a PlotLayer based on the given geometry, data and style.
`static ShapePlotter[]`
`createShapePlotters(ShapeForm[] forms, ShapeMode[] modes)`
Creates an array of ShapeModePlotters, using all combinations of the specified list of ShapeForms and ShapeModes.
`ShapeStyle`
`createStyle(ConfigMap config)`
Creates a style that can be used when creating a plot layer.
`ShapeForm`
`getForm()`
Returns the form of this plotter.
`ShapeMode`
`getMode()`
Returns the mode of this plotter.
`int`
`getModeCoordsIndex(DataGeom geom)`
Returns the index into a dataspec used by this plotter at which the first of its ShapeMode's "extra" coordinates is found.
`String`
`getPlotterDescription()`
Returns an XML description of this plotter.
`ConfigKey<?>[]`
`getStyleKeys()`
Returns the configuration keys used to configure style for this plotter.

### Methods inherited from class AbstractPlotter

`getCoordGroup, getPlotterIcon, getPlotterName, getRangeStyleKey, hasReports`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface Plotter

`getCoordGroup, getPlotterIcon, getPlotterName, getRangeStyleKey, hasReports`

## Constructor Details

### ShapePlotter

public ShapePlotter(String name, ShapeForm form, ShapeMode mode)
Constructs a ShapePlotter with a coord group determined from its supplied form and mode.

Parameters:
  `name` - plotter name
  `form` - shape determiner
  `mode` - colour determiner

### ShapePlotter

protected ShapePlotter(String name, ShapeForm form, ShapeMode mode, CoordGroup cgrp)
Constructs a ShapePlotter with a given coord group.

Parameters:
  `name` - plotter name
  `form` - shape determiner
  `mode` - colour determiner
  `cgrp` - coordinate group

## Method Details

### getForm

public ShapeForm getForm()
Description copied from interface: `ModePlotter`
Returns the form of this plotter.

Specified by:
  `getForm` in interface `ModePlotter<ShapeStyle>`
Specified by:
  `getForm` in interface `ShapeModePlotter`
Returns:
  plotter form

### getMode

public ShapeMode getMode()
Description copied from interface: `ModePlotter`
Returns the mode of this plotter.

Specified by:
  `getMode` in interface `ModePlotter<ShapeStyle>`
Specified by:
  `getMode` in interface `ShapeModePlotter`
Returns:
  plotter mode

### getPlotterDescription

public String getPlotterDescription()
Description copied from interface: `Plotter`
Returns an XML description of this plotter.

Note: really this should appear at the LayerType level.

Specified by:
  `getPlotterDescription` in interface `Plotter<ShapeStyle>`
Returns:
  one or more <p> elements

### getStyleKeys

public ConfigKey<?>[] getStyleKeys()
Description copied from interface: `Plotter`
Returns the configuration keys used to configure style for this plotter. The keys in the return value are used in the map supplied to the `Plotter.createStyle(ConfigMap)` method.

Specified by:
  `getStyleKeys` in interface `Plotter<ShapeStyle>`
Returns:
  keys used when creating a style for this plotter.

### createStyle

public ShapeStyle createStyle(ConfigMap config)
Description copied from interface: `Plotter`
Creates a style that can be used when creating a plot layer. The keys that are significant in the supplied config map are those returned by `Plotter.getStyleKeys()`. The return value can be used as input to `Plotter.createLayer(DataGeom, DataSpec, S)`.

Specified by:
  `createStyle` in interface `Plotter<ShapeStyle>`
Parameters:
  `config` - map of style configuration items
Returns:
  plotter-specific plot style

### createLayer

public PlotLayer createLayer(DataGeom geom, DataSpec dataSpec, ShapeStyle style)
Description copied from interface: `Plotter`
Creates a PlotLayer based on the given geometry, data and style.

The `style` parameter is the result of a call to `Plotter.createStyle(ConfigMap)`.

The `dataSpec` parameter must contain the coordinates defined by this plotter's CoordGroup.

The `pointDataGeom` parameter is only used if the `CoordGroup.getBasicPositionCount()` or `CoordGroup.getExtraPositionCount()` method from this plotter's CoordGroup return a non-zero value, otherwise the plot does not have point positions.

It is legal to supply null for any of the parameters; if insufficient data is supplied to generate a plot, then the method should return null.

Creating a layer should be cheap; layers may be created and not used.

Specified by:
  `createLayer` in interface `Plotter<ShapeStyle>`
Parameters:
  `geom` - indicates base position coordinates and their mapping to points in the data space
  `dataSpec` - specifies the data required for the plot
  `style` - data style as obtained from `createStyle`
Returns:
  new plot layer, or null if no drawing will take place

### getModeCoordsIndex

public int getModeCoordsIndex(DataGeom geom)
Returns the index into a dataspec used by this plotter at which the first of its ShapeMode's "extra" coordinates is found.

Parameters:
  `geom` - data position coordinate description
Returns:
  index of first mode-specific coordinate

### createShapePlotters

public static ShapePlotter[] createShapePlotters(ShapeForm[] forms, ShapeMode[] modes)
Creates an array of ShapeModePlotters, using all combinations of the specified list of ShapeForms and ShapeModes. Since these implement the `ModePlotter` interface, other parts of the UI may be able to group them.

Parameters:
  `forms` - array of shape forms
  `modes` - array of shape modes
Returns:
  `forms.length*modes.length`-element array of plotters

### createFlat2dPlotter

public static ShapePlotter createFlat2dPlotter(ShapeForm form)
Creates a single ShapePlotter using mode flat. Suitable for 2d plot types only. The returned object is not a `ModePlotter`, so will not be ganged together with other ShapePlotters.

Parameters:
  `form` - shape form
Returns:
  new 2d plotter