Merging mk branch rev 136:137 (tuning 2d-graphics)
This commit is contained in:
parent
8ec49d3551
commit
18f3cb8620
@ -4,6 +4,8 @@ package eva2;
|
|||||||
* Main product and version information strings.
|
* Main product and version information strings.
|
||||||
*
|
*
|
||||||
* --- Changelog
|
* --- Changelog
|
||||||
|
* 2.029: Tuned the 2d-graphs which now paints quicker and changes size depending on the
|
||||||
|
* surrounding plot window.
|
||||||
* 2.028: Tuned the Population to sort only when necessary on calls to getBestN... Added StatisticsDummy.
|
* 2.028: Tuned the Population to sort only when necessary on calls to getBestN... Added StatisticsDummy.
|
||||||
* Slightly tuned SimpleProblemWrapper to call initProblem of simple problems if available.
|
* Slightly tuned SimpleProblemWrapper to call initProblem of simple problems if available.
|
||||||
* 2.027: Renamed SetData and SetDataLamarckian from individual datatype interfaces to SetGenotype and SetPhenotype.
|
* 2.027: Renamed SetData and SetDataLamarckian from individual datatype interfaces to SetGenotype and SetPhenotype.
|
||||||
|
@ -20,7 +20,7 @@ public class DPointSetMultiIcon extends DComponent
|
|||||||
{
|
{
|
||||||
//~ Instance fields ////////////////////////////////////////////////////////
|
//~ Instance fields ////////////////////////////////////////////////////////
|
||||||
|
|
||||||
protected ArrayList m_IconsMI = new ArrayList();
|
protected ArrayList<DPointIcon> m_IconsMI = new ArrayList<DPointIcon>();
|
||||||
protected DIntDoubleMap xMI;
|
protected DIntDoubleMap xMI;
|
||||||
protected DIntDoubleMap yMI;
|
protected DIntDoubleMap yMI;
|
||||||
protected DPointIcon iconMI = null;
|
protected DPointIcon iconMI = null;
|
||||||
@ -119,7 +119,7 @@ public class DPointSetMultiIcon extends DComponent
|
|||||||
return new DPointSet(xMI, yMI);
|
return new DPointSet(xMI, yMI);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList getIconsMI() {
|
public ArrayList<DPointIcon> getIconsMI() {
|
||||||
return this.m_IconsMI;
|
return this.m_IconsMI;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,17 +289,11 @@ public class DPointSetMultiIcon extends DComponent
|
|||||||
for (int i = interval[0]; i < interval[1]; i++)
|
for (int i = interval[0]; i < interval[1]; i++)
|
||||||
{
|
{
|
||||||
p2 = m.getPoint(xMI.getImage(i), yMI.getImage(i));
|
p2 = m.getPoint(xMI.getImage(i), yMI.getImage(i));
|
||||||
|
|
||||||
if (p1 != null)
|
if (p1 != null)
|
||||||
{
|
{
|
||||||
try
|
if (p2!=null) {
|
||||||
{
|
g.drawLine(p1.x, p1.y, p2.x, p2.y);
|
||||||
g.drawLine(p1.x, p1.y, p2.x, p2.y);
|
}
|
||||||
}
|
|
||||||
catch (java.lang.NullPointerException e)
|
|
||||||
{
|
|
||||||
// pff
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((i < this.m_IconsMI.size()) && (this.m_IconsMI.get(i) != null))
|
if ((i < this.m_IconsMI.size()) && (this.m_IconsMI.get(i) != null))
|
||||||
@ -338,6 +332,7 @@ public class DPointSetMultiIcon extends DComponent
|
|||||||
{
|
{
|
||||||
p = m.getPoint(xMI.getImage(i), yMI.getImage(i));
|
p = m.getPoint(xMI.getImage(i), yMI.getImage(i));
|
||||||
|
|
||||||
|
if (p==null) continue;
|
||||||
if (this.m_IconsMI.get(i) != null)
|
if (this.m_IconsMI.get(i) != null)
|
||||||
{
|
{
|
||||||
g.setStroke(new BasicStroke());
|
g.setStroke(new BasicStroke());
|
||||||
|
@ -265,7 +265,7 @@ public class Plot implements PlotInterface, Serializable {
|
|||||||
m_ButtonPanel.add(SaveJPGButton);
|
m_ButtonPanel.add(SaveJPGButton);
|
||||||
// getContentPane().smultetLayout( new GridLayout(1, 4) );
|
// getContentPane().smultetLayout( new GridLayout(1, 4) );
|
||||||
m_Frame.getContentPane().add(m_ButtonPanel,"South");
|
m_Frame.getContentPane().add(m_ButtonPanel,"South");
|
||||||
m_Frame.getContentPane().add(m_PlotArea,"North");
|
m_Frame.getContentPane().add(m_PlotArea,"Center"); // north was not so nice
|
||||||
m_Frame.addWindowListener(new WindowAdapter() {
|
m_Frame.addWindowListener(new WindowAdapter() {
|
||||||
public void windowClosing(WindowEvent e) {
|
public void windowClosing(WindowEvent e) {
|
||||||
m_PlotArea.clearAll(); // this was a memory leak
|
m_PlotArea.clearAll(); // this was a memory leak
|
||||||
|
@ -41,7 +41,12 @@ import wsi.ra.print.PagePrinter;
|
|||||||
*/
|
*/
|
||||||
public class DArea extends JComponent implements DParent, Printable
|
public class DArea extends JComponent implements DParent, Printable
|
||||||
{
|
{
|
||||||
private static final boolean TRACE = false;
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1461387400381365146L;
|
||||||
|
|
||||||
|
private static final boolean TRACE = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the default minimal rectangle which is shown
|
* the default minimal rectangle which is shown
|
||||||
@ -124,6 +129,19 @@ public class DArea extends JComponent implements DParent, Printable
|
|||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the currently visible rectangle in DArea coordinates
|
||||||
|
*
|
||||||
|
* @return DRectangle the size and position of the visible area
|
||||||
|
*/
|
||||||
|
public SlimRect getSlimRectangle(){
|
||||||
|
SlimRect srect = new SlimRect(visible_rect.x, visible_rect.y, visible_rect.width, visible_rect.height);
|
||||||
|
if( min_x != null ) srect.x = Math.max(srect.x, getMinX() );
|
||||||
|
if( min_y != null ) srect.y = Math.max(srect.y, getMinY() );
|
||||||
|
if( max_x != null ) srect.width = Math.min(srect.width, getMaxX() - getMinX());
|
||||||
|
if( max_y != null ) srect.height = Math.min(srect.height, getMaxY() - getMinY());
|
||||||
|
return srect;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* switches the auto focus of this DArea on or off
|
* switches the auto focus of this DArea on or off
|
||||||
*
|
*
|
||||||
@ -206,38 +224,38 @@ public class DArea extends JComponent implements DParent, Printable
|
|||||||
return (DRectangle)min_rect.clone();
|
return (DRectangle)min_rect.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* method sets the maximal rectangle whioch can be viewed with the
|
// * method sets the maximal rectangle whioch can be viewed with the
|
||||||
* DArea. This method can be used if the area is used with scale functions
|
// * DArea. This method can be used if the area is used with scale functions
|
||||||
* which are not invertible on all reals
|
// * which are not invertible on all reals
|
||||||
*
|
// *
|
||||||
* @param x the minmal x value
|
// * @param x the minmal x value
|
||||||
* @param y the minmal y value
|
// * @param y the minmal y value
|
||||||
* @param width of the maximal rectangle
|
// * @param width of the maximal rectangle
|
||||||
* @param height of the maximal rectangle
|
// * @param height of the maximal rectangle
|
||||||
*/
|
// */
|
||||||
public void setMaxRectangle( double x, double y, double width, double height ){
|
// public void setMaxRectangle( double x, double y, double width, double height ){
|
||||||
setMaxRectangle( new DRectangle( x, y, width, height ) );
|
// setMaxRectangle( new DRectangle( x, y, width, height ) );
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* method sets the maximal rectangle whioch can be viewed with the
|
// * method sets the maximal rectangle whioch can be viewed with the
|
||||||
* DArea. This method can be used if the area is used with scale functions
|
// * DArea. This method can be used if the area is used with scale functions
|
||||||
* which are not invertible on all reals
|
// * which are not invertible on all reals
|
||||||
*
|
// *
|
||||||
* @param the rect maximal rectangle of the DArea
|
// * @param the rect maximal rectangle of the DArea
|
||||||
* @deprecated see setMinX, setMinY, setMaxX, setMaxY
|
// * @deprecated see setMinX, setMinY, setMaxX, setMaxY
|
||||||
*/
|
// */
|
||||||
public void setMaxRectangle( DRectangle rect ){
|
// public void setMaxRectangle( DRectangle rect ){
|
||||||
if( !rect.contains( min_rect ) ) throw
|
// if( !rect.contains( min_rect ) ) throw
|
||||||
new IllegalArgumentException("Maximal rectangle does not contain minmal rectangle");
|
// new IllegalArgumentException("Maximal rectangle does not contain minmal rectangle");
|
||||||
|
//
|
||||||
setMinX( rect.x );
|
// setMinX( rect.x );
|
||||||
setMinY( rect.y );
|
// setMinY( rect.y );
|
||||||
setMaxX( rect.x + rect.width );
|
// setMaxX( rect.x + rect.width );
|
||||||
setMaxY( rect.y + rect.height );
|
// setMaxY( rect.y + rect.height );
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method returns the maximal rectangle of the area
|
* method returns the maximal rectangle of the area
|
||||||
@ -695,30 +713,31 @@ public class DArea extends JComponent implements DParent, Printable
|
|||||||
Graphics g = m.g;
|
Graphics g = m.g;
|
||||||
g.setColor( grid.getColor() );
|
g.setColor( grid.getColor() );
|
||||||
|
|
||||||
DRectangle rect = getDRectangle(),
|
SlimRect rect = getSlimRectangle();
|
||||||
src_rect = m.getSourceOf( rect );
|
SlimRect src_rect = m.getSourceOf( rect );
|
||||||
|
|
||||||
int x = (int)(src_rect.x / grid.hor_dist),
|
int x = (int)(src_rect.x / grid.hor_dist),
|
||||||
y = (int)(src_rect.y / grid.ver_dist);
|
y = (int)(src_rect.y / grid.ver_dist);
|
||||||
if( x * grid.hor_dist < src_rect.x ) x++;
|
if( x * grid.hor_dist < src_rect.x ) x++;
|
||||||
if( y * grid.ver_dist < src_rect.y ) y++;
|
if( y * grid.ver_dist < src_rect.y ) y++;
|
||||||
|
|
||||||
DPoint min = new DPoint( rect.x, rect.y ),
|
// DPoint min = new DPoint( rect.x, rect.y ),
|
||||||
max = new DPoint( min.x + rect.width, min.y + rect.height );
|
// max = new DPoint( min.x + rect.width, min.y + rect.height );
|
||||||
|
double minx=rect.x, miny=rect.y, maxx=minx+rect.width, maxy=miny+rect.height;
|
||||||
|
|
||||||
double pos;
|
double pos;
|
||||||
|
|
||||||
for( ; (pos = x * grid.hor_dist) < src_rect.x + src_rect.width; x++ ){
|
for( ; (pos = x * grid.hor_dist) < src_rect.x + src_rect.width; x++ ){
|
||||||
if( m.x_scale != null ) pos = m.x_scale.getImageOf( pos );
|
if( m.x_scale != null ) pos = m.x_scale.getImageOf( pos );
|
||||||
Point p1 = m.getPoint( pos, min.y ),
|
Point p1 = m.getPoint( pos, miny ),
|
||||||
p2 = m.getPoint( pos, max.y );
|
p2 = m.getPoint( pos, maxy );
|
||||||
g.drawLine( p1.x, p1.y, p2.x, p2.y );
|
g.drawLine( p1.x, p1.y, p2.x, p2.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( ; (pos = y * grid.ver_dist) < src_rect.y + src_rect.height; y++ ){
|
for( ; (pos = y * grid.ver_dist) < src_rect.y + src_rect.height; y++ ){
|
||||||
if( m.y_scale != null ) pos = m.y_scale.getImageOf( pos );
|
if( m.y_scale != null ) pos = m.y_scale.getImageOf( pos );
|
||||||
Point p1 = m.getPoint( min.x, pos ),
|
Point p1 = m.getPoint( minx, pos ),
|
||||||
p2 = m.getPoint( max.x, pos );
|
p2 = m.getPoint( maxx, pos );
|
||||||
g.drawLine( p1.x, p1.y, p2.x, p2.y );
|
g.drawLine( p1.x, p1.y, p2.x, p2.y );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,11 @@ import java.awt.Insets;
|
|||||||
|
|
||||||
public class DBorder extends Insets{
|
public class DBorder extends Insets{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -1324717830324606364L;
|
||||||
|
|
||||||
public DBorder(){
|
public DBorder(){
|
||||||
this( 0, 0, 0, 0 );
|
this( 0, 0, 0, 0 );
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,8 @@ package wsi.ra.chart2d;
|
|||||||
* IMPORTS
|
* IMPORTS
|
||||||
*==========================================================================*/
|
*==========================================================================*/
|
||||||
|
|
||||||
import java.util.Vector ;
|
import java.awt.Color;
|
||||||
import java.awt.Color ;
|
import java.util.Vector;
|
||||||
import java.awt.Graphics;
|
|
||||||
|
|
||||||
/*==========================================================================*
|
/*==========================================================================*
|
||||||
* CLASS DECLARATION
|
* CLASS DECLARATION
|
||||||
@ -28,14 +27,15 @@ public class DContainer extends DComponent implements DParent{
|
|||||||
/**
|
/**
|
||||||
* the elements of the container and their keys ( Strings )
|
* the elements of the container and their keys ( Strings )
|
||||||
*/
|
*/
|
||||||
protected Vector elements, keys;
|
protected Vector<DElement> elements;
|
||||||
|
protected Vector<String> keys;
|
||||||
|
|
||||||
public DContainer(){ this(10); }
|
public DContainer(){ this(10); }
|
||||||
|
|
||||||
public DContainer(int initial_capacity){
|
public DContainer(int initial_capacity){
|
||||||
super();
|
super();
|
||||||
elements = new Vector(initial_capacity);
|
elements = new Vector<DElement>(initial_capacity);
|
||||||
keys = new Vector(initial_capacity);
|
keys = new Vector<String>(initial_capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void repaint( DRectangle r ){
|
public void repaint( DRectangle r ){
|
||||||
@ -155,7 +155,7 @@ public class DContainer extends DComponent implements DParent{
|
|||||||
DElement e;
|
DElement e;
|
||||||
for( int i=0; i<elements.size(); i++ ){
|
for( int i=0; i<elements.size(); i++ ){
|
||||||
e = (DElement)elements.elementAt(i);
|
e = (DElement)elements.elementAt(i);
|
||||||
if( e.isVisible() && !m.getDRectangle().getIntersection( e.getRectangle() ).isEmpty()){
|
if( e.isVisible() && !m.getSlimRectangle().hasEmptyIntersection(e.getRectangle())){
|
||||||
m.g.setColor( DEFAULT_COLOR );
|
m.g.setColor( DEFAULT_COLOR );
|
||||||
e.paint( m );
|
e.paint( m );
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,8 @@ package wsi.ra.chart2d;
|
|||||||
* IMPORTS
|
* IMPORTS
|
||||||
*==========================================================================*/
|
*==========================================================================*/
|
||||||
|
|
||||||
import java.awt.Point ;
|
import java.awt.Graphics;
|
||||||
import java.awt.Color ;
|
import java.awt.Point;
|
||||||
import java.awt.Graphics ;
|
|
||||||
|
|
||||||
/*==========================================================================*
|
/*==========================================================================*
|
||||||
* ABSTRACT CLASS DECLARATION
|
* ABSTRACT CLASS DECLARATION
|
||||||
@ -39,7 +38,7 @@ public abstract class DFunction extends DComponent
|
|||||||
Graphics g = m.getGraphics();
|
Graphics g = m.getGraphics();
|
||||||
if( color != null ) g.setColor( color );
|
if( color != null ) g.setColor( color );
|
||||||
|
|
||||||
DRectangle rect = m.getDRectangle(),
|
SlimRect rect = m.getSlimRectangle(),
|
||||||
src_rect = m.getSourceOf( rect );
|
src_rect = m.getSourceOf( rect );
|
||||||
Point sw = m.getPoint( rect.x, rect.y ),
|
Point sw = m.getPoint( rect.x, rect.y ),
|
||||||
ne = m.getPoint( rect.x + rect.width, rect.y + rect.height );
|
ne = m.getPoint( rect.x + rect.width, rect.y + rect.height );
|
||||||
|
@ -55,8 +55,8 @@ public class DLine extends DComponent
|
|||||||
//System.out.println("DLine.paint(Measures): "+this);
|
//System.out.println("DLine.paint(Measures): "+this);
|
||||||
Graphics g = m.getGraphics();
|
Graphics g = m.getGraphics();
|
||||||
if( color != null ) g.setColor( color );
|
if( color != null ) g.setColor( color );
|
||||||
Point p1 = m.getPoint( start ),
|
Point p1 = m.getPoint( start.x, start.y ),
|
||||||
p2 = m.getPoint( end ) ;
|
p2 = m.getPoint( end.x, end.y ) ;
|
||||||
if ((p1!=null) && (p2!=null)) {
|
if ((p1!=null) && (p2!=null)) {
|
||||||
g.drawLine( p1.x, p1.y, p2.x, p2.y );
|
g.drawLine( p1.x, p1.y, p2.x, p2.y );
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,41 +1,27 @@
|
|||||||
/**
|
|
||||||
* Filename: $RCSfile: DMeasures.java,v $
|
|
||||||
* Purpose:
|
|
||||||
* Language: Java
|
|
||||||
* Compiler: JDK 1.3
|
|
||||||
* Authors: Fabian Hennecke
|
|
||||||
* Version: $Revision: 1.1.1.1 $
|
|
||||||
* $Date: 2003/07/03 14:59:41 $
|
|
||||||
* $Author: ulmerh $
|
|
||||||
* Copyright (c) Dept. Computer Architecture, University of Tuebingen, Germany
|
|
||||||
*/
|
|
||||||
|
|
||||||
package wsi.ra.chart2d;
|
package wsi.ra.chart2d;
|
||||||
|
|
||||||
/*==========================================================================*
|
|
||||||
* IMPORTS
|
|
||||||
*==========================================================================*/
|
|
||||||
|
|
||||||
import java.awt.Point ;
|
import java.awt.Point ;
|
||||||
import java.awt.Graphics ;
|
import java.awt.Graphics ;
|
||||||
import java.awt.Dimension ;
|
import java.awt.Dimension ;
|
||||||
import java.awt.Insets ;
|
import java.awt.Insets ;
|
||||||
|
|
||||||
import java.awt.Component ;
|
import java.awt.Component ;
|
||||||
//import javax.swing.JComponent ;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/*==========================================================================*
|
/**
|
||||||
* CLASS DECLARATION
|
* A class mainly for coordinate conversion. Replaced usage of DRectangle by SlimRect
|
||||||
*==========================================================================*/
|
* which makes it more efficient.
|
||||||
|
*
|
||||||
|
* @author Fabian Hennecke, ulmerh, mkron
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class DMeasures implements Serializable
|
public class DMeasures implements Serializable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 243092480517044848L;
|
private static final long serialVersionUID = 243092480517044848L;
|
||||||
private boolean under_construction = false;
|
private boolean under_construction = false;
|
||||||
// when in use for a DArea:
|
// when in use for a DArea:
|
||||||
Graphics g;
|
Graphics g;
|
||||||
// when in use for a ScaledBorder:
|
// when in use for a ScaledBorder:
|
||||||
@ -60,21 +46,6 @@ private boolean under_construction = false;
|
|||||||
this.sb = sb;
|
this.sb = sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* method returns the pixel-point which belongs to the DPoint in the
|
|
||||||
* D-coordinates
|
|
||||||
* it says where to paint a certain DPoint
|
|
||||||
* returns <code>null</code> if the double coordinates do not belong to the
|
|
||||||
* image of the scale functions
|
|
||||||
*
|
|
||||||
* @param p the DPoint
|
|
||||||
* @return the coresponding pixel Point
|
|
||||||
*/
|
|
||||||
public Point getPoint( DPoint p ){
|
|
||||||
//System.out.println("DMeasures.getPoint :"+org );
|
|
||||||
return getPoint( p.x, p.y );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method returns the pixel-point which belongs to the given D-coordinates
|
* method returns the pixel-point which belongs to the given D-coordinates
|
||||||
* it says where to paint a certain DPoint
|
* it says where to paint a certain DPoint
|
||||||
@ -86,7 +57,7 @@ private boolean under_construction = false;
|
|||||||
* @return the coresponding pixel Point
|
* @return the coresponding pixel Point
|
||||||
*/
|
*/
|
||||||
public Point getPoint( double x, double y ){
|
public Point getPoint( double x, double y ){
|
||||||
DRectangle rect = getSourceOf( getDRectangle() );
|
SlimRect rect = getSourceOf(getSlimRectangle());
|
||||||
if (rect == null) {
|
if (rect == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -103,20 +74,6 @@ private boolean under_construction = false;
|
|||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* method returns the point in D-coordinates which corresponds to the
|
|
||||||
* given pixel-point
|
|
||||||
* returns <code>null</code> if the given coordinates can not be calculated to
|
|
||||||
* the double coordinates, when they represent a point outside of the definition
|
|
||||||
* area of the scale functions
|
|
||||||
*
|
|
||||||
* @param p Point in pixel coordinates
|
|
||||||
* @return the coresponding DPoint
|
|
||||||
*/
|
|
||||||
public DPoint getDPoint( Point p ){
|
|
||||||
return getDPoint( p.x, p.y );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method returns the point in D-coordinates which corresponds to the
|
* method returns the point in D-coordinates which corresponds to the
|
||||||
* given pixel-coordinates
|
* given pixel-coordinates
|
||||||
@ -129,7 +86,7 @@ private boolean under_construction = false;
|
|||||||
* @return the coresponding DPoint
|
* @return the coresponding DPoint
|
||||||
*/
|
*/
|
||||||
public DPoint getDPoint( int x, int y ){
|
public DPoint getDPoint( int x, int y ){
|
||||||
DRectangle rect = getSourceOf( getDRectangle() );
|
SlimRect rect = getSourceOf(getSlimRectangle());
|
||||||
Dimension dim = getInner();
|
Dimension dim = getInner();
|
||||||
Insets insets = getInsets();
|
Insets insets = getInsets();
|
||||||
x -= insets.left;
|
x -= insets.left;
|
||||||
@ -145,17 +102,27 @@ private boolean under_construction = false;
|
|||||||
return new DPoint( dx, dy );
|
return new DPoint( dx, dy );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* returns the visible rectangle in D-coordinates of the shown component
|
// * returns the visible rectangle in D-coordinates of the shown component
|
||||||
*
|
// *
|
||||||
* return the visible rectangle
|
// * @return the visible rectangle
|
||||||
*/
|
// */
|
||||||
public DRectangle getDRectangle(){
|
// public DRectangle getDRectangle(){
|
||||||
if( under_construction ) System.out.println("DMeasures.getDRectangle");
|
// if( under_construction ) System.out.println("DMeasures.getDRectangle");
|
||||||
if( sb != null ) return getImageOf( sb.src_rect );
|
// if( sb != null ) return getImageOf( sb.src_rect );
|
||||||
return ((DArea)comp).getDRectangle();
|
// return ((DArea)comp).getDRectangle();
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the visible rectangle in D-coordinates of the shown component as slim structure.
|
||||||
|
*
|
||||||
|
* @return the visible rectangle
|
||||||
|
*/
|
||||||
|
public SlimRect getSlimRectangle(){
|
||||||
|
// if( under_construction ) System.out.println("DMeasures.getDRectangle");
|
||||||
|
if( sb != null ) return getImageOf(sb.src_rect.x, sb.src_rect.y, sb.src_rect.width, sb.src_rect.height);
|
||||||
|
return ((DArea)comp).getSlimRectangle();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* returns the current Graphics object, which might be used by components to
|
* returns the current Graphics object, which might be used by components to
|
||||||
* paint themselves
|
* paint themselves
|
||||||
@ -205,6 +172,108 @@ private boolean under_construction = false;
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * method returns the image rectangle of the given rectangle
|
||||||
|
// * they differ if there are scale functions selected which are not the identity
|
||||||
|
// * if the given rectangle does not belong to the defintion area of the scale
|
||||||
|
// * functions, the method returns <code>null</code>
|
||||||
|
// *
|
||||||
|
// * @param rect the source rectangle
|
||||||
|
// * @return the source of it
|
||||||
|
// */
|
||||||
|
// DRectangle getImageOf( DRectangle rect ){
|
||||||
|
// if( under_construction ) System.out.println("DMeasures.getImageOf: "+rect);
|
||||||
|
// if( x_scale == null && y_scale == null ) return rect;
|
||||||
|
// if( rect.isEmpty() ) return (DRectangle)rect.clone();
|
||||||
|
// DPoint p1 = new DPoint( rect.x, rect.y ),
|
||||||
|
// p2 = new DPoint( rect.x + rect.width, rect.y + rect.height );
|
||||||
|
// try{
|
||||||
|
// if( x_scale != null ){
|
||||||
|
// p1.x = x_scale.getImageOf( p1.x );
|
||||||
|
// p2.x = x_scale.getImageOf( p2.x );
|
||||||
|
// }
|
||||||
|
// if( y_scale != null ){
|
||||||
|
// p1.y = y_scale.getImageOf( p1.y );
|
||||||
|
// p2.y = y_scale.getImageOf( p2.y );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// catch( IllegalArgumentException nde ){ return null; }
|
||||||
|
// return new DRectangle( p1.x, p1.y, p2.x - p1.x, p2.y - p1.y );
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* method returns the image rectangle of the given rectangle
|
||||||
|
* they differ if there are scale functions selected which are not the identity
|
||||||
|
* if the given rectangle does not belong to the definition area of the scale
|
||||||
|
* functions, the method returns <code>null</code>
|
||||||
|
*
|
||||||
|
* @param rect the source rectangle
|
||||||
|
* @return the source of it
|
||||||
|
*/
|
||||||
|
SlimRect getImageOf(double xpos, double ypos, double width, double height){
|
||||||
|
// if( under_construction ) System.out.println("DMeasures.getImageOf: "+rect);
|
||||||
|
|
||||||
|
if( x_scale == null && y_scale == null ) return new SlimRect(xpos, ypos, width, height);
|
||||||
|
double x1 = xpos, y1=ypos, x2=xpos + width, y2=ypos + height;
|
||||||
|
|
||||||
|
try{
|
||||||
|
if( x_scale != null ){
|
||||||
|
x1 = x_scale.getImageOf( x1 );
|
||||||
|
x2 = x_scale.getImageOf( x2 );
|
||||||
|
}
|
||||||
|
if( y_scale != null ){
|
||||||
|
y1 = y_scale.getImageOf( y1 );
|
||||||
|
y2 = y_scale.getImageOf( y2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( IllegalArgumentException nde ){ return null; }
|
||||||
|
return new SlimRect( x1, y1, x2 - x1, y2 - y1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
SlimRect getImageOf(SlimRect srect) {
|
||||||
|
return getImageOf(srect.x, srect.y, srect.width, srect.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * method returns the source rectangle of the given rectangle
|
||||||
|
// * they differ if there are scale functions selected which are not the identity
|
||||||
|
// * if the given rectangle does not belong to the image area of the scale
|
||||||
|
// * functions, the method returns <code>null</code>
|
||||||
|
// *
|
||||||
|
// * @param rect the image rectangle
|
||||||
|
// * @return the source of it
|
||||||
|
// */
|
||||||
|
// DRectangle getSourceOf( DRectangle rect ){
|
||||||
|
// if( under_construction ) System.out.println("DMeasures.getSourceOf: "+rect);
|
||||||
|
// if( !getDRectangle().contains( rect ) ) {
|
||||||
|
//// System.out.println("case not contains");
|
||||||
|
// return null;
|
||||||
|
// //throw new IllegalArgumentException("The rectangle lies not in the currently painted rectangle");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if( x_scale == null && y_scale == null ) {
|
||||||
|
//// System.out.println("Case scale null");
|
||||||
|
// return rect;
|
||||||
|
// }
|
||||||
|
// if( rect.isEmpty() ) {
|
||||||
|
//// System.out.println("Case isEmpty");
|
||||||
|
// return (DRectangle)rect.clone();
|
||||||
|
// }
|
||||||
|
// DPoint p1 = new DPoint( rect.x, rect.y ),
|
||||||
|
// p2 = new DPoint( rect.x + rect.width, rect.y + rect.height );
|
||||||
|
// try{
|
||||||
|
// if( x_scale != null ){
|
||||||
|
// p1.x = x_scale.getSourceOf( p1.x );
|
||||||
|
// p2.x = x_scale.getSourceOf( p2.x );
|
||||||
|
// }
|
||||||
|
// if( y_scale != null ){
|
||||||
|
// p1.y = y_scale.getSourceOf( p1.y );
|
||||||
|
// p2.y = y_scale.getSourceOf( p2.y );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// catch( IllegalArgumentException nde ){ return null; }
|
||||||
|
// return new DRectangle( p1.x, p1.y, p2.x - p1.x, p2.y - p1.y );
|
||||||
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method returns the source rectangle of the given rectangle
|
* method returns the source rectangle of the given rectangle
|
||||||
@ -212,61 +281,50 @@ private boolean under_construction = false;
|
|||||||
* if the given rectangle does not belong to the image area of the scale
|
* if the given rectangle does not belong to the image area of the scale
|
||||||
* functions, the method returns <code>null</code>
|
* functions, the method returns <code>null</code>
|
||||||
*
|
*
|
||||||
|
* Tuning: rect must not be empty
|
||||||
|
*
|
||||||
* @param rect the image rectangle
|
* @param rect the image rectangle
|
||||||
* @return the source of it
|
* @return the source of it
|
||||||
*/
|
*/
|
||||||
DRectangle getSourceOf( DRectangle rect ){
|
SlimRect getSourceOf(double x, double y, double width, double height){
|
||||||
if( under_construction ) System.out.println("DMeasures.getSourceOf: "+rect);
|
// if( under_construction ) System.out.println("DMeasures.getSourceOf: "+rect);
|
||||||
if( !getDRectangle().contains( rect ) ) {
|
if( !getSlimRectangle().contains( x, y, width, height ) ) {
|
||||||
return null;
|
// System.out.println("case not contains");
|
||||||
//throw new IllegalArgumentException("The rectangle lies not in the currently painted rectangle");
|
return null;
|
||||||
}
|
//throw new IllegalArgumentException("The rectangle lies not in the currently painted rectangle");
|
||||||
|
}
|
||||||
|
|
||||||
if( x_scale == null && y_scale == null ) return rect;
|
if( x_scale == null && y_scale == null ) {
|
||||||
if( rect.isEmpty() ) return (DRectangle)rect.clone();
|
// System.out.println("Case scale null");
|
||||||
DPoint p1 = new DPoint( rect.x, rect.y ),
|
return new SlimRect(x, y, width, height);
|
||||||
p2 = new DPoint( rect.x + rect.width, rect.y + rect.height );
|
}
|
||||||
try{
|
|
||||||
if( x_scale != null ){
|
|
||||||
p1.x = x_scale.getSourceOf( p1.x );
|
|
||||||
p2.x = x_scale.getSourceOf( p2.x );
|
|
||||||
}
|
|
||||||
if( y_scale != null ){
|
|
||||||
p1.y = y_scale.getSourceOf( p1.y );
|
|
||||||
p2.y = y_scale.getSourceOf( p2.y );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( IllegalArgumentException nde ){ return null; }
|
|
||||||
return new DRectangle( p1.x, p1.y, p2.x - p1.x, p2.y - p1.y );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
double x1=x, y1=y, x2=x + width, y2=y + height;
|
||||||
* method returns the image rectangle of the given rectangle
|
try{
|
||||||
* they differ if there are scale functions selected which are not the identity
|
if( x_scale != null ){
|
||||||
* if the given rectangle does not belong to the defintion area of the scale
|
x1 = x_scale.getSourceOf( x1 );
|
||||||
* functions, the method returns <code>null</code>
|
x2 = x_scale.getSourceOf( x2 );
|
||||||
*
|
}
|
||||||
* @param rect the source rectangle
|
if( y_scale != null ){
|
||||||
* @return the source of it
|
y1 = y_scale.getSourceOf( y1 );
|
||||||
*/
|
y2 = y_scale.getSourceOf( y2 );
|
||||||
DRectangle getImageOf( DRectangle rect ){
|
}
|
||||||
if( under_construction ) System.out.println("DMeasures.getImageOf: "+rect);
|
}
|
||||||
if( x_scale == null && y_scale == null ) return rect;
|
catch( IllegalArgumentException nde ){ return null; }
|
||||||
if( rect.isEmpty() ) return (DRectangle)rect.clone();
|
return new SlimRect( x1, y1, x2 - x1, y2 - y1 );
|
||||||
DPoint p1 = new DPoint( rect.x, rect.y ),
|
}
|
||||||
p2 = new DPoint( rect.x + rect.width, rect.y + rect.height );
|
// SlimRect getSourceOf( double xpos, double ypos, double width, double height){
|
||||||
try{
|
// if( !getSlimRectangle().contains( xpos, ypos, width, height ) ) {
|
||||||
if( x_scale != null ){
|
// System.err.println("The rectangle lies not in the currently painted rectangle");
|
||||||
p1.x = x_scale.getImageOf( p1.x );
|
// return null;
|
||||||
p2.x = x_scale.getImageOf( p2.x );
|
// //throw new IllegalArgumentException("The rectangle lies not in the currently painted rectangle");
|
||||||
}
|
// }
|
||||||
if( y_scale != null ){
|
// // MK: this now strangely does the same as getImageOf
|
||||||
p1.y = y_scale.getImageOf( p1.y );
|
// return getImageOf(xpos, ypos, width, height);
|
||||||
p2.y = y_scale.getImageOf( p2.y );
|
// }
|
||||||
}
|
|
||||||
}
|
SlimRect getSourceOf( SlimRect srect){
|
||||||
catch( IllegalArgumentException nde ){ return null; }
|
return getSourceOf(srect.x, srect.y, srect.width, srect.height);
|
||||||
return new DRectangle( p1.x, p1.y, p2.x - p1.x, p2.y - p1.y );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Insets getInsets(){
|
private Insets getInsets(){
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
package wsi.ra.chart2d;
|
package wsi.ra.chart2d;
|
||||||
|
|
||||||
import java.awt.Graphics;
|
|
||||||
|
|
||||||
/*==========================================================================*
|
/*==========================================================================*
|
||||||
* INTERFACE DECLARATION
|
* INTERFACE DECLARATION
|
||||||
|
@ -43,7 +43,7 @@ public class DPoint extends DComponent
|
|||||||
public void paint( DMeasures m ){
|
public void paint( DMeasures m ){
|
||||||
Graphics g = m.getGraphics();
|
Graphics g = m.getGraphics();
|
||||||
if( color != null ) g.setColor( color );
|
if( color != null ) g.setColor( color );
|
||||||
Point dp = m.getPoint( this );
|
Point dp = m.getPoint( this.x, this.y );
|
||||||
if( label != null ){
|
if( label != null ){
|
||||||
FontMetrics fm = g.getFontMetrics();
|
FontMetrics fm = g.getFontMetrics();
|
||||||
g.drawString( label,
|
g.drawString( label,
|
||||||
|
@ -53,8 +53,7 @@ public class DRectangle extends DComponent
|
|||||||
if( isEmpty() ) return;
|
if( isEmpty() ) return;
|
||||||
Graphics g = m.getGraphics();
|
Graphics g = m.getGraphics();
|
||||||
Color old_color = g.getColor();
|
Color old_color = g.getColor();
|
||||||
DRectangle rect = m.getDRectangle();
|
SlimRect rect = m.getSlimRectangle().getIntersection(this);
|
||||||
rect = rect.getIntersection( this );
|
|
||||||
Point p1 = m.getPoint( rect.x, rect.y ),
|
Point p1 = m.getPoint( rect.x, rect.y ),
|
||||||
p2 = m.getPoint( rect.x + rect.width, rect.y + rect.height );
|
p2 = m.getPoint( rect.x + rect.width, rect.y + rect.height );
|
||||||
if( fillColor != null ){
|
if( fillColor != null ){
|
||||||
@ -79,14 +78,34 @@ public class DRectangle extends DComponent
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Faster contains withouth checking for ALL or EMPTY status.
|
||||||
|
*
|
||||||
|
* @param ox
|
||||||
|
* @param oy
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean contains( double ox, double oy ){
|
||||||
|
if (( ox < x ) || ( oy < y ) || ( ox > x + width ) || ( oy > y + height )) return false;
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean contains( DRectangle rect ){
|
public boolean contains( DRectangle rect ){
|
||||||
if( status == ALL || rect.isEmpty() ) return true;
|
if( status == ALL || rect.isEmpty() ) return true;
|
||||||
if( status == EMPTY || rect.isAll() ) return false;
|
if( status == EMPTY || rect.isAll() ) return false;
|
||||||
if( !contains( new DPoint( rect.x, rect.y ) ) ) return false;
|
if( !contains(rect.x, rect.y ) ) return false;
|
||||||
if( !contains( new DPoint( rect.x + rect.width, rect.y + rect.height ) ) ) return false;
|
if( !contains(rect.x + rect.width, rect.y + rect.height ) ) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean contains( double ox, double oy, double width, double heigth){
|
||||||
|
if( status == ALL) return true;
|
||||||
|
if( status == EMPTY) return false;
|
||||||
|
if( !contains(ox, oy ) ) return false;
|
||||||
|
if( !contains(ox + width, oy + height ) ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public DRectangle getIntersection( DRectangle r ){
|
public DRectangle getIntersection( DRectangle r ){
|
||||||
if( status == ALL ) return (DRectangle)r.clone();
|
if( status == ALL ) return (DRectangle)r.clone();
|
||||||
if( status == EMPTY ) return DRectangle.getEmpty();
|
if( status == EMPTY ) return DRectangle.getEmpty();
|
||||||
|
@ -88,7 +88,7 @@ public class ScaledBorder implements Border
|
|||||||
* the size of the source rectangle
|
* the size of the source rectangle
|
||||||
* that means before the values are mdified by scale functions
|
* that means before the values are mdified by scale functions
|
||||||
*/
|
*/
|
||||||
DRectangle src_rect;
|
SlimRect src_rect;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the minimal increment of the scales
|
* the minimal increment of the scales
|
||||||
@ -443,8 +443,7 @@ public class ScaledBorder implements Border
|
|||||||
if( c instanceof DArea ){
|
if( c instanceof DArea ){
|
||||||
DArea area = (DArea)c;
|
DArea area = (DArea)c;
|
||||||
DMeasures m = area.getDMeasures();
|
DMeasures m = area.getDMeasures();
|
||||||
DRectangle rect = m.getSourceOf( area.getDRectangle() );
|
src_rect = m.getSourceOf(area.getSlimRectangle());
|
||||||
src_rect = (DRectangle)rect.clone();
|
|
||||||
x_scale = area.getDMeasures().x_scale;
|
x_scale = area.getDMeasures().x_scale;
|
||||||
y_scale = area.getDMeasures().y_scale;
|
y_scale = area.getDMeasures().y_scale;
|
||||||
}
|
}
|
||||||
|
119
src/wsi/ra/chart2d/SlimRect.java
Normal file
119
src/wsi/ra/chart2d/SlimRect.java
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
package wsi.ra.chart2d;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encapsulates a slim rectangle structure with x, y, width and height and
|
||||||
|
* nothing else. Makes some painting calculations quite a bit faster.
|
||||||
|
*
|
||||||
|
* @author mkron
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class SlimRect {
|
||||||
|
double x, y, width, height;
|
||||||
|
|
||||||
|
public SlimRect(double xpos, double ypos, double wd, double ht) {
|
||||||
|
x=xpos;
|
||||||
|
y=ypos;
|
||||||
|
width = wd;
|
||||||
|
height = ht;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SlimRect(SlimRect o) {
|
||||||
|
x=o.x;
|
||||||
|
y=o.y;
|
||||||
|
width = o.width;
|
||||||
|
height = o.height;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Check whether a given point lies within the rectangle.
|
||||||
|
*
|
||||||
|
* @param ox
|
||||||
|
* @param oy
|
||||||
|
* @return true if the given point lies within the rectangle, else false
|
||||||
|
*/
|
||||||
|
public boolean contains( double ox, double oy ){
|
||||||
|
if (( ox < x ) || ( oy < y ) || ( ox > x + width ) || ( oy > y + height )) return false;
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether a given rectangle lies within this rectangle.
|
||||||
|
*
|
||||||
|
* @param xpos
|
||||||
|
* @param ypos
|
||||||
|
* @param wd
|
||||||
|
* @param ht
|
||||||
|
* @return true if the given rectangle lies within the rectangle, else false
|
||||||
|
*/
|
||||||
|
public boolean contains(double xpos, double ypos, double wd, double ht) {
|
||||||
|
return (contains(xpos,ypos) && contains(xpos+wd, ypos+ht));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "SlimRect["+x+","+y+"/"+width+","+height+"]";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intersect two rectangles. If the intersection is empty, null is returned.
|
||||||
|
*
|
||||||
|
* @param r
|
||||||
|
* @return A rectangle representing the intersection or null
|
||||||
|
*/
|
||||||
|
public SlimRect getIntersection( SlimRect r ){
|
||||||
|
return getIntersection(r.x, r.y, r.width, r.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intersect two rectangles. If the intersection is empty, null is returned.
|
||||||
|
*
|
||||||
|
* @param r
|
||||||
|
* @return A rectangle representing the intersection or null
|
||||||
|
*/
|
||||||
|
public SlimRect getIntersection( DRectangle r ){
|
||||||
|
return getIntersection(r.x, r.y, r.width, r.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intersect two rectangles. If the intersection is empty, null is returned.
|
||||||
|
*
|
||||||
|
* @param rx
|
||||||
|
* @param ry
|
||||||
|
* @param rwidth
|
||||||
|
* @param rheight
|
||||||
|
* @return A rectangle representing the intersection or null
|
||||||
|
*/
|
||||||
|
public SlimRect getIntersection(double rx, double ry, double rwidth, double rheight){
|
||||||
|
SlimRect s = new SlimRect(this);
|
||||||
|
if( s.x < rx ){
|
||||||
|
s.x = rx;
|
||||||
|
s.width -= rx - s.x;
|
||||||
|
}
|
||||||
|
if( s.y < ry ){
|
||||||
|
s.y = ry;
|
||||||
|
s.height -= ry - s.y;
|
||||||
|
}
|
||||||
|
if( s.x + s.width > rx + rwidth )
|
||||||
|
s.width = rx + rwidth - s.x;
|
||||||
|
if( s.y + s.height > ry + rheight )
|
||||||
|
s.height = ry + rheight - s.y;
|
||||||
|
if( s.width < 0 || s.height < 0 ) return null;
|
||||||
|
else return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for empty intersection.
|
||||||
|
* @param r
|
||||||
|
* @return true if the two rectangles do not intersect, else false
|
||||||
|
*/
|
||||||
|
public boolean hasEmptyIntersection(DRectangle r){
|
||||||
|
return (getIntersection(r.x, r.y, r.width, r.height)==null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for empty intersection.
|
||||||
|
* @param r
|
||||||
|
* @return true if the two rectangles do not intersect, else false
|
||||||
|
*/
|
||||||
|
public boolean hasEmptyIntersection(SlimRect r){
|
||||||
|
return (getIntersection(r)==null);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user