Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package projektscara;
- import com.sun.j3d.utils.applet.MainFrame;
- import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
- import com.sun.j3d.utils.geometry.Box;
- import com.sun.j3d.utils.geometry.Cylinder;
- import com.sun.j3d.utils.image.TextureLoader;
- import com.sun.j3d.utils.universe.SimpleUniverse;
- import java.applet.Applet;
- import java.awt.BorderLayout;
- import java.awt.Button;
- import java.awt.Dimension;
- import java.awt.GraphicsConfiguration;
- import java.awt.Panel;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.util.Timer;
- import java.util.TimerTask;
- import javax.media.j3d.Appearance;
- import javax.media.j3d.Background;
- import javax.media.j3d.BoundingSphere;
- import javax.media.j3d.BranchGroup;
- import javax.media.j3d.Canvas3D;
- import javax.media.j3d.ColoringAttributes;
- import javax.media.j3d.ImageComponent2D;
- import javax.media.j3d.Material;
- import javax.media.j3d.Texture;
- import javax.media.j3d.Texture2D;
- import javax.media.j3d.Transform3D;
- import javax.media.j3d.TransformGroup;
- import javax.swing.JFrame;
- import javax.vecmath.Color3f;
- import javax.vecmath.Point3d;
- import javax.vecmath.Vector3f;
- public class ProjektSCARA extends Applet implements KeyListener
- {
- private TransformGroup robot,trans_baza, trans_ramie1, trans_ramie2, trans_przegub, trans_patyk, trans_klocek;
- private TransformGroup obrot;
- private Timer zegar;
- private boolean klawisze[];
- private boolean chwytak = false;
- private boolean zawias = true;
- private Transform3D przesuniecie_obserwatora = new Transform3D();
- private Transform3D obrotRamienia1 = new Transform3D();
- private Transform3D obrotRamienia2 = new Transform3D();
- private Transform3D Ramie1buff = new Transform3D();
- private Transform3D Ramie2buff = new Transform3D();
- private Transform3D patykBuff = new Transform3D();
- private Transform3D poz_klocek = new Transform3D();
- private Button mute = new Button("Dźwięk");
- public float kat1 = 0.0f;
- public float kat2 = 0.0f;
- public float wys = 0.0f;
- public float pozX = 2.86f;
- public float pozY = 0.05f;
- public float pozZ = 0.48f;
- private SimpleUniverse universe;
- private BranchGroup obiekt;
- public void RuchKlocka(float obrot1, float obrot2, float wysK)
- {
- if(wysK != 0 && chwytak){
- //new Vector3f(0.0f, -0.27f, 0.12f)
- }
- }
- public void ObrotRamie1Lewo()
- {
- kat1 += 0.01f;
- if(chwytak){
- RuchKlocka(kat1, 0, 0);
- }
- obrotRamienia1.rotY(kat1);
- Ramie1buff.setTranslation(new Vector3f());
- obrotRamienia1.mul(Ramie1buff);
- trans_ramie1.setTransform(obrotRamienia1);
- }
- public void ObrotRamie1Prawo()
- {
- kat1 -= 0.01f;
- if(chwytak){
- RuchKlocka(kat1, 0, 0);
- }
- obrotRamienia1.rotY(kat1);
- Ramie1buff.setTranslation(new Vector3f());
- obrotRamienia1.mul(Ramie1buff);
- trans_ramie1.setTransform(obrotRamienia1);
- }
- public void ObrotRamie2Lewo()
- {
- if(kat2<2.75f){
- kat2 += 0.01f;
- if(chwytak){
- RuchKlocka(0, kat2, 0);
- }
- obrotRamienia2.rotY(kat2);
- Ramie2buff.setTranslation(new Vector3f(0.0f,0.026f, 0.12f));
- obrotRamienia2.mul(Ramie2buff);
- trans_ramie2.setTransform(obrotRamienia2);
- }
- }
- public void ObrotRamie2Prawo()
- {
- if(kat2>-2.75f){
- kat2 -= 0.01f;
- if(chwytak){
- RuchKlocka(0, kat2, 0);
- }
- obrotRamienia2.rotY(kat2);
- Ramie2buff.setTranslation(new Vector3f(0.0f,0.026f, 0.12f));
- obrotRamienia2.mul(Ramie2buff);
- trans_ramie2.setTransform(obrotRamienia2);
- }
- }
- public void ChwytakDoGory()
- {
- if(wys<0.09f){
- wys += 0.001f;
- if(chwytak){
- RuchKlocka(0, 0, wys);
- }
- patykBuff.setTranslation(new Vector3f(0.0f,0.0f+wys,0.0f));
- trans_patyk.setTransform(patykBuff);
- }
- }
- public void ChwytakWDol()
- {
- if(wys>=-0.096f){
- wys -= 0.001f;
- if(chwytak){
- RuchKlocka(0, 0, wys);
- }
- patykBuff.setTranslation(new Vector3f(0.0f,0.0f+wys,0.0f));
- trans_patyk.setTransform(patykBuff);
- }
- }
- ProjektSCARA()
- {
- // super("Robot SCARA");
- // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // setResizable(false);
- setLayout(new BorderLayout()); // ustawienie layoutu
- GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
- Canvas3D canvas3D = new Canvas3D(config);
- add(BorderLayout.CENTER, canvas3D);
- canvas3D.addKeyListener(this);
- klawisze = new boolean[7];
- Transform3D rot_obs = new Transform3D();
- rot_obs.rotY((float)(-Math.PI/6));
- przesuniecie_obserwatora.set(new Vector3f(-1.2f,1.5f,2.0f));
- przesuniecie_obserwatora.mul(rot_obs);
- rot_obs.rotX((float)(-Math.PI/6));
- przesuniecie_obserwatora.mul(rot_obs);
- universe = new SimpleUniverse(canvas3D);
- universe.getViewingPlatform().getViewPlatformTransform().setTransform(przesuniecie_obserwatora);
- BranchGroup scene = utworzScene(universe);
- universe.addBranchGraph(scene);
- zegar = new Timer();
- zegar.scheduleAtFixedRate(new Zadanie(),0,20);
- }
- public BranchGroup utworzScene(SimpleUniverse su)
- {
- BranchGroup wezel_scena = new BranchGroup();
- TransformGroup vpTrans = null;
- vpTrans = su.getViewingPlatform().getViewPlatformTransform();
- Appearance wyglad_platforma = new Appearance();
- Appearance wyglad_robot = new Appearance();
- Appearance wyglad_klocek = new Appearance();
- // Tło
- Background background = new Background(0.8f,0.2f, 0.1f);
- BoundingSphere sphere = new BoundingSphere(new Point3d(0,0,0), 100000);
- background.setApplicationBounds(sphere);
- wezel_scena.addChild(background);
- // Wgranie tekstury na platforme
- TextureLoader loader = new TextureLoader("tekstury/marmur.jpg",null);
- ImageComponent2D image = loader.getImage();
- Texture2D Tplatforma = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,
- image.getWidth(), image.getHeight());
- Tplatforma.setImage(0, image);
- Tplatforma.setBoundaryModeS(Texture.WRAP);
- Tplatforma.setBoundaryModeT(Texture.WRAP);
- wyglad_platforma.setTexture(Tplatforma);
- // Wgranie tekstury na robota
- loader = new TextureLoader("tekstury/metal.jpg",this);
- image = loader.getImage();
- Texture2D robot_tekstura = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,
- image.getWidth(), image.getHeight());
- robot_tekstura.setImage(0, image);
- robot_tekstura.setBoundaryModeS(Texture.WRAP);
- robot_tekstura.setBoundaryModeT(Texture.WRAP);
- wyglad_robot.setTexture(robot_tekstura);
- // Wgranie tekstury na robota
- loader = new TextureLoader("tekstury/sruby.jpg",this);
- image = loader.getImage();
- Texture2D klocek_tekstura = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,
- image.getWidth(), image.getHeight());
- klocek_tekstura.setImage(0, image);
- klocek_tekstura.setBoundaryModeS(Texture.WRAP);
- klocek_tekstura.setBoundaryModeT(Texture.WRAP);
- wyglad_klocek.setTexture(klocek_tekstura);
- ////// Utworzenie platformy
- Cylinder platforma = new Cylinder(0.6f,0.01f,Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_platforma);
- //wezel_scena.addChild(platforma);
- ////// Utworzenie grupy robota SCARA
- TransformGroup robot = new TransformGroup();
- Transform3D przesuniecie_robota = new Transform3D();
- przesuniecie_robota.set(new Vector3f(0.0f,0.02f,0.0f));
- robot.setTransform(przesuniecie_robota);
- // Utworzenie podstawy, baza + słup
- Box podstawa = new Box(0.08f,0.02f,0.08f, Box.GENERATE_NORMALS| Box.GENERATE_TEXTURE_COORDS| Box.GENERATE_TEXTURE_COORDS_Y_UP, wyglad_robot);
- Cylinder slup = new Cylinder(0.05f, 0.25f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
- Transform3D poz_slup = new Transform3D();
- poz_slup.set(new Vector3f(0.0f, 0.125f, 0.0f));
- Transform3D poz_podstawa = new Transform3D();
- poz_podstawa.set(new Vector3f(0.0f, 0.02f, 0.0f));
- TransformGroup trans_podstawa = new TransformGroup(poz_podstawa);
- trans_podstawa.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_podstawa.addChild(podstawa);
- TransformGroup trans_slup = new TransformGroup(poz_slup);
- trans_slup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_slup.addChild(slup);
- trans_baza = new TransformGroup();
- trans_baza.addChild(trans_podstawa);
- trans_baza.addChild(trans_slup);
- robot.addChild(trans_baza);
- trans_baza.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- // Utworzenie 1 ramienia oraz stawu obrotowego robota
- Cylinder staw1 = new Cylinder(0.05f, 0.05f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
- Transform3D poz_staw1 = new Transform3D();
- poz_staw1.set(new Vector3f(0.0f, 0.27f, 0.0f));
- TransformGroup przesun_staw1 = new TransformGroup(poz_staw1);
- przesun_staw1.addChild(staw1);
- Box ramie1 = new Box(0.05f,0.024f,0.12f, Box.GENERATE_NORMALS| Box.GENERATE_TEXTURE_COORDS| Box.GENERATE_TEXTURE_COORDS_Y_UP,
- wyglad_robot);
- Transform3D poz_ramie1 = new Transform3D();
- poz_ramie1.set(new Vector3f(0.0f, 0.27f, 0.12f));
- TransformGroup przesun_ramie1 = new TransformGroup(poz_ramie1);
- przesun_ramie1.addChild(ramie1);
- trans_ramie1 = new TransformGroup();
- trans_ramie1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_ramie1.addChild(przesun_staw1);
- trans_ramie1.addChild(przesun_ramie1);
- /////////////////////
- /////klocek
- Box klocek = new Box(0.05f,0.05f,0.05f, Box.GENERATE_NORMALS| Box.GENERATE_TEXTURE_COORDS| Box.GENERATE_TEXTURE_COORDS_Y_UP, wyglad_klocek);
- Transform3D poz_klocek = new Transform3D();
- poz_klocek.set(new Vector3f(0.0f, 0.07f, 0.48f));
- trans_klocek = new TransformGroup(poz_klocek);
- trans_klocek.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_klocek.addChild(klocek);
- /////////////////////
- ///// Przegub robota między ramieniem 1 a ramieniem 2
- Cylinder przegub = new Cylinder(0.02f, 0.15f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
- Transform3D poz_przegub = new Transform3D();
- poz_przegub.set(new Vector3f(0.0f,0.294f,0.245f));
- trans_przegub = new TransformGroup(poz_przegub);
- trans_przegub.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_przegub.addChild(przegub);
- /////////////////////
- ///// Ramie 2 robota
- Cylinder staw2 = new Cylinder(0.05f, 0.105f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
- Cylinder staw3 = new Cylinder(0.05f, 0.05f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
- Box ramie2 = new Box(0.05f,0.024f,0.12f, Box.GENERATE_NORMALS| Box.GENERATE_TEXTURE_COORDS| Box.GENERATE_TEXTURE_COORDS_Y_UP,
- wyglad_robot);
- Transform3D poz_staw2 = new Transform3D();
- poz_staw2.set(new Vector3f(0.0f, -0.025f, -0.12f));
- Transform3D poz_staw3 = new Transform3D();
- poz_staw3.set(new Vector3f(0.0f, 0.0f, 0.12f));
- Transform3D poz_ramie2 = new Transform3D();
- poz_ramie2.set(new Vector3f(0.0f, 0.026f, 0.118f));
- TransformGroup trans_staw2 = new TransformGroup(poz_staw2);
- trans_staw2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_staw2.addChild(staw2);
- TransformGroup trans_staw3 = new TransformGroup(poz_staw3);
- trans_staw3.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_staw3.addChild(staw3);
- trans_ramie2 = new TransformGroup(poz_ramie2);
- trans_ramie2.addChild(ramie2);
- trans_ramie2.addChild(trans_staw2);
- trans_ramie2.addChild(trans_staw3);
- trans_ramie2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_ramie2.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
- ////////////////////////
- ///// Ramie przesuwne
- Cylinder ramie_przesuwne = new Cylinder(0.02f, 0.25f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
- Transform3D poz_ramie_przesuwne = new Transform3D();
- poz_ramie_przesuwne.set(new Vector3f(0.0f, 0.0f, 0.12f));
- TransformGroup przesun_ramie_przesuwne = new TransformGroup(poz_ramie_przesuwne);
- przesun_ramie_przesuwne.addChild(ramie_przesuwne);
- trans_patyk = new TransformGroup();
- trans_patyk.addChild(przesun_ramie_przesuwne);
- trans_patyk.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
- trans_patyk.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- trans_patyk.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
- ///////
- trans_ramie1.addChild(trans_przegub);
- trans_przegub.addChild(trans_ramie2);
- trans_ramie2.addChild(trans_patyk);
- //trans_patyk.addChild(trans_klocek);
- robot.addChild(platforma);
- robot.addChild(trans_ramie1);
- //////////////////////////////
- // Rotacja robota kursorem
- //
- obrot = new TransformGroup();
- obrot.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
- obrot.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
- obrot.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
- obrot.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
- obrot.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
- obiekt = new BranchGroup();
- obiekt.setCapability(obiekt.ALLOW_DETACH);
- obiekt.setCapability(obiekt.ALLOW_CHILDREN_WRITE);
- obiekt.setCapability(obiekt.ALLOW_CHILDREN_READ);
- obiekt.addChild(trans_klocek);
- obrot.addChild(obiekt);
- BoundingSphere bounds = new BoundingSphere();
- MouseRotate behavior = new MouseRotate();
- behavior.setTransformGroup(obrot);
- obrot.addChild(behavior);
- //behavior.setFactor(0.01, 0);
- behavior.setSchedulingBounds(bounds);
- obrot.addChild(robot);
- wezel_scena.addChild(obrot);
- return wezel_scena;
- }
- class Zadanie extends TimerTask
- {
- public void run()
- {
- if(klawisze[0])
- {
- ObrotRamie1Lewo();
- }
- else if(klawisze[1])
- {
- ObrotRamie1Prawo();
- }
- else if(klawisze[2])
- {
- ObrotRamie2Lewo();
- }
- else if(klawisze[3])
- {
- ObrotRamie2Prawo();
- }
- else if(klawisze[4])
- {
- ChwytakDoGory();
- }
- else if(klawisze[5])
- {
- ChwytakWDol();
- }
- else if(klawisze[6])
- {
- if(chwytak && zawias == true){
- chwytak = false;
- System.out.println("puszczam");
- zawias = false;
- }
- else if(wys<=-0.096f && zawias == true){
- chwytak = true;
- obrot.removeChild(obiekt);
- trans_patyk.addChild(obiekt);
- Transform3D tmp = new Transform3D();
- tmp.set(new Vector3f(0.0f, -0.173f, 0.118f));
- trans_klocek.setTransform(tmp);
- System.out.println("trzymam");
- zawias = false;
- }
- }
- }
- }
- @Override
- public void keyPressed(KeyEvent e)
- {
- switch(e.getKeyCode())
- {
- case KeyEvent.VK_LEFT: System.out.println("lewo"); klawisze[0] = true; break;
- case KeyEvent.VK_RIGHT: System.out.println("prawo"); klawisze[1] = true; break;
- case KeyEvent.VK_A: System.out.println("lewo2"); klawisze[2] = true; break;
- case KeyEvent.VK_D: System.out.println("prawo2"); klawisze[3] = true; break;
- case KeyEvent.VK_UP: System.out.println("gora"); klawisze[4] = true; break;
- case KeyEvent.VK_DOWN: System.out.println("dol"); klawisze[5] = true; break;
- case KeyEvent.VK_SPACE: klawisze[6] = true; break;
- }
- }
- public void keyReleased(KeyEvent e)
- {
- switch(e.getKeyCode())
- {
- case KeyEvent.VK_LEFT: System.out.println("lewo"); klawisze[0] = false; break;
- case KeyEvent.VK_RIGHT: System.out.println("prawo"); klawisze[1] = false; break;
- case KeyEvent.VK_A: System.out.println("lewo2"); klawisze[2] = false; break;
- case KeyEvent.VK_D: System.out.println("prawo2"); klawisze[3] = false; break;
- case KeyEvent.VK_UP: System.out.println("gora"); klawisze[4] = false; break;
- case KeyEvent.VK_DOWN: System.out.println("dol"); klawisze[5] = false; break;
- case KeyEvent.VK_SPACE: klawisze[6] = false; zawias = true; break;
- }
- }
- @Override
- public void keyTyped(KeyEvent ke) {
- //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
- }
- public static void main(String[] args) {
- ProjektSCARA okno = new ProjektSCARA();
- okno.addKeyListener(okno);
- MainFrame mf = new MainFrame(okno, 1600, 800);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement