瀏覽代碼

Edge Highlighting

Kevin Trometer 8 年之前
父節點
當前提交
3e6672dc80
共有 1 個文件被更改,包括 32 次插入19 次删除
  1. 32 19
      src/ui/view/MyCanvas.java

+ 32 - 19
src/ui/view/MyCanvas.java

@@ -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;
 				}
 			}
 		}