25 package eu.mihosoft.vrl.v3d;
27 import javafx.event.EventHandler;
28 import javafx.event.EventType;
29 import javafx.scene.Node;
30 import javafx.scene.Scene;
31 import javafx.scene.paint.Color;
32 import javafx.scene.shape.TriangleMesh;
33 import javafx.scene.shape.MeshView;
34 import javafx.scene.paint.PhongMaterial;
35 import javafx.scene.shape.DrawMode;
36 import javafx.scene.shape.CullFace;
37 import javafx.scene.input.MouseButton;
38 import javafx.scene.input.MouseEvent;
39 import javafx.scene.transform.Rotate;
53 throw new AssertionError(
"don't instanciate me!");
66 Node n, Scene eventReceiver, MouseButton btn) {
67 eventReceiver.addEventHandler(MouseEvent.ANY,
68 new MouseBehaviorImpl1(n, btn));
79 Node n, Node eventReceiver, MouseButton btn) {
80 eventReceiver.addEventHandler(MouseEvent.ANY,
81 new MouseBehaviorImpl1(n, btn));
86 class MouseBehaviorImpl1
implements EventHandler<MouseEvent> {
88 private double anchorAngleX;
89 private double anchorAngleY;
90 private double anchorX;
91 private double anchorY;
92 private final Rotate rotateX =
new Rotate(0, 0, 0, 0, Rotate.X_AXIS);
93 private final Rotate rotateZ =
new Rotate(0, 0, 0, 0, Rotate.Z_AXIS);
94 private MouseButton btn;
96 public MouseBehaviorImpl1(Node n, MouseButton btn) {
97 n.getTransforms().addAll(rotateX, rotateZ);
101 this.btn = MouseButton.MIDDLE;
106 public void handle(MouseEvent t) {
107 if (!btn.equals(t.getButton())) {
113 if (MouseEvent.MOUSE_PRESSED.equals(t.getEventType())) {
114 anchorX = t.getSceneX();
115 anchorY = t.getSceneY();
116 anchorAngleX = rotateX.getAngle();
117 anchorAngleY = rotateZ.getAngle();
119 }
else if (MouseEvent.MOUSE_DRAGGED.equals(t.getEventType())) {
120 rotateZ.setAngle(anchorAngleY + (anchorX - t.getSceneX()) * 0.7);
121 rotateX.setAngle(anchorAngleX - (anchorY - t.getSceneY()) * 0.7);
static void addMouseBehavior(Node n, Scene eventReceiver, MouseButton btn)
static void addMouseBehavior(Node n, Node eventReceiver, MouseButton btn)