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);
}
}
}