X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2FMain.java;h=7830f5c87d1422050bcae5c75f4720f3f5b73a60;hb=a3aad0bab8b523ead43362277b5d04a14e178cfb;hp=df0aaf7d5928371b3f3b187fa4bb65d8e1d73ff6;hpb=8a19e3f30ae67231e204c28d5ec93e5a6d812861;p=anneal.git diff --git a/src/Main.java b/src/Main.java index df0aaf7..7830f5c 100644 --- a/src/Main.java +++ b/src/Main.java @@ -3,68 +3,349 @@ import java.awt.event.*; import javax.swing.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; +import java.util.*; -public class Main implements GLEventListener { +// FEATURE: check google's 3D warehouse for sample shapes - public static StlFile stlf = null; +public class Main implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { + + boolean alt = false; + boolean shift = false; + boolean control = false; + + public void mouseWheelMoved(MouseWheelEvent e) { + tz -= e.getWheelRotation() ; + } + + public void keyTyped(KeyEvent e) { } + public void keyPressed(KeyEvent e) { + switch(e.getKeyCode()) { + case KeyEvent.VK_CONTROL: control = true; break; + case KeyEvent.VK_ALT: alt = true; break; + case KeyEvent.VK_SHIFT: shift = true; break; + } + } + public void keyReleased(KeyEvent e) { + switch(e.getKeyCode()) { + case KeyEvent.VK_CONTROL: control = false; break; + case KeyEvent.VK_ALT: alt = false; break; + case KeyEvent.VK_SHIFT: shift = false; break; + } + } + + public void mouseClicked(MouseEvent e) { } + public void mouseEntered(MouseEvent e) { } + public void mouseExited(MouseEvent e) { } + public void mousePressed(MouseEvent e) { } + public void mouseReleased(MouseEvent e) { } + + int mousex; + int mousey; + public void mouseMoved(MouseEvent e) { + mousex = e.getX(); + mousey = e.getY(); + } + + float tx = 0; + float ty = 0; + float tz = 0; + float anglex = 0; + float angley = 0; + public void mouseDragged(MouseEvent e) { + if (shift) { + tx += (mousex - e.getX())/(float)20; + ty += (mousey - e.getY())/(float)20; + } else { + anglex -= mousex - e.getX(); + angley += mousey - e.getY(); + } + mousex = e.getX(); + mousey = e.getY(); + } + + 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), + }; + + // 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(Geom.V v : translations) { + for(Geom.T t1 : geom) { + for(Geom.T t2 : geom) { + if (t1==t2) continue; + + if ((t1.p1().plus(v).minus(t2.p1()).mag() < Geom.EPSILON) && + (t1.p2().plus(v).minus(t2.p3()).mag() < Geom.EPSILON) && + (t1.p3().plus(v).minus(t2.p2()).mag() < Geom.EPSILON)) { + t1.e1().bind(t2.e3().pair); + t1.e2().bind(t2.e2().pair); + t1.e3().bind(t2.e1().pair); + } + if ((t1.p2().plus(v).minus(t2.p1()).mag() < Geom.EPSILON) && + (t1.p3().plus(v).minus(t2.p3()).mag() < Geom.EPSILON) && + (t1.p1().plus(v).minus(t2.p2()).mag() < Geom.EPSILON)) { + t1.e2().bind(t2.e3().pair); + t1.e3().bind(t2.e2().pair); + t1.e1().bind(t2.e1().pair); + } + if ((t1.p3().plus(v).minus(t2.p1()).mag() < Geom.EPSILON) && + (t1.p1().plus(v).minus(t2.p3()).mag() < Geom.EPSILON) && + (t1.p2().plus(v).minus(t2.p2()).mag() < Geom.EPSILON)) { + t1.e3().bind(t2.e3().pair); + t1.e1().bind(t2.e2().pair); + t1.e2().bind(t2.e1().pair); + } + } + } + } + + //Geom.P mid = geom.newE(ltf, lbn).shatter(); + + //tx.e2.shatter(); + //tx.e3.shatter(); + + //mid.move(geom.new V((float)-0.05,0,0)); + + //mtf.move(geom.new V(0, (float)-0.05, (float)0.05)); + + + for(Geom.T t : geom) { + t.e1().dobind(); + t.e2().dobind(); + t.e3().dobind(); + } + + for(int i=0; i<100; i++) { + rand(); + } + + + + /* + for(int i=0; i