123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package ui.view;
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.RenderingHints;
- import java.awt.geom.GeneralPath;
- import java.util.ArrayList;
- import javax.swing.JPanel;
- import classes.HolonElement;
- import classes.HolonObject;
- import ui.controller.Control;
- import ui.model.Model;
- public class StatisticGraph extends JPanel {
-
- private static final long serialVersionUID = 1L;
-
- final int MAX_OBJECTS = 8;
-
- double maximum = 0;
-
- private boolean isSimRunning;
-
- private ArrayList<Color> colors = new ArrayList<>();
-
- private Model model;
- private Control controller;
-
- private Graphics2D g2;
- GeneralPath path = new GeneralPath();
-
- private ArrayList<HolonObject> objects = new ArrayList<>();
- private ArrayList<GeneralPath> objPaths = new ArrayList<>();
-
- public StatisticGraph(final Model model, Control control) {
- this.controller = control;
- this.model = model;
- colors.add(Color.BLUE);
- colors.add(Color.RED);
- colors.add(Color.GREEN);
- colors.add(Color.CYAN);
- colors.add(Color.ORANGE);
- colors.add(Color.PINK);
- colors.add(Color.MAGENTA);
- colors.add(Color.YELLOW);
-
-
-
- this.setBackground(Color.WHITE);
- }
-
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
-
- g2 = (Graphics2D) g;
- RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- g2.setRenderingHints(rh);
-
- g2.setStroke(new BasicStroke(0));
- g2.setColor(Color.BLACK);
- for (int i = 0; i <= this.getWidth(); i += 10) {
- g2.drawLine(i, 0, i, this.getHeight());
- }
- for (int i = 0; i <= this.getHeight(); i += 5) {
- g2.drawLine(0, i, this.getWidth(), i);
- }
-
- if (!isSimRunning && model.getIsSimulation()) {
- for (int i = 0; i < objects.size(); i++) {
- objPaths.get(i).reset();
- objPaths.get(i).moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
- convertToCanvasY(Math.abs(objects.get(i).getCurrentEnergy())));
- }
- }
- isSimRunning = model.getIsSimulation();
-
- if (isSimRunning) {
- maximum = 0;
- for (HolonObject obj : objects) {
- if (maximum <= (Math.abs(obj.getCurrentEnergy()))) {
- maximum = (Math.abs(obj.getCurrentEnergy()));
- }
- }
- for (int i = 0; i < objects.size(); i++) {
- g2.setColor(new Color((int) (Math.random() * 255), (int) (Math.random() * 255),
- (int) (Math.random() * 255)));
- objPaths.get(i).lineTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
- convertToCanvasY(Math.abs(getEnergyAtCurrentTimeStep(objects.get(i)))));
- objPaths.get(i).moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1,
- convertToCanvasY(Math.abs(getEnergyAtCurrentTimeStep(objects.get(i)))));
- }
- }
- g2.setStroke(new BasicStroke(3));
- for (int i = 0; i < objPaths.size(); i++) {
- g2.setColor(colors.get(i));
- g2.draw(objPaths.get(i));
- }
- }
-
- public void addObject(HolonObject obj) {
- if (objects.size() < MAX_OBJECTS && !objects.contains(obj)) {
- objects.add((HolonObject) obj);
- objPaths.add(new GeneralPath());
- objPaths.get(objPaths.size() - 1)
- .moveTo(model.getCurIteration() * this.getWidth() / model.getIterations() - 1, convertToCanvasY(Math
- .abs(objects.get(objects.size() - 1).getCurrentEnergyAtTimeStep(model.getCurIteration()))));
- }
- }
-
- public void removeObject(HolonObject obj) {
- if (objects.contains(obj)) {
- objPaths.remove(objects.indexOf(obj));
- objects.remove(obj);
- }
- }
-
- public double convertToCanvasY(float d) {
- return Math.abs((this.getHeight() - (d * (this.getHeight() / maximum))));
- }
-
-
- public float getEnergyAtCurrentTimeStep(HolonObject obj) {
- float temp = 0;
- for (HolonElement e : obj.getElements()) {
- if (e.getActive()) {
- temp = temp + e.getEnergyAt()[model.getCurIteration()];
- }
- }
- return temp;
- }
- }
|