Skip to content

Commit 65c826e

Browse files
committed
Removed getSelection and scaled copy following refactoring plan.
1 parent b12dcd2 commit 65c826e

File tree

1 file changed

+47
-70
lines changed

1 file changed

+47
-70
lines changed

src/main/java/mesh/Mesh3D.java

Lines changed: 47 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,33 @@ public Mesh3D() {
2525
vertices = new ArrayList<Vector3f>();
2626
faces = new ArrayList<Face3D>();
2727
}
28-
28+
2929
public void apply(IMeshModifier modifier) {
3030
modifier.modify(this);
3131
}
3232

33-
public void updateFaceNormals() {
34-
for (Face3D face : faces) {
35-
face.normal = calculateFaceNormal(face);
33+
public Vector3f calculateFaceNormal(Face3D face) {
34+
Vector3f faceNormal = new Vector3f();
35+
for (int i = 0; i < face.indices.length; i++) {
36+
Vector3f currentVertex = vertices.get(face.indices[i]);
37+
Vector3f nextVertex = vertices
38+
.get(face.indices[(i + 1) % face.indices.length]);
39+
float x = (currentVertex.getY() - nextVertex.getY())
40+
* (currentVertex.getZ() + nextVertex.getZ());
41+
float y = (currentVertex.getZ() - nextVertex.getZ())
42+
* (currentVertex.getX() + nextVertex.getX());
43+
float z = (currentVertex.getX() - nextVertex.getX())
44+
* (currentVertex.getY() + nextVertex.getY());
45+
faceNormal.addLocal(x, y, z);
3646
}
47+
return faceNormal.normalize();
3748
}
3849

3950
public Mesh3D rotateX(float angle) {
40-
Matrix3f m = new Matrix3f(1, 0, 0, 0, Mathf.cos(angle),
41-
-Mathf.sin(angle), 0, Mathf.sin(angle), Mathf.cos(angle));
51+
Matrix3f m = new Matrix3f(
52+
1, 0, 0, 0, Mathf.cos(angle), -Mathf.sin(angle), 0,
53+
Mathf.sin(angle), Mathf.cos(angle)
54+
);
4255

4356
for (Vector3f v : vertices) {
4457
Vector3f v0 = v.mult(m);
@@ -49,8 +62,10 @@ public Mesh3D rotateX(float angle) {
4962
}
5063

5164
public Mesh3D rotateY(float angle) {
52-
Matrix3f m = new Matrix3f(Mathf.cos(angle), 0, Mathf.sin(angle), 0, 1,
53-
0, -Mathf.sin(angle), 0, Mathf.cos(angle));
65+
Matrix3f m = new Matrix3f(
66+
Mathf.cos(angle), 0, Mathf.sin(angle), 0, 1, 0,
67+
-Mathf.sin(angle), 0, Mathf.cos(angle)
68+
);
5469

5570
for (Vector3f v : vertices) {
5671
Vector3f v0 = v.mult(m);
@@ -61,8 +76,10 @@ public Mesh3D rotateY(float angle) {
6176
}
6277

6378
public Mesh3D rotateZ(float angle) {
64-
Matrix3f m = new Matrix3f(Mathf.cos(angle), -Mathf.sin(angle), 0,
65-
Mathf.sin(angle), Mathf.cos(angle), 0, 0, 0, 1);
79+
Matrix3f m = new Matrix3f(
80+
Mathf.cos(angle), -Mathf.sin(angle), 0, Mathf.sin(angle),
81+
Mathf.cos(angle), 0, 0, 0, 1
82+
);
6683

6784
for (Vector3f v : vertices) {
6885
Vector3f v0 = v.mult(m);
@@ -107,31 +124,6 @@ public Mesh3D translate(Vector3f t) {
107124
return this;
108125
}
109126

110-
public Vector3f calculateFaceNormal(Face3D face) {
111-
Vector3f faceNormal = new Vector3f();
112-
for (int i = 0; i < face.indices.length; i++) {
113-
Vector3f currentVertex = vertices.get(face.indices[i]);
114-
Vector3f nextVertex = vertices
115-
.get(face.indices[(i + 1) % face.indices.length]);
116-
float x = (currentVertex.getY() - nextVertex.getY())
117-
* (currentVertex.getZ() + nextVertex.getZ());
118-
float y = (currentVertex.getZ() - nextVertex.getZ())
119-
* (currentVertex.getX() + nextVertex.getX());
120-
float z = (currentVertex.getX() - nextVertex.getX())
121-
* (currentVertex.getY() + nextVertex.getY());
122-
faceNormal.addLocal(x, y, z);
123-
}
124-
return faceNormal.normalize();
125-
}
126-
127-
public Vector3f calculateFaceCenter(Face3D face) {
128-
Vector3f center = new Vector3f();
129-
for (int i = 0; i < face.indices.length; i++) {
130-
center.addLocal(vertices.get(face.indices[i]));
131-
}
132-
return center.divideLocal(face.indices.length);
133-
}
134-
135127
public Bounds3 calculateBounds() {
136128
if (vertices.isEmpty())
137129
return new Bounds3();
@@ -167,35 +159,6 @@ public Mesh3D copy() {
167159
return copy;
168160
}
169161

170-
public Mesh3D scaledCopy(Vector3f scale) {
171-
Mesh3D copy = new Mesh3D();
172-
List<Vector3f> vertices = copy.vertices;
173-
List<Face3D> faces = copy.faces;
174-
175-
for (Vector3f v : this.vertices)
176-
vertices.add(new Vector3f(v).multLocal(scale));
177-
178-
for (Face3D f : this.faces)
179-
faces.add(new Face3D(f));
180-
181-
return copy;
182-
}
183-
184-
public Mesh3D append(Mesh3D... meshes) {
185-
Mesh3D result = new Mesh3D();
186-
187-
result = appendUtil(meshes);
188-
result = appendUtil(this, result);
189-
190-
vertices.clear();
191-
vertices.addAll(result.vertices);
192-
193-
faces.clear();
194-
faces.addAll(result.faces);
195-
196-
return this;
197-
}
198-
199162
private Mesh3D appendUtil(Mesh3D... meshes) {
200163
// FIXME copy vertices and faces
201164
int n = 0;
@@ -228,13 +191,27 @@ public void removeDoubles() {
228191
new RemoveDoubleVerticesModifier().modify(this);
229192
}
230193

231-
public Collection<Face3D> getSelection(String tag) {
232-
ArrayList<Face3D> result = new ArrayList<Face3D>();
233-
for (Face3D face : faces) {
234-
if (face.tag.equals(tag))
235-
result.add(face);
194+
public Vector3f calculateFaceCenter(Face3D face) {
195+
Vector3f center = new Vector3f();
196+
for (int i = 0; i < face.indices.length; i++) {
197+
center.addLocal(vertices.get(face.indices[i]));
236198
}
237-
return result;
199+
return center.divideLocal(face.indices.length);
200+
}
201+
202+
public Mesh3D append(Mesh3D... meshes) {
203+
Mesh3D result = new Mesh3D();
204+
205+
result = appendUtil(meshes);
206+
result = appendUtil(this, result);
207+
208+
vertices.clear();
209+
vertices.addAll(result.vertices);
210+
211+
faces.clear();
212+
faces.addAll(result.faces);
213+
214+
return this;
238215
}
239216

240217
public void clearFaces() {

0 commit comments

Comments
 (0)