From 461ea04cda47d3ef10b86d1ad73298e0b3713e81 Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Wed, 12 May 2010 16:33:53 +0000 Subject: [PATCH] Merging mk branch rev. 539 --- src/eva2/gui/FunctionArea.java | 6 ++++- src/eva2/tools/chart2d/DArray.java | 27 ++++++++++++++++++----- src/eva2/tools/chart2d/DIntDoubleMap.java | 8 +++++++ src/eva2/tools/chart2d/DPointSet.java | 4 ++++ 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/eva2/gui/FunctionArea.java b/src/eva2/gui/FunctionArea.java index bf639ba5..9a013081 100644 --- a/src/eva2/gui/FunctionArea.java +++ b/src/eva2/gui/FunctionArea.java @@ -350,7 +350,7 @@ public class FunctionArea extends DArea implements Serializable { for (int i = 0; i < m_PointSetContainer.size(); i++) { DPointSet pSet = (m_PointSetContainer.get(i).getConnectedPointSet()); if (pSet.getSize() > 0) { - double tmpMinY = Math.min(minY, pSet.getMinYVal()); + double tmpMinY = Math.min(minY, pSet.getMinPositiveYValue()); if (tmpMinY>0) minY=tmpMinY; } } @@ -381,6 +381,7 @@ public class FunctionArea extends DArea implements Serializable { for (int i = 0; i < m_PointSetContainer.size(); i++) ((GraphPointSet) (m_PointSetContainer.get(i))).removeAllPoints(); m_PointSetContainer.clear(); + if (getYScale() instanceof Exp) setYScale(new Exp()); // to remove smallest seen value notifyNegLog = true; } @@ -390,6 +391,9 @@ public class FunctionArea extends DArea implements Serializable { public void clearGraph(int graphLabel) { getGraphPointSet(graphLabel).removeAllPoints(); m_PointSetContainer.remove(getGraphPointSet(graphLabel)); + if (getYScale() instanceof Exp) { + ((Exp)getYScale()).setMinValue(getMinimalPositiveYValue()); + } repaint(); notifyNegLog = true; } diff --git a/src/eva2/tools/chart2d/DArray.java b/src/eva2/tools/chart2d/DArray.java index 7072e40d..94251063 100644 --- a/src/eva2/tools/chart2d/DArray.java +++ b/src/eva2/tools/chart2d/DArray.java @@ -17,7 +17,7 @@ package eva2.tools.chart2d; */ public class DArray implements DIntDoubleMap{ private int initial_capacity, size; - private double capacity_multiplier = 2, max, min; + private double capacity_multiplier = 2, max, min, minPositive=-1; private double[] value; /** @@ -66,7 +66,7 @@ public class DArray implements DIntDoubleMap{ boolean min_max_changed = false, restore = false; if( image < min ){ min = image; min_max_changed = true; } else if( image > max ){ max = image; min_max_changed = true; } - if( value[source] == min || value[source] == max ) restore = true; + if( value[source] == min || value[source] == max || (value[source]==minPositive)) restore = true; value[source] = image; if( restore ) min_max_changed = restore() || min_max_changed; return min_max_changed; @@ -106,10 +106,12 @@ public class DArray implements DIntDoubleMap{ value = new_val; } boolean min_max_changed = false; - if( size == 0 ){ min = image; max = image; min_max_changed = true;} - else + if( size == 0 ){ min = image; max = image; min_max_changed = true; if (image>0) minPositive=image;} + else { + if ((image >0) && ((image max ) { max = image; min_max_changed = true; } else if( image < min ) { min = image; min_max_changed = true; } + } value[size++] = image; return min_max_changed; } @@ -133,9 +135,13 @@ public class DArray implements DIntDoubleMap{ double old_min = min, old_max = max; min = value[0]; max = value[0]; - for( int i=1; i0 && (value[i] max ) max = value[i]; + } + if (Double.isInfinite(minPositive)) minPositive=-1; return (old_min != min) || (old_max != max); } @@ -158,7 +164,15 @@ public class DArray implements DIntDoubleMap{ return min; } - + /** + * Return the minimal positive image value or the maximal value if none is positive. + * @return + */ + public double getMinPositiveImageValue() { + if ( size==0) throw + new IllegalArgumentException("DArray is empty. No minimal value exists"); + return (minPositive < 0) ? max : minPositive; + } /** * returns the maxmal image value * @@ -184,6 +198,7 @@ public class DArray implements DIntDoubleMap{ if( comp.size != size ) return false; if( comp.max != max ) return false; if( comp.min != min ) return false; + if( comp.minPositive != minPositive) return false; for( int i=0; itrue * when at least one of them has changed diff --git a/src/eva2/tools/chart2d/DPointSet.java b/src/eva2/tools/chart2d/DPointSet.java index 87d58b82..941b6ecc 100644 --- a/src/eva2/tools/chart2d/DPointSet.java +++ b/src/eva2/tools/chart2d/DPointSet.java @@ -223,6 +223,10 @@ public class DPointSet extends DComponent public double getMinYVal() { return y.getMinImageValue(); } + + public double getMinPositiveYValue() { + return y.getMinPositiveImageValue(); + } public void setConnected( boolean aFlag ){ boolean changed = !( aFlag == connected );