diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 924c036..0a20063 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -31,6 +31,7 @@ public abstract class DrawObject static final int UPPERRIGHT = 1; static final int BOTTOMLEFT = 2; static final int BOTTOMRIGHT = 3; + private Color rectangleColor; public DrawObject(String filename, Point2D position) { @@ -39,6 +40,7 @@ public abstract class DrawObject scale = 1; rotation = 0; this.position = position; + rectangleColor = Color.BLACK; } public abstract String getName(); @@ -54,7 +56,7 @@ public abstract class DrawObject AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(rotation), position.getX() + image.getWidth(null) / 2, position.getY() + image.getHeight(null) / 2); g.transform(rotate); - g.setColor(Color.BLACK); + g.setColor(rectangleColor); g.setStroke(new BasicStroke(7)); rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null)); tx = getTransformRectangle(); @@ -115,10 +117,10 @@ public abstract class DrawObject shape = new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null)); return getTransform().createTransformedShape(shape).contains(clickPoint); - } else + } + else { shape = new Rectangle2D.Double(-9, -9, image.getWidth(null) + 13, image.getHeight(null) + 13); - return getTransformSelection().createTransformedShape(shape).contains(clickPoint); } @@ -130,13 +132,72 @@ public abstract class DrawObject { return getTransform().inverseTransform(point, null); - } catch (NoninvertibleTransformException e) + } + catch (NoninvertibleTransformException e) { e.printStackTrace(); } return null; } + /** + * Method that gets all the corner coordinates index: 0 -> top left 1 -> top + * right 3 -> bottom left 4 -> bottom right + * + * @return corner coordinates + */ + public Point2D[] getCorners() + { + Rectangle2D tempRekt = new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null)); + tempRekt.setFrame(getTransform().createTransformedShape(tempRekt).getBounds()); + Point2D[] points = new Point2D[4]; + Point2D point = new Point2D.Double(tempRekt.getX(), tempRekt.getY()); + points[0] = point; + point = new Point2D.Double(tempRekt.getX() + tempRekt.getHeight(), tempRekt.getY()); + points[1] = point; + point = new Point2D.Double(tempRekt.getX(), tempRekt.getY() + tempRekt.getHeight()); + points[2] = point; + point = new Point2D.Double(tempRekt.getX() + tempRekt.getHeight(), tempRekt.getY() + tempRekt.getHeight()); + points[3] = point; + return points; + } + + /** + * + * @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; + } + /** * This method checks if the place thats clicked is inside one of the * corners. @@ -235,4 +296,14 @@ public abstract class DrawObject rektAngle = rectangle; } + public Color getRectangleColor() + { + return rectangleColor; + } + + public void setRectangleColor(Color rectangleColor) + { + this.rectangleColor = rectangleColor; + } + } 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 9c58ec5..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,21 +18,50 @@ public class Keyboard implements KeyListener { @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode() == e.VK_DELETE ) { - if(panel.getSelectedObject() != null) { - System.out.println("lala"); + 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 51e9752..0ae68a6 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -1,15 +1,13 @@ 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 @@ -31,10 +29,6 @@ public class Mouse extends MouseAdapter panel.setLastMousePosition(e.getPoint()); if (e.getY() < 150) { - // if(e.getX() < 51) //51 = width podium image - // panel.setDragObject(new Podium(clickPoint)); - // else - // panel.setDragObject(new Toilet(clickPoint)); int i = 0; int last = 0; for (BufferedImage image : panel.getPanelInfo()) @@ -43,12 +37,17 @@ 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++; last += image.getWidth(); - } if (panel.getDragObject() != null) { @@ -99,8 +98,8 @@ public class Mouse extends MouseAdapter selectedObject = o; panel.setDragObject(o); panel.getPP().setSelected(o); - panel.setSelectedObject(o); + panel.setSelectionPosition(panel.getDragObject().getPosition()); } } @@ -108,6 +107,7 @@ public class Mouse extends MouseAdapter if (panel.getDragObject() == null && selectedObject != null) { selectedObject.setSelected(false); + panel.setSelectedObject(null); panel.getPP().clearSelected(); selectedObject = null; } @@ -116,8 +116,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 5172399..a5922c3 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -1,9 +1,11 @@ package Listeners; +import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.geom.Point2D; +import Applicatie.DrawObject; import Applicatie.Panel; public class MouseMotion extends MouseMotionAdapter @@ -24,15 +26,17 @@ public class MouseMotion extends MouseMotionAdapter switch (panel.getClickedOption()) { case "drag": + boolean collision = false; 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())); - + panel.checkCollision(); break; case "upperLeft": if (clickPoint.getX() < panel.getDragObject().getPosition().getX() && clickPoint.getY() < panel.getDragObject().getPosition().getY()) { - resizeBigger(clickPoint); - } else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY()) + resizeBigger(); + } + else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY()) { resizeSmaller(clickPoint); } @@ -40,8 +44,9 @@ public class MouseMotion extends MouseMotionAdapter case "upperRight": if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY()) { - resizeBigger(clickPoint); - } else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY()) + resizeBigger(); + } + else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY()) { resizeSmaller(clickPoint); } @@ -49,8 +54,9 @@ public class MouseMotion extends MouseMotionAdapter case "bottomLeft": if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { - resizeBigger(clickPoint); - } else if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) + resizeBigger(); + } + else if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { resizeSmaller(clickPoint); } @@ -58,8 +64,9 @@ public class MouseMotion extends MouseMotionAdapter case "bottomRight": if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { - resizeBigger(clickPoint); - } else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) + resizeBigger(); + } + else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { resizeSmaller(clickPoint); } @@ -69,7 +76,8 @@ public class MouseMotion extends MouseMotionAdapter panel.getDragObject().setRotation(tempval); break; } - } else + } + else { panel.setCameraPoint(new Point2D.Double(panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()))); } @@ -80,12 +88,12 @@ public class MouseMotion extends MouseMotionAdapter panel.getPP().update(); } - private void resizeBigger(Point2D clickPoint) + private void resizeBigger() { double scale = panel.getDragObject().getScale() + 0.05; panel.getDragObject().setScale(scale); - panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() + clickPoint.getX() / 100, panel.getDragObject().getPosition().getY() + clickPoint.getY() / 100)); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX(), panel.getDragObject().getPosition().getY() - 5)); } @@ -96,7 +104,7 @@ public class MouseMotion extends MouseMotionAdapter { double scale = panel.getDragObject().getScale() - 0.05; panel.getDragObject().setScale(scale); - panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() - clickPoint.getX() / 100, panel.getDragObject().getPosition().getY() - clickPoint.getY()/ 100)); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() - clickPoint.getX(), panel.getDragObject().getPosition().getY() - clickPoint.getY())); } } diff --git a/Listeners/MouseWheel.java b/Listeners/MouseWheel.java index ce32797..c841884 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -47,9 +47,6 @@ public class MouseWheel implements MouseWheelListener { panel.setCameraScale((float) cameraScale); } - - - System.out.println(cameraScale); }