refactor body id structure
This commit is contained in:
parent
66a98d60ba
commit
be8a4dd1c0
8 changed files with 155 additions and 18 deletions
|
@ -66,6 +66,7 @@
|
||||||
<Compile Include="Assets\Editor\SpectrumGeneratorEditMode.cs" />
|
<Compile Include="Assets\Editor\SpectrumGeneratorEditMode.cs" />
|
||||||
<Compile Include="Assets\Editor\StateManagerEditor.cs" />
|
<Compile Include="Assets\Editor\StateManagerEditor.cs" />
|
||||||
<Compile Include="Assets\Editor\UnitTest\UnitTest_ChangeObserver.cs" />
|
<Compile Include="Assets\Editor\UnitTest\UnitTest_ChangeObserver.cs" />
|
||||||
|
<Compile Include="Assets\Editor\UnitTest\UnitTest_Holder.cs" />
|
||||||
<Compile Include="Assets\Editor\UnitTest\UnitTest_RectangularSelection.cs" />
|
<Compile Include="Assets\Editor\UnitTest\UnitTest_RectangularSelection.cs" />
|
||||||
<Compile Include="Assets\Editor\UnitTest\UnitTest_SpectrumGeneratorEditMode.cs" />
|
<Compile Include="Assets\Editor\UnitTest\UnitTest_SpectrumGeneratorEditMode.cs" />
|
||||||
<Compile Include="Assets\Editor\UnitTest\UnitTest_SpectrumGeneratorPlayMode.cs" />
|
<Compile Include="Assets\Editor\UnitTest\UnitTest_SpectrumGeneratorPlayMode.cs" />
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
<Compile Include="Assets\Scenes\Examples\TimbreID\script\IdToText.cs" />
|
<Compile Include="Assets\Scenes\Examples\TimbreID\script\IdToText.cs" />
|
||||||
<Compile Include="Assets\Scenes\Examples\VisualEffectGraph\script\FlareBind.cs" />
|
<Compile Include="Assets\Scenes\Examples\VisualEffectGraph\script\FlareBind.cs" />
|
||||||
<Compile Include="Assets\Scenes\Examples\VisualEffectGraph\script\SmokeBind.cs" />
|
<Compile Include="Assets\Scenes\Examples\VisualEffectGraph\script\SmokeBind.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Math\Holder.cs" />
|
||||||
<Compile Include="Assets\Scripts\Math\Smoother.cs" />
|
<Compile Include="Assets\Scripts\Math\Smoother.cs" />
|
||||||
<Compile Include="Assets\Scripts\Math\Threshold.cs" />
|
<Compile Include="Assets\Scripts\Math\Threshold.cs" />
|
||||||
<Compile Include="Assets\Scripts\PdConnection\DspController.cs" />
|
<Compile Include="Assets\Scripts\PdConnection\DspController.cs" />
|
||||||
|
|
62
UnityProject/Assets/Editor/UnitTest/UnitTest_Holder.cs
Normal file
62
UnityProject/Assets/Editor/UnitTest/UnitTest_Holder.cs
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace cylvester
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class UnitTest_Holder
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void Construction_capacity()
|
||||||
|
{
|
||||||
|
var holder = new Holder<int>(2);
|
||||||
|
|
||||||
|
holder.Add(1);
|
||||||
|
holder.Add(2);
|
||||||
|
holder.Add(3);
|
||||||
|
|
||||||
|
Assert.AreEqual(0, holder.IndexOf(1));
|
||||||
|
Assert.AreEqual(1, holder.IndexOf(2));
|
||||||
|
Assert.IsNull(holder.IndexOf(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Add()
|
||||||
|
{
|
||||||
|
var holder = new Holder<int>(2);
|
||||||
|
holder.Add(102);
|
||||||
|
|
||||||
|
Assert.AreEqual(0, holder.IndexOf(102));
|
||||||
|
Assert.IsNull(holder.IndexOf(103));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Add_return()
|
||||||
|
{
|
||||||
|
var holder = new Holder<int>(2);
|
||||||
|
Assert.IsTrue(holder.Add(102));
|
||||||
|
Assert.IsTrue(holder.Add(103));
|
||||||
|
Assert.IsFalse(holder.Add(103));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Add_unique()
|
||||||
|
{
|
||||||
|
var holder = new Holder<int>(2);
|
||||||
|
holder.Add(102);
|
||||||
|
holder.Add(102); // doesn't affect
|
||||||
|
holder.Add(103);
|
||||||
|
|
||||||
|
Assert.IsNull(holder.IndexOf(103));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Remove()
|
||||||
|
{
|
||||||
|
var holder = new Holder<int>(2);
|
||||||
|
holder.Add(102);
|
||||||
|
holder.Remove(102);
|
||||||
|
|
||||||
|
Assert.IsNull(holder.IndexOf(102));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e41847d6d84d439e858e4eadb0232998
|
||||||
|
timeCreated: 1572778377
|
45
UnityProject/Assets/Scripts/Math/Holder.cs
Normal file
45
UnityProject/Assets/Scripts/Math/Holder.cs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace cylvester
|
||||||
|
{
|
||||||
|
public class Holder<T> where T : IEquatable<T>
|
||||||
|
{
|
||||||
|
private readonly List<T> elements_;
|
||||||
|
private readonly int capacity_;
|
||||||
|
|
||||||
|
public Holder(int capacity)
|
||||||
|
{
|
||||||
|
capacity_ = capacity;
|
||||||
|
elements_ = new List<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Add(T newElement)
|
||||||
|
{
|
||||||
|
if (elements_.Count == capacity_)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (elements_.Contains(newElement))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
elements_.Add(newElement);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Exist(T element)
|
||||||
|
{
|
||||||
|
return elements_.Contains(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? IndexOf(T element)
|
||||||
|
{
|
||||||
|
var index = elements_.FindIndex(e => e.Equals(element));
|
||||||
|
return (index < 0) ? (int?) null : index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Remove(T element)
|
||||||
|
{
|
||||||
|
elements_.Remove(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
UnityProject/Assets/Scripts/Math/Holder.cs.meta
Normal file
3
UnityProject/Assets/Scripts/Math/Holder.cs.meta
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 200646bf9dc64be3905b4ac8dfef1634
|
||||||
|
timeCreated: 1572777412
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 14b20e54517dff5419ed18c623ac9653
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using Windows.Kinect;
|
using Windows.Kinect;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Events;
|
using UnityEngine.Events;
|
||||||
|
@ -7,7 +8,7 @@ using UnityEngine.Events;
|
||||||
namespace cylvester
|
namespace cylvester
|
||||||
{
|
{
|
||||||
[Serializable] public class UnityInfraredCameraEvent : UnityEvent<Texture2D>{ }
|
[Serializable] public class UnityInfraredCameraEvent : UnityEvent<Texture2D>{ }
|
||||||
[Serializable] public class UnitySkeletonEvent : UnityEvent<Body[]>{ }
|
[Serializable] public class UnitySkeletonEvent : UnityEvent<Body, int>{ }
|
||||||
|
|
||||||
public class KinectManagerBehaviour : MonoBehaviour
|
public class KinectManagerBehaviour : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
@ -16,17 +17,22 @@ namespace cylvester
|
||||||
|
|
||||||
[SerializeField] private bool skeleton;
|
[SerializeField] private bool skeleton;
|
||||||
[SerializeField] public UnitySkeletonEvent skeletonDataReceived;
|
[SerializeField] public UnitySkeletonEvent skeletonDataReceived;
|
||||||
|
|
||||||
|
[SerializeField, Range(1, 6)] private int numberOfBodiesTobeTracked = 2;
|
||||||
|
|
||||||
private KinectSensor sensor_;
|
private KinectSensor sensor_;
|
||||||
private InfraredFrameReader infraredFrameReader_;
|
private InfraredFrameReader infraredFrameReader_;
|
||||||
private BodyFrameReader bodyFrameReader_;
|
private BodyFrameReader bodyFrameReader_;
|
||||||
|
private BodyIndexFrameReader bodyIndexFrameReader_;
|
||||||
|
|
||||||
private ushort [] irData_;
|
private ushort [] irData_;
|
||||||
private Texture2D infraredTexture_;
|
private Texture2D infraredTexture_;
|
||||||
private Body[] bodies_;
|
private Body[] bodies_;
|
||||||
|
|
||||||
private EventHandler<InfraredFrameArrivedEventArgs> onInfraredFrameArrived_;
|
private EventHandler<InfraredFrameArrivedEventArgs> onInfraredFrameArrived_;
|
||||||
private EventHandler<BodyFrameArrivedEventArgs> onSkeletonFrameArrived_;
|
private EventHandler<BodyFrameArrivedEventArgs> onBodyFrameArrived_;
|
||||||
|
private EventHandler<BodyIndexFrameArrivedEventArgs> onBodyIndexFrameArrived_;
|
||||||
|
private Holder<ulong> trackedIds_;
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
|
@ -36,9 +42,11 @@ namespace cylvester
|
||||||
|
|
||||||
InitInfraredCamera();
|
InitInfraredCamera();
|
||||||
InitSkeletonTracking();
|
InitSkeletonTracking();
|
||||||
|
|
||||||
if (!sensor_.IsOpen)
|
if (!sensor_.IsOpen)
|
||||||
|
{
|
||||||
sensor_.Open();
|
sensor_.Open();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitInfraredCamera()
|
private void InitInfraredCamera()
|
||||||
|
@ -77,10 +85,15 @@ namespace cylvester
|
||||||
|
|
||||||
private void InitSkeletonTracking()
|
private void InitSkeletonTracking()
|
||||||
{
|
{
|
||||||
bodies_ = new Body[1];
|
bodies_ = new Body[6];
|
||||||
|
trackedIds_ = new Holder<ulong>(numberOfBodiesTobeTracked);
|
||||||
|
InitBodyFrameReader();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitBodyFrameReader()
|
||||||
|
{
|
||||||
bodyFrameReader_ = sensor_.BodyFrameSource.OpenReader();
|
bodyFrameReader_ = sensor_.BodyFrameSource.OpenReader();
|
||||||
onSkeletonFrameArrived_ = (frameReader, eventArgs) =>
|
onBodyFrameArrived_ = (frameReader, eventArgs) =>
|
||||||
{
|
{
|
||||||
if(!skeleton)
|
if(!skeleton)
|
||||||
return;
|
return;
|
||||||
|
@ -89,18 +102,35 @@ namespace cylvester
|
||||||
{
|
{
|
||||||
if (bodyFrame == null)
|
if (bodyFrame == null)
|
||||||
return;
|
return;
|
||||||
Array.Resize(ref bodies_, bodyFrame.BodyCount);
|
|
||||||
bodyFrame.GetAndRefreshBodyData(bodies_);
|
bodyFrame.GetAndRefreshBodyData(bodies_);
|
||||||
skeletonDataReceived.Invoke(bodies_);
|
foreach (var body in bodies_.Where(body => body.IsTracked))
|
||||||
|
{
|
||||||
|
if (trackedIds_.Exist(body.TrackingId))
|
||||||
|
{
|
||||||
|
var idNumber = trackedIds_.IndexOf(body.TrackingId);
|
||||||
|
if(idNumber.HasValue)
|
||||||
|
skeletonDataReceived.Invoke(body, idNumber.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (trackedIds_.Add(body.TrackingId))
|
||||||
|
{
|
||||||
|
var idNumber = trackedIds_.IndexOf(body.TrackingId);
|
||||||
|
if (idNumber.HasValue)
|
||||||
|
skeletonDataReceived.Invoke(body, idNumber.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
bodyFrameReader_.FrameArrived += onSkeletonFrameArrived_;
|
bodyFrameReader_.FrameArrived += onBodyFrameArrived_;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
infraredFrameReader_.FrameArrived -= onInfraredFrameArrived_;
|
infraredFrameReader_.FrameArrived -= onInfraredFrameArrived_;
|
||||||
bodyFrameReader_.FrameArrived -= onSkeletonFrameArrived_;
|
bodyFrameReader_.FrameArrived -= onBodyFrameArrived_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue