/** * Squidy Interaction Library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * Squidy Interaction Library is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squidy Interaction Library. If not, see * <http://www.gnu.org/licenses/>. * * 2009 Human-Computer Interaction Group, University of Konstanz. * <http://hci.uni-konstanz.de> * * Please contact info@squidy-lib.de or visit our website * <http://www.squidy-lib.de> for further information. */ package org.squidy.nodes.optitrack; import java.util.ArrayList; import java.util.List; import javax.vecmath.*; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; import org.squidy.manager.controls.CheckBox; import org.squidy.manager.controls.ComboBox; import org.squidy.manager.controls.TextField; import org.squidy.manager.controls.ComboBoxControl.ComboBoxItemWrapper; import org.squidy.manager.data.DataConstant; import org.squidy.manager.data.IData; import org.squidy.manager.data.Processor; import org.squidy.manager.data.Property; import org.squidy.manager.data.Processor.Status; import org.squidy.manager.data.domainprovider.DomainProvider; import org.squidy.manager.data.impl.DataPosition3D; import org.squidy.manager.data.impl.DataPosition6D; import org.squidy.manager.model.AbstractNode; import org.squidy.manager.util.MathUtility; import org.squidy.nodes.MouseIO; import org.squidy.nodes.optitrack.RoomObject.RBIDDomainProvider; import org.squidy.nodes.optitrack.cameraInterface.NatNetDotNet; import org.squidy.nodes.optitrack.cameraInterface.NatNetJNI; import org.squidy.nodes.optitrack.cameraInterface.NatNetWindow; import org.squidy.nodes.optitrack.utils.TrackingUtility; /*<code>Optitrack</code>. * * <pre> * Date: Jan 29 2010 * Time: 1:35:05 AM * </pre> * * @author Simon Faeh, <a href="mailto:simon.faeh@uni-konstanz.de">Simon.Faeh@uni-konstanz.de<a/>, University of Konstanz * @version 27.10.2010 / sf */ @XmlType(name = "TTStreaming") @Processor( name = "NatNetStreaming", icon = "/org/squidy/nodes/image/48x48/optitrack48.png", description = "Camera interaface for Optitrack Trackingsystem", types = {Processor.Type.OUTPUT}, tags = { "optitrack", "camera control", "trackingtool" }, status = Status.UNSTABLE ) public class TTStreaming extends AbstractNode { static{ System.loadLibrary("/ext/optitrack/oojnidotnet"); System.loadLibrary("/ext/optitrack/NatNetStreaming"); } // ################################################################################ // BEGIN OF ADJUSTABLES // ################################################################################ @XmlAttribute(name = "room-dimensions") @Property( name = "Dimension of the tracked Area", description = "Set the Dimension of the tracked Area in mm (x,y,z)" ) @TextField private String roomDimension = "6000,3000,6000"; /** * @return roomDimension */ public final String getRoomDimension() { return roomDimension; } /** * @param roomDimesiom [x,y,z] */ public final void setRoomDimension(String aRoomDimension) { this.roomDimension = aRoomDimension; String dimensionChunks[] = roomDimension.split(","); maxX = Double.parseDouble(dimensionChunks[0]); maxY = Double.parseDouble(dimensionChunks[1]); maxZ = Double.parseDouble(dimensionChunks[2]); dimensions = new Point3d(maxX,maxY,maxZ); } // ################################################################################ // ################################################################################ // END OF ADJUSTABLES // ################################################################################ public TTStreaming tts; public double maxX, maxY, maxZ; private boolean started = false; private NatNetWindow natNetWindow; private Point3d dimensions; @Override public void onStart() { natNetWindow = new NatNetWindow(this, dimensions); natNetWindow.setVisible(true); started = true; } public void publish3d(DataPosition3D d3d, int frameID) { d3d.setAttribute(DataConstant.GROUP_ID, frameID); d3d.setAttribute(DataConstant.GROUP_DESCRIPTION, "SINGLEMARKER"); d3d.setAttribute(DataConstant.MAX_X, maxX); d3d.setAttribute(DataConstant.MAX_Y, maxY); d3d.setAttribute(DataConstant.MAX_Z, maxZ); d3d = TrackingUtility.Room2NormCoordinates(MouseIO.class, d3d); publish(d3d); } @Override public void onStop() { natNetWindow.stop(); } }