/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package feuille.drawing.lib; import feuille.drawing.lib.ReStart; import feuille.drawing.lib.Point; import feuille.drawing.lib.Move; import feuille.drawing.lib.Line; import feuille.drawing.lib.IShape; import feuille.drawing.lib.ControlPoint; import feuille.drawing.lib.Bezier; import feuille.drawing.lib.BSpline; import java.util.ArrayList; import java.util.List; /** * Cette classe sert de liste de formes. Elle est appellée par la méthode de * dessin afin de pouvoir redessinner toutes les formes à l'écran. * @author The Wingate 2940 */ public class ShapesList { //L'objet contenant toutes les formes dans une liste. List<IShape> slist = new ArrayList<IShape>(); /** Ajoute une forme à la liste. */ public void addShape(IShape s){ slist.add(s); } /** Supprime la dernière forme de la liste. */ public void removeLastShape(){ slist.remove(slist.size()-1); } /** Renvoie la dernière forme de la liste. */ public IShape getLastShape(){ return slist.get(slist.size()-1); } /** Renvoie le dernier élément "point" de la liste. */ public Point getLastPoint(){ for(int i = slist.size()-1; i >= 0; i--){ if(slist.get(i) instanceof Point){ return (Point)slist.get(i); } } return null; } /** Renvoie le premier élément "point" de la liste. */ public Point getFirstPoint(){ for(int i = 0; i < slist.size(); i++){ if(slist.get(i) instanceof Point){ return (Point)slist.get(i); } } return null; } /** Enlève la forme demandée de la liste. */ public void removeShape(IShape s){ slist.remove(s); } /** Vide la liste des formes. */ public void removeAllShapes(){ slist.clear(); } /** Remplace une forme par une autre. */ public void replaceShape(IShape s1, IShape s2){ int sindex = slist.indexOf(s1); slist.remove(sindex); slist.add(sindex, s2); } /** Obtient toutes les formes de la liste. */ public List<IShape> getShapes(){ return slist; } /** Crée une liste des éléments contenu à la coordonnée. */ public List<IShape> getShapesAtPoint(java.awt.Point p){ // Get all points at coordinate List<IShape> pointlist = new ArrayList<IShape>(); for (IShape s : slist){ if (s instanceof Point){ Point point = (Point)s; if (point.isPointisinRectangle(p)){ s.setMarked(true); pointlist.add(s); } } if (s instanceof Line){ Line line = (Line)s; if (line.isPointisNear(p)){ s.setMarked(true); pointlist.add(s); } } if (s instanceof Bezier){ Bezier bezier = (Bezier)s; if (bezier.isPointisNear(p)){ s.setMarked(true); pointlist.add(s); } } if (s instanceof ControlPoint){ ControlPoint cp = (ControlPoint)s; if (cp.isPointisinRectangle(p)){ for (IShape search : slist){ if (search instanceof Bezier){ Bezier bezier = (Bezier)search; if(bezier.getControl1().equals(cp)){ search.setMarked(true); // pointlist.add(bezier.getControl2()); pointlist.add(search); }else if(bezier.getControl2().equals(cp)){ search.setMarked(true); // pointlist.add(bezier.getControl1()); pointlist.add(search); } } } s.setMarked(true); pointlist.add(s); } } if (s instanceof BSpline){ BSpline bs = (BSpline)s; if (bs.isPointisNear(p)){ s.setMarked(true); pointlist.add(s); } } if (s instanceof Move){ Move move = (Move)s; if (move.isPointisNear(p)){ s.setMarked(true); pointlist.add(s); } } if (s instanceof ReStart){ ReStart move = (ReStart)s; if (move.isPointisNear(p)){ s.setMarked(true); pointlist.add(s); } } } return pointlist; } /** Obtient le nombre de Shape dans cette liste. */ public int getSize(){ return slist.size(); } public List<IShape> getCopiesList(){ List<IShape> newList = new ArrayList<IShape>(); for(IShape s : slist){ if(s instanceof BSpline){ BSpline shape = (BSpline)s; newList.add((BSpline)shape.clone()); }else if(s instanceof Bezier){ Bezier shape = (Bezier)s; newList.add((Bezier)shape.clone()); }else if(s instanceof ControlPoint){ ControlPoint shape = (ControlPoint)s; newList.add((ControlPoint)shape.clone()); }else if(s instanceof Line){ Line shape = (Line)s; newList.add((Line)shape.clone()); }else if(s instanceof Move){ Move shape = (Move)s; newList.add((Move)shape.clone()); }else if(s instanceof Point){ Point shape = (Point)s; newList.add((Point)shape.clone()); }else if(s instanceof ReStart){ ReStart shape = (ReStart)s; newList.add((ReStart)shape.clone()); } } return newList; } }