public void SetResult(HandTrackingResult model) { LeftDetected.Value = model.Left.Detected; LeftConfidence.Value = model.Left.Confidence; RightDetected.Value = model.Right.Detected; RightConfidence.Value = model.Right.Confidence; LeftOrRightDetected.Value = model.Left.Detected || model.Right.Detected; SwapBuffer(model); if (model.Left.Points.Length > 0) { var src = model.Left.Points; for (int i = 0; i < LeftPoints.Length; i++) { LeftPoints[i].X = src[i].X * PanelWidth; //NOTE: UI座標系は上が0になってるので反転が必要 LeftPoints[i].Y = (1.0 - src[i].Y) * PanelHeight; } //NOTE: 配列スワップ + 値の書き込みが終わったのを受けてViewに通知 RaisePropertyChanged(nameof(LeftPoints)); } if (model.Right.Points.Length > 0) { var src = model.Right.Points; for (int i = 0; i < RightPoints.Length; i++) { RightPoints[i].X = src[i].X * PanelWidth; RightPoints[i].Y = (1.0 - src[i].Y) * PanelHeight; } RaisePropertyChanged(nameof(RightPoints)); } }
private void SwapBuffer(HandTrackingResult model) { if (model.Left.Points.Length > 0 && _leftPointsBuffer.Length != model.Left.Points.Length) { _leftPointsBuffer = new Point[model.Left.Points.Length]; } if (model.Right.Points.Length > 0 && _rightPointsBuffer.Length != model.Right.Points.Length) { _rightPointsBuffer = new Point[model.Right.Points.Length]; } (_leftPointsBuffer, LeftPoints) = (LeftPoints, _leftPointsBuffer); (_rightPointsBuffer, RightPoints) = (RightPoints, _rightPointsBuffer); }
private void OnReceivedCommand(object?sender, CommandReceivedEventArgs e) { switch (e.Command) { case ReceiveMessageNames.SetCalibrationFaceData: //NOTE: Unity側がすでにこの値を把握しているので、投げ返す必要がない _model.CalibrateFaceData.SilentSet(e.Args); break; case ReceiveMessageNames.AutoAdjustResults: _model.SetAutoAdjustResults(e.Args); break; case ReceiveMessageNames.MicrophoneVolumeLevel: if (ShowMicrophoneVolume.Value && int.TryParse(e.Args, out int i)) { MicrophoneVolumeValue.Value = i; } break; case ReceiveMessageNames.ExtraBlendShapeClipNames: try { //いちおう信頼はするけどIPCだし…みたいな書き方。FaceSwitchと同じ var names = e.Args .Split(',') .Where(w => !string.IsNullOrEmpty(w)) .ToArray(); _blendShapeNameStore.Refresh(names); } catch (Exception ex) { LogOutput.Instance.Write(ex); } break; case ReceiveMessageNames.SetHandTrackingResult: HandTrackingResult.SetResult(HandTrackingResultBuilder.FromJson(e.Args)); break; default: break; } }