comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/charts/CrossSectionApp.java @ 1881:0e9c0b49b4ef

CrossSectionApp: draw ground with StableXYDifferenceRenderer flys-artifacts/trunk@3240 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 12 Nov 2011 12:05:37 +0000
parents 94871b7ce9e9
children eb671699fbc2
comparison
equal deleted inserted replaced
1880:ebd16028efa3 1881:0e9c0b49b4ef
7 import de.intevation.flys.model.CrossSection; 7 import de.intevation.flys.model.CrossSection;
8 import de.intevation.flys.model.CrossSectionLine; 8 import de.intevation.flys.model.CrossSectionLine;
9 import de.intevation.flys.model.CrossSectionPoint; 9 import de.intevation.flys.model.CrossSectionPoint;
10 10
11 import de.intevation.flys.utils.Pair; 11 import de.intevation.flys.utils.Pair;
12
13 import de.intevation.flys.jfree.StableXYDifferenceRenderer;
12 14
13 import java.awt.BorderLayout; 15 import java.awt.BorderLayout;
14 import java.awt.Dimension; 16 import java.awt.Dimension;
15 import java.awt.FlowLayout; 17 import java.awt.FlowLayout;
16 18
58 import org.jfree.chart.axis.NumberAxis; 60 import org.jfree.chart.axis.NumberAxis;
59 61
60 import org.jfree.chart.plot.PlotOrientation; 62 import org.jfree.chart.plot.PlotOrientation;
61 import org.jfree.chart.plot.XYPlot; 63 import org.jfree.chart.plot.XYPlot;
62 64
65 import org.jfree.data.xy.DefaultXYDataset;
63 import org.jfree.data.xy.XYSeries; 66 import org.jfree.data.xy.XYSeries;
64 import org.jfree.data.xy.XYDataset; 67 import org.jfree.data.xy.XYDataset;
65 import org.jfree.data.xy.XYSeriesCollection; 68 import org.jfree.data.xy.XYSeriesCollection;
66 import org.jfree.chart.renderer.xy.XYItemRenderer; 69 import org.jfree.chart.renderer.xy.XYItemRenderer;
67 70
400 out.close(); 403 out.close();
401 } 404 }
402 } 405 }
403 } 406 }
404 407
405 public XYDataset generateWaterLevels( 408 public void generateWaterLevels(
406 List<Point2D> points 409 List<Point2D> points,
410 List<Pair<XYDataset, XYItemRenderer>> datasets
407 ) { 411 ) {
408 if (points == null || points.isEmpty() || lastWaterLevel == null) { 412 if (points == null || points.isEmpty() || lastWaterLevel == null) {
409 return null; 413 return;
410 } 414 }
411 415
412 double [][] data = Lines.createWaterLines(points, lastWaterLevel); 416 double [][] data = Lines.createWaterLines(points, lastWaterLevel);
413 XYSeries series = 417 XYSeries series =
414 new XYSeries(String.valueOf(lastWaterLevel), false); 418 new XYSeries(String.valueOf(lastWaterLevel), false);
417 double [] y = data[1]; 421 double [] y = data[1];
418 for (int i = 0; i < x.length; ++i) { 422 for (int i = 0; i < x.length; ++i) {
419 series.add(x[i], y[i], false); 423 series.add(x[i], y[i], false);
420 } 424 }
421 425
422 return new XYSeriesCollection(series); 426 datasets.add(new Pair<XYDataset, XYItemRenderer>(
423 } 427 new XYSeriesCollection(series), null));
424 428 }
425 public XYDataset generateProfile( 429
426 List<Point2D> points, 430 public void generateProfile(
427 String legend 431 List<Point2D> points,
432 String legend,
433 List<Pair<XYDataset, XYItemRenderer>> datasets
428 ) { 434 ) {
429 if (points == null || points.isEmpty()) { 435 if (points == null || points.isEmpty()) {
430 return null; 436 return;
431 } 437 }
432 438
433 double [][] values = CrossSectionLine.fetchCrossSectionProfile(points); 439 double [][] values = CrossSectionLine.fetchCrossSectionProfile(points);
434 440
435 XYSeries series = new XYSeries(legend, false); 441 XYSeries series = new XYSeries(legend, false);
438 double [] y = values[1]; 444 double [] y = values[1];
439 for (int i = 0; i < x.length; ++i) { 445 for (int i = 0; i < x.length; ++i) {
440 series.add(x[i], y[i], false); 446 series.add(x[i], y[i], false);
441 } 447 }
442 448
443 return new XYSeriesCollection(series); 449 datasets.add(new Pair<XYDataset, XYItemRenderer>(
450 new XYSeriesCollection(series), null));;
451 }
452
453 public void generateGround(
454 List<Point2D> points,
455 String legend,
456 List<Pair<XYDataset, XYItemRenderer>> datasets
457 ) {
458 if (points == null || points.isEmpty()) {
459 return;
460 }
461
462 double [][] values = CrossSectionLine.fetchCrossSectionProfile(points);
463
464 DefaultXYDataset dataset = new DefaultXYDataset();
465 dataset.addSeries(legend, values);
466
467 StableXYDifferenceRenderer renderer =
468 new StableXYDifferenceRenderer();
469
470 datasets.add(new Pair<XYDataset, XYItemRenderer>(
471 dataset, renderer));
444 } 472 }
445 473
446 public List<Pair<XYDataset, XYItemRenderer>> generateDatasets() { 474 public List<Pair<XYDataset, XYItemRenderer>> generateDatasets() {
447 List<Pair<XYDataset, XYItemRenderer>> pairs =
448 new ArrayList<Pair<XYDataset, XYItemRenderer>>();
449
450 return pairs;
451 }
452
453 public List<Pair<XYDataset, XYItemRenderer>> generateDataset() {
454 475
455 List<Pair<XYDataset, XYItemRenderer>> datasets = 476 List<Pair<XYDataset, XYItemRenderer>> datasets =
456 new ArrayList<Pair<XYDataset, XYItemRenderer>>(); 477 new ArrayList<Pair<XYDataset, XYItemRenderer>>();
457 478
458 CrossSectionLineItem csli = 479 CrossSectionLineItem csli =
459 (CrossSectionLineItem)crossSectionLinesCB.getSelectedItem(); 480 (CrossSectionLineItem)crossSectionLinesCB.getSelectedItem();
460 481
461 for (int i = 0; i < drawCrossSection.length; ++i) { 482 for (int i = 0; i < drawCrossSection.length; ++i) {
462 List<Point2D> points = null; 483 List<Point2D> points = null;
484 CrossSection cs = crossSections.get(i);
463 485
464 if (drawCrossSection[i]) { 486 if (drawCrossSection[i]) {
465 CrossSection cs = crossSections.get(i);
466 for (Pair<CrossSection, CrossSectionLine> csl: csli.lines) { 487 for (Pair<CrossSection, CrossSectionLine> csl: csli.lines) {
467 if (csl.getA() == cs) { 488 if (csl.getA() == cs) {
468 points = csl.getB().fetchCrossSectionLinesPoints(); 489 points = csl.getB().fetchCrossSectionLinesPoints();
469 490
470 XYDataset dataset = generateProfile( 491 generateProfile(
471 points, cs.getDescription()); 492 points, cs.getDescription(), datasets);
472 if (dataset != null) {
473 datasets.add(new Pair<XYDataset, XYItemRenderer>(
474 dataset, null));
475 }
476 break; 493 break;
477 } 494 }
478 } 495 }
479 } 496 }
480 497
481 if (drawWaterLevel[i]) { 498 if (drawWaterLevel[i]) {
482 CrossSection cs = crossSections.get(i);
483 for (Pair<CrossSection, CrossSectionLine> csl: csli.lines) { 499 for (Pair<CrossSection, CrossSectionLine> csl: csli.lines) {
484 if (csl.getA() == cs) { 500 if (csl.getA() == cs) {
485 if (points != null) { 501 if (points != null) {
486 points = csl.getB().fetchCrossSectionLinesPoints(); 502 points = csl.getB().fetchCrossSectionLinesPoints();
487 } 503 }
488 XYDataset dataset = generateWaterLevels(points); 504 generateWaterLevels(points, datasets);
489 if (dataset != null) {
490 datasets.add(new Pair<XYDataset, XYItemRenderer>(
491 dataset, null));
492 }
493 break; 505 break;
494 } 506 }
495 } 507 }
496 } 508 }
497 509
510 if (drawGround[i]) {
511 for (Pair<CrossSection, CrossSectionLine> csl: csli.lines) {
512 if (csl.getA() == cs) {
513 if (points != null) {
514 points = csl.getB().fetchCrossSectionLinesPoints();
515 }
516 generateGround(
517 points,
518 cs.getDescription() + "/Boden",
519 datasets);
520 break;
521 }
522 }
523 }
498 } 524 }
499 525
500 return datasets; 526 return datasets;
501 } 527 }
502 528
525 true, 551 true,
526 true, 552 true,
527 false); 553 false);
528 554
529 List<Pair<XYDataset, XYItemRenderer>> datasets = 555 List<Pair<XYDataset, XYItemRenderer>> datasets =
530 generateDataset(); 556 generateDatasets();
531 557
532 XYPlot plot = chart.getXYPlot(); 558 XYPlot plot = chart.getXYPlot();
533 559
534 for (int i = 0, N = datasets.size(); i < N; ++i) { 560 for (int i = 0, N = datasets.size(); i < N; ++i) {
535 Pair<XYDataset, XYItemRenderer> p = datasets.get(i); 561 Pair<XYDataset, XYItemRenderer> p = datasets.get(i);

http://dive4elements.wald.intevation.org