package org.jzy3d.chart.controllers.mouse.picking;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import org.jzy3d.chart.Chart;
import org.jzy3d.chart.controllers.camera.AbstractCameraController;
import org.jzy3d.chart.controllers.mouse.AWTMouseUtilities;
import org.jzy3d.chart.controllers.thread.camera.CameraThreadController;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.maths.IntegerCoord2d;
import org.jzy3d.picking.PickingSupport;
import org.jzy3d.plot3d.rendering.scene.Graph;
import org.jzy3d.plot3d.rendering.view.View;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;
public class AWTMousePickingController extends AbstractCameraController implements MouseListener, MouseWheelListener {
public AWTMousePickingController() {
super();
picking = new PickingSupport();
}
public AWTMousePickingController(Chart chart) {
super(chart);
picking = new PickingSupport();
}
public AWTMousePickingController(Chart chart, int brushSize) {
super(chart);
picking = new PickingSupport(brushSize);
}
public AWTMousePickingController(Chart chart, int brushSize, int bufferSize) {
super(chart);
picking = new PickingSupport(brushSize, bufferSize);
}
@Override
public void register(Chart chart) {
super.register(chart);
this.chart = chart;
this.prevMouse = Coord2d.ORIGIN;
chart.getCanvas().addMouseController(this);
}
@Override
public void dispose() {
for (Chart c : targets) {
c.getCanvas().removeMouseController(this);
}
if (threadController != null)
threadController.stop();
super.dispose(); // i.e. target=null
}
/****************/
public PickingSupport getPickingSupport() {
return picking;
}
public void setPickingSupport(PickingSupport picking) {
this.picking = picking;
}
/****************/
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
}
/** Compute zoom */
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (threadController != null)
threadController.stop();
float factor = 1 + (e.getWheelRotation() / 10.0f);
zoomX(factor);
zoomY(factor);
chart.getView().shoot();
}
public void mouseMoved(MouseEvent e) {
pick(e);
}
@Override
public void mousePressed(MouseEvent e) {
if (handleSlaveThread(e))
return;
pick(e);
}
public void pick(MouseEvent e) {
int yflip = -e.getY() + targets.get(0).getCanvas().getRendererHeight();
prevMouse.x = e.getX();
prevMouse.y = e.getY();// yflip;
View view = targets.get(0).getView();
prevMouse3d = view.projectMouse(e.getX(), yflip);
GL gl = chart().getView().getCurrentGL();
Graph graph = chart().getScene().getGraph();
// will trigger vertex selection event to those subscribing to
// PickingSupport.
picking.pickObjects(gl, glu, view, graph, new IntegerCoord2d(e.getX(), yflip));
}
public boolean handleSlaveThread(MouseEvent e) {
if (AWTMouseUtilities.isDoubleClick(e)) {
if (threadController != null) {
threadController.start();
return true;
}
}
if (threadController != null)
threadController.stop();
return false;
}
/**********************/
protected float factor = 1;
protected float lastInc;
protected Coord3d mouse3d;
protected Coord3d prevMouse3d;
protected PickingSupport picking;
protected GLU glu = new GLU();
protected Chart chart;
protected Coord2d prevMouse;
protected CameraThreadController threadController;
}
Ads help maintain this website.