浏览代码

Connect to an Edge

Kevin Trometer 8 年之前
父节点
当前提交
36f1458b6b
共有 1 个文件被更改,包括 52 次插入3 次删除
  1. 52 3
      src/ui/view/MyCanvas.java

+ 52 - 3
src/ui/view/MyCanvas.java

@@ -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());