package org.jzy3d.chart.controllers.mouse.picking;

import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;

import org.jzy3d.chart.Chart;
import org.jzy3d.chart.controllers.ControllerType;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.view.View;

public class AWTMousePickingPan2dController extends AWTMousePickingController{
	public AWTMousePickingPan2dController(){
		super();
	}
	
	public AWTMousePickingPan2dController(Chart chart){
		super(chart);
	}

	public AWTMousePickingPan2dController(Chart chart, int brushSize){
		super(chart, brushSize);
	}

	public AWTMousePickingPan2dController(Chart chart, int brushSize, int bufferSize){
		super(chart, brushSize, bufferSize);
	}
	
	/****************/

	@Override
	public void mouseDragged(MouseEvent e) {
		int yflip = -e.getY() + targets.get(0).getCanvas().getRendererHeight();
		Coord2d mouse = new Coord2d(e.getX(),yflip);
		View view = targets.get(0).getView();
		Coord3d thisMouse3d = view.projectMouse(e.getX(),yflip);
		
		// 1/2 pan for cleaner rendering
		if(!done){
			pan(prevMouse3d, thisMouse3d); done = true;
		}
		else
			done = false;
		prevMouse = mouse;
		prevMouse3d = thisMouse3d;
	}
	protected boolean done;
	
	@Override
	public void mouseWheelMoved(MouseWheelEvent e) {
		lastInc = (e.getWheelRotation()/10.0f);
		factor = factor + lastInc;

		View view = targets.get(0).getView();
		mouse3d = view.projectMouse( lastMouseX, lastMouseY );

		zoom(1+lastInc);
	}
	
	
	/**********************/
	
	protected void zoom(final float factor){
		Chart chart = targets.get(0);
		BoundingBox3d viewBounds = chart.getView().getBounds();
		BoundingBox3d newBounds = viewBounds.scale(new Coord3d(factor,factor,1));
		chart.getView().setBoundManual(newBounds);
		chart.getView().shoot();
		
		fireControllerEvent(ControllerType.ZOOM, factor);
	}
	
	protected void pan(Coord3d from, Coord3d to){
		Chart chart = targets.get(0);
		
		BoundingBox3d viewBounds = chart.getView().getBounds();
		Coord3d offset = to.sub(from).div(-PAN_FACTOR);
		BoundingBox3d newBounds = viewBounds.shift(offset);
		chart.getView().setBoundManual(newBounds);
		chart.getView().shoot();
		
		fireControllerEvent(ControllerType.PAN, offset);
	}
	
	protected static float PAN_FACTOR = 0.25f;
	
	protected int lastMouseX = 0;
    protected int lastMouseY = 0;
    
	/**********************/
}

 

Ads help maintain this website.