Class CoordinateRect
- All Implemented Interfaces:
Computable
,InputObject
,Limits
,Tieable
,Serializable
When the Rect is mapped onto the screen, there can be a gap of a specified number of pixels between the min,max values and the edges of the rectangle on the screen. If the gap is non-zero, then the actual range of coordinates on the rect is larger than the range from the specifed min to max. (This is done mainly so I could have axes that don't quite reach the edges of the rect.)
A CoordinateRect maintains a list of Drawable items. When the Rect's draw() method is called, it calls the draw() method of each of the Drawable items it contains. When its compute() method is called, it calls the compute() method of any Drawable that is a Computable. When its checkInput() method is called, it calls the checkInput() method of any Drawable that is an InputObject.
A CoordinateRect represents a rectangular region in a DisplayCanvas. It has a reference to that Canvas, which is set automatically when it is added to the canvas. If the size, range, or gap on the CoordinateRect change, it will ask the Canvas to redraw the area it occupies.
The values of xmin, xmax, ymin, ymax are exported as Value objects, which can be used elsewhere in your program. The Value objects can be obtained by calling getValueObject(). If you do this, you should add the objects that depend on those values to a Controller and register the Controller to listen for changes from this CoordinateRect by calling the CoordinateRect.setOnChange(Controller) method.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected boolean
Set to true when one of the limits or the gap has changed.protected Vector
Drawable items contained in this CoordinateRectprotected Controller
If non-null, this is the Controller that is notified when the limits change.protected Tie
This contains other Limit objects with which the CoordinateRect is synchronizing.static final int
A constant for use with the getValueObject() method to specify which Value is to be returned.static final int
A constant for use with the getValueObject() method to specify which Value is to be returned.static final int
A constant for use with the getValueObject() method to specify which Value is to be returned.static final int
A constant for use with the getValueObject() method to specify which Value is to be returned. -
Constructor Summary
ConstructorsConstructorDescriptionCreate a CoordinateRect with default limits: -5, 5, -5, 5.CoordinateRect
(double xmin, double xmax, double ymin, double ymax) Create a CoordinateRect with specified limits. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Add a drawable item to the CoordinateRect.void
When this is called, the CoordinateRect will call the checkInput method of any Drawable it contains that is also an InputObject.void
A CoordinateRect can store its current limits in a buffer.void
compute()
When this is called, the CoordinateRect will call the compute method of any Drawable it contains that is also a Computable.protected void
Draw all the Drawable items.void
Draw in rect with upperleft corner (0,0) and specified width,height.void
Draw in specified rect.double[]
Reset limits, if necessary, so scales on the axes are the same.getDrawable
(int i) Get the i-th Drawable in this Rect, or null if i is less than zero or greater than or equal to the number of items.int
Returns the number of Drawable items that are in this CoordinateRect.int
getGap()
Get the gap, in pixels, between the edges of the CoordinateRect and the limits specified by xmin, xmax, ymin, and ymax.int
Get the height in pixels of this CoordinateRect in the DisplayCanvas that contains it.int
getLeft()
Get the left edge of this CoordinateRect in the DisplayCanvas that contains it.double[]
Get an array containing the limits on the CoordinateRect in the order xmin, xmax, ymin, ymax.Get the controller that is notified when the limits on this CoordinateRect change.double
Return the height of one pixel in this coordinate system.double
Return the width of one pixel in this coordinate system.long
Return the serial number of the CoordinateRect, which is incremented each time the limits change.int
getTop()
Get the top edge of this CoordinateRect in the DisplayCanvas that contains it.getValueObject
(int which) Get a Value object representing one of the limits on this CoordinateRect.int
getWidth()
Get the width in pixels of this CoordinateRect in the DisplayCanvas that contains it.double
getXmax()
Get the maximum x-coordinate.double
getXmin()
Get the mimimum x-coordinate.double
getYmax()
Get the maximum x-coordinate.double
getYmin()
Get the mimimum y-coordinate.void
Method required by InputObject interface; in this class, it calls the same method recursively on any input objects containted in this CoordinateRect.double
pixelToX
(int h) Convert a horizontal pixel coordinate into an x-coordinate.double
pixelToY
(int y) Convert a vertical pixel coordinate into a y-coordinate.void
Remove the given Drawable item, if present in this CoordinateRect.double[]
restore()
A CoordinateRect can store its current limits in a buffer.void
setGap
(int g) Set the gap.void
setLimits
(double[] d) Set the coordinate limits from array; extra elements in array are ignored.void
setLimits
(double xmin, double xmax, double ymin, double ymax) Set the limits on the CoordinteRectvoid
Specify a controller to be notified when the limits on this CoordinateRect change.void
Save current limits in buffer.void
setSyncWith
(Tie tie) Set the Tie object that is used to synchronize this CoordinareRect with other objects.void
Part of the Tieable interface.int
xToPixel
(double x) Convert an x-coodinate into a horizontal pixel coordinate.int
yToPixel
(double y) Convert a y-coodinate into a vertical pixel coordinate.double[]
zoomIn()
Change limits to zoom in by a factor of 2.double[]
zoomInOnPixel
(int x, int y) Change limits to zoom in by a factor of 2, centered on a specified point.double[]
zoomOut()
Change limits to zoom out by a factor of 2.double[]
zoomOutFromPixel
(int x, int y) Change limits to zoom out by a factor of 2, centered on a specified point.
-
Field Details
-
drawItems
Drawable items contained in this CoordinateRect -
changed
protected boolean changedSet to true when one of the limits or the gap has changed. -
syncWith
This contains other Limit objects with which the CoordinateRect is synchronizing. This is ordinarily managed by a LimitControlPanel, so you don't have to worry about it. (However, you can also sync several CoordinateRects even in the absense of a LimitControlPanel. To do so, create the Tie that ties the CoordinateRect and pass it to the setSyncWith() method of each CoordinateRect. It is NOT necessary to add the Tie to a Controller. Synchronization is handled by the CoordinateRects themselves. -
XMIN
public static final int XMINA constant for use with the getValueObject() method to specify which Value is to be returned. XMIN specifies that the Value is the minimum x-coordinate on the CoordinateRect.- See Also:
-
XMAX
public static final int XMAXA constant for use with the getValueObject() method to specify which Value is to be returned. XMAX specifies that the Value is the maximum x-coordinate on the CoordinateRect.- See Also:
-
YMIN
public static final int YMINA constant for use with the getValueObject() method to specify which Value is to be returned. YMIN specifies that the Value is the minimum y-coordinate on the CoordinateRect.- See Also:
-
YMAX
public static final int YMAXA constant for use with the getValueObject() method to specify which Value is to be returned. YMAX specifies that the Value is the maximum y-coordinate on the CoordinateRect.- See Also:
-
onChange
If non-null, this is the Controller that is notified when the limits change.
-
-
Constructor Details
-
CoordinateRect
public CoordinateRect()Create a CoordinateRect with default limits: -5, 5, -5, 5. -
CoordinateRect
public CoordinateRect(double xmin, double xmax, double ymin, double ymax) Create a CoordinateRect with specified limits.
-
-
Method Details
-
getXmin
public double getXmin()Get the mimimum x-coordinate. -
getXmax
public double getXmax()Get the maximum x-coordinate. -
getYmin
public double getYmin()Get the mimimum y-coordinate. -
getYmax
public double getYmax()Get the maximum x-coordinate. -
getGap
public int getGap()Get the gap, in pixels, between the edges of the CoordinateRect and the limits specified by xmin, xmax, ymin, and ymax. -
setGap
public void setGap(int g) Set the gap. This is ignored if g is less than zero. This gap is the number of pixels between the edges of the CoordinateRect and the limits specified by xmin, xmax, ymin, and ymax. The default value is 5. -
getLimits
public double[] getLimits()Get an array containing the limits on the CoordinateRect in the order xmin, xmax, ymin, ymax. -
setLimits
public void setLimits(double xmin, double xmax, double ymin, double ymax) Set the limits on the CoordinteRect- Parameters:
xmin
- the minimum x-coordinate on the CoordinateRectxmax
- the maximum x-coordinate on the CoordinateRectymin
- the minimum y-coordinate on the CoordinateRectymax
- the maximum y-coordinate on the CoordinateRect
-
setLimits
public void setLimits(double[] d) Set the coordinate limits from array; extra elements in array are ignored. This is ignored if the array is null or has fewer than 4 members. The order of values in the array is xmin, xmax, ymin, ymax. -
setOnChange
Specify a controller to be notified when the limits on this CoordinateRect change. -
getOnChange
Get the controller that is notified when the limits on this CoordinateRect change. This can be null. -
getValueObject
Get a Value object representing one of the limits on this CoordinateRect. The parameter should be one of the constants CoordinateRect.XMIN, CoordinateRect.XMAX, CoordinateRect.YMIN, or CoordinateRect.YMAX. (If not, it is treated the same as YMAX). -
getSerialNumber
public long getSerialNumber()Return the serial number of the CoordinateRect, which is incremented each time the limits change. Part of the Tieable interface. Not meant to be called directly.- Specified by:
getSerialNumber
in interfaceTieable
-
setSyncWith
Set the Tie object that is used to synchronize this CoordinareRect with other objects. This is ordinarily called by a LimitControlPanel, so you don't have to worry about it. -
sync
Part of the Tieable interface. Not meant to be called directly. -
getLeft
public int getLeft()Get the left edge of this CoordinateRect in the DisplayCanvas that contains it. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
getWidth
public int getWidth()Get the width in pixels of this CoordinateRect in the DisplayCanvas that contains it. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
getTop
public int getTop()Get the top edge of this CoordinateRect in the DisplayCanvas that contains it. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
getHeight
public int getHeight()Get the height in pixels of this CoordinateRect in the DisplayCanvas that contains it. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
getPixelWidth
public double getPixelWidth()Return the width of one pixel in this coordinate system. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
getPixelHeight
public double getPixelHeight()Return the height of one pixel in this coordinate system. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
xToPixel
public int xToPixel(double x) Convert an x-coodinate into a horizontal pixel coordinate. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
yToPixel
public int yToPixel(double y) Convert a y-coodinate into a vertical pixel coordinate. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
pixelToX
public double pixelToX(int h) Convert a horizontal pixel coordinate into an x-coordinate. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
pixelToY
public double pixelToY(int y) Convert a vertical pixel coordinate into a y-coordinate. (This is only valid when the CoordinateRect has actually been displayed. It is meant mainly to be used by Drawables in this CoordinateRect.) -
restore
public double[] restore()A CoordinateRect can store its current limits in a buffer. These limits can be restored by a call to this method. Only one level of save/restore is provided. If limits have not been saved, then nothing happens. The original limits on the CoordinateRect are saves automatically when the CoordinateRect is first created.- Returns:
- an array containing new limits.
-
clearRestoreBuffer
public void clearRestoreBuffer()A CoordinateRect can store its current limits in a buffer. This method clears that buffer. -
setRestoreBuffer
public void setRestoreBuffer()Save current limits in buffer. They can be restored later by a call to the restore() method. Only one level of save/restore is provided. -
zoomIn
public double[] zoomIn()Change limits to zoom in by a factor of 2. A maximal zoom is enforced. The center of the rectangle does not move.- Returns:
- an array of the new limits, or null if limits don't change.
-
zoomOut
public double[] zoomOut()Change limits to zoom out by a factor of 2. A maximal zoom is enforced. The center of the rectangle does not move.- Returns:
- an array of the new limits, or null if limits don't change.
-
zoomInOnPixel
public double[] zoomInOnPixel(int x, int y) Change limits to zoom in by a factor of 2, centered on a specified point. A maximal zoom is enforced. The point does not move. Only valid when CoordinateRect is displayed in a rectangle on the screen.- Parameters:
x
- the horizontal pixel coordinate of the center point of the zoomy
- the vertical pixel coordinate of the center point of the zoom- Returns:
- an array of the new limits, or null if limits don't change.
-
zoomOutFromPixel
public double[] zoomOutFromPixel(int x, int y) Change limits to zoom out by a factor of 2, centered on a specified point. A maximal zoom is enforced. The point (x,y) does not move. Valid only if CoordinateRect has been drawn.- Parameters:
x
- the horizontal pixel coordinate of the center point of the zoomy
- the vertical pixel coordinate of the center point of the zoom- Returns:
- an array of the new limits, or null if limits don't change.
-
equalizeAxes
public double[] equalizeAxes()Reset limits, if necessary, so scales on the axes are the same. Only valid of the CoordinateRect has been drawn.- Returns:
- an array with the new limits, or null if limits don't change.
-
checkInput
public void checkInput()When this is called, the CoordinateRect will call the checkInput method of any Drawable it contains that is also an InputObject. This is ordinarly only called by a DisplayCanvas.- Specified by:
checkInput
in interfaceInputObject
-
compute
public void compute()When this is called, the CoordinateRect will call the compute method of any Drawable it contains that is also a Computable. This is ordinarly only called by a DisplayCanvas.- Specified by:
compute
in interfaceComputable
-
notifyControllerOnChange
Method required by InputObject interface; in this class, it calls the same method recursively on any input objects containted in this CoordinateRect. This is meant to be called by JCMPanel.gatherInputs().- Specified by:
notifyControllerOnChange
in interfaceInputObject
-
add
Add a drawable item to the CoordinateRect. -
remove
Remove the given Drawable item, if present in this CoordinateRect. -
getDrawableCount
public int getDrawableCount()Returns the number of Drawable items that are in this CoordinateRect. -
getDrawable
Get the i-th Drawable in this Rect, or null if i is less than zero or greater than or equal to the number of items.- Parameters:
i
- The number of the item to be returned, where the first item is number zero.
-
draw
Draw in rect with upperleft corner (0,0) and specified width,height. This is not ordinarily called directly. -
draw
Draw in specified rect. This is not ordinarily called directly. -
doDraw
Draw all the Drawable items. This is called by the draw() method and is not meant to be called directly. However, it might be overridden in a subclass.
-