|
@@ -134,7 +134,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
con.getB().getPosition().y + controller.getScaleDiv2());
|
|
|
}
|
|
|
}
|
|
|
- } else if(edgeHighlight != null){
|
|
|
+ } else if (edgeHighlight != null) {
|
|
|
g2.setColor(Color.GREEN);
|
|
|
g2.drawLine(edgeHighlight.getA().getPosition().x + controller.getScaleDiv2(),
|
|
|
edgeHighlight.getA().getPosition().y + controller.getScaleDiv2(),
|
|
@@ -206,8 +206,8 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
for (CpsEdge p : model.getEdgesOnCanvas()) {
|
|
|
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) {
|
|
|
+ // distance from a point to a line
|
|
|
+ if (l.ptLineDist(x - model.getScaleDiv2(), y - model.getScaleDiv2()) < 10) {
|
|
|
edgeHighlight = p;
|
|
|
}
|
|
|
}
|
|
@@ -326,6 +326,8 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
private void drawDeleteEdge() {
|
|
|
boolean node = true;
|
|
|
boolean newEdge = true;
|
|
|
+ boolean addEdge = false;
|
|
|
+ boolean onEdge = true;
|
|
|
CpsEdge e = null;
|
|
|
|
|
|
for (CpsObject cps : model.getObjectsOnCanvas()) {
|
|
@@ -334,6 +336,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy
|
|
|
&& cps != tempCps) {
|
|
|
node = false;
|
|
|
+ onEdge = false;
|
|
|
for (CpsEdge p : tempCps.getConnections()) {
|
|
|
if ((p.getA() == tempCps && p.getB() == cps) || (p.getB() == tempCps && p.getA() == cps)) {
|
|
|
newEdge = false;
|
|
@@ -351,6 +354,52 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if (onEdge) {
|
|
|
+ CpsEdge temp = null;
|
|
|
+ CpsEdge e1 = null;
|
|
|
+ CpsEdge e2 = null;
|
|
|
+ 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);
|
|
|
+ // distance from a point to a line
|
|
|
+ if (l.ptLineDist(x - model.getScaleDiv2(), y - model.getScaleDiv2()) < 10) {
|
|
|
+ node = false;
|
|
|
+ addEdge = true;
|
|
|
+
|
|
|
+ CpsNode n = new CpsNode("Node");
|
|
|
+ n.setPosition(x - model.getScaleDiv2(), y - model.getScaleDiv2());
|
|
|
+ controller.addObjectCanvas(n);
|
|
|
+
|
|
|
+ CpsObject r, k;
|
|
|
+ r = p.getA();
|
|
|
+ k = p.getB();
|
|
|
+
|
|
|
+ e = new CpsEdge(n, tempCps);
|
|
|
+ n.AddConnection(e);
|
|
|
+ tempCps.AddConnection(e);
|
|
|
+
|
|
|
+ e1 = new CpsEdge(n, r);
|
|
|
+ n.AddConnection(e1);
|
|
|
+ r.AddConnection(e1);
|
|
|
+
|
|
|
+ e2 = new CpsEdge(n, k);
|
|
|
+ n.AddConnection(e2);
|
|
|
+ k.AddConnection(e2);
|
|
|
+
|
|
|
+ p.getA().getConnections().remove(p);
|
|
|
+ p.getB().getConnections().remove(p);
|
|
|
+
|
|
|
+ temp = p;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (addEdge) {
|
|
|
+ controller.removeEdgesOnCanvas(temp);
|
|
|
+ controller.AddEdgeOnCanvas(e);
|
|
|
+ controller.AddEdgeOnCanvas(e1);
|
|
|
+ controller.AddEdgeOnCanvas(e2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (node) {
|
|
|
CpsNode n = new CpsNode("Node");
|
|
|
n.setPosition(x - model.getScaleDiv2(), y - model.getScaleDiv2());
|