Bläddra i källkod

Merge branch 'master' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons

Edgardo Palza 7 år sedan
förälder
incheckning
708bf7ceb2

+ 10 - 4
src/classes/HolonBody.java

@@ -16,6 +16,10 @@ public class HolonBody implements Comparable<HolonBody> {
 	public void setId(int id) {
 		this.id = id;
 	}
+	
+	public int getId(){
+		return id;
+	}
 
 	public Color getColor() {
 		return color;
@@ -29,20 +33,22 @@ public class HolonBody implements Comparable<HolonBody> {
 		this.color = color;
 	}
 
-	
 	public void draw(Graphics2D g2) {
-		
+
 		g2.setColor(color);
 		g2.fillOval((int) (position.getX() - getRadius()), (int) (position.getY() - getRadius()),
 				(int) (2 * getRadius()), (int) (2 * getRadius()));
 		g2.setFont(new Font("TimesRoman", Font.PLAIN, (int) radius));
 		g2.setColor(Color.WHITE);
-		g2.drawString("" +id, position.getX()-radius/2+2, position.getY()+radius/2-2);
+		g2.drawString("" + id, position.getX() - radius / 2 + 2, position.getY() + radius / 2 - 2);
 
 	}
 
 	public void setRadius(float radius) {
-		this.radius = radius;
+		if (radius > 1)
+			this.radius = radius;
+		else
+			this.radius = 1;
 	}
 
 	public float getRadius() {

+ 1 - 1
src/classes/TrackedDataSet.java

@@ -5,7 +5,7 @@ import java.awt.Color;
 public class TrackedDataSet {
 
 	//Property Integers
-	public static  final int CONSUMPTION = 0;
+	public static final int CONSUMPTION = 0;
 	public static final int PRODUCTION = 1;
 	public static final int ACTIVATED_ELEMENTS = 2;
 	public static final int ON_OFF = 3;

+ 14 - 10
src/ui/view/HolonCanvas.java

@@ -6,6 +6,8 @@ import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.ScrollPane;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
 import java.util.ArrayList;
 
 import javax.swing.JPanel;
@@ -18,7 +20,7 @@ import classes.SubNet;
 import ui.controller.Control;
 import ui.model.Model;
 
-public class HolonCanvas extends JPanel {
+public class HolonCanvas extends JPanel implements MouseWheelListener {
 
 	/**
 	 * 
@@ -56,13 +58,14 @@ public class HolonCanvas extends JPanel {
 		currentTime = previousTime;
 		totalElapsedTime = 0;
 		frameCount = 0;
+		this.addMouseWheelListener(this);
 	}
 
 	// Start Render and Update Threads
 
 	public void paintComponent(Graphics g) {
 		super.paintComponent(g);
-		
+
 		// add new colors if necessary
 		for (int i = 0; i < controller.getSimManager().getSubNets().size(); i++) {
 			if (model.getSubNetColors().size() - 1 < i) {
@@ -108,7 +111,7 @@ public class HolonCanvas extends JPanel {
 
 	// updates the bodies according to the changes of subnets
 	private void addNewBodies(int subCount) {
-		
+
 		ArrayList<HolonBody> newBodies = new ArrayList<>();
 		for (int i = 0; i < subCount; i++) {
 			for (int j = 0; j < bodies.size(); j++) {
@@ -116,7 +119,7 @@ public class HolonCanvas extends JPanel {
 					bodies.get(j).setRadius(subnets.get(i).getObjects().size() * 5 + 10);
 					bodies.get(j).setMass(subnets.get(i).getObjects().size() * 5 + 10);
 					newBodies.add(bodies.get(j));
-					newBodies.get(newBodies.size()-1).setId(newBodies.size()-1);
+					newBodies.get(i).setId(i);
 					break;
 				}
 			}
@@ -145,12 +148,7 @@ public class HolonCanvas extends JPanel {
 	}
 
 	public void render(Graphics g) {
-		// System.out.printf("Width: %d Height: %d\n", getWidth(), getHeight());
-
-		// Create BufferStrategy for rendering/drawing
 		this.g2 = (Graphics2D) g;
-
-		// Turn on anti-aliasing
 		this.g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
 		// Render Background
@@ -159,7 +157,8 @@ public class HolonCanvas extends JPanel {
 
 		// Render Game Objects
 		for (int i = 0; i < subCount; i++) {
-			bodies.get(i).setRadius((subnets.get(i).getObjects().size() * 5 + 10)*controller.getHolonBodyScale()/100);
+			bodies.get(i).setRadius((subnets.get(bodies.get(i).getId()).getObjects().size() * 5 + 10)
+					* controller.getHolonBodyScale() / 100);
 			bodies.get(i).draw(this.g2);
 		}
 	}
@@ -230,4 +229,9 @@ public class HolonCanvas extends JPanel {
 		center.width /= 2;
 	}
 
+	@Override
+	public void mouseWheelMoved(MouseWheelEvent e) {
+		controller.setHolonBodyScale(model.getHolonBodyScale() + (-e.getScrollAmount() * e.getWheelRotation()));
+	}
+
 }

+ 80 - 40
src/ui/view/StatisticGraph.java

@@ -109,6 +109,9 @@ public class StatisticGraph extends JPanel {
 				case TrackedDataSet.ACTIVATED_ELEMENTS:
 				case TrackedDataSet.TOTAL_PRODUCTION:
 				case TrackedDataSet.TOTAL_CONSUMPTION:
+				case TrackedDataSet.AMOUNT_SUBNETS:
+				case TrackedDataSet.GROUP_CONSUMPTION:
+				case TrackedDataSet.GROUP_PRODUCTION:
 					createPathFloats(set);
 					break;
 				case TrackedDataSet.ON_OFF:
@@ -124,7 +127,6 @@ public class StatisticGraph extends JPanel {
 				}
 				g2.setColor(set.getColor());
 				g2.draw(path);
-
 			}
 		}
 
@@ -199,7 +201,6 @@ public class StatisticGraph extends JPanel {
 						val += h.getEnergy() * h.getAmount();
 					}
 				}
-
 				break;
 			case TrackedDataSet.ACTIVATED_ELEMENTS:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
@@ -221,7 +222,23 @@ public class StatisticGraph extends JPanel {
 			case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
 				val = 1;
 				break;
+			case TrackedDataSet.GROUP_PRODUCTION:
+				val = getMaxTotalProduction(((CpsUpperNode) set.getCpsObject()).getNodes());
+				break;
+			case TrackedDataSet.GROUP_CONSUMPTION:
+				val = getMaxTotalConsumption(((CpsUpperNode) set.getCpsObject()).getNodes());
+				val *= -1;
+				break;
+			case TrackedDataSet.AMOUNT_SUBNETS:
+				val = controller.getSimManager().getSubNets().size();
+				for (int i = 0; i < model.getCurIteration(); i++) {
+					if (val < set.getValues()[i]) {
+						val = set.getValues()[i];
+					}
+				}
+				break;
 			default:
+				maximum = 0;
 				break;
 			}
 			if (val > maximum) {
@@ -236,7 +253,7 @@ public class StatisticGraph extends JPanel {
 	 */
 	private void addValues() {
 		for (TrackedDataSet set : objects) {
-			int val = 0;
+			float val = 0;
 			switch (set.getProperty()) {
 			case TrackedDataSet.CONSUMPTION:
 				for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
@@ -279,20 +296,37 @@ public class StatisticGraph extends JPanel {
 				}
 				break;
 			case TrackedDataSet.TOTAL_PRODUCTION:
-				set.setValAt(getTotalProductionAt(model.getObjectsOnCanvas(), model.getCurIteration()), model.getCurIteration());
+				set.setValAt(getTotalProductionAt(model.getObjectsOnCanvas(), model.getCurIteration()),
+						model.getCurIteration());
 				break;
 			case TrackedDataSet.TOTAL_CONSUMPTION:
-				set.setValAt(-getTotalConsumptionAt(model.getObjectsOnCanvas(), model.getCurIteration()), model.getCurIteration());
+				set.setValAt(-getTotalConsumptionAt(model.getObjectsOnCanvas(), model.getCurIteration()),
+						model.getCurIteration());
 				break;
 			case TrackedDataSet.PERCENT_SUPPLIED:
-				set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.SUPPLIED), model.getCurIteration());
+				set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.SUPPLIED),
+						model.getCurIteration());
 				break;
 			case TrackedDataSet.PERCENT_NOT_SUPPLIED:
-				set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.NOT_SUPPLIED), model.getCurIteration());
+				set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.NOT_SUPPLIED),
+						model.getCurIteration());
 				break;
 			case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
-				set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.PARTIALLY_SUPPLIED), model.getCurIteration());
+				set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.PARTIALLY_SUPPLIED),
+						model.getCurIteration());
+				break;
+			case TrackedDataSet.GROUP_PRODUCTION:
+				set.setValAt(getTotalProductionAt(((CpsUpperNode) set.getCpsObject()).getNodes(), model.getCurIteration()),
+						model.getCurIteration());
 				break;
+			case TrackedDataSet.GROUP_CONSUMPTION:
+				set.setValAt(-getTotalConsumptionAt(((CpsUpperNode) set.getCpsObject()).getNodes(), model.getCurIteration()),
+						model.getCurIteration());
+				break;
+			case TrackedDataSet.AMOUNT_SUBNETS:
+				set.setValAt(controller.getSimManager().getSubNets().size(), model.getCurIteration());
+				break;
+
 			default:
 				break;
 			}
@@ -347,7 +381,7 @@ public class StatisticGraph extends JPanel {
 			}
 		}
 	}
-	
+
 	/**
 	 * create Path for percent values
 	 * 
@@ -358,13 +392,14 @@ public class StatisticGraph extends JPanel {
 		path.moveTo(0, 0);
 		for (int i = 0; i < model.getCurIteration(); i++) {
 			if (init && set.getValues()[i] != -1) {
-				path.moveTo(i * this.getWidth() / model.getIterations() - 1, convertToCanvasY(set.getValues()[i]*maximum));
+				path.moveTo(i * this.getWidth() / model.getIterations() - 1,
+						convertToCanvasY(set.getValues()[i] * maximum));
 				init = false;
 			}
 			if (!init) {
 				if (set.getValues()[i + 1] != -1) {
 					path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
-							convertToCanvasY(set.getValues()[i + 1]*maximum));
+							convertToCanvasY(set.getValues()[i + 1] * maximum));
 				} else {
 					break;
 				}
@@ -372,18 +407,19 @@ public class StatisticGraph extends JPanel {
 
 		}
 	}
-	
+
 	/**
 	 * get the max total production of the given Objects
 	 *
-	 *  @param objects List of Objects
+	 * @param objects
+	 *            List of Objects
 	 */
 	private float getMaxTotalProduction(ArrayList<AbstractCpsObject> objects) {
 		float val = 0;
-		
-		for (AbstractCpsObject obj: objects) {
+
+		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
-				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
 					if (ele.getEnergy() > 0) {
 						val += ele.getEnergy() * ele.getAmount();
 					}
@@ -394,18 +430,19 @@ public class StatisticGraph extends JPanel {
 		}
 		return val;
 	}
-	
+
 	/**
 	 * get the max total consumption of the given Objects
 	 *
-	 *  @param objects List of Objects
+	 * @param objects
+	 *            List of Objects
 	 */
 	private float getMaxTotalConsumption(ArrayList<AbstractCpsObject> objects) {
 		float val = 0;
-		
-		for (AbstractCpsObject obj: objects) {
+
+		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
-				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
 					if (ele.getEnergy() < 0) {
 						val += ele.getEnergy() * ele.getAmount();
 					}
@@ -416,19 +453,20 @@ public class StatisticGraph extends JPanel {
 		}
 		return val;
 	}
-	
+
 	/**
 	 * get the max total production of the given Objects
 	 *
-	 *  @param objects List of Objects
-	 *  @param tStep
+	 * @param objects
+	 *            List of Objects
+	 * @param tStep
 	 */
 	private float getTotalProductionAt(ArrayList<AbstractCpsObject> objects, int tStep) {
 		float val = 0;
-		
-		for (AbstractCpsObject obj: objects) {
+
+		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
-				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
 					if (ele.getEnergyAt()[tStep] > 0 && ele.getActive()) {
 						val += ele.getEnergyAt()[tStep] * ele.getAmount();
 					}
@@ -439,19 +477,20 @@ public class StatisticGraph extends JPanel {
 		}
 		return val;
 	}
-	
+
 	/**
 	 * get the total consumption of the given Objects at the given timestep
 	 *
-	 *  @param objects List of Objects
-	 *  @param tStep
+	 * @param objects
+	 *            List of Objects
+	 * @param tStep
 	 */
 	private float getTotalConsumptionAt(ArrayList<AbstractCpsObject> objects, int tStep) {
 		float val = 0;
-		
-		for (AbstractCpsObject obj: objects) {
+
+		for (AbstractCpsObject obj : objects) {
 			if (obj instanceof HolonObject) {
-				for (HolonElement ele: ((HolonObject) obj).getElements()) {
+				for (HolonElement ele : ((HolonObject) obj).getElements()) {
 					if (ele.getEnergyAt()[tStep] < 0 && ele.getActive()) {
 						val += ele.getEnergyAt()[tStep] * ele.getAmount();
 					}
@@ -462,18 +501,19 @@ public class StatisticGraph extends JPanel {
 		}
 		return val;
 	}
-	
+
 	/**
-	 * get the Percentage of how many objects with the given state are in the given List
+	 * get the Percentage of how many objects with the given state are in the
+	 * given List
 	 *
-	 *  @param objects List of Objects
+	 * @param objects
+	 *            List of Objects
 	 */
 	private float getPercentState(ArrayList<AbstractCpsObject> objects, int state) {
 		float count = controller.getNumberHolonObjects(objects);
-		float stateObjectss= controller.getNumberStateObjects(objects, state);
-		
-		
-		return stateObjectss/count;
+		float stateObjectss = controller.getNumberStateObjects(objects, state);
+
+		return stateObjectss / count;
 	}
 
 }

+ 6 - 0
src/ui/view/StatisticGraphPanel.java

@@ -157,9 +157,11 @@ public class StatisticGraphPanel extends JPanel {
 		String property = "";
 		switch (set.getProperty()) {
 		case TrackedDataSet.CONSUMPTION:
+		case TrackedDataSet.GROUP_CONSUMPTION:
 			property = "consumption";
 			break;
 		case TrackedDataSet.PRODUCTION:
+		case TrackedDataSet.GROUP_PRODUCTION:
 			property = "production";
 			break;
 		case TrackedDataSet.ACTIVATED_ELEMENTS:
@@ -183,7 +185,11 @@ public class StatisticGraphPanel extends JPanel {
 		case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
 			property = "Percentage of partial supplied";
 			break;
+		case TrackedDataSet.AMOUNT_SUBNETS:
+			property = "Amount of Subnets";
+			break;
 		default:
+			property = "null";
 			break;
 		}
 		JLabel b;