/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package feuille.drawing.lib;
import java.awt.Rectangle;
/**
* Cette classe sert à définir les "points de contrôle" qui sont utilisés par
* la classe Bézier afin de créer une courbe paramétrique de type bézier.
* @author The Wingate 2940
*/
public class ControlPoint implements IShape, Cloneable {
//Un "point de contrôle" est défini par un cercle sur le dessin et par un
//rectangle virtuellement; ce rectangle sert de conteneur de coordonnées.
//Les coordonnées du centre du rectangle étant les coordonnées réelles.
private Rectangle rect = new Rectangle();
//Les points de coordonnées 'origine' et 'dernier'.
java.awt.Point origin, last;
//marked sert à signalé un changement de position de façon globale.
boolean marked = false;
private Thickness thickness = Thickness.Big;
private boolean inSelection = false, firstInSelection = false;
/** Création d'un "point de contrôle". */
public ControlPoint(){
// nothing
}
/** Création d'un "point de contrôle" avec coordonnées. */
public ControlPoint(int x, int y){
rect.setRect(
x-thickness.getThickness()/2,
y-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
origin = new java.awt.Point(x, y);
last = new java.awt.Point(x, y);
}
public enum Thickness{
Big(10),Large(8),Medium(6),Small(4);
private int thick;
Thickness(int thick){
this.thick = thick;
}
public int getThickness(){
return thick;
}
}
public void updateThickness(Thickness thickness){
this.thickness = thickness;
rect.setRect(
origin.x-thickness.getThickness()/2,
origin.y-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
}
/** Donne la commande ASS spécifique à la "ligne". */
@Override
public String getCommand() {
return "";
}
/** Définit le point de 'origine' */
@Override
public void setOriginPoint(int x, int y) {
origin = new java.awt.Point(x, y);
}
/** Obtient le point de 'origine' */
@Override
public java.awt.Point getOriginPoint() {
return origin;
}
/** Définit le point de 'dernier' */
@Override
public void setLastPoint(int x, int y) {
last = new java.awt.Point(x, y);
}
/** Obtient le point de 'dernier' */
@Override
public java.awt.Point getLastPoint() {
return last;
}
/** Marque l'élément "point de contrôle" comme 'en train de changer. */
@Override
public void setMarked(boolean b) {
marked = b;
}
/** Obtient le status de changement de l'élément "point de contrôle". */
@Override
public boolean getMarked() {
return marked;
}
/** Renvoie <b>true</b> si la coordonnée est concernée par un changement. */
public boolean isPointisinRectangle(java.awt.Point p){
return rect.contains(p);
}
/** Met à jour la position du point concerné. */
public void updatePointPosition(java.awt.Point p){
int x = (int)p.getX();
int y = (int)p.getY();
rect.setRect(
x-thickness.getThickness()/2,
y-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
origin = p;
last = p;
}
@Override
public Object clone() {
Object o = null;
try {
// On récupère l'instance à renvoyer par l'appel de la
// méthode super.clone()
o = super.clone();
} catch(CloneNotSupportedException cnse) {
// Ne devrait jamais arriver car nous implémentons
// l'interface Cloneable
cnse.printStackTrace(System.err);
}
// on renvoie le clone
return o;
}
@Override
public void setInSelection(boolean b){
inSelection = b;
}
@Override
public boolean isInSelection(){
return inSelection;
}
@Override
public void setFirstInSelection(boolean b){
firstInSelection = b;
}
@Override
public boolean isFirstInSelection(){
return firstInSelection;
}
}