import java.applet.Applet; import java.awt.*; import javax.swing.*; import java.awt.event.*; import com.sun.j3d.utils.geometry.ColorCube; import javax.vecmath.*; import com.sun.j3d.utils.universe.SimpleUniverse; import javax.media.j3d.*; import java.util.*; import javax.media.j3d.Locale; public class cubes extends Applet implements KeyListener { Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); SimpleUniverse u = new SimpleUniverse(c); java.util.List kuubimass=new LinkedList(); kuup k1=new kuup(); int index=0; public cubes() { kuubimass.add(k1); setLayout(new BorderLayout()); c.addKeyListener(this); add(c, BorderLayout.CENTER); u.getViewingPlatform().setNominalViewingTransform(); u.addBranchGraph(k1.juur); } public static void main(String[] args) { Frame f=new Frame("Liigutatav kuup"); f.add(new cubes()); f.setSize(700, 700); f.setVisible(true); } public void keyPressed(KeyEvent e) { System.out.print("Vajutati nuppu: "); if(e.getKeyCode()==KeyEvent.VK_LEFT) { System.out.println("VK_LEFT"); Transform3D t=new Transform3D(); t.rotY(k1.yNurkV=k1.yNurkV+0.1); k1.keereY.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_RIGHT) { System.out.println("VK_RIGHT"); Transform3D t=new Transform3D(); t.rotY(k1.yNurkV=k1.yNurkV-0.1); k1.keereY.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_UP) { System.out.println("VK_UP"); Transform3D t=new Transform3D(); t.rotX(k1.xNurkV=k1.xNurkV+0.1); k1.keereX.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_DOWN) { System.out.println("VK_DOWN"); Transform3D t=new Transform3D(); t.rotX(k1.xNurkV=k1.xNurkV-0.1); k1.keereX.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_NUMPAD4) { System.out.println("VK_NUMPAD4"); Transform3D t=new Transform3D(); t.setTranslation(new Vector3d(k1.x=k1.x-0.1, k1.y, k1.z)); k1.liikumine.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_NUMPAD6) { System.out.println("VK_NUMPAD6"); Transform3D t=new Transform3D(); t.setTranslation(new Vector3d(k1.x=k1.x+0.1, k1.y, k1.z)); k1.liikumine.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_NUMPAD8) { System.out.println("VK_NUMPAD8"); Transform3D t=new Transform3D(); t.setTranslation(new Vector3d(k1.x, k1.y=k1.y+0.1, k1.z)); k1.liikumine.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_NUMPAD2) { System.out.println("VK_NUMPAD2"); Transform3D t=new Transform3D(); t.setTranslation(new Vector3d(k1.x, k1.y=k1.y-0.1, k1.z)); k1.liikumine.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_NUMPAD7) { System.out.println("VK_NUMPAD7"); Transform3D t=new Transform3D(); t.setTranslation(new Vector3d(k1.x, k1.y, k1.z=k1.z+0.1)); k1.liikumine.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_NUMPAD9) { System.out.println("VK_NUMPAD7"); Transform3D t=new Transform3D(); t.setTranslation(new Vector3d(k1.x, k1.y, k1.z=k1.z-0.1)); k1.liikumine.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_A) { System.out.println("VK_A"); Transform3D t=new Transform3D(); t.setScale(k1.s=k1.s+0.01); k1.skaleeri.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_Z) { System.out.println("VK_Z"); Transform3D t=new Transform3D(); t.setScale(k1.s=k1.s-0.01); k1.skaleeri.setTransform(t); } if(e.getKeyCode()==KeyEvent.VK_U) { index++; System.out.println("VK_U"); k1=new kuup(); kuubimass.add(k1); u.addBranchGraph(k1.juur); } if(e.getKeyCode()==KeyEvent.VK_K) { System.out.println("VK_K"); kuubimass.remove(index); u.getLocale().removeBranchGraph(k1.juur); index=0; } if(e.getKeyCode()==KeyEvent.VK_B) { System.out.println("VK_B"); if(index==0){index=kuubimass.size();} k1=(kuup)kuubimass.get(index=index-1); } if(e.getKeyCode()==KeyEvent.VK_N) { System.out.println("VK_N"+"- "+ index); if(index==kuubimass.size()-1){index=-1;} k1=(kuup)kuubimass.get(index=index+1); } } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} } class kuup{ double x=0; double y=0; double z=0; double s=0.5; double xNurkV=0; double yNurkV=0; double zNurkV=0; TransformGroup liikumine; TransformGroup keereX; TransformGroup keereY; TransformGroup keereZ; TransformGroup skaleeri; BranchGroup juur=new BranchGroup(); Transform3D liigu=new Transform3D(); Transform3D xNurk=new Transform3D(); Transform3D yNurk=new Transform3D(); Transform3D zNurk=new Transform3D(); Transform3D scale=new Transform3D(); ColorCube cub=new ColorCube(0.2); kuup(){ liigu.setTranslation(new Vector3d(x, y, z)); liikumine=new TransformGroup(liigu); liikumine.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); keereX=new TransformGroup(xNurk); keereX.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); keereY=new TransformGroup(yNurk); keereY.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); keereZ=new TransformGroup(zNurk); keereZ.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); skaleeri=new TransformGroup(scale); skaleeri.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); juur.addChild(liikumine); liikumine.addChild(keereX); keereX.addChild(keereY); keereY.addChild(keereZ); keereZ.addChild(skaleeri); skaleeri.addChild(cub); juur.setCapability(BranchGroup.ALLOW_DETACH); juur.compile(); } }