Class PlanarCanvas

All Implemented Interfaces:
Localized

public abstract class PlanarCanvas extends Canvas
A canvas for two-dimensional display device using a Cartesian coordinate system. Data are reduced to a two-dimensional slice before to be displayed.

Multi-threading

PlanarCanvas is not thread-safe. Synchronization, if desired, must be done by the caller. Another common strategy is to interact with PlanarCanvas from a single thread, for example the Swing or JavaFX event queue.
Since:
1.1
Version:
1.3
  • Field Details

  • Constructor Details

    • PlanarCanvas

      protected PlanarCanvas(Locale locale)
      Creates a new two-dimensional canvas.
      Parameters:
      locale - the locale to use for labels and some messages, or null for default.
  • Method Details

    • getDisplayDimensions

      final int getDisplayDimensions()
      Returns the number of dimensions of the display device.
      Overrides:
      getDisplayDimensions in class Canvas
    • getDisplayAxes

      final void getDisplayAxes(org.opengis.metadata.spatial.DimensionNameType[] axisTypes)
      Gets the name of display axes and stores them in the given array. Those display axis names are used for debugging purposes only, as an additional information provided to developers. Those names should not be used for any "real" work.
      Overrides:
      getDisplayAxes in class Canvas
      Parameters:
      axisTypes - where to store the name of display axes. The array length will be at least BIDIMENSIONAL (it will often be longer).
    • allocatePosition

      final org.opengis.geometry.DirectPosition allocatePosition()
      Allocates a position which can hold a coordinates in objective or display CRS.
      Overrides:
      allocatePosition in class Canvas
    • getDisplayBounds

      public Envelope2D getDisplayBounds()
      Returns the size and location of the display device. The unit of measurement is Units.PIXEL and coordinate values are usually (but not necessarily) integers.

      This value may be null on newly created Canvas, before data are added and canvas is configured. It should not be null anymore once a Canvas is ready for displaying. The returned envelope is a copy; display changes happening after this method invocation will not be reflected in the returned envelope.

      Overrides:
      getDisplayBounds in class Canvas
      Returns:
      size and location of the display device in pixel coordinates.
      See Also:
    • createObjectiveToDisplay

      final LinearTransform createObjectiveToDisplay()
      Returns the affine conversion from objective CRS to display coordinate system. The transform returned by this method is a snapshot taken at the time this method is invoked; subsequent changes in the objective to display conversion are not reflected in the returned transform.

      The Canvas.objectiveToDisplay transform in parent class is used as an immutable snapshot of the objectiveToDisplay transform in this class. That snapshot is created when needed and reset to null when objectiveToDisplay is modified.

      Overrides:
      createObjectiveToDisplay in class Canvas
      Returns:
      snapshot of the affine conversion from objective CRS to display coordinate system (never null).
      See Also:
    • setObjectiveToDisplayImpl

      final void setObjectiveToDisplayImpl(LinearTransform newValue)
      Sets the conversion from objective CRS to display coordinate system. Contrarily to other setter methods, this method does not notify listeners about that change; it is caller responsibility to send a "objectiveToDisplay" change event. This method does not update the "pointOfInterest" property; the point of interest may move outside the view area as a result of this method call.
      Overrides:
      setObjectiveToDisplayImpl in class Canvas
      Parameters:
      newValue - the new objective to display conversion.
      Throws:
      IllegalArgumentException - if the given transform is not two-dimensional or is not affine.
      See Also:
    • transformObjectiveCoordinates

      public void transformObjectiveCoordinates(AffineTransform before)
      Updates the objective to display transform as if the given transform was applied before the current transform. For example if the given before transform is a translation, then the translation vector is in units of the objective CRS (typically metres on the map).

      This method does nothing if the given transform is identity. Otherwise an "objectiveToDisplay" property change event will be sent with the TransformChangeEvent.Reason.OBJECTIVE_NAVIGATION reason after the change became effective. Depending on the implementation, the change may not take effect immediately. For example, subclasses may do the rendering in a background thread.

      Parameters:
      before - coordinate conversion to apply before the current objective to display transform.
      See Also:
    • transformDisplayCoordinates

      public void transformDisplayCoordinates(AffineTransform after)
      Updates the objective to display transform as if the given transform was applied after the current transform. For example if the given after transform is a translation, then the translation vector is in pixel units.

      This method does nothing if the given transform is identity. Otherwise an "objectiveToDisplay" property change event will be sent with the TransformChangeEvent.Reason.DISPLAY_NAVIGATION reason after the change became effective. Depending on the implementation, the change may not take effect immediately. For example, subclasses may do the rendering in a background thread.

      Parameters:
      after - coordinate conversion to apply after the current objective to display transform.
      See Also: