|
@@ -4,11 +4,16 @@ import java.awt.BasicStroke;
|
|
|
import java.awt.Color;
|
|
|
import java.awt.Graphics;
|
|
|
import java.awt.Graphics2D;
|
|
|
+import java.awt.Image;
|
|
|
import java.awt.RenderingHints;
|
|
|
+import java.awt.event.ActionEvent;
|
|
|
+import java.awt.event.ActionListener;
|
|
|
import java.awt.geom.GeneralPath;
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
+import javax.swing.ImageIcon;
|
|
|
import javax.swing.JPanel;
|
|
|
+import javax.swing.Timer;
|
|
|
|
|
|
import classes.HolonElement;
|
|
|
import classes.HolonObject;
|
|
@@ -53,7 +58,23 @@ public class StatisticGraph extends JPanel {
|
|
|
this.controller = control;
|
|
|
this.model = model;
|
|
|
|
|
|
+ // addObject(new TrackedDataSet(model.getObjectsOnCanvas().get(0),
|
|
|
+ // TrackedDataSet.CONSUMPTION, Color.RED));
|
|
|
+ // addObject(new TrackedDataSet(model.getObjectsOnCanvas().get(0),
|
|
|
+ // TrackedDataSet.PRODUCTION, Color.GREEN));
|
|
|
+ // addObject(new TrackedDataSet(model.getObjectsOnCanvas().get(0),
|
|
|
+ // TrackedDataSet.ACTIVATED_ELEMENTS, Color.CYAN));
|
|
|
+ addObject(new TrackedDataSet(model.getObjectsOnCanvas().get(0), TrackedDataSet.ON_OFF, Color.BLUE));
|
|
|
+
|
|
|
this.setBackground(Color.WHITE);
|
|
|
+
|
|
|
+ Timer timer = new Timer(200, new ActionListener() {
|
|
|
+ @Override
|
|
|
+ public void actionPerformed(ActionEvent ae) {
|
|
|
+ repaint();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ timer.start();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -81,39 +102,39 @@ public class StatisticGraph extends JPanel {
|
|
|
g2.drawLine(0, i, this.getWidth(), i);
|
|
|
}
|
|
|
|
|
|
- if (model != null) {
|
|
|
- isSimRunning = model.getIsSimulation();
|
|
|
-
|
|
|
- // if sim is on
|
|
|
- if (isSimRunning) {
|
|
|
- g2.setStroke(new BasicStroke(3));
|
|
|
-
|
|
|
- // Calculate the Maximum
|
|
|
- calcMaximum();
|
|
|
-
|
|
|
- // Calculate values for each set and add them
|
|
|
- addValues();
|
|
|
-
|
|
|
- // Create Paths and draw them
|
|
|
- for (TrackedDataSet set : objects) {
|
|
|
- path.reset();
|
|
|
- switch (set.getProperty()) {
|
|
|
- case TrackedDataSet.CONSUMPTION:
|
|
|
- case TrackedDataSet.PRODUCTION:
|
|
|
- case TrackedDataSet.ACTIVATED_ELEMENTS:
|
|
|
- createPathFloats(set);
|
|
|
- break;
|
|
|
- case TrackedDataSet.ON_OFF:
|
|
|
- createPathBooleans(set);
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- g2.setColor(set.getColor());
|
|
|
- g2.draw(path);
|
|
|
+ isSimRunning = model.getIsSimulation();
|
|
|
+
|
|
|
+ // if sim is on
|
|
|
+ if (isSimRunning) {
|
|
|
+ g2.setStroke(new BasicStroke(3));
|
|
|
+
|
|
|
+ // Calculate the Maximum
|
|
|
+ calcMaximum();
|
|
|
+
|
|
|
+ // Calculate values for each set and add them
|
|
|
+ addValues();
|
|
|
+
|
|
|
+ // Create Paths and draw them
|
|
|
+ for (TrackedDataSet set : objects) {
|
|
|
+ path.reset();
|
|
|
+ switch (set.getProperty()) {
|
|
|
+ case TrackedDataSet.CONSUMPTION:
|
|
|
+ case TrackedDataSet.PRODUCTION:
|
|
|
+ case TrackedDataSet.ACTIVATED_ELEMENTS:
|
|
|
+ createPathFloats(set);
|
|
|
+ break;
|
|
|
+ case TrackedDataSet.ON_OFF:
|
|
|
+ createPathBooleans(set);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
+ g2.setColor(set.getColor());
|
|
|
+ g2.draw(path);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -191,11 +212,12 @@ public class StatisticGraph extends JPanel {
|
|
|
break;
|
|
|
case TrackedDataSet.ACTIVATED_ELEMENTS:
|
|
|
for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
|
|
|
- if (h.getEnergy() < 0) {
|
|
|
- val += h.getAmount();
|
|
|
- }
|
|
|
+ val += h.getAmount();
|
|
|
}
|
|
|
break;
|
|
|
+ case TrackedDataSet.ON_OFF:
|
|
|
+ val = 1;
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -210,34 +232,46 @@ public class StatisticGraph extends JPanel {
|
|
|
*/
|
|
|
private void addValues() {
|
|
|
for (TrackedDataSet set : objects) {
|
|
|
+ int val = 0;
|
|
|
switch (set.getProperty()) {
|
|
|
case TrackedDataSet.CONSUMPTION:
|
|
|
for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
|
|
|
if (h.getEnergy() < 0) {
|
|
|
- set.setValAt(-h.getEnergyAt()[model.getCurIteration()], model.getCurIteration());
|
|
|
+ val += Math.abs(h.getEnergyAt()[model.getCurIteration()]);
|
|
|
}
|
|
|
+ set.setValAt(val, model.getCurIteration());
|
|
|
}
|
|
|
break;
|
|
|
case TrackedDataSet.PRODUCTION:
|
|
|
for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
|
|
|
if (h.getEnergy() > 0) {
|
|
|
- set.setValAt(h.getEnergyAt()[model.getCurIteration()], model.getCurIteration());
|
|
|
+ val += Math.abs(h.getEnergyAt()[model.getCurIteration()]);
|
|
|
}
|
|
|
+ set.setValAt(val, model.getCurIteration());
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case TrackedDataSet.ACTIVATED_ELEMENTS:
|
|
|
for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
|
|
|
- if (h.getEnergy() < 0) {
|
|
|
-
|
|
|
+ if (h.getActive()) {
|
|
|
+ val += h.getAmount();
|
|
|
}
|
|
|
+ set.setValAt(val, model.getCurIteration());
|
|
|
}
|
|
|
break;
|
|
|
case TrackedDataSet.ON_OFF:
|
|
|
- if (((HolonSwitch) set.getCpsObject()).getState()) {
|
|
|
- set.setValAt(1, model.getCurIteration());
|
|
|
+ if (((HolonSwitch) set.getCpsObject()).getManualMode()) {
|
|
|
+ if (((HolonSwitch) set.getCpsObject()).getActiveManual()) {
|
|
|
+ set.setValAt(1, model.getCurIteration());
|
|
|
+ } else {
|
|
|
+ set.setValAt(0, model.getCurIteration());
|
|
|
+ }
|
|
|
} else {
|
|
|
- set.setValAt(0, model.getCurIteration());
|
|
|
+ if (((HolonSwitch) set.getCpsObject()).getActiveAt()[model.getCurIteration()]) {
|
|
|
+ set.setValAt(1, model.getCurIteration());
|
|
|
+ } else {
|
|
|
+ set.setValAt(0, model.getCurIteration());
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
@@ -253,13 +287,22 @@ public class StatisticGraph extends JPanel {
|
|
|
*/
|
|
|
private void createPathFloats(TrackedDataSet set) {
|
|
|
boolean init = true;
|
|
|
- for (int i = 0; i < set.getValues().length - 1; i++) {
|
|
|
- if (init && set.getValues()[i] != -1) {
|
|
|
- path.moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
|
|
|
- convertToCanvasY(Math.abs(set.getValues()[i])));
|
|
|
+ path.moveTo(0, 0);
|
|
|
+ for (int i = 0; i < model.getCurIteration() - 1; i++) {
|
|
|
+ controller.addTextToConsole(path.getCurrentPoint().getX() + ", " + path.getCurrentPoint().getY());
|
|
|
+ if (init /* && set.getValues()[i] != -1 */) {
|
|
|
+ path.moveTo(i * this.getWidth() / model.getIterations() - 1, convertToCanvasY(set.getValues()[i]));
|
|
|
+ init = false;
|
|
|
+ }
|
|
|
+ if (!init) {
|
|
|
+ if (set.getValues()[i + 1] != -1) {
|
|
|
+ path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
|
|
|
+ convertToCanvasY(set.getValues()[i + 1]));
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- path.lineTo(model.getCurIteration() * this.getWidth() / model.getIterations(),
|
|
|
- convertToCanvasY(Math.abs(set.getValues()[i + 1])));
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -270,13 +313,20 @@ public class StatisticGraph extends JPanel {
|
|
|
*/
|
|
|
private void createPathBooleans(TrackedDataSet set) {
|
|
|
boolean init = true;
|
|
|
- for (int i = 0; i < set.getValues().length - 1; i++) {
|
|
|
+ for (int i = 0; i < model.getCurIteration() - 1; i++) {
|
|
|
if (init && set.getValues()[i] != -1) {
|
|
|
- path.moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
|
|
|
+ path.moveTo(i * this.getWidth() / model.getIterations() - 1,
|
|
|
convertToCanvasY((float) (set.getValues()[i] * maximum)));
|
|
|
+ init = false;
|
|
|
+ }
|
|
|
+ if (!init) {
|
|
|
+ if (set.getValues()[i + 1] != -1) {
|
|
|
+ path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
|
|
|
+ convertToCanvasY((float) (set.getValues()[i + 1] * maximum)));
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- path.lineTo(model.getCurIteration() * this.getWidth() / model.getIterations(),
|
|
|
- convertToCanvasY((float) (set.getValues()[i + 1] * maximum)));
|
|
|
}
|
|
|
}
|
|
|
|