Skip to content

Commit ff6b37d

Browse files
committed
Implemented unit test for scale modifier. Refactored mesh modifier.
1 parent f152758 commit ff6b37d

File tree

2 files changed

+188
-1
lines changed

2 files changed

+188
-1
lines changed

src/main/java/mesh/modifier/ScaleModifier.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package mesh.modifier;
22

3+
import math.Vector3f;
34
import mesh.Mesh3D;
45

56
public class ScaleModifier implements IMeshModifier {
@@ -9,6 +10,8 @@ public class ScaleModifier implements IMeshModifier {
910
private float scaleY;
1011

1112
private float scaleZ;
13+
14+
private Mesh3D mesh;
1215

1316
public ScaleModifier() {
1417
this(1, 1, 1);
@@ -26,9 +29,19 @@ public ScaleModifier(float scaleX, float scaleY, float scaleZ) {
2629

2730
@Override
2831
public Mesh3D modify(Mesh3D mesh) {
29-
mesh.scale(scaleX, scaleY, scaleZ);
32+
setMesh(mesh);
33+
scaleMesh();
3034
return mesh;
3135
}
36+
37+
private void scaleMesh() {
38+
for (Vector3f v : mesh.vertices)
39+
v.multLocal(scaleX, scaleY, scaleZ);
40+
}
41+
42+
private void setMesh(Mesh3D mesh) {
43+
this.mesh = mesh;
44+
}
3245

3346
public float getScaleX() {
3447
return scaleX;
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
package mesh.modifier.test;
2+
3+
import static org.junit.Assert.assertTrue;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import org.junit.jupiter.api.Test;
10+
11+
import math.Vector3f;
12+
import mesh.Mesh3D;
13+
import mesh.creator.platonic.IcosahedronCreator;
14+
import mesh.creator.primitives.QuadSphereCreator;
15+
import mesh.modifier.IMeshModifier;
16+
import mesh.modifier.ScaleModifier;
17+
18+
public class ScaleModifierTest {
19+
20+
@Test
21+
public void testImplementsModifierInterface() {
22+
ScaleModifier modifier = new ScaleModifier();
23+
assertTrue(modifier instanceof IMeshModifier);
24+
}
25+
26+
@Test
27+
public void testDefaultScale() {
28+
ScaleModifier modifier = new ScaleModifier();
29+
assertEquals(1, modifier.getScaleX());
30+
assertEquals(1, modifier.getScaleY());
31+
assertEquals(1, modifier.getScaleZ());
32+
}
33+
34+
@Test
35+
public void testScaleConstructor() {
36+
float expectedScale = 12.45f;
37+
ScaleModifier modifier = new ScaleModifier(expectedScale);
38+
assertEquals(expectedScale, modifier.getScaleX());
39+
assertEquals(expectedScale, modifier.getScaleY());
40+
assertEquals(expectedScale, modifier.getScaleZ());
41+
}
42+
43+
@Test
44+
public void testGetSetScaleX() {
45+
float expectedScale = 123.4f;
46+
ScaleModifier modifier = new ScaleModifier();
47+
modifier.setScaleX(expectedScale);
48+
assertEquals(expectedScale, modifier.getScaleX());
49+
}
50+
51+
@Test
52+
public void testGetSetScaleY() {
53+
float expectedScale = 24.5f;
54+
ScaleModifier modifier = new ScaleModifier();
55+
modifier.setScaleY(expectedScale);
56+
assertEquals(expectedScale, modifier.getScaleY());
57+
}
58+
59+
@Test
60+
public void testGetSetScaleZ() {
61+
float expectedScale = 24.1223f;
62+
ScaleModifier modifier = new ScaleModifier();
63+
modifier.setScaleZ(expectedScale);
64+
assertEquals(expectedScale, modifier.getScaleZ());
65+
}
66+
67+
@Test
68+
public void testScalesOriginalVertices() {
69+
Mesh3D mesh = new IcosahedronCreator().create();
70+
List<Vector3f> vertices = new ArrayList<Vector3f>(mesh.vertices);
71+
mesh.apply(new ScaleModifier(2.3f));
72+
for (int i = 0; i < vertices.size(); i++) {
73+
Vector3f expected = vertices.get(i);
74+
Vector3f actual = mesh.vertices.get(i);
75+
assertTrue(expected == actual);
76+
}
77+
}
78+
79+
@Test
80+
public void testScaleQuadSphereScalar() {
81+
float scale = 134.3f;
82+
Mesh3D mesh = new QuadSphereCreator().create();
83+
List<Vector3f> unscaledVertices = new ArrayList<Vector3f>();
84+
for (Vector3f v : mesh.vertices) {
85+
unscaledVertices.add(new Vector3f(v));
86+
}
87+
ScaleModifier modifier = new ScaleModifier(scale);
88+
modifier.modify(mesh);
89+
for (int i = 0; i < unscaledVertices.size(); i++) {
90+
Vector3f unscaled = unscaledVertices.get(i);
91+
Vector3f expected = unscaled.mult(scale);
92+
Vector3f actual = mesh.vertices.get(i);
93+
assertEquals(expected, actual);
94+
}
95+
}
96+
97+
@Test
98+
public void testScaleQuadSphereXYZ() {
99+
float scaleX = 134.3f;
100+
float scaleY = 12.3f;
101+
float scaleZ = 1234.3f;
102+
Mesh3D mesh = new QuadSphereCreator().create();
103+
List<Vector3f> unscaledVertices = new ArrayList<Vector3f>();
104+
for (Vector3f v : mesh.vertices) {
105+
unscaledVertices.add(new Vector3f(v));
106+
}
107+
ScaleModifier modifier = new ScaleModifier(scaleX, scaleY, scaleZ);
108+
modifier.modify(mesh);
109+
for (int i = 0; i < unscaledVertices.size(); i++) {
110+
Vector3f unscaled = unscaledVertices.get(i);
111+
Vector3f expected = unscaled.mult(scaleX, scaleY, scaleZ);
112+
Vector3f actual = mesh.vertices.get(i);
113+
assertEquals(expected, actual);
114+
}
115+
}
116+
117+
@Test
118+
public void testScaleQuadSphereSetX() {
119+
float scaleX = 234.3f;
120+
Mesh3D mesh = new QuadSphereCreator().create();
121+
List<Vector3f> unscaledVertices = new ArrayList<Vector3f>();
122+
for (Vector3f v : mesh.vertices) {
123+
unscaledVertices.add(new Vector3f(v));
124+
}
125+
ScaleModifier modifier = new ScaleModifier();
126+
modifier.setScaleX(scaleX);
127+
modifier.modify(mesh);
128+
for (int i = 0; i < unscaledVertices.size(); i++) {
129+
Vector3f unscaled = unscaledVertices.get(i);
130+
Vector3f expected = unscaled.mult(scaleX, 1, 1);
131+
Vector3f actual = mesh.vertices.get(i);
132+
assertEquals(expected, actual);
133+
}
134+
}
135+
136+
@Test
137+
public void testScaleQuadSphereSetY() {
138+
float scaleY = 234.323f;
139+
Mesh3D mesh = new QuadSphereCreator().create();
140+
List<Vector3f> unscaledVertices = new ArrayList<Vector3f>();
141+
for (Vector3f v : mesh.vertices) {
142+
unscaledVertices.add(new Vector3f(v));
143+
}
144+
ScaleModifier modifier = new ScaleModifier();
145+
modifier.setScaleY(scaleY);
146+
modifier.modify(mesh);
147+
for (int i = 0; i < unscaledVertices.size(); i++) {
148+
Vector3f unscaled = unscaledVertices.get(i);
149+
Vector3f expected = unscaled.mult(1, scaleY, 1);
150+
Vector3f actual = mesh.vertices.get(i);
151+
assertEquals(expected, actual);
152+
}
153+
}
154+
155+
@Test
156+
public void testScaleQuadSphereSetZ() {
157+
float scaleZ = 21.34f;
158+
Mesh3D mesh = new QuadSphereCreator().create();
159+
List<Vector3f> unscaledVertices = new ArrayList<Vector3f>();
160+
for (Vector3f v : mesh.vertices) {
161+
unscaledVertices.add(new Vector3f(v));
162+
}
163+
ScaleModifier modifier = new ScaleModifier();
164+
modifier.setScaleZ(scaleZ);
165+
modifier.modify(mesh);
166+
for (int i = 0; i < unscaledVertices.size(); i++) {
167+
Vector3f unscaled = unscaledVertices.get(i);
168+
Vector3f expected = unscaled.mult(1, 1, scaleZ);
169+
Vector3f actual = mesh.vertices.get(i);
170+
assertEquals(expected, actual);
171+
}
172+
}
173+
174+
}

0 commit comments

Comments
 (0)