import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.vecmath.*; import javax.media.j3d.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; public class Edicion3D extends JFrame { JMenu MenuFig, MenuColor, MenuEdita, MenuFactor, MenuAyuda; JMenuItem Figuras_Circ, Figuras_Cuadro, Figuras_Triang, Figuras_Salir, menuItem; JMenuItem Color_Rojo, Color_Verde, Color_Azul; JMenuItem Edit_Mover, Edit_Escala, Edit_Rotar; JMenuItem Factor_50, Factor_100; int TipoDibujo = 3, X=0, Y=0, Editar=0; Color MyColor = Color.black; BranchGroup scene=null; Canvas3D can = null; SimpleUniverse universe = null; BranchGroup objRoot = null; Sphere Esfera = null; ColorCube Cubo = null; Cone Cono = null; Background BG = null; public static void main(String[] args) { new Edicion3D(); } public Edicion3D() { super("POR FIN"); // contenedor principal getContentPane().setLayout(new BorderLayout()); JPopupMenu.setDefaultLightWeightPopupEnabled(false); JMenuBar BarraMenu = new JMenuBar(); // Barra de menU MenuFig = InsertaMenu("Figuras"); MenuFig.setMnemonic(KeyEvent.VK_A); // Se accesa con Alt-A InsertaItem(MenuFig, Figuras_Circ, "Esfera", KeyEvent.VK_E); // Se accesa con Alt-N InsertaItem(MenuFig, Figuras_Cuadro, "Cubo", KeyEvent.VK_C); InsertaItem(MenuFig, Figuras_Triang, "Cono", KeyEvent.VK_O); InsertaItem(MenuFig, Figuras_Salir, "Salir", KeyEvent.VK_S); // Se accesa con Alt-S MenuColor = InsertaMenu("Colores"); MenuColor.setMnemonic(KeyEvent.VK_O); // Se accesa con Alt-P InsertaItem(MenuColor, Color_Rojo, "Rojo", KeyEvent.VK_R); // Se accesa con Alt-T InsertaItem(MenuColor, Color_Verde, "Verde", KeyEvent.VK_V); // Se accesa con Alt-R InsertaItem(MenuColor, Color_Azul, "Azul", KeyEvent.VK_A); MenuEdita = InsertaMenu("Edicion"); MenuEdita.setMnemonic(KeyEvent.VK_E); // Se accesa con Alt-E InsertaItem(MenuEdita, Edit_Mover, "Mover", KeyEvent.VK_M); InsertaItem(MenuEdita, Edit_Escala, "Escalar", KeyEvent.VK_L); InsertaItem(MenuEdita, Edit_Rotar, "Rotar", KeyEvent.VK_T); MenuFactor = InsertaMenu("Factor"); MenuFactor.setMnemonic(KeyEvent.VK_F); // Se accesa con Alt-E InsertaItem(MenuFactor, Factor_50, "50 %", KeyEvent.VK_5); InsertaItem(MenuFactor, Factor_100, "100 %", KeyEvent.VK_1); MenuAyuda = InsertaMenu("Ayuda"); JMenuItem Ayuda_Eins = new JMenuItem(new ImageIcon("RobotNegro.gif")); Ayuda_Eins.setMnemonic(KeyEvent.VK_E); // Se accesa con Alt-E MenuAyuda.add(Ayuda_Eins); BarraMenu.add(MenuFig); BarraMenu.add(MenuColor); BarraMenu.add(MenuEdita); BarraMenu.add(MenuFactor); BarraMenu.add(MenuAyuda); setJMenuBar(BarraMenu); // Colocar menu en el frame JPanel jp = new JPanel(); // Crear panel para el canvas3d jp.setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); can = new Canvas3D(config); scene = createSceneGraph(); //Create the scene for the canvas (typical java3D) universe = new SimpleUniverse(can); universe.getViewingPlatform().setNominalViewingTransform(); // se personaliza universe.addBranchGraph(scene); jp.add(BorderLayout.CENTER, can); getContentPane().add(BorderLayout.CENTER, jp); setSize(800,800); setVisible(true); } JMenu InsertaMenu(String CAD) { return new JMenu(CAD); } void InsertaItem(JMenu MENU, JMenuItem ITEM, String CAD, int KEY_EVENT) { ITEM = new JMenuItem(CAD); ITEM.setMnemonic(KEY_EVENT); MENU.add(ITEM); ITEM.addActionListener(new Evento_Opciones()); } //Create the scene for the canvas (typical java3D) void TipoDeFigura() { objRoot = null; scene = createSceneGraph(); universe.addBranchGraph(scene); } public BranchGroup createSceneGraph() { ////////////////////////////////////////////////////////////////// Appearance Apariencia = new Appearance(); ColoringAttributes CA = new ColoringAttributes(); CA.setColor((float)0.5,(float)0.5,(float)0.5); Apariencia.setColoringAttributes(CA); Esfera = new Sphere((float)0.5, 1, 20, Apariencia); Cubo = new ColorCube(0.4); Cono = new Cone((float)0.5, (float)1.0, Apariencia); ////////////////////////////////////////////////////////////////// objRoot = new BranchGroup(); TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); if (TipoDibujo==1) objTrans.addChild(Esfera); if (TipoDibujo==2) objTrans.addChild(Cubo); if (TipoDibujo==3) objTrans.addChild(Cono); AxisAngle4f axisAngle = new AxisAngle4f(0.0f, 0.0f, 1.0f, -(float)Math.PI / 2.0f); Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha (-1, 4000); // en milisegundos RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); rotator.setSchedulingBounds(bounds); objTrans.addChild(rotator); objRoot.compile(); return objRoot; } class Evento_Opciones implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Salir")) System.exit(0); if (e.getActionCommand().equals("Esfera")) TipoDibujo = 1; if (e.getActionCommand().equals("Cubo")) TipoDibujo = 2; if (e.getActionCommand().equals("Cono")) TipoDibujo = 3; if (e.getActionCommand().equals("Rojo")) MyColor = Color.red; if (e.getActionCommand().equals("Verde")) MyColor = Color.green; if (e.getActionCommand().equals("Azul")) MyColor = Color.blue; if (e.getActionCommand().equals("Mover")) Editar = 1; if (e.getActionCommand().equals("Escalar")) Editar = 2; if (e.getActionCommand().equals("Rotar")) Editar = 3; if (e.getActionCommand().equals("50 %")); // canvas.Actualiza(50); if (e.getActionCommand().equals("100 %")); // canvas.Actualiza(100); TipoDeFigura(); // canvas.Actualiza(TipoDibujo, MyColor, Editar); } } }