Mercurial > dive4elements > river
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); |