summaryrefslogtreecommitdiffstats
path: root/src/demos/nurbs/knotslidercomponent/KnotPolygon.java
blob: 566539294e1638b02dbdd38b7f190001daf84f3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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;
	}

}