package org.geogebra.desktop.geogebra3D.input3D.zspace;
import org.geogebra.common.main.settings.EuclidianSettings3D;
import org.geogebra.desktop.geogebra3D.input3D.Input3DFactory.Input3DException;
public class Socket {
/** stylus x position */
public double stylusX;
/** stylus y position */
public double stylusY;
/** stylus z position */
public double stylusZ;
/** stylus x direction */
public double stylusDX;
/** stylus y direction */
public double stylusDY;
/** stylus z direction */
public double stylusDZ;
public double stylusOrientationX, stylusOrientationY, stylusOrientationZ, stylusOrientationW;
// start values
public double leftEyeX = 0,
leftEyeY = -EuclidianSettings3D.PROJECTION_PERSPECTIVE_EYE_DISTANCE_DEFAULT
* Math.sin(Math.PI / 6),
leftEyeZ = EuclidianSettings3D.PROJECTION_PERSPECTIVE_EYE_DISTANCE_DEFAULT
* Math.cos(Math.PI / 6);
public double rightEyeX = EuclidianSettings3D.EYE_SEP_DEFAULT,
rightEyeY, rightEyeZ;
public double glassesCenterX, glassesCenterY, glassesCenterZ;
public double glassesOrientationX, glassesOrientationY, glassesOrientationZ, glassesOrientationW;
public boolean wantsStereo, stylusDetected = false;
public boolean buttonLeft, buttonRight, button3;
/** says if it has got a message from leo */
public boolean gotMessage = false;
private ZSpaceGeoGebra zsggb;
private static boolean LIBRARY_LOADED = false;
private static boolean ZSPACE_INITED = false;
public static void initZSpace() throws Input3DException {
if (!LIBRARY_LOADED) {
ZSpaceGeoGebra.RunOnce();
LIBRARY_LOADED = true;
}
if (!ZSPACE_INITED) {
ZSpaceGeoGebra.Initialize();
ZSPACE_INITED = true;
}
}
public Socket() throws Input3DException {
initZSpace();
zsggb = new ZSpaceGeoGebra();
}
public boolean getData(){
wantsStereo = zsggb.wantsStereo();
if (zsggb.eventOccured()){
zsggb.getData();
// App.debug("\n"+zsggb.getData());
stylusX = zsggb.getStylusX();
stylusY = zsggb.getStylusY();
stylusZ = zsggb.getStylusZ();
// App.debug("\nstylus: " + stylusX + "," + stylusY + "," +
// stylusZ);
stylusDX = zsggb.getStylusDX();
stylusDY = zsggb.getStylusDY();
stylusDZ = zsggb.getStylusDZ();
// App.debug("\nstylus: " + stylusDX + "," + stylusDY + "," +
// stylusDZ);
stylusOrientationX = zsggb.getStylusQX();
stylusOrientationY = zsggb.getStylusQY();
stylusOrientationZ = zsggb.getStylusQZ();
stylusOrientationW = zsggb.getStylusQW();
// App.debug("\n" + zsggb.getStylusMatrix());
stylusDetected = zsggb.stylusDetected();
// App.debug("" + stylusDetected);
leftEyeX = zsggb.getLeftEyeX();
leftEyeY = zsggb.getLeftEyeY();
leftEyeZ = zsggb.getLeftEyeZ();
rightEyeX = zsggb.getRightEyeX();
rightEyeY = zsggb.getRightEyeY();
rightEyeZ = zsggb.getRightEyeZ();
// App.debug("\nleft eye: " + leftEyeX + "," + leftEyeY + ","
// + leftEyeZ);
// App.debug("\nright eye: "+rightEyeX+","+rightEyeY+","+rightEyeZ);
buttonLeft = zsggb.getButton(0);
buttonRight = zsggb.getButton(1);
button3 = zsggb.getButton(2);
return true;
}
return false;
}
private int viewPortX, viewPortY, viewPortW = -1, viewPortH;
public boolean setViewPort(int width, int height, int x, int y) {
boolean viewPortChanged = false;
if (viewPortX != x) {
viewPortX = x;
viewPortChanged = true;
}
if (viewPortY != y) {
viewPortY = y;
viewPortChanged = true;
}
int v = width;
if (viewPortW != v){
viewPortW = v;
viewPortChanged = true;
}
v = height;
if (viewPortH != v){
viewPortH = v;
viewPortChanged = true;
}
if (viewPortChanged){
zsggb.setViewPort(viewPortX, viewPortY, viewPortW, viewPortH);
return true;
}
return false;
}
/**
*
* @return eye separation
*/
public double getEyeSeparation() {
return 2 * ZSpaceGeoGebra.EYE_SEP_HALF * zsggb.toPixelRatio();
}
/**
*
* @return display angle with ground
*/
public double getDisplayAngle() {
return zsggb.getDisplayAngle();
}
}