Maus Rotation um Canvasmittelpunkt

henri21

Grünschnabel
Hallo zusammen

Ich programmiere ein einfaches CAD System in Java mittels Java3D. Nun versuche ich eine CAD ähnliche Bedienung (Catia) mit der Maus zu implementieren. D.h. zoomen mit dem Mausrad, verschieben der Körper mit der rechten Maustaste und rotieren mit der linken Maustaste.

Ich habe bereits folgendes Programmiert, was auch funktioniert:

Code:
        // Grenzen
        bounds = new BoundingBox(new Point3d(-100, -100, -100), 
                                new Point3d(100, 100, 100));
        orbit = new OrbitBehavior(canvas,
                                    OrbitBehavior.REVERSE_ALL|
                                    OrbitBehavior.STOP_ZOOM);
        orbit.setMinRadius(0.5);
        orbit.setSchedulingBounds(bounds);
        orbit.setEnable(true); 
        
        // Maus interaktion
        viewingPlatform = universe.getViewingPlatform();
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);

Wenn man nun die Szene verschiebt bleibt das Rotationszentrum in (0,0,0), ich möchte aber das die Rotation immer um den aktuellen Fenstermittelpunkt geschieht, so wie man das von CAD Systemen kennt.

Hat jemand einen Vorschlag wie man das macht?

Gruss

Henri
 
Ich habe mal mit

Code:
orbit.setRotationCenter(new Point3d(-60,0,0));

herumexperementiert. Bei der Initialisierung funktioniert das auch, aber leider nicht dynamisch.
 
du musst es jedes mal aktualisieren wenn sich der mouse stat ändert ;)
entweder du benutzt nen extra Thread (wäre nich so schön) oder du addest nen mouse Listener und fragst den dann ab.
 
Also das heisst jetzt, dass ich bei jedem Event der Maus das Rotationscentern neu setzen muss?

Code:
orbit.setRotationCenter(new Point3d(x,y,z));

Aber wie lese ich die aktuelle Verschiebung aus dem orbit um den Punkt (x,y,z) zu bestimmen?
Gibt es eine Funktion orbit.getTranslationsVektor?:suspekt:


Vielen Dank

Henri
 
Zurück