From ae35416cf9f6c0388483fdac068555955bc3758b Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 12 Mar 2015 22:10:15 +0100 Subject: [PATCH 1/3] Added border when selected --- Applicatie/DrawObject.java | 28 +++++++++++++++++++- Applicatie/Panel.java | 22 ++++++++++++++++ Listeners/Mouse.java | 28 +++++++++++++++++++- Listeners/MouseMotion.java | 53 ++++++++++++++++++++++---------------- 4 files changed, 107 insertions(+), 24 deletions(-) diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 22b1ad3..37ca5ff 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -1,7 +1,8 @@ package Applicatie; +import java.awt.BasicStroke; +import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; -import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; @@ -16,6 +17,7 @@ public class DrawObject { double scale; Image image; protected boolean selected; + private Rectangle2D rektAngle; public DrawObject(String filename, Point2D position) { @@ -29,6 +31,14 @@ public class DrawObject { { AffineTransform tx = getTransform(); g.drawImage(image, tx, null); + if(selected) { + g.setColor(Color.BLACK); + g.setStroke(new BasicStroke(7)); + rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null)); + tx = getTransformRectangle(rektAngle.getWidth(),rektAngle.getHeight()); + Shape transformedRektAngle = tx.createTransformedShape(rektAngle); + g.draw(transformedRektAngle); + } } protected AffineTransform getTransform() { @@ -39,6 +49,19 @@ public class DrawObject { return tx; } + /** + * Special transformation for the selection rectangle, because the translation of the image one places the rectangle translated from the image. + * @param width + * @param height + * @return + */ + private AffineTransform getTransformRectangle(double width, double height) { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + tx.rotate(Math.toRadians(rotation), width / 2, height / 2); + return tx; + } + public boolean contains(Point2D clickPoint) { Shape shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null)); return getTransform().createTransformedShape(shape).contains(clickPoint); @@ -85,5 +108,8 @@ public class DrawObject { return selected; } + public Rectangle2D getRectangle() { + return rektAngle; + } } diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index d63aa40..d81c24c 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -29,6 +29,8 @@ public class Panel extends JPanel { ArrayList objects = new ArrayList<>(); DrawObject dragObject = null; + private DrawObject selectedObject; + private String clickedOption = "drag"; Point2D cameraPoint = new Point2D.Double(getWidth()/2,getHeight()/2); float cameraScale = 1; @@ -171,6 +173,26 @@ public class Panel extends JPanel { public void setLastMousePosition(Point lastMousePosition) { this.lastMousePosition = lastMousePosition; } + + + public DrawObject getSelectedObject() { + return selectedObject; + } + + + public void setSelectedObject(DrawObject selectedObject) { + this.selectedObject = selectedObject; + } + + + public String getClickedOption() { + return clickedOption; + } + + + public void setClickedOption(String clickedOption) { + this.clickedOption = clickedOption; + } } diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index 3e4083a..6e55622 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -13,10 +13,12 @@ import Applicatie.Panel; public class Mouse extends MouseAdapter { private Panel panel; + private DrawObject selectedObject; public Mouse(Panel panel) { this.panel = panel; + selectedObject = null; } public void mousePressed(MouseEvent e) { @@ -35,13 +37,37 @@ public class Mouse extends MouseAdapter { else { for(DrawObject o : panel.getObjects()) - if(o.contains(clickPoint)) + if(o.contains(clickPoint)) { + if(o == selectedObject) { + boolean upperLeft = clickPoint.getX() > o.getRectangle().getX() && clickPoint.getX() < o.getRectangle().getX()+o.getRectangle().getWidth()/10 + && clickPoint.getY() > o.getRectangle().getY() && clickPoint.getY() < o.getRectangle().getY()+o.getRectangle().getHeight()/10; + if(upperLeft) { + System.out.println("lal"); + panel.setClickedOption("upperLeft"); + } + else { + panel.setClickedOption("drag"); + } + } + if(selectedObject != null) + selectedObject.setSelected(false); panel.setDragObject(o); + o.setSelected(true); + selectedObject = o; + System.out.println("selected"); + } } + if(panel.getDragObject() == null && selectedObject != null) { + System.out.println("deselected"); + selectedObject.setSelected(false); + selectedObject = null; + } + panel.repaint(); } public void mouseReleased(MouseEvent e) { panel.setDragObject(null); + panel.repaint(); } } diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 248158f..0388ec8 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -21,31 +21,40 @@ public class MouseMotion extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); - if(panel.getDragObject() != null) - { - if(SwingUtilities.isLeftMouseButton(e)){ - - - panel.getDragObject().setPosition(new Point2D.Double( + switch(panel.getClickedOption()) { + case "drag": + if(panel.getDragObject() != null) + panel.getDragObject().setPosition(new Point2D.Double( panel.getDragObject().getPosition().getX() - (panel.getLastClickPosition().getX() - clickPoint.getX()), panel.getDragObject().getPosition().getY() - (panel.getLastClickPosition().getY() - clickPoint.getY()))); - } - else - { - - double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); - panel.getDragObject().setRotation(tempval); - } - panel.repaint(); - } - else - { - panel.setCameraPoint(new Point2D.Double( - panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), - panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) - )); - panel.repaint(); + break; } + panel.repaint(); + + +// if(panel.getDragObject() != null) +// { +// if(SwingUtilities.isLeftMouseButton(e)){ +// +// +// +// } +// else +// { +//double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); + //panel.getDragObject().setRotation(tempval); +// +// } +// panel.repaint(); +// } +// else +// { +// panel.setCameraPoint(new Point2D.Double( +// panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), +// panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) +// )); +// panel.repaint(); +// } panel.setLastMousePosition(e.getPoint()); panel.setLastClickPosition(clickPoint); } From dccdccb573934c3035acf58455c4c01219c9038d Mon Sep 17 00:00:00 2001 From: xrgman Date: Sun, 15 Mar 2015 11:42:01 +0100 Subject: [PATCH 2/3] update try --- Applicatie/DrawObject.java | 28 +--- Applicatie/Panel.java | 137 ++++++++++++++--- Applicatie/PropertiesPanel.java | 264 ++++++++++++++++++++++++++++++++ Applicatie/Window.java | 4 +- Listeners/Mouse.java | 70 ++++----- Listeners/MouseMotion.java | 54 +++---- Listeners/MouseWheel.java | 40 ++++- Objects/Entrance.java | 13 ++ Objects/Path.java | 13 ++ Objects/Toilet.java | 2 +- Objects/Wall.java | 13 ++ 11 files changed, 515 insertions(+), 123 deletions(-) create mode 100644 Applicatie/PropertiesPanel.java create mode 100644 Objects/Entrance.java create mode 100644 Objects/Path.java create mode 100644 Objects/Wall.java diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 37ca5ff..22b1ad3 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -1,8 +1,7 @@ package Applicatie; -import java.awt.BasicStroke; -import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; +import java.awt.Point; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; @@ -17,7 +16,6 @@ public class DrawObject { double scale; Image image; protected boolean selected; - private Rectangle2D rektAngle; public DrawObject(String filename, Point2D position) { @@ -31,14 +29,6 @@ public class DrawObject { { AffineTransform tx = getTransform(); g.drawImage(image, tx, null); - if(selected) { - g.setColor(Color.BLACK); - g.setStroke(new BasicStroke(7)); - rektAngle = new Rectangle2D.Double((int) position.getX(), (int) position.getY(), image.getWidth(null), image.getHeight(null)); - tx = getTransformRectangle(rektAngle.getWidth(),rektAngle.getHeight()); - Shape transformedRektAngle = tx.createTransformedShape(rektAngle); - g.draw(transformedRektAngle); - } } protected AffineTransform getTransform() { @@ -49,19 +39,6 @@ public class DrawObject { return tx; } - /** - * Special transformation for the selection rectangle, because the translation of the image one places the rectangle translated from the image. - * @param width - * @param height - * @return - */ - private AffineTransform getTransformRectangle(double width, double height) { - AffineTransform tx = new AffineTransform(); - tx.scale(scale, scale); - tx.rotate(Math.toRadians(rotation), width / 2, height / 2); - return tx; - } - public boolean contains(Point2D clickPoint) { Shape shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null)); return getTransform().createTransformedShape(shape).contains(clickPoint); @@ -108,8 +85,5 @@ public class DrawObject { return selected; } - public Rectangle2D getRectangle() { - return rektAngle; - } } diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index d81c24c..0270e30 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -3,10 +3,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.TexturePaint; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; 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; @@ -21,35 +18,67 @@ import javax.swing.JPanel; import Listeners.Mouse; import Listeners.MouseMotion; import Listeners.MouseWheel; +import Objects.Entrance; +import Objects.Path; import Objects.Podium; +import Objects.Toilet; +import Objects.Wall; +@SuppressWarnings("serial") public class Panel extends JPanel { BufferedImage background; + BufferedImage podiumImage, toiletImage, entranceImage, pathImage,wallImage; + + private int panelInfox, panelInfoy,scrollfactor; + + private ArrayList panelInfo = new ArrayList(); +// private ArrayList panelTypes = new ArrayList(); ArrayList objects = new ArrayList<>(); DrawObject dragObject = null; - private DrawObject selectedObject; - private String clickedOption = "drag"; Point2D cameraPoint = new Point2D.Double(getWidth()/2,getHeight()/2); float cameraScale = 1; + PropertiesPanel pp; + Point2D lastClickPosition = new Point(0,0); Point lastMousePosition = new Point(0,0); - Panel() + //how to nieuwe dingen aan het panel toe te voegen: + //maak bufferedimage global aan, voeg er een image aan toe, en voeg de image aan panelInfo toe en het object aan panelTypes. + //en maak een case statement die een new Object returnt in createNewDrawObject. + + + Panel(PropertiesPanel pp) { + this.pp = pp; + pp.setPanel(this); try { background = ImageIO.read(new File("images/grass.jpg")); + podiumImage = ImageIO.read(new File("images/stageIcon.png")); + toiletImage = ImageIO.read(new File("images/wcIcon.png")); + entranceImage = ImageIO.read(new File("images/entranceIcon.png")); + pathImage = ImageIO.read(new File("images/pathIcon.png")); + wallImage = ImageIO.read(new File("images/wallIcon.png")); } catch (IOException e) { e.printStackTrace(); } + panelInfo.add(podiumImage); + panelInfo.add(toiletImage); + panelInfo.add(entranceImage); + panelInfo.add(pathImage); + panelInfo.add(wallImage); - objects.add(new Podium(new Point2D.Double(100, 100))); - objects.add(new Podium(new Point2D.Double(500, 100))); - objects.add(new Podium(new Point2D.Double(300, 400))); + panelInfox = 0; + panelInfoy = 0; + scrollfactor = 0; + +// objects.add(new Podium(new Point2D.Double(100, 100))); +// objects.add(new Podium(new Point2D.Double(500, 100))); +// objects.add(new Podium(new Point2D.Double(300, 400))); addMouseListener(new Mouse(this)); @@ -59,6 +88,35 @@ public class Panel extends JPanel { } + public int getPanelInfoLength() + { + int panelInfoLength = 0; + for(BufferedImage image : panelInfo) + { + panelInfoLength += image.getWidth(); + } + + return panelInfoLength; + } + + public DrawObject createNewDrawObject(int index) + { + switch(index) + { + case 0: + return new Podium(null); + case 1: + return new Toilet(null); + case 2: + return new Entrance(null); + case 3: + return new Path(null); + case 4: + return new Wall(null); + default: + return null; + } + } public void add(DrawObject dragObject) { @@ -69,21 +127,30 @@ public class Panel extends JPanel { { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; - g2.setClip(new Rectangle2D.Double(0,0, 200, getHeight())); + g2.setClip(new Rectangle2D.Double(0,0, getWidth(), 300)); - g2.fill(new Ellipse2D.Double(0,0,300,300)); +// g2.fill(new Ellipse2D.Double(0,0,300,300)); +// g2.drawImage(podiumImage, 0, 0, null); + for(BufferedImage image : panelInfo) + { + g2.drawImage(image, panelInfox + scrollfactor, panelInfoy, null); + panelInfox += image.getWidth(); + } + panelInfox = 0; - g2.setClip(new Rectangle2D.Double(200,0, getWidth()-200, getHeight())); + g2.setClip(new Rectangle2D.Double(0,150, getWidth(), getHeight())); AffineTransform oldTransform = g2.getTransform(); g2.setTransform(getCamera()); TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 100, 100)); g2.setPaint(p); - g2.fill(new Rectangle2D.Double(0,0,1920,1080)); + g2.fill(new Rectangle2D.Double(-1920,-1080,3840,2160)); - for(DrawObject o : objects) + for(DrawObject o : objects){ o.draw(g2); + } + g2.setClip(null); @@ -175,24 +242,50 @@ public class Panel extends JPanel { } - public DrawObject getSelectedObject() { - return selectedObject; + public BufferedImage getPodiumImage() { + return podiumImage; } - public void setSelectedObject(DrawObject selectedObject) { - this.selectedObject = selectedObject; + public void setPodiumImage(BufferedImage podiumImage) { + this.podiumImage = podiumImage; } - public String getClickedOption() { - return clickedOption; + public ArrayList getPanelInfo() { + return panelInfo; } - public void setClickedOption(String clickedOption) { - this.clickedOption = clickedOption; + public void setPanelInfo(ArrayList panelInfo) { + this.panelInfo = panelInfo; + } + + + public int getScrollfactor() { + return scrollfactor; + } + + public void setScrollfactor(int scrollfactor) { + this.scrollfactor = scrollfactor; + } + + public int getPanelInfox() { + return panelInfox; + } + + public void setPanelInfox(int panelInfox) { + this.panelInfox = panelInfox; } + public PropertiesPanel getPP() + { + return pp; + } + + public void update() + { + repaint(); + } } diff --git a/Applicatie/PropertiesPanel.java b/Applicatie/PropertiesPanel.java new file mode 100644 index 0000000..a23edb5 --- /dev/null +++ b/Applicatie/PropertiesPanel.java @@ -0,0 +1,264 @@ +package Applicatie; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.geom.Point2D; + +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +@SuppressWarnings("serial") +public class PropertiesPanel extends JPanel { + + DrawObject selectedObject = null; + Panel p = null; + + JTextField locationXField; + JTextField locationYField; + JTextField scaleField; + JTextField rotationField; + + PropertiesPanel() + { + super(); + BoxLayout box = new BoxLayout(this, BoxLayout.PAGE_AXIS); + setLayout(box); + + setPreferredSize(new Dimension(200,0)); + setBorder(BorderFactory.createLineBorder(new Color(180,180,180))); + setBackground(new Color(220, 220, 220)); + + + //NAME "PROPERTIES" + JPanel propPanel = new JPanel(); + JLabel propLabel = new JLabel("Properties"); + propLabel.setFont(new Font("Segoe UI", Font.BOLD, 30)); + propPanel.setBackground(new Color(220, 220, 220)); + propPanel.setMaximumSize(new Dimension(200, 60)); + propPanel.add(propLabel); + add(propPanel); + + + //LOCATION + JPanel locationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JLabel locationLabel = new JLabel("Location"); + locationLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); + locationPanel.setPreferredSize(new Dimension(200, 150)); + locationPanel.setMaximumSize(new Dimension(200, 150)); + locationPanel.add(locationLabel); + add(locationPanel); + { + JPanel locationXPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + locationXPanel.setPreferredSize(new Dimension(200, 50)); + locationPanel.add(locationXPanel); + + JLabel locationXLabel = new JLabel("X"); + locationXPanel.add(locationXLabel); + locationXField = new JTextField(); + locationXField.setPreferredSize(new Dimension(150, 25)); + { + locationXField.addKeyListener(new KeyListener() { + + public void keyTyped(KeyEvent e) { + try{ + locationXField.setBackground(Color.WHITE); + double xpos = Double.parseDouble(locationXField.getText()); + selectedObject.setPosition(new Point2D.Double(xpos, selectedObject.getPosition().getY())); + p.update(); + } catch (NumberFormatException nfe) { + locationXField.setBackground(Color.RED); + } + } + public void keyReleased(KeyEvent e) {} + public void keyPressed(KeyEvent e) {} + }); + } + locationXPanel.add(locationXField); + } + { + JPanel locationYPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + locationYPanel.setPreferredSize(new Dimension(200, 50)); + locationPanel.add(locationYPanel); + + JLabel locationYLabel = new JLabel("Y"); + locationYPanel.add(locationYLabel); + locationYField = new JTextField(); + locationYField.setPreferredSize(new Dimension(150, 25)); + { + locationYField.addKeyListener(new KeyListener() { + + public void keyTyped(KeyEvent e) { + try{ + locationYField.setBackground(Color.WHITE); + double ypos = Double.parseDouble(locationYField.getText()); + selectedObject.setPosition(new Point2D.Double(selectedObject.getPosition().getX(), ypos));; + p.update(); + } catch (NumberFormatException nfe) { + locationYField.setBackground(Color.RED); + } + } + public void keyReleased(KeyEvent e) {} + public void keyPressed(KeyEvent e) {} + }); + } + locationYPanel.add(locationYField); + } + + + //SCALE + JPanel scalePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JLabel scaleLabel = new JLabel("Scale"); + scaleLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); + scalePanel.setPreferredSize(new Dimension(200, 100)); + scalePanel.setMaximumSize(new Dimension(200, 100)); + scalePanel.add(scaleLabel); + add(scalePanel); + { + JPanel scalePanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT)); + scalePanel2.setPreferredSize(new Dimension(200, 50)); + scalePanel.add(scalePanel2); + + JLabel scale2Label = new JLabel(" "); + scalePanel2.add(scale2Label); + scaleField = new JTextField(); + scaleField.setPreferredSize(new Dimension(150, 25)); + { + scaleField.addKeyListener(new KeyListener() { + + public void keyTyped(KeyEvent e) { + try{ + scaleField.setBackground(Color.WHITE); + double scale = Double.parseDouble(scaleField.getText()); + selectedObject.setScale(scale); + p.update(); + } catch (NumberFormatException nfe) { + scaleField.setBackground(Color.RED); + } + } + public void keyReleased(KeyEvent e) {} + public void keyPressed(KeyEvent e) {} + }); + } + scalePanel2.add(scaleField); + } + + + //ROTATION + JPanel rotationPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JLabel rotationLabel = new JLabel("Rotation"); + rotationLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); + rotationPanel.setPreferredSize(new Dimension(200, 100)); + rotationPanel.setMaximumSize(new Dimension(200, 100)); + rotationPanel.add(rotationLabel); + add(rotationPanel); + { + JPanel rotationPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT)); + rotationPanel2.setPreferredSize(new Dimension(200, 50)); + rotationPanel.add(rotationPanel2); + + JLabel rotation2Label = new JLabel(" "); + rotationPanel2.add(rotation2Label); + rotationField = new JTextField(); + rotationField.setPreferredSize(new Dimension(150, 25)); + { + rotationField.addKeyListener(new KeyListener() { + + public void keyTyped(KeyEvent e) { + try{ + rotationField.setBackground(Color.WHITE); + int rotation = Integer.parseInt(rotationField.getText()) % 360; + rotationField.setText(rotation +""); + selectedObject.setRotation(rotation); + p.update(); + } catch (NumberFormatException nfe) { + rotationField.setBackground(Color.RED); + } + } + public void keyReleased(KeyEvent e) {} + public void keyPressed(KeyEvent e) {} + }); + } + rotationPanel2.add(rotationField); + } + + //SPACER + JPanel spacerPanel = new JPanel(); + spacerPanel.setPreferredSize(new Dimension(200, 50)); + spacerPanel.setMaximumSize(new Dimension(200, 50)); + spacerPanel.setBackground(new Color(220, 220, 220)); + add(spacerPanel); + + //EXAMPLE + JPanel examplePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JLabel exampleLabel = new JLabel("Example"); + exampleLabel.setFont(new Font("Segoe UI", Font.ITALIC, 20)); + examplePanel.setPreferredSize(new Dimension(200, 100)); + examplePanel.setMaximumSize(new Dimension(200, 100)); + examplePanel.add(exampleLabel); + add(examplePanel); + + enableComponents(this, false); + } + + + public void setSelected(DrawObject drOb) + { + selectedObject = drOb; + fillFields(); + enableComponents(this, true); + } + + public void clearSelected() + { + enableComponents(this, false); + clearFields(this); + selectedObject = null; + } + + public void update() { + fillFields(); + } + + private void enableComponents(Container container, boolean enable) { + Component[] components = container.getComponents(); + for (Component component : components) { + component.setEnabled(enable); + if (component instanceof Container) { + enableComponents((Container)component, enable); + } + } + } + + private void clearFields(Container container) { + Component[] components = container.getComponents(); + for (Component component : components) { + if (component instanceof JTextField) { + ((JTextField) component).setText(""); + } + if (component instanceof Container) { + clearFields((Container)component); + } + } + } + + private void fillFields() { + locationXField.setText(Math.round(selectedObject.getPosition().getX()) + ""); + locationYField.setText(Math.round(selectedObject.getPosition().getY()) + ""); + scaleField.setText((double)Math.round(selectedObject.getScale()*10)/10 + ""); + rotationField.setText(Math.round(selectedObject.getRotation()%360) + ""); + } + + public void setPanel(Panel p) + { + this.p = p; + } +} diff --git a/Applicatie/Window.java b/Applicatie/Window.java index dbb87c3..e22ee95 100644 --- a/Applicatie/Window.java +++ b/Applicatie/Window.java @@ -17,8 +17,10 @@ public class Window extends JFrame { //CONTENT PANELS JPanel contentPanel = new JPanel(new BorderLayout()); - Panel fp = new Panel(); + PropertiesPanel pp = new PropertiesPanel(); + Panel fp = new Panel(pp); contentPanel.add(fp, BorderLayout.CENTER); + contentPanel.add(pp, BorderLayout.EAST); setContentPane(contentPanel); //END CONTENT PANELS diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index 6e55622..e6993aa 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -3,71 +3,69 @@ package Listeners; 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.Podium; -import Objects.Toilet; -import Applicatie.Panel; public class Mouse extends MouseAdapter { private Panel panel; - private DrawObject selectedObject; public Mouse(Panel panel) { this.panel = panel; - selectedObject = null; } public void mousePressed(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); panel.setLastClickPosition(clickPoint); panel.setLastMousePosition(e.getPoint()); - - if(e.getX() < 200) + if(e.getY() < 150) { - if(e.getY() < 300) - panel.setDragObject(new Podium(clickPoint)); - else - panel.setDragObject(new Toilet(clickPoint)); - panel.add(panel.getDragObject()); +// 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()) + { + if(e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor()) + { + DrawObject tempDrawObj = panel.createNewDrawObject(i); + tempDrawObj.setPosition(clickPoint); + panel.setDragObject(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 = clickPoint.getX() > o.getRectangle().getX() && clickPoint.getX() < o.getRectangle().getX()+o.getRectangle().getWidth()/10 - && clickPoint.getY() > o.getRectangle().getY() && clickPoint.getY() < o.getRectangle().getY()+o.getRectangle().getHeight()/10; - if(upperLeft) { - System.out.println("lal"); - panel.setClickedOption("upperLeft"); - } - else { - panel.setClickedOption("drag"); - } - } - if(selectedObject != null) - selectedObject.setSelected(false); + { + if(o.contains(clickPoint)) + { panel.setDragObject(o); - o.setSelected(true); - selectedObject = o; - System.out.println("selected"); + panel.getPP().setSelected(o); + return; } + } + panel.getPP().clearSelected(); } - if(panel.getDragObject() == null && selectedObject != null) { - System.out.println("deselected"); - selectedObject.setSelected(false); - selectedObject = null; - } - panel.repaint(); } - public void mouseReleased(MouseEvent e) { panel.setDragObject(null); - panel.repaint(); } } diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 0388ec8..66def0f 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -21,41 +21,33 @@ public class MouseMotion extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); - switch(panel.getClickedOption()) { - case "drag": - if(panel.getDragObject() != null) - panel.getDragObject().setPosition(new Point2D.Double( + if(panel.getDragObject() != null) + { + if(SwingUtilities.isLeftMouseButton(e)){ + + + panel.getDragObject().setPosition(new Point2D.Double( panel.getDragObject().getPosition().getX() - (panel.getLastClickPosition().getX() - clickPoint.getX()), panel.getDragObject().getPosition().getY() - (panel.getLastClickPosition().getY() - clickPoint.getY()))); - break; + } + else + { + + double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); + panel.getDragObject().setRotation(tempval); + } + panel.repaint(); + } + else + { + panel.setCameraPoint(new Point2D.Double( + panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), + panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) + )); + panel.repaint(); } - panel.repaint(); - - -// if(panel.getDragObject() != null) -// { -// if(SwingUtilities.isLeftMouseButton(e)){ -// -// -// -// } -// else -// { -//double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); - //panel.getDragObject().setRotation(tempval); -// -// } -// panel.repaint(); -// } -// else -// { -// panel.setCameraPoint(new Point2D.Double( -// panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), -// panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) -// )); -// panel.repaint(); -// } panel.setLastMousePosition(e.getPoint()); panel.setLastClickPosition(clickPoint); + panel.getPP().update(); } } diff --git a/Listeners/MouseWheel.java b/Listeners/MouseWheel.java index f611f27..1b9269c 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -9,12 +9,14 @@ import Applicatie.Panel; public class MouseWheel implements MouseWheelListener { private Panel panel; - + private int scrollfactor; + public MouseWheel(Panel panel) { this.panel = panel; + scrollfactor = 20; } - + public void mouseWheelMoved(MouseWheelEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); for(DrawObject o : panel.getObjects()) @@ -23,14 +25,42 @@ public class MouseWheel implements MouseWheelListener { { double scale = o.getScale()* 1 + (e.getPreciseWheelRotation()/10.0); o.setScale(scale); + panel.getPP().update(); panel.repaint(); return; } } + + if(e.getY() < 150) + { + + if(e.getPreciseWheelRotation() < 0) + { + if(panel.getScrollfactor() + scrollfactor + panel.getPanelInfoLength() < panel.getWidth()) + { + panel.setScrollfactor(panel.getScrollfactor() + scrollfactor); + } -// cameraPoint - double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation()/10); - panel.setCameraScale((float) cameraScale); + } + else + { + if(panel.getScrollfactor() - scrollfactor >= 0) + { + panel.setScrollfactor(panel.getScrollfactor() - scrollfactor); + } + + } + + } + else + { + // cameraPoint + double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation()/10); + panel.setCameraScale((float) cameraScale); + + } + + panel.repaint(); } } diff --git a/Objects/Entrance.java b/Objects/Entrance.java new file mode 100644 index 0000000..7cd5803 --- /dev/null +++ b/Objects/Entrance.java @@ -0,0 +1,13 @@ +package Objects; +import java.awt.geom.Point2D; + +import Applicatie.DrawObject; + + +public class Entrance extends DrawObject { + + public Entrance(Point2D position) { + super("images/entrance.png", position); + } + +} \ No newline at end of file diff --git a/Objects/Path.java b/Objects/Path.java new file mode 100644 index 0000000..0a2beec --- /dev/null +++ b/Objects/Path.java @@ -0,0 +1,13 @@ +package Objects; +import java.awt.geom.Point2D; + +import Applicatie.DrawObject; + + +public class Path extends DrawObject { + + public Path(Point2D position) { + super("images/path.jpg", position); + } + +} diff --git a/Objects/Toilet.java b/Objects/Toilet.java index bbba72c..162b4d7 100644 --- a/Objects/Toilet.java +++ b/Objects/Toilet.java @@ -7,7 +7,7 @@ import Applicatie.DrawObject; public class Toilet extends DrawObject { public Toilet(Point2D position) { - super("images/toilet.png", position); + super("images/wc.png", position); } } diff --git a/Objects/Wall.java b/Objects/Wall.java new file mode 100644 index 0000000..284f0c5 --- /dev/null +++ b/Objects/Wall.java @@ -0,0 +1,13 @@ +package Objects; +import java.awt.geom.Point2D; + +import Applicatie.DrawObject; + + +public class Wall extends DrawObject { + + public Wall(Point2D position) { + super("images/wall.png", position); + } + +} \ No newline at end of file From c3ca87ad8fcb0447786079028c3379b3d5adbd95 Mon Sep 17 00:00:00 2001 From: xrgman Date: Mon, 16 Mar 2015 19:36:03 +0100 Subject: [PATCH 3/3] Added resizing and scrolling Still buggs while dragging scaled. --- Applicatie/DrawObject.java | 125 ++++++++++++++++++++++++++++++-- Applicatie/Panel.java | 144 ++++++------------------------------- Applicatie/Window.java | 4 +- Listeners/Mouse.java | 84 +++++++++++++--------- Listeners/MouseMotion.java | 93 ++++++++++++++++-------- Listeners/MouseWheel.java | 54 ++------------ Objects/Toilet.java | 2 +- 7 files changed, 261 insertions(+), 245 deletions(-) diff --git a/Applicatie/DrawObject.java b/Applicatie/DrawObject.java index 22b1ad3..adc10f4 100644 --- a/Applicatie/DrawObject.java +++ b/Applicatie/DrawObject.java @@ -1,9 +1,12 @@ package Applicatie; +import java.awt.BasicStroke; +import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; -import java.awt.Point; 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; @@ -14,12 +17,24 @@ public class DrawObject { Point2D position; double rotation; double scale; - Image image; + private Image image; + private Image rotateImage; protected boolean selected; + private Rectangle2D rektAngle; + private Rectangle2D upperLeftCorner; + private Rectangle2D upperRightCorner; + private Rectangle2D bottomLeftCorner; + private Rectangle2D bottomRightCorner; + private Ellipse2D rotateDot; + static final int UPPERLEFT = 0; + static final int UPPERRIGHT = 1; + static final int BOTTOMLEFT = 2; + static final int BOTTOMRIGHT = 3; public DrawObject(String filename, Point2D position) { image = new ImageIcon(filename).getImage(); + rotateImage = new ImageIcon("rotate.png").getImage(); scale = 1; rotation = 0; this.position = position; @@ -29,6 +44,26 @@ public class DrawObject { { AffineTransform tx = getTransform(); g.drawImage(image, tx, null); + if(selected) { + g.setColor(Color.BLACK); + 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 + g.setColor(Color.RED); + rotateDot = new Ellipse2D.Double((rektAngle.getX() + (rektAngle.getWidth()/2))-8,rektAngle.getY()-8,15,15); + g.fill(rotateDot); + } } protected AffineTransform getTransform() { @@ -38,14 +73,83 @@ public class DrawObject { tx.rotate(Math.toRadians(rotation), image.getWidth(null) / 2, image.getHeight(null) / 2); return tx; } + + protected AffineTransform getTransformSelection() { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + tx.translate(position.getX(), position.getY()); + return tx; + } - public boolean contains(Point2D clickPoint) { - Shape shape = new Rectangle2D.Double(0,0,image.getWidth(null), image.getHeight(null)); - return getTransform().createTransformedShape(shape).contains(clickPoint); + /** + * 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() { + AffineTransform tx = new AffineTransform(); + tx.scale(scale, scale); + return tx; } - public void setSelected(boolean b) - { + public boolean contains(Point2D clickPoint) { + Shape shape; + 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); + 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. + * + * @param point + * @param corner + * @return if the clicked point is inside one of the corners + */ + public boolean containsCorner(Point2D point, int corner) { + Rectangle2D chosenCorner = null; + switch(corner) { + case 0: + chosenCorner = upperLeftCorner; + break; + case 1: + chosenCorner = upperRightCorner; + break; + case 2: + chosenCorner = bottomLeftCorner; + break; + case 3: + 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()) + return true; + else + return false; + } + if(point.getX() > chosenCorner.getX() && point.getX() < chosenCorner.getX() + chosenCorner.getWidth() + && point.getY() > chosenCorner.getY() && point.getY() < chosenCorner.getY() + chosenCorner.getHeight()) + return true; + else + return false; + } + + public void setSelected(boolean b) { selected = b; } @@ -85,5 +189,12 @@ public class DrawObject { return selected; } + public Rectangle2D getRectangle() { + return rektAngle; + } + + public void setRectangle(Rectangle2D rectangle) { + rektAngle = rectangle; + } } diff --git a/Applicatie/Panel.java b/Applicatie/Panel.java index 0270e30..ef248c8 100644 --- a/Applicatie/Panel.java +++ b/Applicatie/Panel.java @@ -4,6 +4,7 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.TexturePaint; 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; @@ -18,67 +19,35 @@ import javax.swing.JPanel; import Listeners.Mouse; import Listeners.MouseMotion; import Listeners.MouseWheel; -import Objects.Entrance; -import Objects.Path; import Objects.Podium; -import Objects.Toilet; -import Objects.Wall; -@SuppressWarnings("serial") public class Panel extends JPanel { BufferedImage background; - BufferedImage podiumImage, toiletImage, entranceImage, pathImage,wallImage; - - private int panelInfox, panelInfoy,scrollfactor; - - private ArrayList panelInfo = new ArrayList(); -// private ArrayList panelTypes = new ArrayList(); ArrayList objects = new ArrayList<>(); DrawObject dragObject = null; + private DrawObject selectedObject; + private String clickedOption = "drag"; Point2D cameraPoint = new Point2D.Double(getWidth()/2,getHeight()/2); float cameraScale = 1; - PropertiesPanel pp; - Point2D lastClickPosition = new Point(0,0); Point lastMousePosition = 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 image aan panelInfo toe en het object aan panelTypes. - //en maak een case statement die een new Object returnt in createNewDrawObject. - - - Panel(PropertiesPanel pp) + Panel() { - this.pp = pp; - pp.setPanel(this); try { background = ImageIO.read(new File("images/grass.jpg")); - podiumImage = ImageIO.read(new File("images/stageIcon.png")); - toiletImage = ImageIO.read(new File("images/wcIcon.png")); - entranceImage = ImageIO.read(new File("images/entranceIcon.png")); - pathImage = ImageIO.read(new File("images/pathIcon.png")); - wallImage = ImageIO.read(new File("images/wallIcon.png")); } catch (IOException e) { e.printStackTrace(); } - panelInfo.add(podiumImage); - panelInfo.add(toiletImage); - panelInfo.add(entranceImage); - panelInfo.add(pathImage); - panelInfo.add(wallImage); - panelInfox = 0; - panelInfoy = 0; - scrollfactor = 0; - -// objects.add(new Podium(new Point2D.Double(100, 100))); -// objects.add(new Podium(new Point2D.Double(500, 100))); -// objects.add(new Podium(new Point2D.Double(300, 400))); + objects.add(new Podium(new Point2D.Double(100, 100))); + objects.add(new Podium(new Point2D.Double(500, 100))); + objects.add(new Podium(new Point2D.Double(300, 400))); addMouseListener(new Mouse(this)); @@ -88,35 +57,6 @@ public class Panel extends JPanel { } - public int getPanelInfoLength() - { - int panelInfoLength = 0; - for(BufferedImage image : panelInfo) - { - panelInfoLength += image.getWidth(); - } - - return panelInfoLength; - } - - public DrawObject createNewDrawObject(int index) - { - switch(index) - { - case 0: - return new Podium(null); - case 1: - return new Toilet(null); - case 2: - return new Entrance(null); - case 3: - return new Path(null); - case 4: - return new Wall(null); - default: - return null; - } - } public void add(DrawObject dragObject) { @@ -127,30 +67,21 @@ public class Panel extends JPanel { { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; - g2.setClip(new Rectangle2D.Double(0,0, getWidth(), 300)); + g2.setClip(new Rectangle2D.Double(0,0, 200, getHeight())); -// g2.fill(new Ellipse2D.Double(0,0,300,300)); + g2.fill(new Ellipse2D.Double(0,0,300,300)); -// g2.drawImage(podiumImage, 0, 0, null); - for(BufferedImage image : panelInfo) - { - g2.drawImage(image, panelInfox + scrollfactor, panelInfoy, null); - panelInfox += image.getWidth(); - } - panelInfox = 0; - g2.setClip(new Rectangle2D.Double(0,150, getWidth(), getHeight())); + g2.setClip(new Rectangle2D.Double(200,0, getWidth()-200, getHeight())); AffineTransform oldTransform = g2.getTransform(); g2.setTransform(getCamera()); TexturePaint p = new TexturePaint(background, new Rectangle2D.Double(0, 0, 100, 100)); g2.setPaint(p); - g2.fill(new Rectangle2D.Double(-1920,-1080,3840,2160)); + g2.fill(new Rectangle2D.Double(0,0,1920,1080)); - for(DrawObject o : objects){ + for(DrawObject o : objects) o.draw(g2); - } - g2.setClip(null); @@ -161,7 +92,6 @@ public class Panel extends JPanel { AffineTransform tx = new AffineTransform(); tx.translate(-cameraPoint.getX() + getWidth()/2, -cameraPoint.getY() + getHeight()/2); tx.scale(cameraScale, cameraScale); - return tx; } @@ -174,24 +104,18 @@ public class Panel extends JPanel { return null; } - - public void setBackground(BufferedImage background) { this.background = background; } - - public ArrayList getObjects() { return objects; } - public void setObjects(ArrayList objects) { this.objects = objects; } - public DrawObject getDragObject() { return dragObject; } @@ -242,50 +166,22 @@ public class Panel extends JPanel { } - public BufferedImage getPodiumImage() { - return podiumImage; + public DrawObject getSelectedObject() { + return selectedObject; } - public void setPodiumImage(BufferedImage podiumImage) { - this.podiumImage = podiumImage; + public void setSelectedObject(DrawObject selectedObject) { + this.selectedObject = selectedObject; } - public ArrayList getPanelInfo() { - return panelInfo; + public String getClickedOption() { + return clickedOption; } - public void setPanelInfo(ArrayList panelInfo) { - this.panelInfo = panelInfo; + public void setClickedOption(String clickedOption) { + this.clickedOption = clickedOption; } - - - public int getScrollfactor() { - return scrollfactor; - } - - public void setScrollfactor(int scrollfactor) { - this.scrollfactor = scrollfactor; - } - - public int getPanelInfox() { - return panelInfox; - } - - public void setPanelInfox(int panelInfox) { - this.panelInfox = panelInfox; - } - - public PropertiesPanel getPP() - { - return pp; - } - - public void update() - { - repaint(); - } - } diff --git a/Applicatie/Window.java b/Applicatie/Window.java index e22ee95..dbb87c3 100644 --- a/Applicatie/Window.java +++ b/Applicatie/Window.java @@ -17,10 +17,8 @@ public class Window extends JFrame { //CONTENT PANELS JPanel contentPanel = new JPanel(new BorderLayout()); - PropertiesPanel pp = new PropertiesPanel(); - Panel fp = new Panel(pp); + Panel fp = new Panel(); contentPanel.add(fp, BorderLayout.CENTER); - contentPanel.add(pp, BorderLayout.EAST); setContentPane(contentPanel); //END CONTENT PANELS diff --git a/Listeners/Mouse.java b/Listeners/Mouse.java index e6993aa..7c47296 100644 --- a/Listeners/Mouse.java +++ b/Listeners/Mouse.java @@ -3,69 +3,85 @@ package Listeners; 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.Podium; +import Objects.Toilet; +import Applicatie.Panel; public class Mouse extends MouseAdapter { private Panel panel; + private DrawObject selectedObject; public Mouse(Panel panel) { this.panel = panel; + selectedObject = null; } public void mousePressed(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); panel.setLastClickPosition(clickPoint); panel.setLastMousePosition(e.getPoint()); - if(e.getY() < 150) + + if(e.getX() < 200) { -// 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()) - { - if(e.getX() >= panel.getScrollfactor() && e.getX() < last + image.getWidth() + panel.getScrollfactor()) - { - DrawObject tempDrawObj = panel.createNewDrawObject(i); - tempDrawObj.setPosition(clickPoint); - panel.setDragObject(tempDrawObj); - break; - } - i++; - last += image.getWidth(); - - } - if(panel.getDragObject() != null) - { - panel.add(panel.getDragObject()); - } + if(e.getY() < 300) + panel.setDragObject(new Podium(clickPoint)); + else + panel.setDragObject(new Toilet(clickPoint)); + panel.add(panel.getDragObject()); } else { for(DrawObject o : panel.getObjects()) - { - if(o.contains(clickPoint)) - { + 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); panel.setDragObject(o); - panel.getPP().setSelected(o); - return; + o.setSelected(true); + selectedObject = o; } - } - panel.getPP().clearSelected(); } + if(panel.getDragObject() == null && selectedObject != null) { + System.out.println("deselected"); + selectedObject.setSelected(false); + selectedObject = null; + } + panel.repaint(); } + public void mouseReleased(MouseEvent e) { panel.setDragObject(null); + panel.setClickedOption("drag"); + panel.repaint(); } } diff --git a/Listeners/MouseMotion.java b/Listeners/MouseMotion.java index 66def0f..d6563ed 100644 --- a/Listeners/MouseMotion.java +++ b/Listeners/MouseMotion.java @@ -1,13 +1,8 @@ package Listeners; -import Applicatie.Panel; - import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.geom.Point2D; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; - import Applicatie.Panel; public class MouseMotion extends MouseMotionAdapter { @@ -21,33 +16,75 @@ public class MouseMotion extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { Point2D clickPoint = panel.getClickPoint(e.getPoint()); - if(panel.getDragObject() != null) - { - if(SwingUtilities.isLeftMouseButton(e)){ - - - panel.getDragObject().setPosition(new Point2D.Double( - panel.getDragObject().getPosition().getX() - (panel.getLastClickPosition().getX() - clickPoint.getX()), - panel.getDragObject().getPosition().getY() - (panel.getLastClickPosition().getY() - clickPoint.getY()))); + if(panel.getDragObject() != null) { + Point2D objectPoint = panel.getDragObject().getObjectPoint(panel.getDragObject().getPosition()); + switch(panel.getClickedOption()) { + case "drag": + if(panel.getDragObject() != null) + panel.getDragObject().setPosition(new Point2D.Double( + (panel.getDragObject().getPosition().getX() ) - ((panel.getLastClickPosition().getX() - clickPoint.getX()) ), + (panel.getDragObject().getPosition().getY()) - (panel.getLastClickPosition().getY() - clickPoint.getY()) )); + 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()) { + resizeSmaller(); + } + break; + case "upperRight": + 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(); + } + break; + case "bottomLeft": + 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(); + } + break; + case "bottomRight": + 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(); + } + break; + case "rotate": + double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); + panel.getDragObject().setRotation(tempval); + break; } - else - { - - double tempval = panel.getDragObject().getRotation() + (panel.getLastClickPosition().getX() - clickPoint.getX()); - panel.getDragObject().setRotation(tempval); - } - panel.repaint(); } - else - { + else { panel.setCameraPoint(new Point2D.Double( - panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), - panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) - )); - panel.repaint(); - } + panel.getCameraPoint().getX() + (panel.getLastMousePosition().getX() - e.getX()), + panel.getCameraPoint().getY() + (panel.getLastMousePosition().getY() - e.getY()) + )); + } + panel.repaint(); panel.setLastMousePosition(e.getPoint()); panel.setLastClickPosition(clickPoint); - panel.getPP().update(); + } + + private void resizeBigger() { + double scale = panel.getDragObject().getScale()*1 + 0.02; + panel.getDragObject().setScale(scale); + panel.getDragObject().setPosition(new Point2D.Double(panel.getDragObject().getPosition().getX()-2,panel.getDragObject().getPosition().getY()-2)); + } + + private void resizeSmaller() { + if(panel.getDragObject().getScale() > 0.2) { + double scale = panel.getDragObject().getScale()*1 - 0.02; + panel.getDragObject().setScale(scale); + 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 1b9269c..b3221da 100644 --- a/Listeners/MouseWheel.java +++ b/Listeners/MouseWheel.java @@ -9,58 +9,16 @@ import Applicatie.Panel; public class MouseWheel implements MouseWheelListener { private Panel panel; - private int scrollfactor; - + public MouseWheel(Panel panel) { this.panel = panel; - scrollfactor = 20; } - - public void mouseWheelMoved(MouseWheelEvent e) { - Point2D clickPoint = panel.getClickPoint(e.getPoint()); - for(DrawObject o : panel.getObjects()) - { - if(o.contains(clickPoint)) - { - double scale = o.getScale()* 1 + (e.getPreciseWheelRotation()/10.0); - o.setScale(scale); - panel.getPP().update(); - panel.repaint(); - return; - } - } - - if(e.getY() < 150) - { - - if(e.getPreciseWheelRotation() < 0) - { - if(panel.getScrollfactor() + scrollfactor + panel.getPanelInfoLength() < panel.getWidth()) - { - panel.setScrollfactor(panel.getScrollfactor() + scrollfactor); - } - - } - else - { - if(panel.getScrollfactor() - scrollfactor >= 0) - { - panel.setScrollfactor(panel.getScrollfactor() - scrollfactor); - } - - } - - } - else - { - // cameraPoint - double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation()/10); - panel.setCameraScale((float) cameraScale); - - } - - + + public void mouseWheelMoved(MouseWheelEvent e) { +// cameraPoint + double cameraScale = panel.getCameraScale() * 1 - (e.getPreciseWheelRotation()/10); + panel.setCameraScale((float) cameraScale); panel.repaint(); } } diff --git a/Objects/Toilet.java b/Objects/Toilet.java index 162b4d7..bbba72c 100644 --- a/Objects/Toilet.java +++ b/Objects/Toilet.java @@ -7,7 +7,7 @@ import Applicatie.DrawObject; public class Toilet extends DrawObject { public Toilet(Point2D position) { - super("images/wc.png", position); + super("images/toilet.png", position); } }