+ private Geom geom = new Geom();
+
+ /** magnification factor */
+ private static final float MAG = 1;
+
+ Geom.V[] translations;
+ Geom.P[] points;
+
+ public Main(StlFile stlf) {
+
+ Geom.P ltf = geom.newP(-0.2, 0.1, 0.1);
+ Geom.P mtf = geom.newP( 0.0, 0.1, 0.1);
+ Geom.P rtf = geom.newP( 0.2, 0.1, 0.1);
+ Geom.P ltn = geom.newP(-0.2, 0.1, -0.1);
+ Geom.P mtn = geom.newP( 0.0, 0.1, -0.1);
+ Geom.P rtn = geom.newP( 0.2, 0.1, -0.1);
+ Geom.P lbf = geom.newP(-0.2, -0.1, 0.1);
+ Geom.P mbf = geom.newP( 0.0, -0.1, 0.1);
+ Geom.P rbf = geom.newP( 0.2, -0.1, 0.1);
+ Geom.P lbn = geom.newP(-0.2, -0.1, -0.1);
+ Geom.P mbn = geom.newP( 0.0, -0.1, -0.1);
+ Geom.P rbn = geom.newP( 0.2, -0.1, -0.1);
+
+ points = new Geom.P[] {
+ ltf,
+ mtf,
+ rtf,
+ ltn,
+ mtn,
+ rtn,
+ lbf,
+ mbf,
+ rbf,
+ lbn,
+ mbn,
+ rbn
+ };
+
+ translations = new Geom.V[] {
+ geom.new V(-0.2, 0.2, 0),
+ geom.new V( 0.2, 0.2, 0),
+ geom.new V(-0.2, -0.2, 0),
+ geom.new V( 0.2, -0.2, 0),
+ geom.new V( 0.4, 0, 0),
+ geom.new V(-0.4, 0, 0),
+ geom.new V( 0, 0, 0.2),
+ geom.new V( 0, 0, -0.2),
+ };
+
+ for(Geom.V v : translations) {
+ for(Geom.P p1 : points) {
+ for(Geom.P p2 : points) {
+ if (p1.plus(v).minus(p2).mag() < Geom.EPSILON) {
+ System.out.println("bind " + p1 + " to " + p2);
+ p1.bind(p2);
+ }
+ }
+ }
+ }
+
+ // top
+ geom.newT(ltf, mtf, mtn);
+ geom.newT(mtn, ltn, ltf);
+ geom.newT(mtf, rtf, rtn);
+ geom.newT(rtn, mtn, mtf);
+
+ // bottom (swap normals)
+ geom.newT(mbf, lbf, mbn);
+ geom.newT(lbn, mbn, lbf);
+ geom.newT(rbf, mbf, rbn);
+ geom.newT(mbn, rbn, mbf);
+
+ // left
+ geom.newT(ltf, ltn, lbn);
+ geom.newT(lbn, lbf, ltf);
+
+ // right (swap normals)
+ geom.newT(rtn, rtf, rbn);
+ geom.newT(rbf, rbn, rtf);
+
+ // front
+ geom.newT(ltn, mtn, mbn);
+ geom.newT(ltn, mbn, lbn);
+ geom.newT(mtn, rtn, rbn);
+ geom.newT(mtn, rbn, mbn);
+
+ // back
+ geom.newT(mtf, ltf, mbf);
+ geom.newT(mbf, ltf, lbf);
+ geom.newT(rtf, mtf, rbf);
+ geom.newT(rbf, mtf, mbf);
+
+
+ /*
+ for(int i=0; i<stlf.coordArray.length; i+=3) {
+ Geom.P p0 = geom.newP(stlf.coordArray[i+0].x * MAG, stlf.coordArray[i+0].y * MAG, stlf.coordArray[i+0].z * MAG);
+ Geom.P p1 = geom.newP(stlf.coordArray[i+1].x * MAG, stlf.coordArray[i+1].y * MAG, stlf.coordArray[i+1].z * MAG);
+ Geom.P p2 = geom.newP(stlf.coordArray[i+2].x * MAG, stlf.coordArray[i+2].y * MAG, stlf.coordArray[i+2].z * MAG);
+ Geom.V n = geom.new V(stlf.normArray[i/3].x * MAG, stlf.normArray[i/3].y * MAG, stlf.normArray[i/3].z * MAG);
+ Geom.T t = geom.newT(geom.newE(p0, p1), geom.newE(p1, p2), geom.newE(p2, p0), n);
+ }
+ */
+
+
+ mtf.move(geom.new V(0, (float)-0.05, (float)0.05));
+
+ }