Bonjour à tous ,
j'ai un projet pour mon IUT. C'est un programme en java , utilisant Java3D ( donc graphe de scène ) qui permet de visualiser en 3d des données 2d ou autres et je dois m'occuper de la gestion de la souris mais j'ai un problème.
En effet,j'arrive à gérer les déplacements de la souris lorsque celle-ci est DRAG , je souhaite aussi gérer la molette par exemple pour un zoom.
Or j'arrive soit à faire les déplacements soit la roulette mais pas les 2 en même temps et je ne trouve pas de solutions.
Je colle mon code si jamais quelqu'un voit mon erreur
Si je remplace (MouseEvent.MOUSE_DRAGGED | MouseEvent.MOUSE_WHEEL); par (MouseEvent.MOUSE_DRAGGED & MouseEvent.MOUSE_WHEEL); j'arrive à avoir la roulette mais plus le deplacement ...
Code :
- class MyMouse extends Behavior{
- private TransformGroup TG;
- private Transform3D rot = new Transform3D();
- private Transform3D rotation = new Transform3D();
- private Vector3f translation = new Vector3f();
- private WakeupOnAWTEvent mouseEvent = new WakeupOnAWTEvent(MouseEvent.MOUSE_DRAGGED | MouseEvent.MOUSE_WHEEL);
- private float pasPos = 0.01f;
- private float pasNeg = -0.01f;
- private int mouseXlast,mouseYlast,mouseX,mouseY;
- /**Constructeur*/
- MyMouse(TransformGroup argTG){ TG=argTG; }
- /** Initialise le Behaviour*/
- public void initialize(){
- /** Activation des criteres de reveil = touche **/
- wakeupOn(mouseEvent);
- setSchedulingBounds(new BoundingSphere(new Point3d(),1000.0));
- }
- /**
- * Methode de traitement de l'action (actionPerformed pour les ActionListener:p)
- */
- public void processStimulus(Enumeration criteria){
- AWTEvent events[]=mouseEvent.getAWTEvent();
- rot.setIdentity();
- TG.getTransform(rotation);
-
- if (((MouseEvent)events[0]).getID()==MouseEvent.MOUSE_DRAGGED){
- mouseX = ((MouseEvent)events[0]).getX();
- mouseY = ((MouseEvent)events[0]).getY();
- //Gestion de la souris pour Y
- if ( mouseYlast < mouseY ) rot.rotX(pasNeg);
- if ( mouseYlast > mouseY ) rot.rotX(pasPos);
- //Gestion de la souris pour X
- if ( mouseXlast < mouseX ) rot.rotY(pasNeg);
- if ( mouseXlast > mouseX ) rot.rotY(pasPos);
- }
- mouseXlast = mouseX;
- mouseYlast = mouseY;
- if (((MouseEvent)events[0]).getID()==MouseEvent.MOUSE_WHEEL){
- System.out.println("[informations] Roulette utilisee !" );
- }
- rotation.mul(rot);
- TG.setTransform(rotation);
- this.wakeupOn(mouseEvent);
- }
- }
|