diff gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java @ 448:3cb2bea50456

Generate iso line classes according gnv-issues/issue108 gnv-artifacts/trunk@496 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 03 Jan 2010 12:16:55 +0000
parents 92b7ccbf6163
children 04cfb4e3da4f
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java	Fri Jan 01 21:52:41 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java	Sun Jan 03 12:16:55 2010 +0000
@@ -76,6 +76,7 @@
 import de.intevation.gnv.raster.Palette;
 import de.intevation.gnv.raster.Raster;
 import de.intevation.gnv.raster.PolygonDatasetProducer;
+import de.intevation.gnv.raster.IsoAttributeGenerator;
 import de.intevation.gnv.raster.IsoPolygonSeriesProducer;
 import de.intevation.gnv.raster.Vectorizer;
 
@@ -284,9 +285,9 @@
         }
 
         // scan for regions with base palette
-        Palette base = paletteManager.getBase();
+        Palette basePalette = paletteManager.getBase();
 
-        int [] intRaster = raster.toIndexed(base);
+        int [] intRaster = raster.toIndexed(basePalette);
 
         // produce JFreeChart compatible polygons
 
@@ -303,20 +304,33 @@
         int numRegions = new Vectorizer(intRaster, rasterSize.width)
             .process(pdsp);
 
-        intRaster = null; // help gc
+        PolygonDataset pds = pdsp.getPolygonDataset();
 
-        PolygonDataset pds = pdsp.getPolygonDataset();
+        int numColors = pds.getSeriesCount();
 
         if (debug) {
             log.debug("number of regions: " + numRegions);
-            log.debug("number of series:  " + pds.getSeriesCount());
+            log.debug("number of colors:  " + numColors);
         }
 
         // generate iso lines
 
-        Palette isoPalette = paletteManager.getLevel(2);
+        int numIso;
 
-        intRaster = raster.toIndexed(isoPalette);
+             if (numColors <  5) { numIso = 5; }
+        else if (numColors < 10) { numIso = 2; }
+        else                     { numIso = 0; }
+
+        Palette isoPalette;
+
+        if (numIso == 0) { // same palette
+            isoPalette = basePalette;
+            /* intRaster = intRaster; */
+        }
+        else {
+            isoPalette = paletteManager.getLevel(numIso);
+            intRaster  = raster.toIndexed(isoPalette);
+        }
 
         IsoPolygonSeriesProducer ipsp = new IsoPolygonSeriesProducer(
             0, 0,
@@ -325,8 +339,9 @@
         numRegions = new Vectorizer(false, intRaster, rasterSize.width)
             .process(ipsp);
 
-        // TODO: Use label generator
-        Collection<PolygonSeries> ps = ipsp.getSeries(/* label generator */); 
+        IsoAttributeGenerator iag = new IsoAttributeGenerator(isoPalette);
+        Collection<PolygonSeries> ps = ipsp.getSeries(iag); 
+        ipsp.clear();
 
         if (debug) {
             log.debug("num of iso regions: " + numRegions);

http://dive4elements.wald.intevation.org