1 package org.newdawn.slick.geom;
2
3 import javax.annotation.Nonnull;
4
5
6
7
8
9
10
11 public class OverTriangulator implements Triangulator {
12
13
14
15 private static final long serialVersionUID = 1L;
16
17 private final float[][] triangles;
18
19
20
21
22
23
24 public OverTriangulator(@Nonnull Triangulator tris) {
25 triangles = new float[tris.getTriangleCount()*6*3][2];
26
27 int tcount = 0;
28 for (int i=0;i<tris.getTriangleCount();i++) {
29 float cx = 0;
30 float cy = 0;
31 for (int p = 0;p < 3;p++) {
32 float[] pt = tris.getTrianglePoint(i, p);
33 cx += pt[0];
34 cy += pt[1];
35 }
36
37 cx /= 3;
38 cy /= 3;
39
40 for (int p = 0;p < 3;p++) {
41 int n = p +1;
42 if (n > 2) {
43 n = 0;
44 }
45
46 float[] pt1 = tris.getTrianglePoint(i, p);
47 float[] pt2 = tris.getTrianglePoint(i, n);
48
49 pt1[0] = (pt1[0] + pt2[0]) / 2;
50 pt1[1] = (pt1[1] + pt2[1]) / 2;
51
52 triangles[(tcount * 3)][0] = cx;
53 triangles[(tcount * 3)][1] = cy;
54 triangles[(tcount *3) + 1][0] = pt1[0];
55 triangles[(tcount *3) + 1][1] = pt1[1];
56 triangles[(tcount *3) + 2][0] = pt2[0];
57 triangles[(tcount *3) + 2][1] = pt2[1];
58 tcount++;
59 }
60
61 for (int p = 0;p < 3;p++) {
62 int n = p +1;
63 if (n > 2) {
64 n = 0;
65 }
66
67 float[] pt1 = tris.getTrianglePoint(i, p);
68 float[] pt2 = tris.getTrianglePoint(i, n);
69
70 pt2[0] = (pt1[0] + pt2[0]) / 2;
71 pt2[1] = (pt1[1] + pt2[1]) / 2;
72
73 triangles[(tcount * 3)][0] = cx;
74 triangles[(tcount * 3)][1] = cy;
75 triangles[(tcount *3) + 1][0] = pt1[0];
76 triangles[(tcount *3) + 1][1] = pt1[1];
77 triangles[(tcount *3) + 2][0] = pt2[0];
78 triangles[(tcount *3) + 2][1] = pt2[1];
79 tcount++;
80 }
81 }
82 }
83
84
85
86
87 public void addPolyPoint(float x, float y) {
88 }
89
90
91
92
93 public int getTriangleCount() {
94 return triangles.length / 3;
95 }
96
97
98
99
100 @Nonnull
101 public float[] getTrianglePoint(int tri, int i) {
102 float[] pt = triangles[(tri * 3)+i];
103
104 return new float[] {pt[0],pt[1]};
105 }
106
107
108
109
110 public void startHole() {
111 }
112
113
114
115
116 public boolean triangulate() {
117 return true;
118 }
119
120 }