/// <summary> /// コンストラクタ /// </summary> /// <param name="jointsOption">Joint 単位の設定</param> public OriginPositionAutoSetter(JointsOption jointsOption) { _jointsOption = jointsOption; _addedEventListener = false; _timer = null; _remainingTime = 0; _alreadySet = false; _status = OriginPositionAutoSetterStatus.NOT_STARTING; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="jointsOption">Joint 単位の設定</param> public OriginPositionAutoSetter(JointsOption jointsOption) { _jointsOption = jointsOption; _addedEventListener = false; _timer = null; _remainingTime = 0; _alreadySet = false; _status = OriginPositionAutoSetterStatus.NOT_STARTING; }
/// <summary> /// 自動設定開始 /// </summary> public void StartAutoSetting() { if (!_addedEventListener) { throw new InvalidOperationException("イベントリスナーが登録されていません。"); } _timer = new Timer(_TimerCallback, null, 1000, 1000); _remainingTime = _WAITING_TIME; _status = OriginPositionAutoSetterStatus.STARTING; EventHandler <EventArgs> eventHandler = Update; if (eventHandler != null) { eventHandler(this, new EventArgs()); } }
/// <summary> /// タイマーコールバック関数 /// </summary> /// <param name="state">ステータス</param> private void _TimerCallback(object state) { _remainingTime--; if (_remainingTime <= 0) { _status = OriginPositionAutoSetterStatus.SETTABLE; _timer.Dispose(); _timer = null; } EventHandler <EventArgs> eventHandler = Update; if (eventHandler != null) { eventHandler(this, new EventArgs()); } }
/// <summary> /// スケルトンデータ更新イベントハンドラ /// </summary> /// <param name="sender">イベント送信元</param> /// <param name="e">イベント引数</param> private void kinectManager_SkeletonUpdate(object sender, SkeletonUpdateEventArgs e) { // 実設定可能でないなら終了 if (_status != OriginPositionAutoSetterStatus.SETTABLE) { return; } KinectSensor kinect = e.Kinect; SkeletonFrame skeletonFrame = e.SkeletonFrame; Skeleton[] skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); IList <JointDrawPosition> jointDrawPositionList = new List <JointDrawPosition>(); bool success = false; foreach (Skeleton skeleton in skeletons) { if (skeleton.TrackingState != SkeletonTrackingState.Tracked) { continue; } // 実設定 _SetOriginPosition(skeleton); success = true; } if (success) { _alreadySet = true; _lastSetTime = DateTime.Now; } _status = OriginPositionAutoSetterStatus.NOT_STARTING; EventHandler <EventArgs> eventHandler = Update; if (eventHandler != null) { eventHandler(this, new EventArgs()); } }
/// <summary> /// タイマーコールバック関数 /// </summary> /// <param name="state">ステータス</param> private void _TimerCallback(object state) { _remainingTime--; if (_remainingTime <= 0) { _status = OriginPositionAutoSetterStatus.SETTABLE; _timer.Dispose(); _timer = null; } EventHandler<EventArgs> eventHandler = Update; if (eventHandler != null) { eventHandler(this, new EventArgs()); } }
/// <summary> /// スケルトンデータ更新イベントハンドラ /// </summary> /// <param name="sender">イベント送信元</param> /// <param name="e">イベント引数</param> private void kinectManager_SkeletonUpdate(object sender, SkeletonUpdateEventArgs e) { // 実設定可能でないなら終了 if (_status != OriginPositionAutoSetterStatus.SETTABLE) { return; } KinectSensor kinect = e.Kinect; SkeletonFrame skeletonFrame = e.SkeletonFrame; Skeleton[] skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); IList<JointDrawPosition> jointDrawPositionList = new List<JointDrawPosition>(); bool success = false; foreach (Skeleton skeleton in skeletons) { if (skeleton.TrackingState != SkeletonTrackingState.Tracked) { continue; } // 実設定 _SetOriginPosition(skeleton); success = true; } if (success) { _alreadySet = true; _lastSetTime = DateTime.Now; } _status = OriginPositionAutoSetterStatus.NOT_STARTING; EventHandler<EventArgs> eventHandler = Update; if (eventHandler != null) { eventHandler(this, new EventArgs()); } }
/// <summary> /// 自動設定開始 /// </summary> public void StartAutoSetting() { if (!_addedEventListener) { throw new InvalidOperationException("イベントリスナーが登録されていません。"); } _timer = new Timer(_TimerCallback, null, 1000, 1000); _remainingTime = _WAITING_TIME; _status = OriginPositionAutoSetterStatus.STARTING; EventHandler<EventArgs> eventHandler = Update; if (eventHandler != null) { eventHandler(this, new EventArgs()); } }