package org.jzy3d.ui.editors;

import java.awt.GridLayout;

import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.lights.Light;


public class LightEditor extends JPanel{

	
	public LightEditor(Chart chart){
		this.chart = chart;
		
		BoundingBox3d box = new BoundingBox3d( chart.getView().getBounds() );
		box.scale(new Coord3d(3,3,3));
		box.getXRange().createEnlarge(2);
		ambiantColorControl = new ColorEditor("Ambiant");
		diffuseColorControl = new ColorEditor("Diffuse");
		specularColorControl = new ColorEditor("Specular");
		positionControl = new Coord3dEditor("Position", 
				box.getXRange().createEnlarge(2), 
				box.getYRange().createEnlarge(2), 
				box.getZRange().createEnlarge(2));
		
		setLayout(new GridLayout(4,1));
		add(ambiantColorControl);
		add(diffuseColorControl);		
		add(specularColorControl);
		add(positionControl);
	}
	
	protected void registerColorControl(ColorEditor colorControl, final Color color){
		final JSlider slider0 = colorControl.getSlider(0);
		slider0.setValue( (int)color.r * slider0.getMaximum() );
		slider0.addChangeListener(new ChangeListener() {
			@Override
            public void stateChanged(ChangeEvent e) {
				color.r = getPercent(slider0);
				chart.render();
			}
		});
		final JSlider slider1 = colorControl.getSlider(1);
		slider1.setValue( (int)color.g * slider1.getMaximum() );
		slider1.addChangeListener(new ChangeListener() {
			@Override
            public void stateChanged(ChangeEvent e) {
				color.g = getPercent(slider1);
				chart.render();
			}
		});
		final JSlider slider2 = colorControl.getSlider(2);
		slider2.setValue( (int)color.b * slider2.getMaximum() );
		slider2.addChangeListener(new ChangeListener() {
			@Override
            public void stateChanged(ChangeEvent e) {
				color.b = getPercent(slider2);
				chart.render();
			}
		});
		/*final JSlider slider3 = colorControl.getSlider(3);
		slider3.setValue( (int)color.a * slider3.getMaximum() );
		slider3.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				color.a = getPercent(slider3);
				chart.render();
			}
		});*/
	}
	
	protected void registerCoord3dControl(Coord3dEditor colorControl, final Coord3d coord){
		final JSlider slider0 = colorControl.getSlider(0);
		slider0.setValue( (int)coord.x /** slider0.getMaximum()*/ );
		slider0.addChangeListener(new ChangeListener() {
			@Override
            public void stateChanged(ChangeEvent e) {
				coord.x = slider0.getValue();
				light.setPosition(coord);
				chart.render();
			}
		});
		final JSlider slider1 = colorControl.getSlider(1);
		slider1.setValue( (int)coord.y /** slider1.getMaximum()*/ );
		slider1.addChangeListener(new ChangeListener() {
			@Override
            public void stateChanged(ChangeEvent e) {
				coord.y = slider1.getValue();
				light.setPosition(coord);
				chart.render();
			}
		});
		final JSlider slider2 = colorControl.getSlider(2);
		slider2.setValue( (int)coord.z /** slider2.getMaximum()*/ );
		slider2.addChangeListener(new ChangeListener() {
			@Override
            public void stateChanged(ChangeEvent e) {
				coord.z = slider2.getValue();
				light.setPosition(coord);
				chart.render();
			}
		});
	}
	
	protected float getPercent(JSlider slider){
		return ((float)slider.getValue()) / ((float)slider.getMaximum());
	}
		
	public void setTarget(Light light){
		this.light = light;
		
		registerColorControl(ambiantColorControl, light.getAmbiantColor());
		registerColorControl(diffuseColorControl, light.getDiffuseColor());
		registerColorControl(specularColorControl, light.getSpecularColor());
		registerCoord3dControl(positionControl, light.getPosition());
	}
	
	protected ColorEditor ambiantColorControl;
	protected ColorEditor diffuseColorControl;
	protected ColorEditor specularColorControl;
	protected Coord3dEditor positionControl;
	
	protected Chart chart;
	protected Light light;
	
	private static final long serialVersionUID = 4903947408608903517L;
}

 

Ads help maintain this website.