package org.squidy.nodes.optitrack.cameraInterface; import java.awt.Canvas; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import javax.vecmath.Point3d; import org.squidy.manager.data.DataConstant; import org.squidy.manager.data.impl.DataPosition3D; import org.squidy.manager.data.impl.DataPosition6D; import org.squidy.nodes.*; import org.squidy.nodes.optitrack.Optitrack; import org.squidy.nodes.optitrack.TTStreaming; import org.squidy.nodes.optitrack.utils.TrackingConstant; public class NativeNatNet extends Canvas { /** * */ //private static final long serialVersionUID = 2586762717367712276L; protected void finalize() throws Throwable { super.finalize(); } public void addNotify() { super.addNotify(); ref = create(); System.out.println("r1 "+ref); } public void removeNotify() { dispose(ref); super.removeNotify(); } public int ref = 0; private static TTStreaming ttStreaming; private static NatNetWindow natNetWindow; private static Point3d dimensions; native int create(); native void dispose(int ref); public void setParents(TTStreaming tts,NatNetWindow wnd, Point3d dim) { ttStreaming = tts; natNetWindow = wnd; dimensions = dim; } public void stop() { dispose(ref); } public static void JPrintLine(String in) { System.out.println("NATNET " + in); } public static void JRigidBodyMarker(int id, int frameID, float x, float y, float z) { } public static void JSingleMarker(int frameID, float x, float y, float z) { DataPosition3D d3d = new DataPosition3D(Optitrack.class, x/6000.0, y/3000.0, z/6000.0); d3d.setAttribute(DataConstant.GROUP_ID, frameID); d3d.setAttribute(TrackingConstant.NATNET, true); d3d.setAttribute(DataConstant.MAX_X, 6000.0); d3d.setAttribute(DataConstant.MAX_Y, 3000.0); d3d.setAttribute(DataConstant.MAX_Z, 6000.0); d3d.setAttribute(DataConstant.CenterOffset_X, 0.0); d3d.setAttribute(DataConstant.CenterOffset_Y, 0.0); d3d.setAttribute(DataConstant.CenterOffset_Z, 0.0); ttStreaming.publish(d3d); } private static long lastFrame = 0; private static float currentFrame; public static void JRigidBody(int id, int frameID, float x, float y, float z, float qx, float qy, float qz, float qw, float yaw, float pitch, float roll) { double[][] m6d = new double[3][3]; m6d[0][0] = 2*(qx*qx + qw*qw)-1; m6d[0][1] = 2*(qx*qy - qz*qw); m6d[0][2] = 2*(qx*qz + qy*qw); m6d[1][0] = 2*(qx*qy + qz*qw); m6d[1][1] = 2*(qy*qy + qw*qw)-1; m6d[1][2] = 2*(qy*qz - qx*qw); m6d[2][0] = 2*(qx*qz - qy*qw); m6d[2][1] = 2*(qy*qz + qx*qw); m6d[2][2] = 2*(qz*qz + qw*qw)-1; DataPosition6D d6d = new DataPosition6D(Optitrack.class,x/6000.0,y/3000.0,z/6000.0, m6d[0][0], m6d[0][1], m6d[0][2], m6d[1][0], m6d[1][1], m6d[1][2], m6d[2][0], m6d[2][1], m6d[2][2], yaw, pitch,roll,frameID); d6d.setAttribute(DataConstant.IDENTIFIER,"" + id); d6d.setAttribute(DataConstant.GROUP_ID, frameID); if (frameID != currentFrame) { // System.out.println(); // if (System.currentTimeMillis() - lastFrame > 20) // System.out.println("LATENCY " + (System.currentTimeMillis() - lastFrame) + " " + frameID); lastFrame = System.currentTimeMillis(); }else { // System.out.print(frameID+"\t"); } currentFrame = frameID; d6d.setAttribute(DataConstant.GROUP_DESCRIPTION, "RIGIDBODY"); d6d.setAttribute(TrackingConstant.NATNET, true); d6d.setAttribute(DataConstant.MAX_X, 6000.0); d6d.setAttribute(DataConstant.MAX_Y, 3000.0); d6d.setAttribute(DataConstant.MAX_Z, 6000.0); d6d.setAttribute(DataConstant.CenterOffset_X, 0.0); d6d.setAttribute(DataConstant.CenterOffset_Y, 0.0); d6d.setAttribute(DataConstant.CenterOffset_Z, 0.0); ttStreaming.publish(d6d); } }