Added red rectangle when over another object
fancy pansy
This commit is contained in:
+132
-68
@@ -1,4 +1,5 @@
|
||||
package Applicatie;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
@@ -6,14 +7,13 @@ 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;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
|
||||
|
||||
public class DrawObject {
|
||||
public abstract class DrawObject
|
||||
{
|
||||
Point2D position;
|
||||
double rotation;
|
||||
double scale;
|
||||
@@ -30,6 +30,7 @@ public 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)
|
||||
{
|
||||
@@ -38,49 +39,55 @@ public class DrawObject {
|
||||
scale = 1;
|
||||
rotation = 0;
|
||||
this.position = position;
|
||||
rectangleColor = Color.BLACK;
|
||||
}
|
||||
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public void draw(Graphics2D g)
|
||||
{
|
||||
AffineTransform tx = getTransform();
|
||||
g.drawImage(image, tx, null);
|
||||
if(selected) {
|
||||
// g.rotate(Math.toRadians(rotation), image.getWidth(null)/2, image.getHeight(null)/2);
|
||||
|
||||
AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(rotation), position.getX() + image.getWidth(null)/2, position.getY() +image.getHeight(null)/2);
|
||||
if (selected)
|
||||
{
|
||||
// g.rotate(Math.toRadians(rotation), image.getWidth(null)/2,
|
||||
// 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.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();
|
||||
rektAngle.setFrame(tx.createTransformedShape(rektAngle).getBounds());
|
||||
g.draw(rektAngle);
|
||||
g.setColor(Color.YELLOW);
|
||||
upperLeftCorner = new Rectangle2D.Double(rektAngle.getX()-7,rektAngle.getY()-7,15,15);
|
||||
upperRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth()-8,rektAngle.getY()-7,15,15);
|
||||
bottomLeftCorner = new Rectangle2D.Double(rektAngle.getX()-7,rektAngle.getY() + rektAngle.getHeight()-8,15,15);
|
||||
bottomRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth()-8,rektAngle.getY() + rektAngle.getHeight()-8,15,15);
|
||||
g.fill(upperLeftCorner); //upperleft
|
||||
g.fill(upperRightCorner); //upperright
|
||||
g.fill(bottomLeftCorner); //bottomleft
|
||||
g.fill(bottomRightCorner); //bottomright
|
||||
upperLeftCorner = new Rectangle2D.Double(rektAngle.getX() - 7, rektAngle.getY() - 7, 15, 15);
|
||||
upperRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth() - 8, rektAngle.getY() - 7, 15, 15);
|
||||
bottomLeftCorner = new Rectangle2D.Double(rektAngle.getX() - 7, rektAngle.getY() + rektAngle.getHeight() - 8, 15, 15);
|
||||
bottomRightCorner = new Rectangle2D.Double(rektAngle.getX() + rektAngle.getWidth() - 8, rektAngle.getY() + rektAngle.getHeight() - 8, 15, 15);
|
||||
g.fill(upperLeftCorner); // upperleft
|
||||
g.fill(upperRightCorner); // upperright
|
||||
g.fill(bottomLeftCorner); // bottomleft
|
||||
g.fill(bottomRightCorner); // bottomright
|
||||
g.setColor(Color.RED);
|
||||
rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth()/2))-8,rektAngle.getY()-8,15,15);
|
||||
rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth() / 2)) - 8, rektAngle.getY() - 8, 15, 15);
|
||||
g.fill(rotateDot);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected AffineTransform getTransform() {
|
||||
protected AffineTransform getTransform()
|
||||
{
|
||||
AffineTransform tx = new AffineTransform();
|
||||
tx.scale(scale, scale);
|
||||
tx.translate(position.getX(), position.getY());
|
||||
tx.rotate(Math.toRadians(rotation), image.getWidth(null) / 2, image.getHeight(null) / 2);
|
||||
return tx;
|
||||
}
|
||||
|
||||
protected AffineTransform getTransformSelection() {
|
||||
|
||||
protected AffineTransform getTransformSelection()
|
||||
{
|
||||
AffineTransform tx = new AffineTransform();
|
||||
tx.scale(scale, scale);
|
||||
tx.translate(position.getX(), position.getY());
|
||||
@@ -88,47 +95,85 @@ public class DrawObject {
|
||||
}
|
||||
|
||||
/**
|
||||
* Special transformation for the selection rectangle, because the translation of the image one places the rectangle translated from the image.
|
||||
* Special transformation for the selection rectangle, because the
|
||||
* translation of the image one places the rectangle translated from the
|
||||
* image.
|
||||
*
|
||||
* @return affineTransform
|
||||
*/
|
||||
private AffineTransform getTransformRectangle() {
|
||||
private AffineTransform getTransformRectangle()
|
||||
{
|
||||
AffineTransform tx = new AffineTransform();
|
||||
tx.scale(scale, scale);
|
||||
return tx;
|
||||
}
|
||||
|
||||
public boolean contains(Point2D clickPoint) {
|
||||
|
||||
public boolean contains(Point2D clickPoint)
|
||||
{
|
||||
Shape shape;
|
||||
if(rektAngle == null) {
|
||||
shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null));
|
||||
if (rektAngle == null)
|
||||
{
|
||||
shape = new Rectangle2D.Double(0, 0, image.getWidth(null), image.getHeight(null));
|
||||
return getTransform().createTransformedShape(shape).contains(clickPoint);
|
||||
}
|
||||
else {
|
||||
shape = new Rectangle2D.Double(-7,-7,image.getWidth(null)+7, image.getHeight(null)+7);
|
||||
|
||||
} else
|
||||
{
|
||||
shape = new Rectangle2D.Double(-9, -9, image.getWidth(null) + 13, image.getHeight(null) + 13);
|
||||
return getTransformSelection().createTransformedShape(shape).contains(clickPoint);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public Point2D getObjectPoint(Point2D point) {
|
||||
try {
|
||||
return getTransform().inverseTransform(point, null);
|
||||
} catch (NoninvertibleTransformException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method checks if the place thats clicked is inside one of the corners.
|
||||
* 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 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks if the place thats clicked is inside one of the
|
||||
* corners.
|
||||
*
|
||||
* @param point
|
||||
* @param corner
|
||||
* @return if the clicked point is inside one of the corners
|
||||
*/
|
||||
public boolean containsCorner(Point2D point, int corner) {
|
||||
public boolean containsCorner(Point2D point, int corner)
|
||||
{
|
||||
Rectangle2D chosenCorner = null;
|
||||
switch(corner) {
|
||||
switch (corner)
|
||||
{
|
||||
case 0:
|
||||
chosenCorner = upperLeftCorner;
|
||||
break;
|
||||
@@ -142,65 +187,84 @@ public class DrawObject {
|
||||
chosenCorner = bottomRightCorner;
|
||||
break;
|
||||
case 4:
|
||||
if(point.getX() > rotateDot.getX() && point.getX() < rotateDot.getX() + rotateDot.getWidth()
|
||||
&& point.getY() > rotateDot.getY() && point.getY() < rotateDot.getY() + rotateDot.getHeight())
|
||||
if (point.getX() > rotateDot.getX() && point.getX() < rotateDot.getX() + rotateDot.getWidth() && point.getY() > rotateDot.getY() && point.getY() < rotateDot.getY() + rotateDot.getHeight())
|
||||
return true;
|
||||
else
|
||||
else
|
||||
return false;
|
||||
|
||||
}
|
||||
if(point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth()
|
||||
&& point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight())
|
||||
if (point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth() && point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight())
|
||||
return true;
|
||||
else
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setSelected(boolean b) {
|
||||
|
||||
public void setSelected(boolean b)
|
||||
{
|
||||
selected = b;
|
||||
}
|
||||
|
||||
public Point2D getPosition() {
|
||||
public Point2D getPosition()
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
public void setPosition(Point2D position) {
|
||||
public void setPosition(Point2D position)
|
||||
{
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
public double getRotation() {
|
||||
public double getRotation()
|
||||
{
|
||||
return rotation;
|
||||
}
|
||||
|
||||
public void setRotation(double rotation) {
|
||||
public void setRotation(double rotation)
|
||||
{
|
||||
this.rotation = rotation;
|
||||
}
|
||||
|
||||
public double getScale() {
|
||||
public double getScale()
|
||||
{
|
||||
return scale;
|
||||
}
|
||||
|
||||
public void setScale(double scale) {
|
||||
public void setScale(double scale)
|
||||
{
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
public Image getImage() {
|
||||
public Image getImage()
|
||||
{
|
||||
return image;
|
||||
}
|
||||
|
||||
public void setImage(Image image) {
|
||||
public void setImage(Image image)
|
||||
{
|
||||
this.image = image;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
public boolean isSelected()
|
||||
{
|
||||
return selected;
|
||||
}
|
||||
|
||||
public Rectangle2D getRectangle() {
|
||||
|
||||
public Rectangle2D getRectangle()
|
||||
{
|
||||
return rektAngle;
|
||||
}
|
||||
|
||||
public void setRectangle(Rectangle2D rectangle) {
|
||||
|
||||
public void setRectangle(Rectangle2D rectangle)
|
||||
{
|
||||
rektAngle = rectangle;
|
||||
}
|
||||
|
||||
|
||||
public Color getRectangleColor() {
|
||||
return rectangleColor;
|
||||
}
|
||||
|
||||
public void setRectangleColor(Color rectangleColor) {
|
||||
this.rectangleColor = rectangleColor;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user