package demos.nurbs.surfaceapp; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.Vector; import com.jogamp.opengl.GL; import com.jogamp.opengl.glu.GLU; /** * Třída zpracovávající události myši (implementuje rozhraní zpracovávající stisk tlačítek i pohyb a tažení myší) * @author Tomáš Hráský * */ public class SurfaceMouseListener implements MouseListener, MouseMotionListener { /** * Index aktuálně vybraného řídícího bodu */ private int bodIndex; /** * Okno k nemuž liustener patří */ private SurfaceApp appWindow; /** * Typ prováděné činnosti */ private String actionType; /** * Tolerance pro indikaci kliku na řídící bod */ private static final int TOLERANCE=10; /** * Vytvoří listener s odkazem na zadané okno * @param app rodičovské okno */ public SurfaceMouseListener(SurfaceApp app) { this.appWindow=app; } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) */ public void mouseClicked(MouseEvent e) { if(actionType==SurfaceApp.PRIDAT_AC){ // Surface.getInstance().setIsSurfaceFinished(false); // float x=e.getX(); // float y=e.getY(); // float z=0; // float w=1; // int size; // float[] newCtrls; // try{ // size=Surface.getInstance().getCtrlPoints().length; // }catch (Exception ex) { // size=0; // } // newCtrls=new float[size+4]; // System.arraycopy(Surface.getInstance().getCtrlPoints(),0,newCtrls,0,size); // // newCtrls[size]=x; // newCtrls[size+1]=y; // newCtrls[size+2]=z; // newCtrls[size+3]=w; // Surface.getInstance().setCtrlPoints(newCtrls); }else if(actionType==SurfaceApp.SMAZAT_AC&&bodIndex>=0){ // Surface.getInstance().setIsSurfaceFinished(false); // int size=Surface.getInstance().getCtrlPoints().length; // float[] newCtrls=new float[size-4]; // // int firstPartSize=(bodIndex)*4; // int secondPartSize=newCtrls.length-firstPartSize; // System.arraycopy(Surface.getInstance().getCtrlPoints(),0,newCtrls,0,firstPartSize); // System.arraycopy(Surface.getInstance().getCtrlPoints(),firstPartSize+4,newCtrls,firstPartSize,secondPartSize); // bodIndex=-1; // Surface.getInstance().setBodIndex(bodIndex); // Surface.getInstance().setCtrlPoints(newCtrls); }else if(actionType==SurfaceApp.SMAZAT_AC_RADEK&&bodIndex>=0){ Vector oldPoints=new Vector(); Surface srf=Surface.getInstance(); for(int i=0;i indexes=new Vector(); for(int i=index;i newOldPoints=new Vector(); for(int i=0;i=0){ Vector oldPoints=new Vector(); Surface srf=Surface.getInstance(); for(int i=0;i indexes=new Vector(); for(int i=index;i>=0;i-=srf.getPointsInV()){ indexes.add(i-1); } for(int i=index;i newOldPoints=new Vector(); for(int i=0;i=x-TOLERANCE&&xE<=x+TOLERANCE&&yE>=y-TOLERANCE&&yE<=y+TOLERANCE){ this.bodIndex=i; } } Surface.getInstance().setBodIndex(bodIndex); appWindow.updateGLCanvas(); } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) */ public void mouseReleased(MouseEvent e) { // this.bodIndex=-1; } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) */ public void mouseEntered(MouseEvent e) { } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) */ public void mouseExited(MouseEvent e) { } /* (non-Javadoc) * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent) */ public void mouseDragged(MouseEvent e) { // if(this.bodIndex>=0){ // int x=e.getX(); // int y=e.getY(); // // Surface.getInstance().setActiveX(x); // Surface.getInstance().setActiveY(y); // } // appWindow.updateGLCanvas(); } /* (non-Javadoc) * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent) */ public void mouseMoved(MouseEvent e) { } /** * Nastaví typ prováděné činnosti * @param action typ prováděné činnosti */ public void setActionType(String action) { this.actionType=action; } /** * Vrací index aktuálně vybraného řídícího bodu * @return index aktuálně vybraného řídícího bodu */ public int getBodIndex() { return bodIndex; } /** * Vrací index aktuálně vybraného řídícího bodu * @param bodIndex aktuálně vybraného řídícího bodu */ public void setBodIndex(int bodIndex) { this.bodIndex = bodIndex; } }