|
@@ -9,6 +9,7 @@ import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseListener;
|
|
import java.awt.event.MouseListener;
|
|
|
|
+import java.awt.event.MouseMotionListener;
|
|
import java.awt.event.MouseWheelEvent;
|
|
import java.awt.event.MouseWheelEvent;
|
|
import java.awt.event.MouseWheelListener;
|
|
import java.awt.event.MouseWheelListener;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
@@ -17,15 +18,21 @@ import javax.swing.JCheckBox;
|
|
import javax.swing.JComboBox;
|
|
import javax.swing.JComboBox;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPanel;
|
|
|
|
+import javax.swing.event.ChangeEvent;
|
|
|
|
+import javax.swing.event.ChangeListener;
|
|
|
|
|
|
|
|
+import classes.AbstractCpsObject;
|
|
import classes.Constants;
|
|
import classes.Constants;
|
|
|
|
+import classes.CpsUpperNode;
|
|
import classes.HolonBody;
|
|
import classes.HolonBody;
|
|
|
|
+import classes.HolonElement;
|
|
|
|
+import classes.HolonObject;
|
|
import classes.SubNet;
|
|
import classes.SubNet;
|
|
import classes.Vector2d;
|
|
import classes.Vector2d;
|
|
import ui.controller.Control;
|
|
import ui.controller.Control;
|
|
import ui.model.Model;
|
|
import ui.model.Model;
|
|
|
|
|
|
-public class HolonCanvas extends JPanel implements MouseWheelListener, MouseListener {
|
|
|
|
|
|
+public class HolonCanvas extends JPanel implements MouseWheelListener, MouseListener, MouseMotionListener {
|
|
|
|
|
|
/**
|
|
/**
|
|
*
|
|
*
|
|
@@ -63,6 +70,7 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
private ArrayList<HolonBody> sortedSize = new ArrayList<>();
|
|
private ArrayList<HolonBody> sortedSize = new ArrayList<>();
|
|
private ArrayList<HolonBody> sortedDist = new ArrayList<>();
|
|
private ArrayList<HolonBody> sortedDist = new ArrayList<>();
|
|
private boolean sizeChange = false;
|
|
private boolean sizeChange = false;
|
|
|
|
+ private HolonBody toDrag;
|
|
|
|
|
|
public HolonCanvas(Model mod, Control control) {
|
|
public HolonCanvas(Model mod, Control control) {
|
|
// Wire up Events
|
|
// Wire up Events
|
|
@@ -82,6 +90,8 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
combo.addItem("Nr. of Objects");
|
|
combo.addItem("Nr. of Objects");
|
|
combo.addItem("Nr. of Edges");
|
|
combo.addItem("Nr. of Edges");
|
|
combo.addItem("Nr. of Switches");
|
|
combo.addItem("Nr. of Switches");
|
|
|
|
+ combo.addItem("Total Production");
|
|
|
|
+ combo.addItem("Total Consumption");
|
|
|
|
|
|
combo.addActionListener(new ActionListener() {
|
|
combo.addActionListener(new ActionListener() {
|
|
@Override
|
|
@Override
|
|
@@ -90,7 +100,15 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
}
|
|
}
|
|
});
|
|
});
|
|
this.addMouseListener(this);
|
|
this.addMouseListener(this);
|
|
|
|
+ this.addMouseMotionListener(this);
|
|
|
|
|
|
|
|
+ chckbxSort.addChangeListener(new ChangeListener() {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void stateChanged(ChangeEvent e) {
|
|
|
|
+ sizeChange = true;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
add(chckbxSort);
|
|
add(chckbxSort);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -227,8 +245,14 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
case 3:
|
|
case 3:
|
|
info = "" + subnets.get(bodyNr).getSwitches().size();
|
|
info = "" + subnets.get(bodyNr).getSwitches().size();
|
|
break;
|
|
break;
|
|
|
|
+ case 4:
|
|
|
|
+ info = "" + getTotalProduction(new ArrayList<AbstractCpsObject>(subnets.get(bodyNr).getObjects()));
|
|
|
|
+ break;
|
|
|
|
+ case 5:
|
|
|
|
+ info = "" + getTotalConsumption(new ArrayList<AbstractCpsObject>(subnets.get(bodyNr).getObjects()));
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
- info = "" + bodies.get(i).getId();
|
|
|
|
|
|
+ info = "" + bodyNr;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
bodies.get(i).setRadius((subnets.get(bodies.get(i).getId()).getObjects().size() * 5 + 10)
|
|
bodies.get(i).setRadius((subnets.get(bodies.get(i).getId()).getObjects().size() * 5 + 10)
|
|
@@ -237,6 +261,40 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private float getTotalConsumption(ArrayList<AbstractCpsObject> objects) {
|
|
|
|
+ float val = 0;
|
|
|
|
+ int tStep = model.getCurIteration();
|
|
|
|
+ for (AbstractCpsObject obj : objects) {
|
|
|
|
+ if (obj instanceof HolonObject) {
|
|
|
|
+ for (HolonElement ele : ((HolonObject) obj).getElements()) {
|
|
|
|
+ if (ele.getEnergyAt()[tStep] < 0 && ele.getActive()) {
|
|
|
|
+ val += ele.getEnergyAt()[tStep] * ele.getAmount();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (obj instanceof CpsUpperNode) {
|
|
|
|
+ val += getTotalConsumption(((CpsUpperNode) obj).getNodes());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return val;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private float getTotalProduction(ArrayList<AbstractCpsObject> objects) {
|
|
|
|
+ float val = 0;
|
|
|
|
+ int tStep = model.getCurIteration();
|
|
|
|
+ for (AbstractCpsObject obj : objects) {
|
|
|
|
+ if (obj instanceof HolonObject) {
|
|
|
|
+ for (HolonElement ele : ((HolonObject) obj).getElements()) {
|
|
|
|
+ if (ele.getEnergyAt()[tStep] > 0 && ele.getActive()) {
|
|
|
|
+ val += ele.getEnergyAt()[tStep] * ele.getAmount();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (obj instanceof CpsUpperNode) {
|
|
|
|
+ val += getTotalProduction(((CpsUpperNode) obj).getNodes());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return val;
|
|
|
|
+ }
|
|
|
|
+
|
|
public void updateBodies(float elapsedSeconds) {
|
|
public void updateBodies(float elapsedSeconds) {
|
|
|
|
|
|
// step the position of movable objects based off their velocity/gravity
|
|
// step the position of movable objects based off their velocity/gravity
|
|
@@ -363,9 +421,11 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
float cr = bodies.get(i).getRadius();
|
|
float cr = bodies.get(i).getRadius();
|
|
if (e.getX() - cr <= cx && e.getY() - cr <= cy && e.getX() + cr >= cx && e.getY() + cr >= cy) {
|
|
if (e.getX() - cr <= cx && e.getY() - cr <= cy && e.getX() + cr >= cx && e.getY() + cr >= cy) {
|
|
controller.addSelectedHolonBody(bodies.get(i).getId());
|
|
controller.addSelectedHolonBody(bodies.get(i).getId());
|
|
|
|
+ toDrag = bodies.get(i);
|
|
break;
|
|
break;
|
|
} else {
|
|
} else {
|
|
controller.addSelectedHolonBody(-1);
|
|
controller.addSelectedHolonBody(-1);
|
|
|
|
+ toDrag = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -374,4 +434,18 @@ public class HolonCanvas extends JPanel implements MouseWheelListener, MouseList
|
|
public void mouseReleased(MouseEvent e) {
|
|
public void mouseReleased(MouseEvent e) {
|
|
// TODO Auto-generated method stub
|
|
// TODO Auto-generated method stub
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void mouseDragged(MouseEvent e) {
|
|
|
|
+ if(toDrag!=null){
|
|
|
|
+ toDrag.position = new Vector2d(e.getX(), e.getY());
|
|
|
|
+ }
|
|
|
|
+ repaint();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void mouseMoved(MouseEvent e) {
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|