com.bbn.openmap.event
Class DistanceMouseMode

java.lang.Object
  |
  +--com.bbn.openmap.MapHandlerChild
        |
        +--com.bbn.openmap.OMComponent
              |
              +--com.bbn.openmap.event.AbstractMouseMode
                    |
                    +--com.bbn.openmap.event.CoordMouseMode
                          |
                          +--com.bbn.openmap.event.DistanceMouseMode
All Implemented Interfaces:
java.beans.beancontext.BeanContextChild, java.beans.beancontext.BeanContextMembershipListener, java.util.EventListener, LightMapHandlerChild, MapMouseMode, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, PaintListener, PropertyConsumer, java.io.Serializable

public class DistanceMouseMode
extends CoordMouseMode

This mouse mode draws a rubberband line and circle between each mouse click as the mouse is moved and displays the cumulative distance in nautical miles (nm), kilometers (km), statute miles (miles) and the azimuth angle in decimal degrees from north on the status bar. Several distance segments are allowed. To erase (terminate) double click the mouse.

To use this mouse mode in the OpenMap demo (in setWidgets): create the mouse mode, such as

DistanceMouseMode distMode = new DistanceMouseMode(true, id, DistanceMouseMode.DISTANCE_ALL);

Add the distance mouse mode to the mouse delegator md.addMouseMode(distMode);

This class can easily be extended, for example to create waypoints for objects.

NOTE: If some lines are not properly erased (because the mouse went outside the map for example), just use the redraw from the menu.

You can set the units used for measurements by setting the property:

 
  prefix.units= &lt name for Length.java (km, miles, meters, nm) &gt
  
 

See Also:
Serialized Form

Field Summary
 double distance
          Distance of the current segment
static int lineType
          The line type to be displayed, see OMGraphic.
static java.lang.String modeID
          Mouse mode identifier, is "Distance".
 boolean mousePressed
          Flag, true if the mouse has already been pressed
static java.lang.String RepaintToCleanProperty
           
 LatLonPoint rPoint1
          rPoint1 is the anchor point of a line segment
 LatLonPoint rPoint2
          rPoint2 is the new (current) point of a line segment
 java.util.Vector segments
          Vector to store all distance segments, first point and last point pairs
static java.lang.String ShowAngleProperty
           
static java.lang.String ShowCircleProperty
           
 double totalDistance
          The cumulative distance from the first mouse click
static java.lang.String UnitProperty
           
 
Fields inherited from class com.bbn.openmap.event.CoordMouseMode
infoDelegator
 
Fields inherited from class com.bbn.openmap.event.AbstractMouseMode
cursor, df, guiIcon, ID, IDProperty, mouseSupport, prettyName, PrettyNameProperty, visible
 
Fields inherited from class com.bbn.openmap.OMComponent
i18n, propertyPrefix
 
Fields inherited from class com.bbn.openmap.MapHandlerChild
beanContextChildSupport
 
Fields inherited from interface com.bbn.openmap.PropertyConsumer
EditorProperty, initPropertiesProperty, LabelEditorProperty, ScopedEditorProperty
 
Constructor Summary
DistanceMouseMode()
          Construct a DistanceMouseMode.
DistanceMouseMode(boolean consumeEvents)
          Construct a DistanceMouseMode.
DistanceMouseMode(boolean consumeEvents, InformationDelegator id)
          Construct a DistanceMouseMode.
DistanceMouseMode(boolean consumeEvents, InformationDelegator id, Length units)
          Construct a DistanceMouseMode.
DistanceMouseMode(boolean consumeEvents, InformationDelegator id, Length units, int lType)
          Construct a DistanceMouseMode.
DistanceMouseMode(java.lang.String name, boolean consumeEvents)
          Construct an DistanceMouseMode.
DistanceMouseMode(java.lang.String name, boolean consumeEvents, InformationDelegator id)
          Construct a DistanceMouseMode.
 
Method Summary
 void cleanUp()
          Reset the segments and distances
protected  java.lang.String createDistanceInformationLine(LatLonPoint llp, double distance, double azimuth)
           
 void eraseCircle()
          Erase the current segment circle.
 void eraseLines()
          Erase all line segments.
 double getGreatCircleDist(float phi1, float lambda0, float phi, float lambda, int units)
          Return the distance in the chosen unit between two points (in decimal degrees).
 int getLineType()
          Return the line type either LINETYPE_GREATCIRCLE, LINETYPE_RHUMB, LINETYPE_STRAIGHT
 MapBean getMapBean()
          Return the map bean.
 java.util.Properties getProperties(java.util.Properties getList)
          PropertyConsumer interface method.
 java.util.Properties getPropertyInfo(java.util.Properties list)
          PropertyConsumer interface method.
 boolean getRepaintToClean()
           
 boolean getShowAzimuth()
          Whether the display of the azimuth angle on or off.
 boolean getShowCircle()
          Get whether the drawing of the rubberband circle on/off.
 float getSphericalAzimuth(float phi1, float lambda0, float phi, float lambda)
          Return the azimuth angle in decimal degrees from north.
 Length getUnit()
          Return the unit of distance being displayed: Length.NM, Length.KM or Length.MILE.
 void listenerPaint(java.awt.Graphics g)
          Called by the MapBean when it repaints, to let the MouseMode know when to update itself on the map.
 void mouseClicked(java.awt.event.MouseEvent e)
          Process a mouseClicked event.
 void mouseEntered(java.awt.event.MouseEvent e)
          Process a mouseEntered event.
 void mouseExited(java.awt.event.MouseEvent e)
          Process a mouseExited event.
 void mouseMoved(java.awt.event.MouseEvent e)
          Draw a rubberband line and circle as the mouse is moved.
 void mousePressed(java.awt.event.MouseEvent e)
          Process a mouse pressed event.
 void paintCircle(LatLonPoint pt1, LatLonPoint pt2)
          Draw a rubberband circle between two points
 void paintCircle(LatLonPoint pt1, LatLonPoint pt2, java.awt.Graphics graphics)
          Draw a rubberband circle between two points
 void paintLine(LatLonPoint pt1, LatLonPoint pt2)
          Draw a rubberband line between two points
 void paintLine(LatLonPoint pt1, LatLonPoint pt2, java.awt.Graphics graphics)
          Draw a rubberband line between two points into the Graphics object.
 void paintRubberband(LatLonPoint pt1, LatLonPoint pt2)
          Draw a rubberband line and circle between two points
 void paintRubberband(LatLonPoint pt1, LatLonPoint pt2, java.awt.Graphics g)
          Draw a rubberband line and circle between two points
 void setLineType(int lype)
          Set the line type to be drawn see also OMGraphic
 void setMapBean(MapBean aMap)
          Set the map bean.
 void setProperties(java.lang.String prefix, java.util.Properties setList)
          PropertyConsumer interface method.
 void setRepaintToClean(boolean rtc)
           
 void setUnit(Length units)
          Set the unit of distance to be displayed: Length.NM, Length.KM or Length.MILE.
 void showAzimuth(boolean onOff)
          Switch the display of the azimuth angle on or off.
 void showCircle(boolean onOff)
          Set the drawing of the rubberband circle on/off.
 
Methods inherited from class com.bbn.openmap.event.CoordMouseMode
createCoordinateInformationLine, findAndInit, findAndUndo, fireMouseLocation, getInfoDelegator, mouseDragged, setActive, setInfoDelegator
 
Methods inherited from class com.bbn.openmap.event.AbstractMouseMode
actAsProxyFor, actAsProxyFor, addMapMouseListener, getGUIIcon, getID, getModeCursor, getMouseSupport, getPrettyName, getProxyDistributionMask, isConsumeEvents, isProxyFor, isVisible, mouseReleased, releaseProxy, removeAllMapMouseListeners, removeMapMouseListener, setConsumeEvents, setGUIIcon, setID, setModeCursor, setMouseSupport, setPrettyName, setProxyDistributionMask, setVisible
 
Methods inherited from class com.bbn.openmap.OMComponent
getPropertyPrefix, setProperties, setPropertyPrefix
 
Methods inherited from class com.bbn.openmap.MapHandlerChild
addPropertyChangeListener, addVetoableChangeListener, childrenAdded, childrenRemoved, findAndInit, firePropertyChange, fireVetoableChange, getBeanContext, removePropertyChangeListener, removeVetoableChangeListener, setBeanContext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

modeID

public static final transient java.lang.String modeID
Mouse mode identifier, is "Distance". This is returned on getID()


UnitProperty

public static final java.lang.String UnitProperty
See Also:
Constant Field Values

ShowCircleProperty

public static final java.lang.String ShowCircleProperty
See Also:
Constant Field Values

ShowAngleProperty

public static final java.lang.String ShowAngleProperty
See Also:
Constant Field Values

RepaintToCleanProperty

public static final java.lang.String RepaintToCleanProperty
See Also:
Constant Field Values

rPoint1

public LatLonPoint rPoint1
rPoint1 is the anchor point of a line segment


rPoint2

public LatLonPoint rPoint2
rPoint2 is the new (current) point of a line segment


mousePressed

public boolean mousePressed
Flag, true if the mouse has already been pressed


segments

public java.util.Vector segments
Vector to store all distance segments, first point and last point pairs


distance

public double distance
Distance of the current segment


totalDistance

public double totalDistance
The cumulative distance from the first mouse click


lineType

public static int lineType
The line type to be displayed, see OMGraphic. LINETYPE_GREATCIRCLE, LINETYPE_RHUMB, LINETYPE_STRAIGHT default LINETYPE_GREATCIRCLE

Constructor Detail

DistanceMouseMode

public DistanceMouseMode()
Construct a DistanceMouseMode. Default constructor. Sets the ID to the modeID, and the consume mode to true. You need to setInfoDelegator, setUnit and setLineType if you use this constructor.


DistanceMouseMode

public DistanceMouseMode(boolean consumeEvents)
Construct a DistanceMouseMode. Lets you set the consume mode. If the events are consumed, then a MouseEvent is sent only to the first MapMouseListener that successfully processes the event. If they are not consumed, then all of the listeners get a chance to act on the event. You need to setInfoDelegator, setUnit and setLineType if you use this constructor.

Parameters:
consumeEvents - the mode setting.

DistanceMouseMode

public DistanceMouseMode(java.lang.String name,
                         boolean consumeEvents)
Construct an DistanceMouseMode. For convenience for derived classes.

Parameters:
name - the ID of the mode.
consumeEvents - if true, events are propagated to the first MapMouseListener that successfully processes the event, if false, events are propagated to all MapMouseListeners. You need to setInfoDelegator, setUnit and setLineType if you use this constructor.

DistanceMouseMode

public DistanceMouseMode(boolean consumeEvents,
                         InformationDelegator id,
                         Length units)
Construct a DistanceMouseMode. Lets you set the consume mode. If the events are consumed, then a MouseEvent is sent only to the first MapMouseListener that successfully processes the event. If they are not consumed, then all of the listeners get a chance to act on the event. You need to the setLineType if you use this constructor.

Parameters:
consumeEvents - the mode setting.
id - the calling object's info delegator.
units - the unit of distance that will be displayed, such as Length.NM, Length.KM or Length.MILE. If null, display all of them.

DistanceMouseMode

public DistanceMouseMode(boolean consumeEvents,
                         InformationDelegator id,
                         Length units,
                         int lType)
Construct a DistanceMouseMode. Lets you set the consume mode. If the events are consumed, then a MouseEvent is sent only to the first MapMouseListener that successfully processes the event. If they are not consumed, then all of the listeners get a chance to act on the event. You need to the setLineType if you use this constructor.

Parameters:
consumeEvents - the mode setting.
id - the calling object's info delegator.
units - the unit of distance that will be displayed, such as Length.NM, Length.KM or Length.MILE. If null, display all of them.
lType - the line type that will be dispalyed such as LINETYPE_GREATCIRCLE, LINETYPE_RHUMB, LINETYPE_STRAIGHT

DistanceMouseMode

public DistanceMouseMode(boolean consumeEvents,
                         InformationDelegator id)
Construct a DistanceMouseMode. Lets you set the consume mode. If the events are consumed, then a MouseEvent is sent only to the first MapMouseListener that successfully processes the event. If they are not consumed, then all of the listeners get a chance to act on the event.

Parameters:
consumeEvents - the mode setting.
id - the calling object's info delegator.

DistanceMouseMode

public DistanceMouseMode(java.lang.String name,
                         boolean consumeEvents,
                         InformationDelegator id)
Construct a DistanceMouseMode. For convenience for derived classes. Lets you set the consume mode. If the events are consumed, then a MouseEvent is sent only to the first MapMouseListener that successfully processes the event. If they are not consumed, then all of the listeners get a chance to act on the event.

Parameters:
name - the ID of the mode.
consumeEvents - the mode setting.
id - the calling object's info delegator.
Method Detail

mouseClicked

public void mouseClicked(java.awt.event.MouseEvent e)
Process a mouseClicked event. Erase all drawn lines and circles upon a double mouse click

Specified by:
mouseClicked in interface java.awt.event.MouseListener
Overrides:
mouseClicked in class AbstractMouseMode
Parameters:
e - mouse event.

mousePressed

public void mousePressed(java.awt.event.MouseEvent e)
Process a mouse pressed event. Add the mouse location to the segment vector. Calculate the cumulative total distance.

Specified by:
mousePressed in interface java.awt.event.MouseListener
Overrides:
mousePressed in class AbstractMouseMode
Parameters:
e - mouse event.

mouseMoved

public void mouseMoved(java.awt.event.MouseEvent e)
Draw a rubberband line and circle as the mouse is moved. Calculate distance and azimuth angle as the mouse moves. Display distance and azimuth angle in on the infoDelegator.

Specified by:
mouseMoved in interface java.awt.event.MouseMotionListener
Overrides:
mouseMoved in class CoordMouseMode
Parameters:
e - mouse event.

createDistanceInformationLine

protected java.lang.String createDistanceInformationLine(LatLonPoint llp,
                                                         double distance,
                                                         double azimuth)

mouseEntered

public void mouseEntered(java.awt.event.MouseEvent e)
Process a mouseEntered event. Record the mouse source object, a map bean.

Specified by:
mouseEntered in interface java.awt.event.MouseListener
Overrides:
mouseEntered in class AbstractMouseMode
Parameters:
e - mouse event.

mouseExited

public void mouseExited(java.awt.event.MouseEvent e)
Process a mouseExited event. If a line is being drawn (and mouse go off the map), it will be erased. The anchor point rPoint1 is kept in case the mouse comes back on the screen. Then, a new line will be drawn with the original mouse press position.

Specified by:
mouseExited in interface java.awt.event.MouseListener
Overrides:
mouseExited in class AbstractMouseMode
Parameters:
e - mouse event.

paintLine

public void paintLine(LatLonPoint pt1,
                      LatLonPoint pt2)
Draw a rubberband line between two points

Parameters:
pt1 - the anchor point.
pt2 - the current (mouse) position.

paintLine

public void paintLine(LatLonPoint pt1,
                      LatLonPoint pt2,
                      java.awt.Graphics graphics)
Draw a rubberband line between two points into the Graphics object.

Parameters:
pt1 - the anchor point.
pt2 - the current (mouse) position.
graphics - a java.awt.Graphics object to render into.

paintCircle

public void paintCircle(LatLonPoint pt1,
                        LatLonPoint pt2)
Draw a rubberband circle between two points

Parameters:
pt1 - the anchor point.
pt2 - the current (mouse) position.

paintCircle

public void paintCircle(LatLonPoint pt1,
                        LatLonPoint pt2,
                        java.awt.Graphics graphics)
Draw a rubberband circle between two points

Parameters:
pt1 - the anchor point.
pt2 - the current (mouse) position.
graphics - a java.awt.Graphics object to render into.

paintRubberband

public void paintRubberband(LatLonPoint pt1,
                            LatLonPoint pt2)
Draw a rubberband line and circle between two points

Parameters:
pt1 - the anchor point.
pt2 - the current (mouse) position.

paintRubberband

public void paintRubberband(LatLonPoint pt1,
                            LatLonPoint pt2,
                            java.awt.Graphics g)
Draw a rubberband line and circle between two points

Parameters:
pt1 - the anchor point.
pt2 - the current (mouse) position.
g - a java.awt.Graphics object to render into.

eraseLines

public void eraseLines()
Erase all line segments.


eraseCircle

public void eraseCircle()
Erase the current segment circle.


cleanUp

public void cleanUp()
Reset the segments and distances


getGreatCircleDist

public double getGreatCircleDist(float phi1,
                                 float lambda0,
                                 float phi,
                                 float lambda,
                                 int units)
Return the distance in the chosen unit between two points (in decimal degrees). Based on spherical arc distance between two points. See class GreatCircle.java

Parameters:
phi1 - latitude in decimal degrees of start point
lambda0 - longitude in decimal degrees of start point
phi - latitude in decimal degrees of end point
lambda - longitude in decimal degrees of end point
units - the unit of distance, DISTANCE_NM, DISTANCE_KM, DISTANCE_MILE or all 3 types DISTANCE_ALL
Returns:
double distance in chosen unit

getSphericalAzimuth

public float getSphericalAzimuth(float phi1,
                                 float lambda0,
                                 float phi,
                                 float lambda)
Return the azimuth angle in decimal degrees from north. Based on spherical_azimuth. See class GreatCircle.java

Parameters:
phi1 - latitude in decimal degrees of start point
lambda0 - longitude in decimal degrees of start point
phi - latitude in decimal degrees of end point
lambda - longitude in decimal degrees of end point
Returns:
float azimuth angle in degrees

setMapBean

public void setMapBean(MapBean aMap)
Set the map bean.

Parameters:
aMap - a map bean

getMapBean

public MapBean getMapBean()
Return the map bean.


setUnit

public void setUnit(Length units)
Set the unit of distance to be displayed: Length.NM, Length.KM or Length.MILE. If null, displays all of them.


getUnit

public Length getUnit()
Return the unit of distance being displayed: Length.NM, Length.KM or Length.MILE. If null, displays all of them.


showAzimuth

public void showAzimuth(boolean onOff)
Switch the display of the azimuth angle on or off.

Parameters:
onOff - true to display the azimuth angle, false to turn off

getShowAzimuth

public boolean getShowAzimuth()
Whether the display of the azimuth angle on or off.


setLineType

public void setLineType(int lype)
Set the line type to be drawn see also OMGraphic

Parameters:
lype - either LINETYPE_GREATCIRCLE, LINETYPE_RHUMB, LINETYPE_STRAIGHT

getLineType

public int getLineType()
Return the line type either LINETYPE_GREATCIRCLE, LINETYPE_RHUMB, LINETYPE_STRAIGHT


showCircle

public void showCircle(boolean onOff)
Set the drawing of the rubberband circle on/off.

Parameters:
onOff - true or false

getShowCircle

public boolean getShowCircle()
Get whether the drawing of the rubberband circle on/off.


setRepaintToClean

public void setRepaintToClean(boolean rtc)

getRepaintToClean

public boolean getRepaintToClean()

setProperties

public void setProperties(java.lang.String prefix,
                          java.util.Properties setList)
PropertyConsumer interface method.

Specified by:
setProperties in interface PropertyConsumer
Overrides:
setProperties in class AbstractMouseMode
Parameters:
prefix - the token to prefix the property names
setList - the Properties object

getProperties

public java.util.Properties getProperties(java.util.Properties getList)
PropertyConsumer interface method.

Specified by:
getProperties in interface PropertyConsumer
Overrides:
getProperties in class AbstractMouseMode
Parameters:
getList - a Properties object to load the PropertyConsumer properties into. If props equals null, then a new Properties object should be created.
Returns:
Properties object containing PropertyConsumer property values. If getList was not null, this should equal getList. Otherwise, it should be the Properties object created by the PropertyConsumer.

getPropertyInfo

public java.util.Properties getPropertyInfo(java.util.Properties list)
PropertyConsumer interface method.

Specified by:
getPropertyInfo in interface PropertyConsumer
Overrides:
getPropertyInfo in class AbstractMouseMode
Parameters:
list - a Properties object to load the PropertyConsumer properties into. If getList equals null, then a new Properties object should be created.
Returns:
Properties object containing PropertyConsumer property values. If getList was not null, this should equal getList. Otherwise, it should be the Properties object created by the PropertyConsumer.

listenerPaint

public void listenerPaint(java.awt.Graphics g)
Called by the MapBean when it repaints, to let the MouseMode know when to update itself on the map. PaintListener interface.

Specified by:
listenerPaint in interface PaintListener
Overrides:
listenerPaint in class AbstractMouseMode


Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details