package demos.nurbs.knotslidercomponent;
import java.awt.Polygon;
/**
* Object representing knot
* Objekt reprezentující uzel v uzlovém vektoru
* @author Tomáš Hráský
*
*/
@SuppressWarnings("serial")
class KnotPolygon extends Polygon implements Comparable {
/**
* Knot value
* Hodnota uzlu
*/
private Double value;
/**
* Size of change when moved by one pixel
* Velikost změny při posunu o jeden pixel
*/
private double oneStep;
/**
* Top space
* Horní mezera osy
*/
private int top;
/**
* Side space
* Boční mezera osy
*/
private int side;
/**
* Knot multiplicity
* Násobnost uzlu
*/
private int multi;
/**
* Creates new instance with given values
* Vytvoří instanci se zadanými hodnotami
* @param d knot value
* @param oneStep change of one pixel movement
* @param top top space
* @param side side space
*/
public KnotPolygon(Double d, double oneStep, int top, int side) {
this.value = d;
xpoints = new int[3];
ypoints = new int[3];
npoints = 3;
multi=1;
makeCoords(oneStep, top, side);
}
/**
* Computes coords of polygon representing knot
* Vypočte souřadnice polygonu reprezentujícího uzel
* @param oneStep change of one pixel movement
* @param top top space
* @param side side space
*/
private void makeCoords(double oneStep, int top, int side) {
this.oneStep = oneStep;
this.top = top;
this.side = side;
int x = (int) (value / oneStep);
x += side;
xpoints[0] = x;
xpoints[1] = x - 4;
xpoints[2] = x + 4;
ypoints[0] = top + 2;
ypoints[1] = top + 12;
ypoints[2] = top + 12;
invalidate();
}
/**
* Computes coords from set values
* Vypočte souřadnice podle nastavených hodont
*/
private void makeCoords() {
makeCoords(oneStep, top, side);
}
/**
* Computes coords from given values
* Vypočte souřadnice podle zadaných hodont
* @param oneStep step of one pixel movement
* @param top top space
* @param side side space
*/
public void update(double oneStep, int top, int side) {
makeCoords(oneStep, top, side);
}
/**
* Updates coords from given coord of polygon top
* Upraví souřadnice podle nové zadané souřadnice vrcholu polygonu
* @param x nová souřadnice vrcholu
*/
public void updateByX(int x) {
value = oneStep * (x - side);
makeCoords();
}
/**
* Updates coords from given value of knot
* Upraví souřadnice polygonu podle nové hodnoty
* @param d nová hodnota
*/
public void updateByValue(Double d){
value=d;
makeCoords();
}
public int compareTo(Object o) {
if (o instanceof KnotPolygon) {
KnotPolygon kp = (KnotPolygon) o;
return getValue().compareTo(kp.getValue());
} else
return 0;
}
/**
* Returns knot value
* Vrací hodnotu uzlu
* @return knot value
*/
public Double getValue() {
return value;
}
/**
* Returns knot multiplicity
* Vrací násobnost uzlu
* @return knot multiplicity
*/
public int getMulti() {
return multi;
}
/**
* Sets knot multiplicity
* Nastavuje násobnost uzlu
* @param multi knot multiplicity
*/
public void setMulti(int multi) {
this.multi = multi;
}
}