Merge banaan en develop

This commit is contained in:
Yorick
2015-04-07 11:35:05 +02:00
11 changed files with 378 additions and 140 deletions
+12 -31
View File
@@ -19,7 +19,6 @@ public abstract class DrawObject
double rotation; double rotation;
double scale; double scale;
private Image image; private Image image;
private Image rotateImage;
protected boolean selected; protected boolean selected;
private Rectangle2D rektAngle; private Rectangle2D rektAngle;
private Rectangle2D upperLeftCorner; private Rectangle2D upperLeftCorner;
@@ -36,7 +35,6 @@ public abstract class DrawObject
public DrawObject(String filename, Point2D position) public DrawObject(String filename, Point2D position)
{ {
image = new ImageIcon(filename).getImage(); image = new ImageIcon(filename).getImage();
rotateImage = new ImageIcon("rotate.png").getImage();
scale = 1; scale = 1;
rotation = 0; rotation = 0;
this.position = position; this.position = position;
@@ -55,7 +53,7 @@ public abstract class DrawObject
// image.getHeight(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); 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.setColor(rectangleColor);
g.setStroke(new BasicStroke(7)); g.setStroke(new BasicStroke(7));
rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null)); rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null));
@@ -163,38 +161,17 @@ public abstract class DrawObject
} }
/** /**
* * Checking collision.
* @param corners * @param object. the drawObject to check collision with.
* @return if there is a collision * @return if there is a collision.
*/ */
public boolean collision(DrawObject object) public boolean collision(DrawObject object)
{ {
// Point2D[] ownCorners = getCorners(); Shape ownShape = getRectangle();
Point2D[] objectCorners = object.getCorners(); Rectangle2D otherRectangle = object.getTransform().createTransformedShape(object.getImageRectangle()).getBounds2D();
Shape ownShape = new Rectangle2D.Double(-9, -9, image.getWidth(null) + 13, image.getHeight(null) + 13); if(ownShape.intersects(otherRectangle))
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; return true;
else if (ownShape.contains(objectCorners[1])) else
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; return false;
} }
@@ -305,5 +282,9 @@ public abstract class DrawObject
{ {
this.rectangleColor = rectangleColor; this.rectangleColor = rectangleColor;
} }
public Rectangle2D getImageRectangle() {
return new Rectangle2D.Double(0,0, image.getWidth(null), image.getHeight(null));
}
} }
+11
View File
@@ -17,6 +17,17 @@ public class MenuBar extends JMenuBar
JMenu file = new JMenu("File"); JMenu file = new JMenu("File");
JMenuItem newPath = new JMenuItem("New Path");
newPath.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
w.getPanel().startPath();
}
});
file.add(newPath);
JMenuItem exit = new JMenuItem("Exit"); JMenuItem exit = new JMenuItem("Exit");
exit.addActionListener(new ActionListener() exit.addActionListener(new ActionListener()
{ {
+80 -4
View File
@@ -2,12 +2,13 @@ package Applicatie;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Stroke;
import java.awt.TexturePaint; import java.awt.TexturePaint;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
@@ -25,6 +26,7 @@ import Listeners.MouseMotion;
import Listeners.MouseWheel; import Listeners.MouseWheel;
import Objects.Entrance; import Objects.Entrance;
import Objects.Food; import Objects.Food;
import Objects.OldPath;
import Objects.Path; import Objects.Path;
import Objects.Stage; import Objects.Stage;
import Objects.Toilet; import Objects.Toilet;
@@ -43,9 +45,11 @@ public class Panel extends JPanel
// private ArrayList<Object> panelTypes = new ArrayList<Object>(); // private ArrayList<Object> panelTypes = new ArrayList<Object>();
ArrayList<DrawObject> objects = new ArrayList<>(); ArrayList<DrawObject> objects = new ArrayList<>();
ArrayList<Path> paths = new ArrayList<>();
DrawObject dragObject = null; DrawObject dragObject = null;
private DrawObject selectedObject; private DrawObject selectedObject;
private String clickedOption = "drag"; private String clickedOption = "drag";
private Path currentPath;
Point2D cameraPoint = new Point2D.Double(getWidth() / 2, getHeight() / 2); Point2D cameraPoint = new Point2D.Double(getWidth() / 2, getHeight() / 2);
float cameraScale = 1; float cameraScale = 1;
@@ -132,7 +136,7 @@ public class Panel extends JPanel
case 2: case 2:
return new Entrance(null); return new Entrance(null);
case 3: case 3:
return new Path(null); return new OldPath(null);
case 4: case 4:
return new Wall(null); return new Wall(null);
case 5: case 5:
@@ -152,8 +156,10 @@ public class Panel extends JPanel
super.paintComponent(g); super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g; Graphics2D g2 = (Graphics2D) g;
g2.setClip(new Rectangle2D.Double(0, 0, getWidth(), 300)); g2.setClip(new Rectangle2D.Double(0, 0, getWidth(), 300));
Stroke old = g2.getStroke();
g2.setStroke(new BasicStroke(10));
g2.drawLine(0, 150, getWidth(), 150); g2.drawLine(0, 150, getWidth(), 150);
g2.setStroke(old);
for (BufferedImage image : panelInfo) for (BufferedImage image : panelInfo)
{ {
g2.drawImage(image, panelInfox + scrollfactor, panelInfoy, null); g2.drawImage(image, panelInfox + scrollfactor, panelInfoy, null);
@@ -171,13 +177,23 @@ public class Panel extends JPanel
BasicStroke stroke = new BasicStroke(10); BasicStroke stroke = new BasicStroke(10);
g2.setStroke(stroke); g2.setStroke(stroke);
for(Path path : paths) {
path.draw(g2);
}
for (DrawObject o : objects) for (DrawObject o : objects)
{ {
o.draw(g2); o.draw(g2);
} }
g2.setTransform(oldTransform);
if(currentPath != null) { //Display text while in path making modes.
g2.setColor(Color.WHITE);
g2.setFont(new Font("Verdana",Font.ITALIC,25));
g2.drawString("Press enter to finish the path.",20,185);
}
g2.setClip(null); g2.setClip(null);
g2.setTransform(oldTransform);
} }
public AffineTransform getCamera() public AffineTransform getCamera()
@@ -335,6 +351,10 @@ public class Panel extends JPanel
this.clickedOption = clickedOption; this.clickedOption = clickedOption;
} }
/**
* Remove a DrawObject from the list.
* @param o - the DrawObject you want to remove from the list.
*/
public void removeObject(DrawObject o) public void removeObject(DrawObject o)
{ {
Iterator<DrawObject> itr = objects.iterator(); Iterator<DrawObject> itr = objects.iterator();
@@ -369,7 +389,63 @@ public class Panel extends JPanel
} }
} }
/**
* Begin making a new path.
*/
public void startPath() {
setClickedOption("Path");
currentPath = new Path();
paths.add(currentPath);
pp.setSelectedPath(currentPath);
}
/**
* Get the current selected Path.
* @return - the selected Path.
*/
public Path getCurrentPath() {
return currentPath;
}
/**
* Set the selected Path object.
* @param path - the selected Path object.
*/
public void setcurrentPath(Path path) {
currentPath = path;
pp.setSelectedPath(currentPath);
}
/**
* Checks if the point is contained in one of the path's.
* @param point - The point to check for.
* @return if the point is contained in one of the path's.
*/
public boolean checkPath(Point2D point) {
for(Path path : paths) {
if(path.containsPoint(point)) {
setcurrentPath(path);
setClickedOption("Path");
return true;
}
}
return false;
}
/**
* Remove a path from the list.
* @param path - the path you want to remove from the list.
*/
public void removePath(Path path) {
Iterator<Path> it = paths.iterator();
while(it.hasNext()) {
if(it.next().equals(path)) {
pp.clearSelected();
setClickedOption("drag");
currentPath = null;
it.remove();
}
repaint();
}
}
} }
+30 -7
View File
@@ -20,15 +20,20 @@ import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextField; import javax.swing.JTextField;
import Objects.Path;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class PropertiesPanel extends JPanel public class PropertiesPanel extends JPanel
{ {
DrawObject selectedObject = null; DrawObject selectedObject = null;
Path selectedPath = null;
Panel p = null; Panel p = null;
Dimension spacerDimension = new Dimension(200, 30); Dimension spacerDimension = new Dimension(200, 30);
JLabel nameLabel; JLabel nameLabel;
JTextField locationXField; JTextField locationXField;
@@ -84,7 +89,11 @@ public class PropertiesPanel extends JPanel
{ {
public void actionPerformed(ActionEvent e) public void actionPerformed(ActionEvent e)
{ {
p.removeObject(selectedObject); if(selectedObject != null)
p.removeObject(selectedObject);
else if(selectedPath != null) {
p.removePath(selectedPath);
}
} }
}); });
deletePanel.setPreferredSize(new Dimension(200, 50)); deletePanel.setPreferredSize(new Dimension(200, 50));
@@ -296,6 +305,7 @@ public class PropertiesPanel extends JPanel
public void setSelected(DrawObject drOb) public void setSelected(DrawObject drOb)
{ {
selectedObject = drOb; selectedObject = drOb;
selectedPath = null;
fillFields(); fillFields();
enableComponents(this, true); enableComponents(this, true);
} }
@@ -305,11 +315,13 @@ public class PropertiesPanel extends JPanel
enableComponents(this, false); enableComponents(this, false);
clearFields(this); clearFields(this);
selectedObject = null; selectedObject = null;
selectedPath = null;
} }
public void update() public void update()
{ {
fillFields(); if(selectedObject != null)
fillFields();
} }
private void enableComponents(Container container, boolean enable) private void enableComponents(Container container, boolean enable)
@@ -348,21 +360,32 @@ public class PropertiesPanel extends JPanel
private void fillFields() private void fillFields()
{ {
if (selectedObject != null)
{
nameLabel.setText(selectedObject.getName()); nameLabel.setText(selectedObject.getName());
locationXField.setText(Math.round(selectedObject.getPosition().getX()) + ""); locationXField.setText(Math.round(selectedObject.getPosition().getX()) + "");
locationYField.setText(Math.round(selectedObject.getPosition().getY()) + ""); locationYField.setText(Math.round(selectedObject.getPosition().getY()) + "");
scaleField.setText((double) Math.round(selectedObject.getScale() * 10) / 10 + ""); scaleField.setText((double) Math.round(selectedObject.getScale() * 10) / 10 + "");
rotationField.setText(Math.round(selectedObject.getRotation() % 360) + ""); rotationField.setText(Math.round(selectedObject.getRotation() % 360) + "");
}
} }
public void setPanel(Panel p) public void setPanel(Panel p)
{ {
this.p = p; this.p = p;
} }
public void setSelectedPath(Path path) {
selectedObject = null;
selectedPath = path;
fillPathFields();
}
private void fillPathFields() {
nameLabel.setText("Path");
enableComponents(this, true);
locationXField.setEnabled(false);
locationYField.setEnabled(false);
scaleField.setEnabled(false);
rotationField.setEnabled(false);
}
} }
+7 -1
View File
@@ -11,6 +11,8 @@ public class Window extends JFrame
{ {
private static final long serialVersionUID = -1324363758675184283L; private static final long serialVersionUID = -1324363758675184283L;
private Panel fp;
Window() { Window() {
super("Festival Plannner"); super("Festival Plannner");
setDefaultCloseOperation(EXIT_ON_CLOSE); setDefaultCloseOperation(EXIT_ON_CLOSE);
@@ -20,7 +22,7 @@ public class Window extends JFrame
// CONTENT PANELS // CONTENT PANELS
JPanel contentPanel = new JPanel(new BorderLayout()); JPanel contentPanel = new JPanel(new BorderLayout());
PropertiesPanel pp = new PropertiesPanel(); PropertiesPanel pp = new PropertiesPanel();
Panel fp = new Panel(pp); fp = new Panel(pp);
contentPanel.add(fp, BorderLayout.CENTER); contentPanel.add(fp, BorderLayout.CENTER);
contentPanel.add(pp, BorderLayout.EAST); contentPanel.add(pp, BorderLayout.EAST);
@@ -35,4 +37,8 @@ public class Window extends JFrame
setFocusable(true); setFocusable(true);
setVisible(true); setVisible(true);
} }
public Panel getPanel() {
return fp;
}
} }
+13
View File
@@ -20,6 +20,8 @@ public class Keyboard implements KeyListener {
if(e.getKeyCode() == e.VK_DELETE ) { if(e.getKeyCode() == e.VK_DELETE ) {
if(panel.getSelectedObject() != null) if(panel.getSelectedObject() != null)
panel.removeObject(panel.getSelectedObject()); panel.removeObject(panel.getSelectedObject());
else if(panel.getCurrentPath() != null)
panel.removePath(panel.getCurrentPath());
} }
else if(e.getKeyCode() == e.VK_LEFT) { else if(e.getKeyCode() == e.VK_LEFT) {
if(panel.getSelectedObject() != null) if(panel.getSelectedObject() != null)
@@ -41,6 +43,17 @@ public class Keyboard implements KeyListener {
panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()+5)); panel.getSelectedObject().setPosition(new Point2D.Double(panel.getSelectedObject().getPosition().getX(),panel.getSelectedObject().getPosition().getY()+5));
panel.checkCollision(); panel.checkCollision();
} }
else if(e.getKeyCode() == e.VK_ENTER) {
if(panel.getClickedOption().equals("Path")) {
panel.setClickedOption("drag");
panel.getCurrentPath().setTempPoint(null);
panel.setcurrentPath(null);
panel.getPP().clearSelected();
}
}
else if(e.getKeyCode() == e.VK_P) {
panel.startPath();
}
panel.repaint(); panel.repaint();
} }
+83 -76
View File
@@ -27,93 +27,100 @@ public class Mouse extends MouseAdapter
Point2D clickPoint = panel.getClickPoint(e.getPoint()); Point2D clickPoint = panel.getClickPoint(e.getPoint());
panel.setLastClickPosition(clickPoint); panel.setLastClickPosition(clickPoint);
panel.setLastMousePosition(e.getPoint()); panel.setLastMousePosition(e.getPoint());
if (e.getY() < 150) if(!panel.getClickedOption().equals("Path")) {
{ if (e.getY() < 150)
int i = 0;
int last = 0;
for (BufferedImage image : panel.getPanelInfo())
{ {
if (e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor()) int i = 0;
int last = 0;
for (BufferedImage image : panel.getPanelInfo())
{ {
DrawObject tempDrawObj = panel.createNewDrawObject(i); if (e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor())
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)
{
panel.add(panel.getDragObject());
}
}
else
{
for (DrawObject o : panel.getObjects())
{
if (o.contains(clickPoint))
{
if (o == selectedObject)
{ {
boolean upperLeft = o.containsCorner(clickPoint, 0); DrawObject tempDrawObj = panel.createNewDrawObject(i);
boolean upperRight = o.containsCorner(clickPoint, 1); tempDrawObj.setPosition(clickPoint);
boolean bottomLeft = o.containsCorner(clickPoint, 2); if(!panel.getObjects().isEmpty())
boolean bottomRight = o.containsCorner(clickPoint, 3); panel.clearObjectSelection();
boolean rotate = o.containsCorner(clickPoint, 4); panel.setDragObject(tempDrawObj);
if (upperLeft) panel.getDragObject().setSelected(true);
{ panel.getPP().setSelected(tempDrawObj);
panel.setClickedOption("upperLeft"); panel.setSelectedObject(tempDrawObj);
} selectedObject = tempDrawObj;
else if (upperRight) break;
{
panel.setClickedOption("upperRight");
}
else if (bottomLeft)
{
panel.setClickedOption("bottomLeft");
}
else if (bottomRight)
{
panel.setClickedOption("bottomRight");
}
else if (rotate)
{
panel.setClickedOption("rotate");
}
else
{
panel.setClickedOption("drag");
}
} }
if (selectedObject != null) i++;
selectedObject.setSelected(false); last += image.getWidth();
o.setSelected(true); }
selectedObject = o; if (panel.getDragObject() != null)
panel.setDragObject(o); {
panel.getPP().setSelected(o); panel.add(panel.getDragObject());
panel.setSelectedObject(o);
panel.setSelectionPosition(panel.getDragObject().getPosition());
} }
} }
else
{
for (DrawObject o : panel.getObjects())
{
if (o.contains(clickPoint))
{
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);
if (upperLeft)
{
panel.setClickedOption("upperLeft");
}
else if (upperRight)
{
panel.setClickedOption("upperRight");
}
else if (bottomLeft)
{
panel.setClickedOption("bottomLeft");
}
else if (bottomRight)
{
panel.setClickedOption("bottomRight");
}
else if (rotate)
{
panel.setClickedOption("rotate");
}
else
{
panel.setClickedOption("drag");
}
}
if (selectedObject != null)
selectedObject.setSelected(false);
o.setSelected(true);
selectedObject = o;
panel.setDragObject(o);
panel.getPP().setSelected(o);
panel.setSelectedObject(o);
panel.setSelectionPosition(panel.getDragObject().getPosition());
}
}
panel.checkPath(clickPoint);
}
if (panel.getDragObject() == null && selectedObject != null)
{
selectedObject.setSelected(false);
panel.setSelectedObject(null);
panel.getPP().clearSelected();
selectedObject = null;
}
} }
if (panel.getDragObject() == null && selectedObject != null) else { //Making path.
{ panel.getCurrentPath().addPoint(new Point2D.Double(clickPoint.getX(),clickPoint.getY()));
selectedObject.setSelected(false);
panel.setSelectedObject(null);
panel.getPP().clearSelected();
selectedObject = null;
} }
panel.repaint(); panel.repaint();
} }
public void mouseReleased(MouseEvent e) public void mouseReleased(MouseEvent e)
{ {
if(panel.getDragObject() != null) { if(panel.getDragObject() != null) {
+12 -8
View File
@@ -26,7 +26,6 @@ public class MouseMotion extends MouseMotionAdapter
switch (panel.getClickedOption()) switch (panel.getClickedOption())
{ {
case "drag": case "drag":
boolean collision = false;
if (panel.getDragObject() != null) 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(); panel.checkCollision();
@@ -87,14 +86,19 @@ public class MouseMotion extends MouseMotionAdapter
panel.setLastClickPosition(clickPoint); panel.setLastClickPosition(clickPoint);
panel.getPP().update(); panel.getPP().update();
} }
public void mouseMoved(MouseEvent e) {
if(panel.getClickedOption().equals("Path"))
panel.getCurrentPath().setTempPoint(panel.getClickPoint(e.getPoint()));
panel.repaint();
}
private void resizeBigger() private void resizeBigger()
{ {
double scale = panel.getDragObject().getScale() + 0.05; double scale = panel.getDragObject().getScale()*1 + 0.02;
panel.getDragObject().setScale(scale); 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));
panel.checkCollision();
} }
private void resizeSmaller(Point2D clickPoint) private void resizeSmaller(Point2D clickPoint)
@@ -102,10 +106,10 @@ public class MouseMotion extends MouseMotionAdapter
System.out.println(clickPoint.getX()); System.out.println(clickPoint.getX());
if (panel.getDragObject().getScale() > 0.2) 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().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 ));
panel.checkCollision();
} }
} }
} }
+21
View File
@@ -0,0 +1,21 @@
package Objects;
import java.awt.geom.Point2D;
import Applicatie.DrawObject;
public class OldPath extends DrawObject
{
public OldPath(Point2D position)
{
super("images/path.jpg", position);
}
@Override
public String getName()
{
return "Path";
}
}
+109 -13
View File
@@ -1,21 +1,117 @@
package Objects; package Objects;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.TexturePaint;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import Applicatie.DrawObject; import javax.imageio.ImageIO;
public class Path extends DrawObject /**
{ * Create's a path.
* @author Wesley de Hek
* @version 1.2
*/
public class Path {
public Path(Point2D position) private ArrayList<Point2D> points;
{ private ArrayList<Shape> lines;
super("images/path.jpg", position); private Point2D tempPoint;
private BufferedImage pathBackground;
/**
* Constructor.
*/
public Path() {
points = new ArrayList<>();
lines = new ArrayList<>();
try {
pathBackground = ImageIO.read(new File("images/newPath.png"));
} catch (IOException e) {
e.printStackTrace();
}
} }
@Override /**
public String getName() * Draws the path.
{ * @param g2 - the Graphics2D object.
return "Path"; */
public void draw(Graphics2D g2) {
TexturePaint paint = new TexturePaint(pathBackground,new Rectangle2D.Double(0,0,128,128));
g2.setPaint(paint);
g2.setStroke(new BasicStroke(30,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
if(!points.isEmpty()) {
for(int i = 1; i < points.size(); i++) {
Point2D previousPoint = points.get(i-1);
Point2D point = points.get(i);
g2.drawLine((int) previousPoint.getX(),(int) previousPoint.getY(),(int) point.getX(),(int) point.getY());
}
//Drawing line that follows the mouse:
if(tempPoint != null) {
Point2D lastPoint = points.get(points.size()-1);
g2.drawLine((int) lastPoint.getX(),(int) lastPoint.getY(),(int) tempPoint.getX(),(int) tempPoint.getY());
}
}
} }
} /**
* Check if one of the lines contains the given point.
* @param point - the point you want to containment with.
* @return if the path contains the point.
*/
public boolean containsPoint(Point2D point) {
for(Shape line : getPath()) {
if(line.contains(point)) {
return true;
}
}
return false;
}
/**
* Get array with line's from the points.
* @return a array with all the lines of the path.
*/
public ArrayList<Shape> getPath() {
lines.clear();
for(int i = 1; i < points.size(); i++) {
Point2D previousPoint = points.get(i-1);
Point2D point = points.get(i);
Line2D line = new Line2D.Double((int) previousPoint.getX(),(int) previousPoint.getY(),(int) point.getX(),(int) point.getY());
BasicStroke stroke = new BasicStroke(30,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
lines.add(stroke.createStrokedShape(line));
}
return lines;
}
/**
* Add a point to the path.
* @param point - the point you want the path to pass.
*/
public void addPoint(Point2D point) {
points.add(point);
}
/**
* Get all the path points.
* @return all the points of the path.
*/
public ArrayList<Point2D> getPoints() {
return points;
}
/**
* Set the temporary point, useful for following the mouse while drawing the path.
* @param point - the point of the mouse.
*/
public void setTempPoint(Point2D point) {
tempPoint = point;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB