|
@@ -51,6 +51,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
private boolean click = false; // for double click
|
|
|
public CpsObject tempCps = null;
|
|
|
private Rectangle selectRect = new Rectangle();
|
|
|
+ private CpsEdge edgeHighlight = null;
|
|
|
|
|
|
// PopUpMenu
|
|
|
private JPopupMenu popmenu = new JPopupMenu();
|
|
@@ -104,7 +105,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
if (drawEdge)
|
|
|
g2.drawLine(tempCps.getPosition().x + controller.getScaleDiv2(),
|
|
|
tempCps.getPosition().y + controller.getScaleDiv2(), x, y);
|
|
|
-
|
|
|
+
|
|
|
for (CpsEdge con : model.getEdgesOnCanvas()) {
|
|
|
if (con.getA().getID() != model.getSelectedObjectID() && con.getB().getID() != model.getSelectedObjectID())
|
|
|
g2.drawLine(con.getA().getPosition().x + controller.getScaleDiv2(),
|
|
@@ -117,20 +118,28 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
}
|
|
|
|
|
|
// Highlighted Edge
|
|
|
- g2.setColor(Color.GREEN);
|
|
|
- for (CpsObject cps : model.getObjectsOnCanvas()) {
|
|
|
- for (CpsEdge con : cps.getConnectedTo()) {
|
|
|
- if (con.getA().getID() == model.getSelectedObjectID()) {
|
|
|
- g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
|
|
|
- cps.getPosition().y + controller.getScaleDiv2(),
|
|
|
- con.getA().getPosition().x + controller.getScaleDiv2(),
|
|
|
- con.getA().getPosition().y + controller.getScaleDiv2());
|
|
|
- } else if (con.getB().getID() == model.getSelectedObjectID())
|
|
|
- g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
|
|
|
- cps.getPosition().y + controller.getScaleDiv2(),
|
|
|
- con.getB().getPosition().x + controller.getScaleDiv2(),
|
|
|
- con.getB().getPosition().y + controller.getScaleDiv2());
|
|
|
+ if (model.getSelectedObjectID() > 0) {
|
|
|
+ g2.setColor(Color.GREEN);
|
|
|
+ for (CpsObject cps : model.getObjectsOnCanvas()) {
|
|
|
+ for (CpsEdge con : cps.getConnectedTo()) {
|
|
|
+ if (con.getA().getID() == model.getSelectedObjectID()) {
|
|
|
+ g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
|
|
|
+ cps.getPosition().y + controller.getScaleDiv2(),
|
|
|
+ con.getA().getPosition().x + controller.getScaleDiv2(),
|
|
|
+ con.getA().getPosition().y + controller.getScaleDiv2());
|
|
|
+ } else if (con.getB().getID() == model.getSelectedObjectID())
|
|
|
+ g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
|
|
|
+ cps.getPosition().y + controller.getScaleDiv2(),
|
|
|
+ con.getB().getPosition().x + controller.getScaleDiv2(),
|
|
|
+ con.getB().getPosition().y + controller.getScaleDiv2());
|
|
|
+ }
|
|
|
}
|
|
|
+ } else if(edgeHighlight != null){
|
|
|
+ g2.setColor(Color.GREEN);
|
|
|
+ g2.drawLine(edgeHighlight.getA().getPosition().x + controller.getScaleDiv2(),
|
|
|
+ edgeHighlight.getA().getPosition().y + controller.getScaleDiv2(),
|
|
|
+ edgeHighlight.getB().getPosition().x + controller.getScaleDiv2(),
|
|
|
+ edgeHighlight.getB().getPosition().y + controller.getScaleDiv2());
|
|
|
}
|
|
|
|
|
|
// Objects
|
|
@@ -173,6 +182,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
tempCps = null;
|
|
|
dataSelected = null;
|
|
|
+ edgeHighlight = null;
|
|
|
// Object Selection
|
|
|
for (CpsObject cps : model.getObjectsOnCanvas()) {
|
|
|
cx = cps.getPosition().x;
|
|
@@ -190,12 +200,15 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (tempCps == null){
|
|
|
+ // Edge Selection
|
|
|
+ if (tempCps == null) {
|
|
|
+ Line2D l;
|
|
|
for (CpsEdge p : model.getEdgesOnCanvas()) {
|
|
|
- Line2D l = new Line2D(p.getA().getPosition().x, p.getA().getPosition().y, p.getB().getPosition().x, p.getB().getPosition().y);
|
|
|
- //line.intersects(boxX, boxY, width, height
|
|
|
- if(l.intersects(x, y, 102, 102)){
|
|
|
- System.out.println("lineclick");
|
|
|
+ l = new Line2D(p.getA().getPosition().x, p.getA().getPosition().y, p.getB().getPosition().x,
|
|
|
+ p.getB().getPosition().y);
|
|
|
+ // Returns the distance from a point to a line.
|
|
|
+ if (l.ptLineDist(x-model.getScaleDiv2(), y-model.getScaleDiv2()) < 15) {
|
|
|
+ edgeHighlight = p;
|
|
|
}
|
|
|
}
|
|
|
}
|