Edicion3D.java_



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