package org.squidy.nodes.optitrack.utils;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
import org.squidy.designer.model.Data;
import org.squidy.manager.IProcessable;
import org.squidy.manager.data.DataConstant;
import org.squidy.manager.data.IData;
import org.squidy.manager.data.impl.DataPosition3D;
import org.squidy.manager.data.impl.DataPosition6D;
import org.squidy.manager.util.MathUtility;
public class TrackingUtility {
public static DataPosition6D Room2NormCoordinates(Class<? extends IProcessable<?>> source, DataPosition6D tmp6D)
{
tmp6D.setX(Room2NormPoint(tmp6D.getX(),Double.valueOf((tmp6D.getAttribute(DataConstant.MAX_X)).toString()),Double.valueOf((tmp6D.getAttribute(DataConstant.CenterOffset_X)).toString())));
tmp6D.setY(Room2NormPoint(tmp6D.getY(),Double.valueOf((tmp6D.getAttribute(DataConstant.MAX_Y)).toString()),Double.valueOf((tmp6D.getAttribute(DataConstant.CenterOffset_Y)).toString())));
tmp6D.setZ(Room2NormPoint(tmp6D.getZ(),Double.valueOf((tmp6D.getAttribute(DataConstant.MAX_Z)).toString()),Double.valueOf((tmp6D.getAttribute(DataConstant.CenterOffset_Z)).toString())));
return tmp6D;
}
public static DataPosition6D Norm2RoomCoordinates(Class<? extends IProcessable<?>> source, DataPosition6D tmp6D)
{
tmp6D.setX(Norm2RoomPoint(tmp6D.getX(),Double.valueOf((tmp6D.getAttribute(DataConstant.MAX_X)).toString()),Double.valueOf((tmp6D.getAttribute(DataConstant.CenterOffset_X)).toString())));
tmp6D.setY(Norm2RoomPoint(tmp6D.getY(),Double.valueOf((tmp6D.getAttribute(DataConstant.MAX_Y)).toString()),Double.valueOf((tmp6D.getAttribute(DataConstant.CenterOffset_Y)).toString())));
tmp6D.setZ(Norm2RoomPoint(tmp6D.getZ(),Double.valueOf((tmp6D.getAttribute(DataConstant.MAX_Z)).toString()),Double.valueOf((tmp6D.getAttribute(DataConstant.CenterOffset_Z)).toString())));
return tmp6D;
}
public static DataPosition3D Room2NormCoordinates(Class<? extends IProcessable<?>> source, DataPosition3D tmp3D)
{
tmp3D.setX(Room2NormPoint(tmp3D.getX(),Double.valueOf((tmp3D.getAttribute(DataConstant.MAX_X)).toString()),Double.valueOf((tmp3D.getAttribute(DataConstant.CenterOffset_X)).toString())));
tmp3D.setY(Room2NormPoint(tmp3D.getY(),Double.valueOf((tmp3D.getAttribute(DataConstant.MAX_Y)).toString()),Double.valueOf((tmp3D.getAttribute(DataConstant.CenterOffset_Y)).toString())));
tmp3D.setZ(Room2NormPoint(tmp3D.getZ(),Double.valueOf((tmp3D.getAttribute(DataConstant.MAX_Z)).toString()),Double.valueOf((tmp3D.getAttribute(DataConstant.CenterOffset_Z)).toString())));
return tmp3D;
}
public static DataPosition3D Norm2RoomCoordinates(Class<? extends IProcessable<?>> source,DataPosition3D tmp3D)
{
tmp3D.setX(Norm2RoomPoint(tmp3D.getX(),Double.valueOf((tmp3D.getAttribute(DataConstant.MAX_X)).toString()),Double.valueOf((tmp3D.getAttribute(DataConstant.CenterOffset_X)).toString())));
tmp3D.setY(Norm2RoomPoint(tmp3D.getY(),Double.valueOf((tmp3D.getAttribute(DataConstant.MAX_Y)).toString()),Double.valueOf((tmp3D.getAttribute(DataConstant.CenterOffset_Y)).toString())));
tmp3D.setZ(Norm2RoomPoint(tmp3D.getZ(),Double.valueOf((tmp3D.getAttribute(DataConstant.MAX_Z)).toString()),Double.valueOf((tmp3D.getAttribute(DataConstant.CenterOffset_Z)).toString())));
return tmp3D;
}
public static double Room2NormPoint(double point, double max, double centerOffset)
{
if(centerOffset < 0)
return (point + centerOffset *-1) / max;
else
return (point + centerOffset) / max;
}
public static double Norm2RoomPoint(double point, double max , double centerOffset)
{
if (centerOffset < 0)
return (point * -max) - centerOffset;
else
return (point * max) - centerOffset;
}
public static String setAttributes(double value)
{
return String.valueOf(value);
}
public static String getAttributesAlpha(IData d6d, DataConstant dc)
{
if (d6d.hasAttribute(dc))
return d6d.getAttribute(dc).toString();
else
return "";
}
public static Integer getAttributesInteger(IData data, DataConstant dc)
{
if(data.hasAttribute(dc))
return (Integer.valueOf(data.getAttribute(dc).toString()));
else
return -1;
}
public static Double getAttributesDouble(IData d6d, DataConstant dc)
{
if(d6d.hasAttribute(dc))
return (Double.valueOf(d6d.getAttribute(dc).toString()));
else
return -1.0;
}
public static Boolean getAttributesBoolean(IData d6d, DataConstant dc)
{
if(d6d.hasAttribute(dc))
return (Boolean.valueOf(d6d.getAttribute(dc).toString()));
else
return false;
}
public static Vector3d getTargetNorm(DataPosition6D d6d)
{
return new Vector3d(d6d.getM00(), d6d.getM01(), d6d.getM02());
}
public static Vector3d getTargetDirection(DataPosition6D d6d)
{
Vector3d dirZ = new Vector3d(0,0,1);
Vector3d dir = new Vector3d();
Vector3d cent = new Vector3d(0,0,0);
MathUtility mu = new MathUtility();
dir = mu.rotatePoint(dirZ, cent, mu.dataPosition6D2matrix(d6d),false,false);
dir.normalize();
return dir;
}
public static Point3d getPoint3d(DataPosition3D d3d)
{
return new Point3d(d3d.getX(),d3d.getY(), d3d.getZ());
}
public static Vector3d getVector3d(DataPosition3D d3d)
{
return new Vector3d(d3d.getX(),d3d.getY(), d3d.getZ());
}
public static int gestureID2Constant(int input)
{
return input + TrackingConstant.GESTURE_DEFAULT;
}
public static int gestureConstant2ID(int input)
{
return input - TrackingConstant.GESTURE_DEFAULT;
}
public static int getGestureBivariate(int input)
{
if (input > 10)
{
return gestureID2Constant(input);
}else
{
return gestureConstant2ID(input);
}
}
public static double minmax(double x, double max, double min, double new_max, double new_min)
{
x = (x - min) * (new_max - new_min) / (max - min) + new_min;
return x;
}
}