Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.58 KB | None | 0 0
  1.  
  2. package projektscara;
  3.  
  4. import com.sun.j3d.utils.applet.MainFrame;
  5. import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
  6. import com.sun.j3d.utils.geometry.Box;
  7. import com.sun.j3d.utils.geometry.Cylinder;
  8. import com.sun.j3d.utils.image.TextureLoader;
  9. import com.sun.j3d.utils.universe.SimpleUniverse;
  10. import java.applet.Applet;
  11. import java.awt.BorderLayout;
  12. import java.awt.Button;
  13. import java.awt.Dimension;
  14. import java.awt.GraphicsConfiguration;
  15. import java.awt.Panel;
  16. import java.awt.event.KeyEvent;
  17. import java.awt.event.KeyListener;
  18. import java.util.Timer;
  19. import java.util.TimerTask;
  20. import javax.media.j3d.Appearance;
  21. import javax.media.j3d.Background;
  22. import javax.media.j3d.BoundingSphere;
  23. import javax.media.j3d.BranchGroup;
  24. import javax.media.j3d.Canvas3D;
  25. import javax.media.j3d.ColoringAttributes;
  26. import javax.media.j3d.ImageComponent2D;
  27. import javax.media.j3d.Material;
  28. import javax.media.j3d.Texture;
  29. import javax.media.j3d.Texture2D;
  30. import javax.media.j3d.Transform3D;
  31. import javax.media.j3d.TransformGroup;
  32. import javax.swing.JFrame;
  33. import javax.vecmath.Color3f;
  34. import javax.vecmath.Point3d;
  35. import javax.vecmath.Vector3f;
  36.  
  37. public class ProjektSCARA extends Applet implements KeyListener
  38. {
  39. private TransformGroup robot,trans_baza, trans_ramie1, trans_ramie2, trans_przegub, trans_patyk, trans_klocek;
  40. private TransformGroup obrot;
  41. private Timer zegar;
  42. private boolean klawisze[];
  43. private boolean chwytak = false;
  44. private boolean zawias = true;
  45.  
  46. private Transform3D przesuniecie_obserwatora = new Transform3D();
  47. private Transform3D obrotRamienia1 = new Transform3D();
  48. private Transform3D obrotRamienia2 = new Transform3D();
  49. private Transform3D Ramie1buff = new Transform3D();
  50. private Transform3D Ramie2buff = new Transform3D();
  51. private Transform3D patykBuff = new Transform3D();
  52. private Transform3D poz_klocek = new Transform3D();
  53.  
  54. private Button mute = new Button("Dźwięk");
  55.  
  56. public float kat1 = 0.0f;
  57. public float kat2 = 0.0f;
  58. public float wys = 0.0f;
  59. public float pozX = 2.86f;
  60. public float pozY = 0.05f;
  61. public float pozZ = 0.48f;
  62.  
  63. private SimpleUniverse universe;
  64.  
  65. private BranchGroup obiekt;
  66.  
  67. public void RuchKlocka(float obrot1, float obrot2, float wysK)
  68. {
  69. if(wysK != 0 && chwytak){
  70. //new Vector3f(0.0f, -0.27f, 0.12f)
  71. }
  72. }
  73.  
  74. public void ObrotRamie1Lewo()
  75. {
  76. kat1 += 0.01f;
  77. if(chwytak){
  78. RuchKlocka(kat1, 0, 0);
  79. }
  80. obrotRamienia1.rotY(kat1);
  81. Ramie1buff.setTranslation(new Vector3f());
  82. obrotRamienia1.mul(Ramie1buff);
  83. trans_ramie1.setTransform(obrotRamienia1);
  84. }
  85. public void ObrotRamie1Prawo()
  86. {
  87. kat1 -= 0.01f;
  88. if(chwytak){
  89. RuchKlocka(kat1, 0, 0);
  90. }
  91. obrotRamienia1.rotY(kat1);
  92. Ramie1buff.setTranslation(new Vector3f());
  93. obrotRamienia1.mul(Ramie1buff);
  94. trans_ramie1.setTransform(obrotRamienia1);
  95. }
  96. public void ObrotRamie2Lewo()
  97. {
  98. if(kat2<2.75f){
  99. kat2 += 0.01f;
  100. if(chwytak){
  101. RuchKlocka(0, kat2, 0);
  102. }
  103. obrotRamienia2.rotY(kat2);
  104. Ramie2buff.setTranslation(new Vector3f(0.0f,0.026f, 0.12f));
  105. obrotRamienia2.mul(Ramie2buff);
  106. trans_ramie2.setTransform(obrotRamienia2);
  107. }
  108. }
  109. public void ObrotRamie2Prawo()
  110. {
  111. if(kat2>-2.75f){
  112. kat2 -= 0.01f;
  113. if(chwytak){
  114. RuchKlocka(0, kat2, 0);
  115. }
  116. obrotRamienia2.rotY(kat2);
  117. Ramie2buff.setTranslation(new Vector3f(0.0f,0.026f, 0.12f));
  118. obrotRamienia2.mul(Ramie2buff);
  119. trans_ramie2.setTransform(obrotRamienia2);
  120. }
  121. }
  122. public void ChwytakDoGory()
  123. {
  124. if(wys<0.09f){
  125. wys += 0.001f;
  126. if(chwytak){
  127. RuchKlocka(0, 0, wys);
  128. }
  129. patykBuff.setTranslation(new Vector3f(0.0f,0.0f+wys,0.0f));
  130. trans_patyk.setTransform(patykBuff);
  131. }
  132. }
  133. public void ChwytakWDol()
  134. {
  135. if(wys>=-0.096f){
  136. wys -= 0.001f;
  137. if(chwytak){
  138. RuchKlocka(0, 0, wys);
  139. }
  140. patykBuff.setTranslation(new Vector3f(0.0f,0.0f+wys,0.0f));
  141. trans_patyk.setTransform(patykBuff);
  142. }
  143. }
  144. ProjektSCARA()
  145. {
  146. // super("Robot SCARA");
  147. // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  148. // setResizable(false);
  149.  
  150. setLayout(new BorderLayout()); // ustawienie layoutu
  151.  
  152. GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
  153. Canvas3D canvas3D = new Canvas3D(config);
  154. add(BorderLayout.CENTER, canvas3D);
  155. canvas3D.addKeyListener(this);
  156.  
  157. klawisze = new boolean[7];
  158.  
  159. Transform3D rot_obs = new Transform3D();
  160. rot_obs.rotY((float)(-Math.PI/6));
  161. przesuniecie_obserwatora.set(new Vector3f(-1.2f,1.5f,2.0f));
  162. przesuniecie_obserwatora.mul(rot_obs);
  163. rot_obs.rotX((float)(-Math.PI/6));
  164. przesuniecie_obserwatora.mul(rot_obs);
  165.  
  166. universe = new SimpleUniverse(canvas3D);
  167.  
  168. universe.getViewingPlatform().getViewPlatformTransform().setTransform(przesuniecie_obserwatora);
  169. BranchGroup scene = utworzScene(universe);
  170. universe.addBranchGraph(scene);
  171.  
  172.  
  173.  
  174. zegar = new Timer();
  175. zegar.scheduleAtFixedRate(new Zadanie(),0,20);
  176. }
  177.  
  178. public BranchGroup utworzScene(SimpleUniverse su)
  179. {
  180.  
  181. BranchGroup wezel_scena = new BranchGroup();
  182.  
  183. TransformGroup vpTrans = null;
  184. vpTrans = su.getViewingPlatform().getViewPlatformTransform();
  185.  
  186. Appearance wyglad_platforma = new Appearance();
  187. Appearance wyglad_robot = new Appearance();
  188. Appearance wyglad_klocek = new Appearance();
  189.  
  190.  
  191. // Tło
  192. Background background = new Background(0.8f,0.2f, 0.1f);
  193. BoundingSphere sphere = new BoundingSphere(new Point3d(0,0,0), 100000);
  194. background.setApplicationBounds(sphere);
  195. wezel_scena.addChild(background);
  196.  
  197.  
  198. // Wgranie tekstury na platforme
  199. TextureLoader loader = new TextureLoader("tekstury/marmur.jpg",null);
  200. ImageComponent2D image = loader.getImage();
  201.  
  202. Texture2D Tplatforma = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,
  203. image.getWidth(), image.getHeight());
  204.  
  205. Tplatforma.setImage(0, image);
  206. Tplatforma.setBoundaryModeS(Texture.WRAP);
  207. Tplatforma.setBoundaryModeT(Texture.WRAP);
  208. wyglad_platforma.setTexture(Tplatforma);
  209.  
  210. // Wgranie tekstury na robota
  211. loader = new TextureLoader("tekstury/metal.jpg",this);
  212. image = loader.getImage();
  213.  
  214. Texture2D robot_tekstura = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,
  215. image.getWidth(), image.getHeight());
  216. robot_tekstura.setImage(0, image);
  217. robot_tekstura.setBoundaryModeS(Texture.WRAP);
  218. robot_tekstura.setBoundaryModeT(Texture.WRAP);
  219. wyglad_robot.setTexture(robot_tekstura);
  220.  
  221. // Wgranie tekstury na robota
  222. loader = new TextureLoader("tekstury/sruby.jpg",this);
  223. image = loader.getImage();
  224.  
  225. Texture2D klocek_tekstura = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA,
  226. image.getWidth(), image.getHeight());
  227. klocek_tekstura.setImage(0, image);
  228. klocek_tekstura.setBoundaryModeS(Texture.WRAP);
  229. klocek_tekstura.setBoundaryModeT(Texture.WRAP);
  230. wyglad_klocek.setTexture(klocek_tekstura);
  231.  
  232. ////// Utworzenie platformy
  233. Cylinder platforma = new Cylinder(0.6f,0.01f,Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_platforma);
  234.  
  235. //wezel_scena.addChild(platforma);
  236.  
  237. ////// Utworzenie grupy robota SCARA
  238. TransformGroup robot = new TransformGroup();
  239. Transform3D przesuniecie_robota = new Transform3D();
  240. przesuniecie_robota.set(new Vector3f(0.0f,0.02f,0.0f));
  241. robot.setTransform(przesuniecie_robota);
  242.  
  243. // Utworzenie podstawy, baza + słup
  244. 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);
  245. Cylinder slup = new Cylinder(0.05f, 0.25f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
  246.  
  247. Transform3D poz_slup = new Transform3D();
  248. poz_slup.set(new Vector3f(0.0f, 0.125f, 0.0f));
  249.  
  250. Transform3D poz_podstawa = new Transform3D();
  251. poz_podstawa.set(new Vector3f(0.0f, 0.02f, 0.0f));
  252.  
  253. TransformGroup trans_podstawa = new TransformGroup(poz_podstawa);
  254. trans_podstawa.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  255. trans_podstawa.addChild(podstawa);
  256.  
  257. TransformGroup trans_slup = new TransformGroup(poz_slup);
  258. trans_slup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  259. trans_slup.addChild(slup);
  260.  
  261. trans_baza = new TransformGroup();
  262. trans_baza.addChild(trans_podstawa);
  263. trans_baza.addChild(trans_slup);
  264. robot.addChild(trans_baza);
  265.  
  266. trans_baza.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  267.  
  268. // Utworzenie 1 ramienia oraz stawu obrotowego robota
  269. Cylinder staw1 = new Cylinder(0.05f, 0.05f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
  270. Transform3D poz_staw1 = new Transform3D();
  271. poz_staw1.set(new Vector3f(0.0f, 0.27f, 0.0f));
  272. TransformGroup przesun_staw1 = new TransformGroup(poz_staw1);
  273. przesun_staw1.addChild(staw1);
  274.  
  275. Box ramie1 = new Box(0.05f,0.024f,0.12f, Box.GENERATE_NORMALS| Box.GENERATE_TEXTURE_COORDS| Box.GENERATE_TEXTURE_COORDS_Y_UP,
  276. wyglad_robot);
  277. Transform3D poz_ramie1 = new Transform3D();
  278. poz_ramie1.set(new Vector3f(0.0f, 0.27f, 0.12f));
  279. TransformGroup przesun_ramie1 = new TransformGroup(poz_ramie1);
  280. przesun_ramie1.addChild(ramie1);
  281.  
  282. trans_ramie1 = new TransformGroup();
  283. trans_ramie1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  284. trans_ramie1.addChild(przesun_staw1);
  285. trans_ramie1.addChild(przesun_ramie1);
  286. /////////////////////
  287. /////klocek
  288.  
  289. 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);
  290. Transform3D poz_klocek = new Transform3D();
  291. poz_klocek.set(new Vector3f(0.0f, 0.07f, 0.48f));
  292.  
  293. trans_klocek = new TransformGroup(poz_klocek);
  294. trans_klocek.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  295. trans_klocek.addChild(klocek);
  296.  
  297. /////////////////////
  298. ///// Przegub robota między ramieniem 1 a ramieniem 2
  299. Cylinder przegub = new Cylinder(0.02f, 0.15f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
  300. Transform3D poz_przegub = new Transform3D();
  301. poz_przegub.set(new Vector3f(0.0f,0.294f,0.245f));
  302. trans_przegub = new TransformGroup(poz_przegub);
  303. trans_przegub.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  304. trans_przegub.addChild(przegub);
  305.  
  306. /////////////////////
  307. ///// Ramie 2 robota
  308. Cylinder staw2 = new Cylinder(0.05f, 0.105f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
  309. Cylinder staw3 = new Cylinder(0.05f, 0.05f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
  310. Box ramie2 = new Box(0.05f,0.024f,0.12f, Box.GENERATE_NORMALS| Box.GENERATE_TEXTURE_COORDS| Box.GENERATE_TEXTURE_COORDS_Y_UP,
  311. wyglad_robot);
  312.  
  313.  
  314. Transform3D poz_staw2 = new Transform3D();
  315. poz_staw2.set(new Vector3f(0.0f, -0.025f, -0.12f));
  316.  
  317. Transform3D poz_staw3 = new Transform3D();
  318. poz_staw3.set(new Vector3f(0.0f, 0.0f, 0.12f));
  319.  
  320. Transform3D poz_ramie2 = new Transform3D();
  321. poz_ramie2.set(new Vector3f(0.0f, 0.026f, 0.118f));
  322.  
  323. TransformGroup trans_staw2 = new TransformGroup(poz_staw2);
  324. trans_staw2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  325. trans_staw2.addChild(staw2);
  326.  
  327. TransformGroup trans_staw3 = new TransformGroup(poz_staw3);
  328. trans_staw3.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  329. trans_staw3.addChild(staw3);
  330.  
  331. trans_ramie2 = new TransformGroup(poz_ramie2);
  332. trans_ramie2.addChild(ramie2);
  333. trans_ramie2.addChild(trans_staw2);
  334. trans_ramie2.addChild(trans_staw3);
  335.  
  336. trans_ramie2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  337. trans_ramie2.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
  338.  
  339. ////////////////////////
  340. ///// Ramie przesuwne
  341. Cylinder ramie_przesuwne = new Cylinder(0.02f, 0.25f, Cylinder.GENERATE_NORMALS| Cylinder.GENERATE_TEXTURE_COORDS, wyglad_robot);
  342. Transform3D poz_ramie_przesuwne = new Transform3D();
  343. poz_ramie_przesuwne.set(new Vector3f(0.0f, 0.0f, 0.12f));
  344. TransformGroup przesun_ramie_przesuwne = new TransformGroup(poz_ramie_przesuwne);
  345. przesun_ramie_przesuwne.addChild(ramie_przesuwne);
  346.  
  347. trans_patyk = new TransformGroup();
  348. trans_patyk.addChild(przesun_ramie_przesuwne);
  349.  
  350. trans_patyk.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
  351. trans_patyk.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  352. trans_patyk.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
  353.  
  354. ///////
  355. trans_ramie1.addChild(trans_przegub);
  356. trans_przegub.addChild(trans_ramie2);
  357. trans_ramie2.addChild(trans_patyk);
  358. //trans_patyk.addChild(trans_klocek);
  359.  
  360. robot.addChild(platforma);
  361. robot.addChild(trans_ramie1);
  362. //////////////////////////////
  363. // Rotacja robota kursorem
  364. //
  365.  
  366. obrot = new TransformGroup();
  367.  
  368. obrot.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  369. obrot.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
  370. obrot.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
  371. obrot.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
  372. obrot.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
  373.  
  374. obiekt = new BranchGroup();
  375. obiekt.setCapability(obiekt.ALLOW_DETACH);
  376. obiekt.setCapability(obiekt.ALLOW_CHILDREN_WRITE);
  377. obiekt.setCapability(obiekt.ALLOW_CHILDREN_READ);
  378. obiekt.addChild(trans_klocek);
  379.  
  380. obrot.addChild(obiekt);
  381.  
  382. BoundingSphere bounds = new BoundingSphere();
  383. MouseRotate behavior = new MouseRotate();
  384. behavior.setTransformGroup(obrot);
  385. obrot.addChild(behavior);
  386. //behavior.setFactor(0.01, 0);
  387. behavior.setSchedulingBounds(bounds);
  388.  
  389. obrot.addChild(robot);
  390. wezel_scena.addChild(obrot);
  391.  
  392.  
  393. return wezel_scena;
  394. }
  395. class Zadanie extends TimerTask
  396. {
  397. public void run()
  398. {
  399. if(klawisze[0])
  400. {
  401. ObrotRamie1Lewo();
  402. }
  403. else if(klawisze[1])
  404. {
  405. ObrotRamie1Prawo();
  406. }
  407. else if(klawisze[2])
  408. {
  409. ObrotRamie2Lewo();
  410. }
  411. else if(klawisze[3])
  412. {
  413. ObrotRamie2Prawo();
  414. }
  415. else if(klawisze[4])
  416. {
  417. ChwytakDoGory();
  418. }
  419. else if(klawisze[5])
  420. {
  421. ChwytakWDol();
  422. }
  423. else if(klawisze[6])
  424. {
  425. if(chwytak && zawias == true){
  426. chwytak = false;
  427. System.out.println("puszczam");
  428. zawias = false;
  429. }
  430. else if(wys<=-0.096f && zawias == true){
  431. chwytak = true;
  432. obrot.removeChild(obiekt);
  433. trans_patyk.addChild(obiekt);
  434. Transform3D tmp = new Transform3D();
  435. tmp.set(new Vector3f(0.0f, -0.173f, 0.118f));
  436. trans_klocek.setTransform(tmp);
  437. System.out.println("trzymam");
  438. zawias = false;
  439. }
  440. }
  441. }
  442. }
  443.  
  444.  
  445. @Override
  446. public void keyPressed(KeyEvent e)
  447. {
  448. switch(e.getKeyCode())
  449. {
  450. case KeyEvent.VK_LEFT: System.out.println("lewo"); klawisze[0] = true; break;
  451. case KeyEvent.VK_RIGHT: System.out.println("prawo"); klawisze[1] = true; break;
  452. case KeyEvent.VK_A: System.out.println("lewo2"); klawisze[2] = true; break;
  453. case KeyEvent.VK_D: System.out.println("prawo2"); klawisze[3] = true; break;
  454. case KeyEvent.VK_UP: System.out.println("gora"); klawisze[4] = true; break;
  455. case KeyEvent.VK_DOWN: System.out.println("dol"); klawisze[5] = true; break;
  456. case KeyEvent.VK_SPACE: klawisze[6] = true; break;
  457. }
  458. }
  459.  
  460. public void keyReleased(KeyEvent e)
  461. {
  462. switch(e.getKeyCode())
  463. {
  464. case KeyEvent.VK_LEFT: System.out.println("lewo"); klawisze[0] = false; break;
  465. case KeyEvent.VK_RIGHT: System.out.println("prawo"); klawisze[1] = false; break;
  466. case KeyEvent.VK_A: System.out.println("lewo2"); klawisze[2] = false; break;
  467. case KeyEvent.VK_D: System.out.println("prawo2"); klawisze[3] = false; break;
  468. case KeyEvent.VK_UP: System.out.println("gora"); klawisze[4] = false; break;
  469. case KeyEvent.VK_DOWN: System.out.println("dol"); klawisze[5] = false; break;
  470. case KeyEvent.VK_SPACE: klawisze[6] = false; zawias = true; break;
  471. }
  472. }
  473.  
  474. @Override
  475. public void keyTyped(KeyEvent ke) {
  476. //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  477. }
  478.  
  479. public static void main(String[] args) {
  480. ProjektSCARA okno = new ProjektSCARA();
  481. okno.addKeyListener(okno);
  482. MainFrame mf = new MainFrame(okno, 1600, 800);
  483. }
  484. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement