/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package feuille.drawing.lib; import java.awt.*; import java.awt.geom.CubicCurve2D; import java.awt.geom.GeneralPath; import javax.swing.ImageIcon; import feuille.drawing.operation.Center; import feuille.drawing.operation.Resize; import feuille.drawing.operation.Selection; import feuille.drawing.operation.Shear; import feuille.drawing.operation.Translation; /** * * @author The Wingate 2940 */ public class Sheet extends javax.swing.JPanel { //Pour dessiner toutes les formes, tout le temps. ShapesList slist = new ShapesList(); //Pour visualiser une ligne aux coordonnées du pointeur de la souris. private int mouseX = -1; private int mouseY = -1; //Pour pouvoir déplacer l'image de fond (s'il y en a une). private int imageX = 0; private int imageY = 0; //Pour connaitre l'image à dessiner (s'il y en a une). private ImageIcon img = null; //Pour connaitre la transparence de l'image (0f = transparent ; 1f=opaque). private Float alpha = 1f; //Pour remplir la zone avec une couleur private GeneralPath gp = null; //Pour rendre transparente la zone private Float gpAlpha = 0.2f; private Image imgDraft = null; private int scale = 1; private Thickness thickness = Thickness.Big; private java.util.List<Layer> layerList = null; private Selection selection = new Selection(); private final java.util.List<Center> centers = new java.util.ArrayList<>(); private final java.util.List<Resize> resizes = new java.util.ArrayList<>(); private final java.util.List<Shear> shears = new java.util.ArrayList<>(); private final java.util.List<Translation> translations = new java.util.ArrayList<>(); private java.util.List<feuille.drawing.ornament.IShape> oml = new java.util.ArrayList<>(); private boolean hasGrid = false; public Sheet(){ init(); } private void init(){ setLayout(null); } public enum Thickness{ Big(10),Large(8),Medium(6),Small(4); private final int thick; Thickness(int thick){ this.thick = thick; } public int getThickness(){ return thick; } } @Override public void paint(Graphics g){ //Charge la classe Graphics2D pour pouvoir avoir accès à ses méthodes. Graphics2D g2d = (Graphics2D)g; //Définit la couleur blanche comme couleur de fond par défaut et colorie le fond. g2d.setColor(Color.white); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.scale(scale, scale); //Essaie de charger puis dessiner une image et changer sa transparence et sa position. if(img!=null){ Composite originalComposite = g2d.getComposite(); g2d.setComposite(makeComposite(alpha)); g2d.drawImage(img.getImage(), imageX, imageY, null); g2d.setComposite(originalComposite); } //Essaie de charger puis dessiner une image et changer sa transparence et sa position. if(imgDraft!=null){ Composite originalComposite = g2d.getComposite(); g2d.setComposite(makeComposite(alpha)); g2d.drawImage(imgDraft, 0, 0, null); g2d.setComposite(originalComposite); } //Définit et dessine les axes du milieu et le quadrillage. g2d.setColor(new Color(216,255,253)); g2d.setStroke(new BasicStroke(2f)); g2d.drawLine((getWidth()/scale)/2, 0, (getWidth()/scale)/2, getHeight()); //vertical g2d.drawLine(0, (getHeight()/scale)/2, getWidth(), (getHeight()/scale)/2); //horizontal g2d.setColor(new Color(234,216,255)); g2d.setStroke(new BasicStroke(1f)); int i = getWidth()/2; while(i>=0){ i=i-25; g2d.drawLine(i, 0, i, getHeight()); } i = getWidth()/2; while(i<=getWidth()){ i=i+25; g2d.drawLine(i, 0, i, getHeight()); } i = getHeight()/2; while(i>=0){ i=i-25; g2d.drawLine(0, i, getWidth(), i); } i = getHeight()/2; while(i<=getHeight()){ i=i+25; g2d.drawLine(0, i, getWidth(), i); } // Montre le path en remplissant la zone if(layerList!=null){ Composite originalComposite = g2d.getComposite();//Get default g2d.setComposite(makeComposite(gpAlpha));//Change the transparency for(Layer lay : layerList){ if(lay!=null && lay.isSelected()==false){ g2d.setColor(lay.getColor()); g2d.fill(lay.getGeneralPath()); }else if(lay!=null && lay.isSelected()==true){ g2d.setColor(lay.getColor()); g2d.fill(lay.getGeneralPath()); } } g2d.setComposite(originalComposite);//Reset default }else{ if(gp!=null){ Composite originalComposite = g2d.getComposite();//Get default g2d.setComposite(makeComposite(gpAlpha));//Change the transparency g2d.setColor(Color.green); g2d.fill(gp); g2d.setComposite(originalComposite);//Reset default } } //Dessine les axes correspondant au curseur de la souris. g2d.setColor(Color.pink); if(hasGrid==true){ java.awt.Point p = getGridCoordinates(mouseX, mouseY); mouseX = p.x; mouseY = p.y; } g2d.drawLine(mouseX, 0, mouseX, getHeight()); g2d.drawLine(0, mouseY, getWidth(), mouseY); //Dessine les coordonnées près des axes correspondant au curseur de la souris. g2d.drawString( (mouseX-(getWidth()/scale)/2)+";" +(mouseY-(getHeight()/scale)/2),mouseX+5, mouseY-5); //Dessine les nombres aux bords ; ils correspondent aux coordonnées. // g2d.setColor(Color.darkGray); // i = (getWidth()/scale)/2; // while(i>=0){ i=i-50; g2d.drawString(Integer.toString(i-(getWidth()/scale)/2), i-10, 10); } // i = (getWidth()/scale)/2; // while(i<=getWidth()){ i=i+50; g2d.drawString(Integer.toString(i-(getWidth()/scale)/2), i-10, 10); } // i = (getHeight()/scale)/2; // while(i>=0){ i=i-50; g2d.drawString(Integer.toString((i-(getHeight()/scale)/2)), 10, i+5); } // i = (getHeight()/scale)/2; // while(i<=getHeight()){ i=i+50; g2d.drawString(Integer.toString((i-(getHeight()/scale)/2)), 10, i+5); } //Change la couleur en rouge (cette ligne est inutile, merci de ne pas en tenir compte.) g2d.setColor(Color.red); // Consulte la liste des formes et les dessine en utilisant des couleurs différentes. for(IShape s : slist.getShapes()){ if (s instanceof Line){ Line l = (Line)s; g2d.setColor(Color.red); g2d.drawLine((int)l.getOriginPoint().getX(),(int)l.getOriginPoint().getY(), (int)l.getLastPoint().getX(),(int)l.getLastPoint().getY()); }else if (s instanceof Bezier){ Bezier b = (Bezier)s; CubicCurve2D c = new CubicCurve2D.Double(); c.setCurve((int)b.getOriginPoint().getX(), (int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(), (int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.setColor(Color.magenta); g2d.draw(c); //fait en sorte de mieux voir les points de contrôle g2d.setColor(Color.gray); java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)b.getOriginPoint().getX(),(int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(),(int)b.getControl1Point().getY()); g2d.drawLine((int)b.getControl1Point().getX(),(int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY()); g2d.drawLine((int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.setStroke(stroke); }else if (s instanceof Point){ Point p = (Point)s; int x = (int)p.getOriginPoint().getX(); int y = (int)p.getOriginPoint().getY(); g2d.setColor(Color.blue); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if(s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); g2d.setColor(Color.orange); g2d.fillOval( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof BSpline){ BSpline bs = (BSpline)s; ControlPoint c = null; for(ControlPoint cp : bs.getControlPoints()){ g2d.setColor(Color.orange); int x1 = (int)cp.getOriginPoint().getX(); int y1 = (int)cp.getOriginPoint().getY(); g2d.drawOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); g2d.setColor(Color.gray); g2d.fillOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); if(c!=null){ g2d.setColor(Color.orange); java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)c.getOriginPoint().getX(),(int)c.getOriginPoint().getY(), (int)cp.getOriginPoint().getX(),(int)cp.getOriginPoint().getY()); g2d.setStroke(stroke); } c = cp; } g2d.setColor(Color.black); bs.getBSplineCurve().paintCurve(g2d, 5, true); if(bs.isNextExist()){ g2d.setColor(Color.pink); g2d.fillRect( (int)bs.getNextPoint().getX()-thickness.getThickness()/2, (int)bs.getNextPoint().getY()-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } }else if (s instanceof Move){ Move m = (Move)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.setColor(new Color(152,0,255)); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof ReStart){ ReStart m = (ReStart)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.setColor(new Color(255,110,33)); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } } //Dessine le centre de rotation s'il existe for(Resize resize : resizes){ if(resize.isSet()){ g2d.setColor(Color.magenta); g2d.fillOval(resize.getX()-15, resize.getY()-15, 30, 30); g2d.setColor(new Color(199,0,255)); if(resize.getPreviewShapes().isEmpty()==false){ for(IShape s : resize.getPreviewShapes()){ if (s instanceof Line){ Line l = (Line)s; g2d.drawLine((int)l.getOriginPoint().getX(),(int)l.getOriginPoint().getY(), (int)l.getLastPoint().getX(),(int)l.getLastPoint().getY()); }else if (s instanceof Bezier){ Bezier b = (Bezier)s; CubicCurve2D c = new CubicCurve2D.Double(); c.setCurve((int)b.getOriginPoint().getX(), (int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(), (int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.draw(c); //fait en sorte de mieux voir les points de contrôle java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)b.getOriginPoint().getX(),(int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(),(int)b.getControl1Point().getY()); g2d.drawLine((int)b.getControl1Point().getX(),(int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY()); g2d.drawLine((int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.setStroke(stroke); }else if (s instanceof Point){ Point p = (Point)s; int x = (int)p.getOriginPoint().getX(); int y = (int)p.getOriginPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if(s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); g2d.fillOval( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof BSpline){ BSpline bs = (BSpline)s; ControlPoint c = null; for(ControlPoint cp : bs.getControlPoints()){ int x1 = (int)cp.getOriginPoint().getX(); int y1 = (int)cp.getOriginPoint().getY(); g2d.drawOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); g2d.fillOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); if(c!=null){ java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)c.getOriginPoint().getX(),(int)c.getOriginPoint().getY(), (int)cp.getOriginPoint().getX(),(int)cp.getOriginPoint().getY()); g2d.setStroke(stroke); } c = cp; } bs.getBSplineCurve().paintCurve(g2d, 5, true); if(bs.isNextExist()){ g2d.fillRect( (int)bs.getNextPoint().getX()-thickness.getThickness()/2, (int)bs.getNextPoint().getY()-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } }else if (s instanceof Move){ Move m = (Move)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof ReStart){ ReStart m = (ReStart)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } } } } } //Dessine le centre de rotation s'il existe for(Center center : centers){ if(center.isSet()){ g2d.setColor(Color.pink); g2d.fillOval(center.getX()-15, center.getY()-15, 30, 30); g2d.setColor(new Color(199,0,255)); if(center.getPreviewShapes().isEmpty()==false){ for(IShape s : center.getPreviewShapes()){ if (s instanceof Line){ Line l = (Line)s; g2d.drawLine((int)l.getOriginPoint().getX(),(int)l.getOriginPoint().getY(), (int)l.getLastPoint().getX(),(int)l.getLastPoint().getY()); }else if (s instanceof Bezier){ Bezier b = (Bezier)s; CubicCurve2D c = new CubicCurve2D.Double(); c.setCurve((int)b.getOriginPoint().getX(), (int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(), (int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.draw(c); //fait en sorte de mieux voir les points de contrôle java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)b.getOriginPoint().getX(),(int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(),(int)b.getControl1Point().getY()); g2d.drawLine((int)b.getControl1Point().getX(),(int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY()); g2d.drawLine((int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.setStroke(stroke); }else if (s instanceof Point){ Point p = (Point)s; int x = (int)p.getOriginPoint().getX(); int y = (int)p.getOriginPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if(s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); g2d.fillOval( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof BSpline){ BSpline bs = (BSpline)s; ControlPoint c = null; for(ControlPoint cp : bs.getControlPoints()){ int x1 = (int)cp.getOriginPoint().getX(); int y1 = (int)cp.getOriginPoint().getY(); g2d.drawOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); g2d.fillOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); if(c!=null){ java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)c.getOriginPoint().getX(),(int)c.getOriginPoint().getY(), (int)cp.getOriginPoint().getX(),(int)cp.getOriginPoint().getY()); g2d.setStroke(stroke); } c = cp; } bs.getBSplineCurve().paintCurve(g2d, 5, true); if(bs.isNextExist()){ g2d.fillRect( (int)bs.getNextPoint().getX()-thickness.getThickness()/2, (int)bs.getNextPoint().getY()-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } }else if (s instanceof Move){ Move m = (Move)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof ReStart){ ReStart m = (ReStart)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } } } } } //Dessine le point à ajouter s'il existe dans la sélection if(selection.getPointToAdd()!=null){ selection.drawPointToAdd(g2d); } //Dessine le rectangle de sélection de groupe if(selection.exists()){ selection.drawSelection(g2d); } // RE-Consulte la liste des formes et entoure les formes sélectionnées. for(IShape s : slist.getShapes()){ if(s.isFirstInSelection()){ g2d.setColor(new Color(147,71,255)); }else{ g2d.setColor(Color.red); } g2d.setStroke(new BasicStroke(3f)); if(s instanceof Point){ Point p = (Point)s; if(p.isInSelection()){ int x = (int)p.getOriginPoint().getX(); int y = (int)p.getOriginPoint().getY(); int delta = thickness.getThickness()+7; g2d.drawOval(x-delta/2, y-delta/2, delta, delta); } } if(s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; if(cp.isInSelection()){ int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); int delta = thickness.getThickness()+7; g2d.drawOval(x-delta/2, y-delta/2, delta, delta); } } if(s instanceof ReStart){ ReStart m = (ReStart)s; if(m.isInSelection()){ int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); int delta = thickness.getThickness()+7; g2d.drawOval(x-delta/2, y-delta/2, delta, delta); } } if(s instanceof Move){ Move n = (Move)s; if(n.isInSelection()){ int x = (int)n.getLastPoint().getX(); int y = (int)n.getLastPoint().getY(); int delta = thickness.getThickness()+7; g2d.drawOval(x-delta/2, y-delta/2, delta, delta); } } if(s instanceof BSpline){ BSpline bs = (BSpline)s; for(ControlPoint cp : bs.getControlPoints()){ if(cp.isInSelection()){ int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); int delta = thickness.getThickness()+7; g2d.drawOval(x-delta/2, y-delta/2, delta, delta); } } } } //Dessine le rectangle génénal du shearing for(Shear shear : shears){ if(shear.isSet()){ shear.drawLimits(g2d); g2d.setColor(new Color(199,0,255)); if(shear.getPreviewShapes().isEmpty()==false){ for(IShape s : shear.getPreviewShapes()){ if (s instanceof Line){ Line l = (Line)s; g2d.drawLine((int)l.getOriginPoint().getX(),(int)l.getOriginPoint().getY(), (int)l.getLastPoint().getX(),(int)l.getLastPoint().getY()); }else if (s instanceof Bezier){ Bezier b = (Bezier)s; CubicCurve2D c = new CubicCurve2D.Double(); c.setCurve((int)b.getOriginPoint().getX(), (int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(), (int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.draw(c); //fait en sorte de mieux voir les points de contrôle java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)b.getOriginPoint().getX(),(int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(),(int)b.getControl1Point().getY()); g2d.drawLine((int)b.getControl1Point().getX(),(int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY()); g2d.drawLine((int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.setStroke(stroke); }else if (s instanceof Point){ Point p = (Point)s; int x = (int)p.getOriginPoint().getX(); int y = (int)p.getOriginPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if(s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); g2d.fillOval( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof BSpline){ BSpline bs = (BSpline)s; ControlPoint c = null; for(ControlPoint cp : bs.getControlPoints()){ int x1 = (int)cp.getOriginPoint().getX(); int y1 = (int)cp.getOriginPoint().getY(); g2d.drawOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); g2d.fillOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); if(c!=null){ java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)c.getOriginPoint().getX(),(int)c.getOriginPoint().getY(), (int)cp.getOriginPoint().getX(),(int)cp.getOriginPoint().getY()); g2d.setStroke(stroke); } c = cp; } bs.getBSplineCurve().paintCurve(g2d, 5, true); if(bs.isNextExist()){ g2d.fillRect( (int)bs.getNextPoint().getX()-thickness.getThickness()/2, (int)bs.getNextPoint().getY()-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } }else if (s instanceof Move){ Move m = (Move)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof ReStart){ ReStart m = (ReStart)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } } } } } g2d.setStroke(new BasicStroke(1f)); for(Translation translation : translations){ if(translation.isSet()){ g2d.setColor(Color.pink); g2d.fillOval(translation.getX()-15, translation.getY()-15, 30, 30); g2d.setColor(new Color(199,0,255)); if(translation.getPreviewShapes().isEmpty()==false){ for(IShape s : translation.getPreviewShapes()){ if (s instanceof Line){ Line l = (Line)s; g2d.drawLine((int)l.getOriginPoint().getX(),(int)l.getOriginPoint().getY(), (int)l.getLastPoint().getX(),(int)l.getLastPoint().getY()); }else if (s instanceof Bezier){ Bezier b = (Bezier)s; CubicCurve2D c = new CubicCurve2D.Double(); c.setCurve((int)b.getOriginPoint().getX(), (int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(), (int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.draw(c); //fait en sorte de mieux voir les points de contrôle java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)b.getOriginPoint().getX(),(int)b.getOriginPoint().getY(), (int)b.getControl1Point().getX(),(int)b.getControl1Point().getY()); g2d.drawLine((int)b.getControl1Point().getX(),(int)b.getControl1Point().getY(), (int)b.getControl2Point().getX(), (int)b.getControl2Point().getY()); g2d.drawLine((int)b.getControl2Point().getX(), (int)b.getControl2Point().getY(), (int)b.getLastPoint().getX(), (int)b.getLastPoint().getY()); g2d.setStroke(stroke); }else if (s instanceof Point){ Point p = (Point)s; int x = (int)p.getOriginPoint().getX(); int y = (int)p.getOriginPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if(s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; int x = (int)cp.getOriginPoint().getX(); int y = (int)cp.getOriginPoint().getY(); g2d.fillOval( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof BSpline){ BSpline bs = (BSpline)s; ControlPoint c = null; for(ControlPoint cp : bs.getControlPoints()){ int x1 = (int)cp.getOriginPoint().getX(); int y1 = (int)cp.getOriginPoint().getY(); g2d.drawOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); g2d.fillOval( x1-thickness.getThickness()/2, y1-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); if(c!=null){ java.awt.Stroke stroke = g2d.getStroke(); float[] dash = {5, 5}; g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 5, dash, 0)); g2d.drawLine((int)c.getOriginPoint().getX(),(int)c.getOriginPoint().getY(), (int)cp.getOriginPoint().getX(),(int)cp.getOriginPoint().getY()); g2d.setStroke(stroke); } c = cp; } bs.getBSplineCurve().paintCurve(g2d, 5, true); if(bs.isNextExist()){ g2d.fillRect( (int)bs.getNextPoint().getX()-thickness.getThickness()/2, (int)bs.getNextPoint().getY()-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } }else if (s instanceof Move){ Move m = (Move)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); }else if (s instanceof ReStart){ ReStart m = (ReStart)s; int x = (int)m.getLastPoint().getX(); int y = (int)m.getLastPoint().getY(); g2d.fillRect( x-thickness.getThickness()/2, y-thickness.getThickness()/2, thickness.getThickness(), thickness.getThickness()); } } } } } for(feuille.drawing.ornament.IShape s : oml){ if(s instanceof feuille.drawing.ornament.OrnMMLine){ feuille.drawing.ornament.OrnMMLine l = (feuille.drawing.ornament.OrnMMLine)s; l.draw(g2d, Color.blue); }else if(s instanceof feuille.drawing.ornament.OrnMMBezier){ feuille.drawing.ornament.OrnMMBezier b = (feuille.drawing.ornament.OrnMMBezier)s; b.draw(g2d, Color.blue); }else if(s instanceof feuille.drawing.ornament.OrnPoint){ feuille.drawing.ornament.OrnPoint p = (feuille.drawing.ornament.OrnPoint)s; p.draw(g2d, Color.blue); }else if(s instanceof feuille.drawing.ornament.OrnControlPoint){ feuille.drawing.ornament.OrnControlPoint cp = (feuille.drawing.ornament.OrnControlPoint)s; cp.draw(g2d, Color.blue); } } } public void updateThickness(Thickness thickness){ this.thickness = thickness; } /** Met à jour la liste de formes et demande une mise à jour de l'affichage. * @param slist */ public void updateShapesList(ShapesList slist){ this.slist = slist; this.repaint(); } /** Demande une mise à jour de l'affichage. */ public void updateDrawing(){ repaint(); } /** Met à jour les coordonnées de position de la souris. * @param mouseX * @param mouseY */ public void updateMousePosition(int mouseX, int mouseY){ this.mouseX = mouseX; this.mouseY = mouseY; } /** Met à jour les coordonnées de position de l'image * en ajoutant la valeur de déplacement. * @param x * @param y */ public void updateImagePosition(int x, int y){ imageX = imageX+x; imageY = imageY+y; } /** Met à jour l'image. * @param img */ public void updateImage(ImageIcon img){ this.img = img; } /** Met à jour la transparence de l'image. * @param alpha */ public void updateImageTransparency(Float alpha){ this.alpha = alpha; } /** Met à jour le chemin de la zone. * @param gp */ public void updateGeneralPath(GeneralPath gp){ this.gp = gp; } /** Met à jour la transparence pour la zone. * @param gpAlpha */ public void updateGeneralPathTransparency(Float gpAlpha){ this.gpAlpha = gpAlpha; } // Gestion de la transparence private AlphaComposite makeComposite(float alpha) { int type = AlphaComposite.SRC_OVER; return(AlphaComposite.getInstance(type, alpha)); } public void setScaleXY(int scale){ this.scale = scale; setPreferredSize(new java.awt.Dimension(setSizeOfDrawing()*scale,setSizeOfDrawing()*scale)); revalidate(); repaint(); } public int getScaleXY(){ return scale; } public void updateImageRealPosition(int x, int y){ imageX = x; imageY = y; } private int setSizeOfDrawing(){ java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit(); java.awt.Dimension dim = toolkit.getScreenSize(); int big = (int)dim.getWidth(); if(dim.getWidth()<dim.getHeight()){ big = (int)dim.getHeight(); } int size = 1000; while(size<big){ size+=500; } return size; } public void setLayerList(java.util.List<Layer> layerList){ this.layerList = layerList; } public void updateDraft(Image imgDraft){ this.imgDraft = imgDraft; } public int getImagePositionX(){ return imageX; } public int getImagePositionY(){ return imageY; } public int getImageWidth(){ return img.getIconWidth(); } public int getImageHeight(){ return img.getIconHeight(); } public void updateSelection(Selection selection, boolean clear){ if(clear==true){ selection.cleanList(slist); } this.selection = selection; repaint(); } public void updateCenter(Center center){ centers.clear(); centers.add(center); repaint(); } public void updateResize(Resize resize){ resizes.clear(); resizes.add(resize); repaint(); } public void updateShear(Shear shear){ shears.clear(); shears.add(shear); repaint(); } public void updateTranslation(Translation translation){ translations.clear(); translations.add(translation); repaint(); } public void updateCenter(java.util.List<Center> c){ centers.clear(); centers.addAll(c); repaint(); } public void updateResize(java.util.List<Resize> r){ resizes.clear(); resizes.addAll(r); repaint(); } public void updateShear(java.util.List<Shear> s){ shears.clear(); shears.addAll(s); repaint(); } public void updateTranslation(java.util.List<Translation> t){ translations.clear(); translations.addAll(t); repaint(); } public void updateOrnamentForMain(java.util.List<feuille.drawing.ornament.IShape> oml){ this.oml = oml; repaint(); } public void updateGrid(boolean hasGrid){ this.hasGrid = hasGrid; repaint(); } public static java.awt.Point getGridCoordinates(int x, int y){ //On compte combien de fois on trouve le nombre 25 dans x et y float nX = x/25f; float nY = y/25f; //On arrondit et on multiplie ce chiffre pour se positionner sur la grille int newX = Math.round(nX) * 25; int newY = Math.round(nY) * 25; //On retourne le nouveau point return new java.awt.Point(newX, newY); } }