From 040859ac2afc000ec5a772a985e601791817f9cf Mon Sep 17 00:00:00 2001 From: Wesley Date: Tue, 31 Mar 2015 17:07:26 +0200 Subject: [PATCH] Fixed overlapping and locked rotating rektangle. Keep the rectangle its good enoguh. --- Applicatie/DrawObject.java | 87 +++++++++++++++----------------------- Listeners/Mouse.java | 12 +++--- Listeners/MouseMotion.java | 26 +++++++----- Listeners/MouseWheel.java | 5 ++- 4 files changed, 60 insertions(+), 70 deletions(-) diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index c0e236d..63f1b61 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -7,6 +7,7 @@ import java.awt.Image; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; +import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -54,7 +55,7 @@ public abstract class DrawObject // image.getHeight(null)/2); AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(rotation), position.getX() + image.getWidth(null) / 2, position.getY() + image.getHeight(null) / 2); - g.transform(rotate); + //g.transform(rotate); g.setColor(rectangleColor); g.setStroke(new BasicStroke(7)); rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null)); @@ -116,7 +117,8 @@ 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); @@ -124,59 +126,32 @@ public abstract class DrawObject } - /** - * 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; + public Point2D getObjectPoint(Point2D point) + { + try + { + return getTransform().inverseTransform(point, null); + + } + catch (NoninvertibleTransformException e) + { + e.printStackTrace(); + } + return null; } - + /** - * - * @param corners - * @return if there is a collision + * Checking collision. + * @param object. the drawObject to check collision with. + * @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])) + public boolean collision(DrawObject object) + { + Shape ownShape = getRectangle(); + Rectangle2D otherRectangle = object.getTransform().createTransformedShape(object.getImageRectangle()).getBounds2D(); + if(ownShape.intersects(otherRectangle)) 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 + else return false; } @@ -278,12 +253,18 @@ public abstract class DrawObject rektAngle = rectangle; } - public Color getRectangleColor() { + public Color getRectangleColor() + { return rectangleColor; } - public void setRectangleColor(Color rectangleColor) { + public void setRectangleColor(Color rectangleColor) + { this.rectangleColor = rectangleColor; } + + public Rectangle2D getImageRectangle() { + return new Rectangle2D.Double(0,0, image.getWidth(null), image.getHeight(null)); + } } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index f54c207..0ae68a6 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -8,6 +8,7 @@ import java.awt.image.BufferedImage; import Applicatie.DrawObject; import Applicatie.Panel; +import Objects.Stage; public class Mouse extends MouseAdapter { @@ -61,11 +62,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"); @@ -99,6 +100,7 @@ public class Mouse extends MouseAdapter panel.getPP().setSelected(o); panel.setSelectedObject(o); panel.setSelectionPosition(panel.getDragObject().getPosition()); + } } } diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 6273aa1..5355da5 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -28,15 +28,15 @@ public class MouseMotion extends MouseMotionAdapter 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.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(); - } else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY()) + } + else if (clickPoint.getX() > panel.getDragObject().getPosition().getX() && clickPoint.getY() > panel.getDragObject().getPosition().getY()) { resizeSmaller(clickPoint); } @@ -45,7 +45,8 @@ public class MouseMotion extends MouseMotionAdapter 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()) + } + else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() > panel.getDragObject().getRectangle().getY()) { resizeSmaller(clickPoint); } @@ -54,7 +55,8 @@ public class MouseMotion extends MouseMotionAdapter 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()) + } + else if (clickPoint.getX() > panel.getDragObject().getRectangle().getX() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { resizeSmaller(clickPoint); } @@ -63,7 +65,8 @@ public class MouseMotion extends MouseMotionAdapter 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()) + } + else if (clickPoint.getX() < panel.getDragObject().getRectangle().getX() + panel.getDragObject().getRectangle().getWidth() && clickPoint.getY() < panel.getDragObject().getRectangle().getY() + panel.getDragObject().getRectangle().getHeight()) { resizeSmaller(clickPoint); } @@ -73,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()))); } @@ -86,10 +90,10 @@ public class MouseMotion extends MouseMotionAdapter private void resizeBigger() { - double scale = panel.getDragObject().getScale() + 0.05; + double scale = panel.getDragObject().getScale()*1 + 0.02; panel.getDragObject().setScale(scale); - panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX(), panel.getDragObject().getPosition().getY() - 5)); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() -2, panel.getDragObject().getPosition().getY() - 2)); } @@ -98,9 +102,9 @@ public class MouseMotion extends MouseMotionAdapter System.out.println(clickPoint.getX()); if (panel.getDragObject().getScale() > 0.2) { - double scale = panel.getDragObject().getScale() - 0.05; + double scale = panel.getDragObject().getScale()*1 - 0.02; panel.getDragObject().setScale(scale); - panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() - clickPoint.getX(), panel.getDragObject().getPosition().getY() - clickPoint.getY())); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX() +2, panel.getDragObject().getPosition().getY() +2 )); } } diff --git a/Listeners/MouseWheel.java b/Listeners/MouseWheel.java index 85893a4..c841884 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -43,7 +43,10 @@ public class MouseWheel implements MouseWheelListener { // cameraPoint double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation() / 10); - panel.setCameraScale((float) cameraScale); + if (cameraScale >= 0.1 && cameraScale < 4) + { + panel.setCameraScale((float) cameraScale); + } }