[Gvsig_desarrolladores] OSGVP: Usar un jpg como suelo de un planeta

Maria Arias de Reyna marias en emergya.es
Vie Ene 23 14:27:26 CET 2009


El Viernes 23 Enero 2009 11:41, Rafa Gaitan escribió:
> Por otro lado si lo que quieres es NO subdividir y poner una única textura,
> añadiendo esto cuando creas el planeta es suficiente:
>
>     planet.setEnabledSubdivision(false);

He intentado hacer lo que me has dicho, pero no consigo verlo. He creado una 
clase mundo que extiende a planeta y que llama a las funciones que me has 
indicado. Pero aunque me pinta la proyección y me deja moverla y girarla, en 
ningún momento llama a la función de requestTextureLayer(...).

public class Mundo extends Planet  {

        public Mundo() throws NodeException {
                super("Mi Mundo",
                                Planet.CoordinateSystemType.PROJECTED, "WKT", "EPSG:23030",
                                1, 1, 2, 2, 1.0, 1.0);
                addTextureLayer(getExtent()); 
                setEnabledSubdivision(false);
        }
}

Y luego llamo creo el mundo y lo pinto con la clase ejemplo:

public class Ejemplo implements RequestLayerListener{
	
	private static IViewerContainer canvas3d;
	private static PlanetViewer planetViewer;
	private static Mundo earth;

	public void ejecutar()
	{
		JPanel jContentPane = new JPanel();
		jContentPane.setLayout(new BorderLayout());
		JFrame jFrame = new JFrame();
		jFrame.setContentPane(jContentPane);
		jFrame.setSize(800, 600);
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		/**
		 * Create a planet viewer
		 */
		try {
			planetViewer = new PlanetViewer();
		} catch (NodeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		/**
		 * Define the viewer type and add to the canvas
		 */
		canvas3d = ViewerFactory.getInstance().createViewer(
				ViewerFactory.VIEWER_TYPE.CANVAS_VIEWER, planetViewer);
		jContentPane.add((Component)canvas3d, BorderLayout.CENTER);
		ViewerFactory.getInstance().startAnimator();
		/**
		 * Add a planet to the scene data
		 */
		try {
			earth = new Mundo();
		} catch (NodeException e3) {
			// TODO Auto-generated catch block
			e3.printStackTrace();
		}
		try {
			planetViewer.addPlanet(earth);

		} catch (NodeException e2) {
			e2.printStackTrace();
		}
		earth.setRequestLayerListener(this); 
		/**
		 * Put the camera in the scene
		 */
		double difx = earth.getExtent().getWidth() / 2.0d;
		double dify = earth.getExtent().getHeight() / 2.0d;
		double posx = earth.getExtent().getX() + difx;
		double posy = earth.getExtent().getY() + dify;
		double height = Math.sqrt(difx * difx + dify * dify) * 4.0f;

		Camera cam = planetViewer.getCamera();
		cam.setViewByLookAt((float) posx, (float) posy, (float) height,
				(float) posx, (float) posy, 0f, 0f, 1f, 0f);
		planetViewer.setCamera(cam);
		/**
		 * Customizing the manipulator
		 */
		CustomTerrainManipulator manip = (CustomTerrainManipulator) planetViewer
				.getCameraManipulator();
		manip.addAzimButtonMask(MouseButtonMaskType.LEFT_MOUSE_BUTTON, 'a');
		manip.addRollButtonMask(MouseButtonMaskType.MIDDLE_MOUSE_BUTTON, 'b');
		manip.addZoomButtonMask(MouseButtonMaskType.MIDDLE_MOUSE_BUTTON, 'c');
		manip.setMinCameraDistance(earth.getRadiusEquatorial() + 10);
		manip.setMaxCameraDistance(earth.getRadiusEquatorial() + 1000);
		manip.setEnabledNorthOrientation(true);
		jFrame.setVisible(true);
		jFrame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				ViewerFactory.getInstance().stopAnimator();
				canvas3d.dispose();
			}
		});
	}
	


	public void requestElevationLayer(Planet arg0, RequestLayerEvent arg1) {
		// TODO Auto-generated method stub
		
	}

	public void requestTextureLayer(Planet arg0, RequestLayerEvent arg1){
		earth.setTexture(arg1.getTerrainNode(), "/earth.gif", 0);
	}
	
}

-- 
María Arias de Reyna Domínguez
Emergya Consultoría



Más información sobre la lista de distribución gvSIG_desarrolladores