From 10951fe225a5a52c7bd62bd62b44ddd0eb95c15a Mon Sep 17 00:00:00 2001 From: xrgman Date: Wed, 18 Mar 2015 12:51:30 +0100 Subject: [PATCH] fixed overlapping objects banaan --- Applicatie/DrawObject.java | 41 ++++++++++++++++++++++++++++---------- Applicatie/Panel.java | 33 ++++++++++++++++++++++++++++++ Listeners/Keyboard.java | 40 +++++++++++++++++++++++++++++++++---- Listeners/Mouse.java | 37 +++++++++++++++++++++++----------- Listeners/MouseMotion.java | 15 +------------- 5 files changed, 125 insertions(+), 41 deletions(-) diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 85fe582..c0e236d 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -148,17 +148,36 @@ public abstract class DrawObject return points; } - public boolean collision(Point2D[] corners) { - Point2D[] ownCorners = getCorners(); - for(int i = 0; i < corners.length; i++) { - Point2D corner = corners[i]; - if(corner.getX() > ownCorners[0].getX() && corner.getX() < ownCorners[1].getX()) { - if(corner.getY() > ownCorners[0].getY() && corner.getY() < ownCorners[2].getY()) { - return true; - } - } - } - return false; + /** + * + * @param corners + * @return if there is a collision + */ + public boolean collision(DrawObject object) { + //Point2D[] ownCorners = getCorners(); + Point2D[] objectCorners = object.getCorners(); + Shape ownShape = new Rectangle2D.Double(-9, -9, image.getWidth(null) + 13, image.getHeight(null) + 13); + ownShape = getTransformSelection().createTransformedShape(ownShape); + //Shape otherShape = new Rectangle2D.Double(-9, -9,object.getImage().getWidth(null) + 13,object.getImage().getHeight(null) + 13); + //otherShape = getTransformSelection().createTransformedShape(otherShape); + if(ownShape.contains(objectCorners[0])) + return true; + else if(ownShape.contains(objectCorners[1])) + return true; + else if(ownShape.contains(objectCorners[2])) + return true; + else if(ownShape.contains(objectCorners[3])) + return true; +// if(otherShape.contains(ownCorners[0])) +// return true; +// else if(otherShape.contains(ownCorners[1])) +// return true; +// else if(otherShape.contains(ownCorners[2])) +// return true; +// else if(otherShape.contains(ownCorners[3])) +// return true; + else + return false; } /** diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index d7d0940..db758a8 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -1,6 +1,7 @@ package Applicatie; import java.awt.BasicStroke; +import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; @@ -53,6 +54,7 @@ public class Panel extends JPanel Point2D lastClickPosition = new Point(0, 0); Point lastMousePosition = new Point(0, 0); + Point2D selectionPosition = new Point(0,0); // how to nieuwe dingen aan het panel toe te voegen: // maak bufferedimage global aan, voeg er een image aan toe, en voeg de @@ -60,6 +62,14 @@ public class Panel extends JPanel // en maak een case statement die een new Object returnt in // createNewDrawObject. + public Point2D getSelectionPosition() { + return selectionPosition; + } + + public void setSelectionPosition(Point2D selectionPosition) { + this.selectionPosition = selectionPosition; + } + Panel(PropertiesPanel pp) { this.pp = pp; @@ -339,4 +349,27 @@ public class Panel extends JPanel repaint(); } } + + public void clearObjectSelection() { + for(DrawObject o : objects) { + o.setSelected(false); + } + } + + public void checkCollision() { + boolean collision = false; + for(DrawObject o : getObjects()) { + if(getSelectedObject().collision(o) && o != getSelectedObject()) { + collision = true; + getSelectedObject().setRectangleColor(Color.RED); + break; + } + if(!collision) + getSelectedObject().setRectangleColor(Color.BLACK); + } + } + + + + } diff --git a/Listeners/Keyboard.java b/Listeners/Keyboard.java index 0643b9b..d9a3c33 100644 --- a/Listeners/Keyboard.java +++ b/Listeners/Keyboard.java @@ -1,7 +1,9 @@ package Listeners; +import java.awt.Color; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; +import java.awt.geom.Point2D; import Applicatie.Panel; @@ -16,20 +18,50 @@ public class Keyboard implements KeyListener { @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode() == e.VK_DELETE ) { - if(panel.getSelectedObject() != null) { + if(panel.getSelectedObject() != null) panel.removeObject(panel.getSelectedObject()); - } } + else if(e.getKeyCode() == e.VK_LEFT) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()-5,panel.getSelectedObject().getPosition().getY())); + panel.checkCollision(); + } + else if(e.getKeyCode() == e.VK_RIGHT) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX()+5,panel.getSelectedObject().getPosition().getY())); + panel.checkCollision(); + } + else if(e.getKeyCode() == e.VK_UP) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()-5)); + panel.checkCollision(); + } + else if(e.getKeyCode() == e.VK_DOWN) { + if(panel.getSelectedObject() != null) + panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()+5)); + panel.checkCollision(); + } + panel.repaint(); } @Override public void keyReleased(KeyEvent e) { - + //if(e.getKeyCode() == e.VK_LEFT) { + checkCollision(); + //} } @Override public void keyTyped(KeyEvent e) { - } + private void checkCollision() { + if(panel.getSelectedObject() != null) { + if(panel.getSelectedObject().getRectangleColor() != Color.BLACK) { + panel.getSelectedObject().setPosition(panel.getSelectionPosition()); + panel.getSelectedObject().setRectangleColor(Color.BLACK); + } + panel.repaint(); + } + } } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index 46c5b3d..f54c207 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -1,17 +1,14 @@ package Listeners; +import java.awt.Color; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; -import java.util.Iterator; -import java.util.Map; import Applicatie.DrawObject; import Applicatie.Panel; -import Objects.Stage; - public class Mouse extends MouseAdapter { @@ -39,7 +36,13 @@ public class Mouse extends MouseAdapter { DrawObject tempDrawObj = panel.createNewDrawObject(i); tempDrawObj.setPosition(clickPoint); + if(!panel.getObjects().isEmpty()) + panel.clearObjectSelection(); panel.setDragObject(tempDrawObj); + panel.getDragObject().setSelected(true); + panel.getPP().setSelected(tempDrawObj); + panel.setSelectedObject(tempDrawObj); + selectedObject = tempDrawObj; break; } i++; @@ -58,11 +61,11 @@ public class Mouse extends MouseAdapter { if (o == selectedObject) { - boolean upperLeft = o.containsCorner(clickPoint, 0); - boolean upperRight = o.containsCorner(clickPoint, 1); - boolean bottomLeft = o.containsCorner(clickPoint, 2); - boolean bottomRight = o.containsCorner(clickPoint, 3); - boolean rotate = o.containsCorner(clickPoint, 4); + boolean upperLeft = o.containsCorner(clickPoint,0); + boolean upperRight = o.containsCorner(clickPoint,1); + boolean bottomLeft = o.containsCorner(clickPoint,2); + boolean bottomRight = o.containsCorner(clickPoint,3); + boolean rotate = o.containsCorner(clickPoint,4); if (upperLeft) { panel.setClickedOption("upperLeft"); @@ -95,13 +98,14 @@ public class Mouse extends MouseAdapter panel.setDragObject(o); panel.getPP().setSelected(o); panel.setSelectedObject(o); - + panel.setSelectionPosition(panel.getDragObject().getPosition()); } } } if (panel.getDragObject() == null && selectedObject != null) { selectedObject.setSelected(false); + panel.setSelectedObject(null); panel.getPP().clearSelected(); selectedObject = null; } @@ -110,8 +114,17 @@ public class Mouse extends MouseAdapter public void mouseReleased(MouseEvent e) { - panel.setDragObject(null); - panel.setClickedOption("drag"); + if(panel.getDragObject() != null) { + if(panel.getDragObject().getRectangleColor() != Color.RED) { + panel.setDragObject(null); + panel.setClickedOption("drag"); + } + else { + panel.getDragObject().setPosition(panel.getSelectionPosition()); + panel.getDragObject().setRectangleColor(Color.BLACK); + } + panel.setSelectionPosition(panel.getSelectedObject().getPosition()); + } panel.repaint(); } } diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 32b78ef..6273aa1 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -1,7 +1,6 @@ package Listeners; import java.awt.Color; -import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.geom.Point2D; @@ -22,7 +21,6 @@ public class MouseMotion extends MouseMotionAdapter public void mouseDragged(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); - Point2D tempPoint = null; if (panel.getDragObject() != null) { switch (panel.getClickedOption()) @@ -32,18 +30,7 @@ public class MouseMotion extends MouseMotionAdapter if (panel.getDragObject() != null) panel.getDragObject().setPosition(new Point2D.Double((panel.getDragObject().getPosition().getX()) - ((panel.getLastClickPosition().getX() - clickPoint.getX())) / panel.getDragObject().getScale(), (panel.getDragObject().getPosition().getY()) - (panel.getLastClickPosition().getY() - clickPoint.getY()) / panel.getDragObject().getScale())); - for(DrawObject o : panel.getObjects()) { - if(o.collision(panel.getDragObject().getCorners()) && o != panel.getDragObject()) { - System.out.println("Hover"); - collision = true; - panel.getDragObject().setRectangleColor(Color.RED); - break; - } - if(!collision) { - System.out.println("nega"); - panel.getDragObject().setRectangleColor(Color.BLACK); - } - } + panel.checkCollision(); break; case "upperLeft": if (clickPoint.getX() < panel.getDragObject().getPosition().getX() && clickPoint.getY() < panel.getDragObject().getPosition().getY())