Marklar
Zalozeni Projektu
- Prerequisities
- Prvni kroky
- Experiment
- Grafika
- Logika Experimentu
Struktura
- marklar-core
- marklar-fx-common
- marklar-driver-modbus
- marklar-pardWeight
- plastometer
- dilatometer
- lbm
- dokuwiki
Graf je zpravidla vykreslovan ve vice castech (hlavni graf ve specialni zalozce, graf v GenericCell
, graf vytvoreny pro export do protokolu). Proto doporucuji vytvorit specialni tridu pro vytvareni grafu.
Osvedcilo se mi definovat promennou NUM_GRAPH_SERIES
, ktera udava, kolik serii graf obsahuje (jednoducha kontrola, zda je treba serie vytvorit, nebo zda vytvoreny uz jsou)
Jsou zde 3 promenne, ktere se predavaji v constructoru. pane
je AnchorPane
, do ktere se graf vklada (druhy constructor tento parametr nema - vytvoreny graf slouzi pro export). Dale doporucuji predat si instanceSS
(nastaveni minima, nastaveni serii v zavislosti na tom, jake kanaly byly pri mereni pouzity). Parametr isTiny
rozlisuje, zda je graf zobrazen velky (napr. graf v tabu, nebo protokolu) nebo maly (graf v GenerciCell
).
Zbytku aplikace jsou vysvicene pouze metody repaint(dataService)
, insertDataRow(dataRow)
a getChart()
public class DokuwikiGraph { private final static int NUM_GRAPH_SERIES = 2; private AnchorPane pane; private LineChart<Number, Number> chart; private boolean isTiny; DokuwikiExpInstanceSettignsService instanceSS; public DokuwikiGraph(AnchorPane pane, DokuwikiExpInstanceSettignsService instanceSS, boolean isTiny) { this.pane = pane; this.instanceSS = instanceSS; this.isTiny = isTiny; createGraph(); } public void repaint(DokuwikiDataService dataService) { clearGraphSeries(); checkGraphSeries(); List<DokuwikiDataRow> dataRows = dataService.getDataRows(); if (dataRows == null || dataRows.isEmpty()) { return; } for (DokuwikiDataRow dr : dataRows) { insertDataRow(dr); } } public void insertDataRow(DokuwikiDataRow dr) { checkGraphSeries(); chart.getData().get(0).getData().add(new Data<Number, Number>(dr.getTime(), dr.getValue1())); chart.getData().get(1).getData().add(new Data<Number, Number>(dr.getTime(), dr.getValue2())); } private void createGraph() { NumberAxis xAxis = new NumberAxis(); xAxis.setLowerBound(0); if (isTiny) { xAxis.setTickUnit(1); } else { xAxis.setTickUnit(5); } chart = new LineChart<Number, Number>(xAxis, new NumberAxis()); chart.setAnimated(false); chart.getStylesheets().add(getClass().getResource("chart-style.css").toExternalForm()); if (this.pane != null) { AnchorPaneHelper.insertNodeToContent(chart, pane); } } private void checkGraphSeries() { if (chart.getData().size() == NUM_GRAPH_SERIES) return; clearGraphSeries(); XYChart.Series<Number, Number> series1 = new XYChart.Series<Number, Number>(); chart.getData().add(series1); XYChart.Series<Number, Number> series2 = new XYChart.Series<Number, Number>(); chart.getData().add(series2); } private void clearGraphSeries() { chart.getData().clear(); } public LineChart<Number, Number> getChart() { return chart; } }