public object MarshalNativeToManaged(IntPtr pNativeData)
    {
        // Here, we call C++/CLI code
        FrameOfData frame = Marshaler.MarshalFrame(pNativeData);

        return(frame);
    }
Esempio n. 2
0
    IEnumerable <Vector3> GetUnlabledMarkers()
    {
        FrameOfData msg = dataBuffer[dataBufferHead];

        foreach (Vector3 marker in msg.other_markers)
        {
            yield return(ToUnity(marker));
        }
    }
Esempio n. 3
0
    IEnumerable <Tuple <int, Vector3> > GetMarkers()
    {
        FrameOfData msg = dataBuffer[dataBufferHead];

        foreach (LabeledMarker marker in msg.labeled_markers)
        {
            yield return(Tuple.Create(marker.id, ToUnity(marker.position)));
        }
    }
    public List<Vector3> GetUnlabledMarkers()
    {
        FrameOfData msg = dataBuffer[dataBufferHead];
        var markers = new List<Vector3>(msg.other_markers.Count);

        foreach (Vector3 marker in msg.other_markers)
            markers.Add(ToUnity(marker));

        return markers;
    }
    public List<(int label, Vector3 position)> GetMarkers()
    {
        FrameOfData msg = dataBuffer[dataBufferHead];
        var markers = new List<(int, Vector3)>(msg.labeled_markers.Count);

        foreach (LabeledMarker marker in msg.labeled_markers)
            markers.Add((marker.id, ToUnity(marker.position)));

        return markers;
    }
    public List<Vector3> GetFrameMarkers()
    {
        FrameOfData msg = dataBuffer[dataBufferHead];
        var markers = new List<Vector3>(msg.rigid_bodies.Count * 3);

        foreach (RigidBody rb in msg.rigid_bodies)
            foreach (Vector3 marker in rb.markers)
                markers.Add(ToUnity(marker));

        return markers;
    }
Esempio n. 7
0
    IEnumerable <Vector3> GetFrameMarkers()
    {
        FrameOfData msg = dataBuffer[dataBufferHead];

        foreach (RigidBody rb in msg.rigid_bodies)
        {
            foreach (Vector3 marker in rb.markers)
            {
                yield return(ToUnity(marker));
            }
        }
    }
Esempio n. 8
0
    private void _unpack_frameofdata(byte[] payload, ref int offset, int[] version, out FrameOfData fod)
    {
        int frameno;
        int nsets;

        _unpack_head <int>(payload, ref offset, out frameno);
        _unpack_head <int>(payload, ref offset, out nsets);
        Dictionary <string, ArrayList> sets = new Dictionary <string, ArrayList>();
        string    setname;
        ArrayList markers;
        ArrayList rbodies;
        ArrayList skels;
        ArrayList lmarkers;
        ArrayList forceplates;

        for (int i = 0; i < nsets; i++)
        {
            _unpack_cstring(payload, ref offset, MAX_NAMELENGTH, out setname);
            _unpack_markers(payload, ref offset, out markers);
            if (sets.ContainsKey(setname))
            {
                sets[setname] = markers;
            }
            else
            {
                sets.Add(setname, markers);
            }
        }
        _unpack_markers(payload, ref offset, out markers);
        _unpack_rigid_bodies(payload, ref offset, version, out rbodies);
        _unpack_skeletons(payload, ref offset, version, out skels);
        _unpack_labeled_markers(payload, ref offset, version, out lmarkers);
        _unpack_force_plates(payload, ref offset, version, out forceplates);
        float  latency;
        uint   timecode;
        uint   timecode_sub;
        double timestamp              = 0;
        float  timestampf             = 0;
        short  param                  = 0;
        bool   is_recording           = false;
        bool   tracked_models_changed = false;

        if (_version_is_at_least(version, 2, 7))
        {
            _unpack_head <float>(payload, ref offset, out latency);
            _unpack_head <uint>(payload, ref offset, out timecode);
            _unpack_head <uint>(payload, ref offset, out timecode_sub);
            _unpack_head <double>(payload, ref offset, out timestamp);
            _unpack_head <short>(payload, ref offset, out param);
            is_recording           = (param & 0x01) == 1;
            tracked_models_changed = (param & 0x02) == 2;
        }
        else if (_version_is_at_least(version, 2, 6))
        {
            _unpack_head <float>(payload, ref offset, out latency);
            _unpack_head <uint>(payload, ref offset, out timecode);
            _unpack_head <uint>(payload, ref offset, out timecode_sub);
            _unpack_head <float>(payload, ref offset, out timestampf);
            _unpack_head <short>(payload, ref offset, out param);
            timestamp              = timestampf;
            is_recording           = (param & 0x01) == 1;
            tracked_models_changed = (param & 0x02) == 2;
        }
        else
        {
            _unpack_head <float>(payload, ref offset, out latency);
            _unpack_head <uint>(payload, ref offset, out timecode);
            _unpack_head <uint>(payload, ref offset, out timecode_sub);
        }
        int eod;

        _unpack_head <int>(payload, ref offset, out eod);
        if (eod != 0)
        {
            Debug.Log("End-of-data marker is not 0.");
        }
        fod                        = new FrameOfData();
        fod.frameno                = frameno;
        fod.sets                   = sets;
        fod.other_markers          = markers;
        fod.rigid_bodies           = rbodies;
        fod.skeletons              = skels;
        fod.labeled_markers        = lmarkers;
        fod.latency                = latency;
        fod.timecode               = new uint[2];
        fod.timecode[0]            = timecode;
        fod.timecode[1]            = timecode_sub;
        fod.timestamp              = timestamp;
        fod.is_recording           = is_recording;
        fod.tracked_models_changed = tracked_models_changed;
    }
Esempio n. 9
0
    public void Update()
    {
        lock (syncLock){
            if (dataBufferHead != -1)            // skip if no data comes in
            {
                FrameOfData msg = dataBuffer[dataBufferHead];

                /* zach added */
                bDataReceived = true;
                msgData       = dataBuffer[dataBufferHead];

                if (createDebugObjects)
                {
                    // sets... as in marker sets.  this is the marker data
                    foreach (KeyValuePair <string, ArrayList> element in msg.sets)
                    {
                        GameObject mSet    = null;
                        string     setName = string.Concat(element.Key, "_set");
                        if (!gameObjectDictionary.TryGetValue(setName, out mSet))
                        {
                            mSet = GameObject.Find(setName);
                            if (mSet == null)
                            {
                                mSet = new GameObject(setName);
                                mSet.transform.parent = transform;
                            }
                            gameObjectDictionary [setName] = mSet;
                        }
                        Dictionary <int, Transform> transformDict = null;
                        if (!markerSetIDtoTransfrom.TryGetValue(element.Key, out transformDict))
                        {
                            transformDict = new Dictionary <int, Transform> ();
                            markerSetIDtoTransfrom [element.Key] = transformDict;
                        }
                        Dictionary <int, string> nameDict = null;
                        if (markerSetIDtoName.TryGetValue(element.Key, out nameDict))
                        {
                            int i = 0;
                            foreach (Vector3 marker in element.Value)
                            {
                                string mkName = "";
                                if (nameDict.TryGetValue(i, out mkName))
                                {
                                    Transform mkTransform = null;
                                    if (!transformDict.TryGetValue(i, out mkTransform))
                                    {
                                        mkTransform = mSet.transform.Find(mkName);
                                        if (mkTransform == null)
                                        {
                                            GameObject mk = new GameObject(mkName);
                                            mk.transform.parent = mSet.transform;
                                            GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                                            debugObject.transform.localScale *= 0.02f;
                                            debugObject.transform.parent      = mk.transform;
                                            debugObject.name = "debug";
                                            debugObjects.Add(debugObject);
                                            mkTransform = mk.transform;
                                        }
                                        transformDict [i] = mkTransform;
                                    }
                                    mkTransform.localPosition = convertRightHandedToLeftHandedPosition(marker);
                                }
                                i++;
                            }
                        }
                    }
                    // here's the rigid body data
                    for (int i = 0; i < msg.rigid_bodies.Count; i++)
                    {
                        RigidBody  rbody  = (RigidBody)msg.rigid_bodies [i];
                        GameObject rb     = null;
                        string     rbName = "";
                        if (rigidBodyIDtoName.TryGetValue(rbody.id, out rbName))
                        {
                            if (!gameObjectDictionary.TryGetValue(rbName, out rb))
                            {
                                rb = GameObject.Find(rbName);
                                if (rb == null)
                                {
                                    rb = new GameObject(rbName);
                                    rb.transform.parent = transform;
                                    GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                                    debugObject.transform.localScale *= 0.1f;
                                    debugObject.transform.parent      = rb.transform;
                                    debugObject.name = "debug";
                                    debugObjects.Add(debugObject);
                                }
                                gameObjectDictionary [rbName] = rb;
                            }
                            rb.transform.localPosition = convertRightHandedToLeftHandedPosition(rbody.position);
                            rb.transform.localRotation = convertRightHandedToLeftHandedRotation(rbody.rotation);
                            //rb.tag = rbody.tracking_valid? "tracked" : "untracked";
                        }
                    }
                    for (int i = 0; i < msg.skeletons.Count; i++)
                    {
                        Skeleton   skeleton = (Skeleton)msg.skeletons [i];
                        GameObject sk       = null;
                        string     skName   = "";
                        if (skeletonIDtoName.TryGetValue(skeleton.id, out skName))
                        {
                            if (!gameObjectDictionary.TryGetValue(skName, out sk))
                            {
                                sk = GameObject.Find(skName);
                                if (sk == null)
                                {
                                    sk = new GameObject(skName);
                                    sk.transform.parent        = transform;
                                    sk.transform.localPosition = Vector3.zero;
                                    sk.transform.localRotation = Quaternion.identity;
                                }
                                gameObjectDictionary [skName] = sk;
                            }
                        }
                        for (int j = 0; j < skeleton.rigid_bodies.Count; j++)
                        {
                            RigidBody rbody      = (RigidBody)skeleton.rigid_bodies [j];
                            int       skeletonID = HighWord(rbody.id);
                            int       boneID     = LowWord(rbody.id);
                            Dictionary <int, string> skeletonDict = null;
                            string     boneName = "";
                            GameObject bone     = null;
                            if (boneIDtoName.TryGetValue(skeletonID, out skeletonDict) && skeletonDict.TryGetValue(boneID, out boneName))
                            {
                                if (!gameObjectDictionary.TryGetValue(boneName, out bone))
                                {
                                    bone = GameObject.Find(boneName);
                                    if (bone == null)
                                    {
                                        bone = new GameObject(boneName);
                                        bone.transform.parent = sk.transform;
                                        GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                                        debugObject.transform.localScale *= 0.1f;
                                        debugObject.transform.parent      = bone.transform;
                                        debugObject.name = "debug";
                                        debugObjects.Add(debugObject);
                                    }
                                    gameObjectDictionary [boneName] = bone;
                                }
                                bone.transform.localPosition = convertRightHandedToLeftHandedPosition(rbody.position);
                                bone.transform.localRotation = convertRightHandedToLeftHandedRotation(rbody.rotation);
                                //bone.tag = rbody.tracking_valid? "tracked" : "untracked";
                            }
                        }
                    }
                }
            }
        }

        //update model definition once a period
        modelDefTimer -= Time.deltaTime;
        if (modelDefTimer <= 0)
        {
            modelDefUpdated = false;
            modelDefTimer   = updateModelDefTime;
        }

        //show debug objects
        foreach (GameObject debugObject in debugObjects)
        {
            debugObject.SetActive(showDebugObjects);
        }
    }
Esempio n. 10
0
    void Update()
    {
        lock (syncLock){
            if (dataBufferHead != -1)            // skip if no data comes in
            {
                FrameOfData msg = dataBuffer[dataBufferHead];

                //create markers that are not in rigidbodies/skeletons/markersets.
                {
                    GameObject mSet      = null;
                    string     setPrefix = "other";
                    string     setName   = string.Concat(setPrefix, "_set");
                    if (!gameObjectDictionary.TryGetValue(setName, out mSet))
                    {
                        mSet = GameObject.Find(setName);
                        if (mSet == null)
                        {
                            mSet = new GameObject(setName);
                            mSet.transform.parent = transform;
                        }
                        gameObjectDictionary[setName] = mSet;
                    }
                    Dictionary <int, Transform> transformDict = null;
                    if (!markerSetIDtoTransfrom.TryGetValue(setPrefix, out transformDict))
                    {
                        transformDict = new Dictionary <int, Transform>();
                        markerSetIDtoTransfrom[setPrefix] = transformDict;
                    }
                    // clean the tracking flag
                    foreach (Transform mkTransform in transformDict.Values)
                    {
                        mkTransform.tag = "untracked";
                    }
                    foreach (LabeledMarker lmk in msg.labeled_markers)
                    {
                        int setID = HighWord(lmk.id);
                        int mkID  = LowWord(lmk.id);
                        if (setID != 0)
                        {
                            continue;             //skip markers that are already included in rigidbodies/skeletons/marker sets.
                        }
                        string    mkName      = string.Concat(setPrefix, "_", mkID.ToString());
                        Transform mkTransform = null;
                        if (!transformDict.TryGetValue(mkID, out mkTransform))
                        {
                            mkTransform = mSet.transform.Find(mkName);
                            if (mkTransform == null)
                            {
                                GameObject mk = new GameObject(mkName);
                                mk.transform.parent = mSet.transform;
                                GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                                debugObject.transform.localScale *= 0.02f;
                                debugObject.transform.parent      = mk.transform;
                                debugObject.name = "debug";
                                debugObjects.Add(debugObject);
                                mkTransform = mk.transform;
                            }
                            transformDict[mkID] = mkTransform;
                        }
                        mkTransform.tag           = "tracked";
                        mkTransform.localPosition = convertToLeftHandPosition(lmk.position);
                    }
                    List <int> idToDelete = new List <int>();
                    foreach (KeyValuePair <int, Transform> element in transformDict)
                    {
                        Transform mk = element.Value;
                        if (mk.CompareTag("untracked"))
                        {
                            Transform debugTransform = mk.FindChild("debug");
                            if (debugTransform != null)
                            {
                                debugObjects.Remove(debugTransform.gameObject);
                            }
                            Destroy(element.Value.gameObject);
                            idToDelete.Add(element.Key);
                        }
                    }
                    foreach (int i in idToDelete)
                    {
                        transformDict.Remove(i);
                    }
                }

                //create markers that are in rigidbodies/skeletons/markersets
                foreach (KeyValuePair <string, ArrayList> element in msg.sets)
                {
                    GameObject mSet    = null;
                    string     setName = string.Concat(element.Key, "_set");
                    if (!gameObjectDictionary.TryGetValue(setName, out mSet))
                    {
                        mSet = GameObject.Find(setName);
                        if (mSet == null)
                        {
                            mSet = new GameObject(setName);
                            mSet.transform.parent = transform;
                        }
                        gameObjectDictionary[setName] = mSet;
                    }
                    Dictionary <int, Transform> transformDict = null;
                    if (!markerSetIDtoTransfrom.TryGetValue(element.Key, out transformDict))
                    {
                        transformDict = new Dictionary <int, Transform>();
                        markerSetIDtoTransfrom[element.Key] = transformDict;
                    }
                    Dictionary <int, string> nameDict = null;
                    if (markerSetIDtoName.TryGetValue(element.Key, out nameDict))
                    {
                        int i = 0;
                        foreach (Vector3 marker in element.Value)
                        {
                            string mkName = "";
                            if (nameDict.TryGetValue(i, out mkName))
                            {
                                Transform mkTransform = null;
                                if (!transformDict.TryGetValue(i, out mkTransform))
                                {
                                    mkTransform = mSet.transform.Find(mkName);
                                    if (mkTransform == null)
                                    {
                                        GameObject mk = new GameObject(mkName);
                                        mk.transform.parent = mSet.transform;
                                        GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                                        debugObject.transform.localScale *= 0.02f;
                                        debugObject.transform.parent      = mk.transform;
                                        debugObject.name = "debug";
                                        debugObjects.Add(debugObject);
                                        mkTransform = mk.transform;
                                    }
                                    transformDict[i] = mkTransform;
                                }
                                mkTransform.localPosition = convertToLeftHandPosition(marker);
                            }
                            i++;
                        }
                    }
                }
                //create rigidbodies
                for (int i = 0; i < msg.rigid_bodies.Count; i++)
                {
                    RigidBody  rbody  = (RigidBody)msg.rigid_bodies[i];
                    GameObject rb     = null;
                    string     rbName = "";
                    if (rigidBodyIDtoName.TryGetValue(rbody.id, out rbName))
                    {
                        if (!gameObjectDictionary.TryGetValue(rbName, out rb))
                        {
                            rb = GameObject.Find(rbName);
                            if (rb == null)
                            {
                                rb = new GameObject(rbName);
                                rb.transform.parent = transform;
                                GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                                debugObject.transform.localScale *= 0.1f;
                                debugObject.transform.parent      = rb.transform;
                                debugObject.name = "debug";
                                debugObjects.Add(debugObject);
                            }
                            gameObjectDictionary[rbName] = rb;
                        }
                        rb.transform.localPosition = convertToLeftHandPosition(rbody.position);
                        rb.transform.localRotation = convertToLeftHandRotation(rbody.rotation);
                        rb.tag = rbody.tracking_valid? "tracked" : "untracked";
                    }
                }
                //create skeletons
                for (int i = 0; i < msg.skeletons.Count; i++)
                {
                    Skeleton   skeleton = (Skeleton)msg.skeletons[i];
                    GameObject sk       = null;
                    string     skName   = "";
                    if (skeletonIDtoName.TryGetValue(skeleton.id, out skName))
                    {
                        if (!gameObjectDictionary.TryGetValue(skName, out sk))
                        {
                            sk = GameObject.Find(skName);
                            if (sk == null)
                            {
                                sk = new GameObject(skName);
                                sk.transform.parent        = transform;
                                sk.transform.localPosition = Vector3.zero;
                                sk.transform.localRotation = Quaternion.identity;
                            }
                            gameObjectDictionary[skName] = sk;
                        }
                    }
                    for (int j = 0; j < skeleton.rigid_bodies.Count; j++)
                    {
                        RigidBody rbody      = (RigidBody)skeleton.rigid_bodies[j];
                        int       skeletonID = HighWord(rbody.id);
                        int       boneID     = LowWord(rbody.id);
                        Dictionary <int, string> skeletonDict = null;
                        string     boneName = "";
                        GameObject bone     = null;
                        if (boneIDtoName.TryGetValue(skeletonID, out skeletonDict) && skeletonDict.TryGetValue(boneID, out boneName))
                        {
                            if (!gameObjectDictionary.TryGetValue(boneName, out bone))
                            {
                                bone = GameObject.Find(boneName);
                                if (bone == null)
                                {
                                    bone = new GameObject(boneName);
                                    bone.transform.parent = sk.transform;
                                    GameObject debugObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                                    debugObject.transform.localScale *= 0.1f;
                                    debugObject.transform.parent      = bone.transform;
                                    debugObject.name = "debug";
                                    debugObjects.Add(debugObject);
                                }
                                gameObjectDictionary[boneName] = bone;
                            }
                            bone.transform.localPosition = convertToLeftHandPosition(rbody.position);
                            bone.transform.localRotation = convertToLeftHandRotation(rbody.rotation);
                            bone.tag = rbody.tracking_valid? "tracked" : "untracked";
                        }
                    }
                }
            }
        }

        //update model definition once a period
        modelDefTimer -= Time.deltaTime;
        if (modelDefTimer <= 0)
        {
            modelDefUpdated = false;
            modelDefTimer   = updateModelDefTime;
        }

        //show debug objects
        foreach (GameObject debugObject in debugObjects)
        {
            debugObject.SetActive(showDebugObject);
        }
    }