From 409b6964c534a09b9623e279c7322efc8039e8f6 Mon Sep 17 00:00:00 2001 From: gil zhang Date: Sun, 2 Jul 2023 15:01:37 +0800 Subject: [PATCH] add model load to camera emojis page --- .../Models/ModelActionFrame.cs | 53 ++ .../Controls/ElectronBotModelLoader.xaml | 53 ++ .../Controls/ElectronBotModelLoader.xaml.cs | 45 ++ .../ElectronBot.Braincase.csproj | 4 + src/ElectronBot.Braincase/Helpers/EbHelper.cs | 2 + .../Helpers/ElectronBotHelper.cs | 4 + .../Models/PlayOptions.cs | 13 + .../ModelLoadCompactOverlayViewModel.cs | 487 +++++++++--------- .../Views/CameraEmojisPage.xaml | 90 ++-- 9 files changed, 473 insertions(+), 278 deletions(-) create mode 100644 src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml create mode 100644 src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml.cs create mode 100644 src/ElectronBot.Braincase/Models/PlayOptions.cs diff --git a/src/ElectronBot.Braincase.Core/Models/ModelActionFrame.cs b/src/ElectronBot.Braincase.Core/Models/ModelActionFrame.cs index 279dc6b..9071469 100644 --- a/src/ElectronBot.Braincase.Core/Models/ModelActionFrame.cs +++ b/src/ElectronBot.Braincase.Core/Models/ModelActionFrame.cs @@ -52,4 +52,57 @@ public class ModelActionFrame J6 = j6; Enable = enable; } + + public OnlyAction Actions + { + get; + set; + } = new OnlyAction(); +} + + +public class OnlyAction +{ + public OnlyAction() + { + + } + + public OnlyAction(List actions) + { + if (actions != null && actions.Count>0) + { + J1 = actions[0]; + J2 = actions[1]; + J3 = actions[2]; + J4 = actions[3]; + J5 = actions[4]; + J6 = actions[5]; + } + } + + public float J1 + { + get; set; + } + public float J2 + { + get; set; + } + public float J3 + { + get; set; + } + public float J4 + { + get; set; + } + public float J5 + { + get; set; + } + public float J6 + { + get; set; + } } diff --git a/src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml b/src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml new file mode 100644 index 0000000..7740613 --- /dev/null +++ b/src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml.cs b/src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml.cs new file mode 100644 index 0000000..dd41320 --- /dev/null +++ b/src/ElectronBot.Braincase/Controls/ElectronBotModelLoader.xaml.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using ElectronBot.Braincase; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Controls.Primitives; +using Microsoft.UI.Xaml.Data; +using Microsoft.UI.Xaml.Input; +using Microsoft.UI.Xaml.Media; +using Microsoft.UI.Xaml.Navigation; +using ViewModels; +using Windows.Foundation; +using Windows.Foundation.Collections; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace ElectronBot.Braincase.Controls; +public sealed partial class ElectronBotModelLoader : UserControl +{ + public ModelLoadCompactOverlayViewModel ViewModel + { + get; + } + public ElectronBotModelLoader() + { + this.InitializeComponent(); + ViewModel = App.GetService(); + } + + private void ModelLoadCompactOverlayPage_OnLoaded(object sender, RoutedEventArgs e) + { + ModelProgressRing.IsActive = true; + ViewModel.Loaded(); + ModelProgressRing.IsActive = false; + } + + private async void ModelLoadCompactOverlayPage_OnUnloaded(object sender, RoutedEventArgs e) + { + ViewModel.UnLoaded(); + } +} diff --git a/src/ElectronBot.Braincase/ElectronBot.Braincase.csproj b/src/ElectronBot.Braincase/ElectronBot.Braincase.csproj index b7d551d..31c6db1 100644 --- a/src/ElectronBot.Braincase/ElectronBot.Braincase.csproj +++ b/src/ElectronBot.Braincase/ElectronBot.Braincase.csproj @@ -55,6 +55,7 @@ + @@ -214,6 +215,9 @@ PreserveNewest + + MSBuild:Compile + MSBuild:Compile diff --git a/src/ElectronBot.Braincase/Helpers/EbHelper.cs b/src/ElectronBot.Braincase/Helpers/EbHelper.cs index 32a64b7..b0aac3c 100644 --- a/src/ElectronBot.Braincase/Helpers/EbHelper.cs +++ b/src/ElectronBot.Braincase/Helpers/EbHelper.cs @@ -297,6 +297,8 @@ public class EbHelper var service = App.GetService(); + ElectronBotHelper.Instance.ModelActionInvoke(new ModelActionFrame(mat2.ToMemoryStream())); + await service.SendToUsbDeviceAsync(frame); } } diff --git a/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs b/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs index 6aeb7a6..1d04bcb 100644 --- a/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs +++ b/src/ElectronBot.Braincase/Helpers/ElectronBotHelper.cs @@ -52,6 +52,8 @@ public class ElectronBotHelper private bool _isOpenMediaEnded = false; private readonly int _playEmojisCount = 3; + + private List? _angleList; public bool EbConnected { get; set; @@ -181,6 +183,7 @@ public class ElectronBotHelper ElectronBot.SetImageSrc(frame.FrameBuffer); ElectronBot.SetJointAngles(frame.J1, frame.J2, frame.J3, frame.J4, frame.J5, frame.J6, frame.Enable); ElectronBot.Sync(); + _angleList = ElectronBot.GetJointAngles(); } } } @@ -450,6 +453,7 @@ public class ElectronBotHelper public void ModelActionInvoke(ModelActionFrame frame) { + frame.Actions = new OnlyAction(_angleList); ModelActionFrame?.Invoke(this, frame); } } diff --git a/src/ElectronBot.Braincase/Models/PlayOptions.cs b/src/ElectronBot.Braincase/Models/PlayOptions.cs new file mode 100644 index 0000000..61a4ad6 --- /dev/null +++ b/src/ElectronBot.Braincase/Models/PlayOptions.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Models; +public class PlayOptions +{ + public bool IsEntityFirstEnabled + { + get; + set; + } +} diff --git a/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs b/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs index 34faee6..0f56613 100644 --- a/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs +++ b/src/ElectronBot.Braincase/ViewModels/ModelLoadCompactOverlayViewModel.cs @@ -143,29 +143,31 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient [RelayCommand] public void Loaded() { - try + App.MainWindow.DispatcherQueue.TryEnqueue(() => { - var body = new List() + try + { + var body = new List() { "Body1.obj", "Body2.obj", }; - var head = new List() + var head = new List() { "Head1.obj", "Head2.obj", "Head3.obj", }; - var leftArm = new List() + var leftArm = new List() { "LeftArm1.obj", "LeftArm2.obj", "LeftShoulder.obj", }; - var rightArm = new List() + var rightArm = new List() { "RightArm1.obj", "RightArm2.obj", @@ -173,253 +175,255 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient }; - var baseBody = new List() + var baseBody = new List() { "Base.obj", }; - foreach (var modelName in head) - { - var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; - - var newScene = _importer.Load(modelPath); - - if (newScene != null && newScene.Root != null) + foreach (var modelName in head) { - // Pre-attach and calculate all scene info in a separate task. - newScene.Root.Attach(EffectsManager); + var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; - newScene.Root.UpdateAllTransformMatrix(); + var newScene = _importer.Load(modelPath); - HeadModel.AddNode(newScene.Root); - - _headMt = HeadModel.HxTransform3D; - - if (modelName == "Head3.obj") + if (newScene != null && newScene.Root != null) { - foreach (var node in newScene.Root.Traverse()) + // Pre-attach and calculate all scene info in a separate task. + newScene.Root.Attach(EffectsManager); + + newScene.Root.UpdateAllTransformMatrix(); + + HeadModel.AddNode(newScene.Root); + + _headMt = HeadModel.HxTransform3D; + + if (modelName == "Head3.obj") { - if (node is MeshNode meshNode) + foreach (var node in newScene.Root.Traverse()) { - // this is face - meshNode.Material = Material; + if (node is MeshNode meshNode) + { + // this is face + meshNode.Material = Material; + } + } + } + else if (modelName == "Head1.obj") + { + if (newScene.Root.TryGetCentroid(out var centroid)) + { + // Must use UI thread to set value back. + HeadModelCentroidPoint = centroid; + } + foreach (var node in newScene.Root.Traverse()) + { + if (node is MeshNode meshNode) + { + meshNode.Material = _pinkModelMaterial; + } + } + } + else if (modelName == "Head2.obj") + { + foreach (var node in newScene.Root.Traverse()) + { + if (node is MeshNode meshNode) + { + meshNode.Material = DiffuseMaterials.PureWhite; + } } } } - else if (modelName == "Head1.obj") + } + + + foreach (var modelName in body) + { + var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; + + var newScene = _importer.Load(modelPath); + + if (newScene != null && newScene.Root != null) { - if (newScene.Root.TryGetCentroid(out var centroid)) + // Pre-attach and calculate all scene info in a separate task. + newScene.Root.Attach(EffectsManager); + newScene.Root.UpdateAllTransformMatrix(); + + BodyModel.AddNode(newScene.Root); + + _bodyMt = BodyModel.HxTransform3D; + + if (modelName == "Body2.obj") + { + if (newScene.Root.TryGetCentroid(out var centroid)) + { + // Must use UI thread to set value back. + ModelCentroidPoint = centroid; + } + + foreach (var node in newScene.Root.Traverse()) + { + if (node is MeshNode meshNode) + { + meshNode.Material = DiffuseMaterials.PureWhite; + } + } + } + else if (modelName == "Body1.obj") + { + foreach (var node in newScene.Root.Traverse()) + { + if (node is MeshNode meshNode) + { + meshNode.Material = _pinkModelMaterial; + } + } + } + } + } + + foreach (var modelName in rightArm) + { + var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; + var newScene = _importer.Load(modelPath); + if (newScene != null && newScene.Root != null) + { + // Pre-attach and calculate all scene info in a separate task. + newScene.Root.Attach(EffectsManager); + newScene.Root.UpdateAllTransformMatrix(); + + RightArmModel.AddNode(newScene.Root); + + _rightArmMt = RightArmModel.HxTransform3D; + + if (newScene.Root.TryGetBound(out var bound)) { // Must use UI thread to set value back. - HeadModelCentroidPoint = centroid; - } - foreach (var node in newScene.Root.Traverse()) - { - if (node is MeshNode meshNode) + if (modelName == "RightShoulder.obj") { - meshNode.Material = _pinkModelMaterial; + RightShoulderBoundingBox = bound; + } + + } + + if (modelName == "RightArm1.obj") + { + foreach (var node in newScene.Root.Traverse()) + { + if (node is MeshNode meshNode) + { + meshNode.Material = DiffuseMaterials.PureWhite; + } } } - } - else if (modelName == "Head2.obj") - { - foreach (var node in newScene.Root.Traverse()) + else if (modelName == "RightArm2.obj") { - if (node is MeshNode meshNode) + foreach (var node in newScene.Root.Traverse()) { - meshNode.Material = DiffuseMaterials.PureWhite; + if (node is MeshNode meshNode) + { + meshNode.Material = _pinkModelMaterial; + } } } } } - } - foreach (var modelName in body) - { - var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; - - var newScene = _importer.Load(modelPath); - - if (newScene != null && newScene.Root != null) + foreach (var modelName in leftArm) { - // Pre-attach and calculate all scene info in a separate task. - newScene.Root.Attach(EffectsManager); - newScene.Root.UpdateAllTransformMatrix(); - - BodyModel.AddNode(newScene.Root); - - _bodyMt = BodyModel.HxTransform3D; - - if (modelName == "Body2.obj") + var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; + var newScene = _importer.Load(modelPath); + if (newScene != null && newScene.Root != null) { - if (newScene.Root.TryGetCentroid(out var centroid)) + // Pre-attach and calculate all scene info in a separate task. + newScene.Root.Attach(EffectsManager); + newScene.Root.UpdateAllTransformMatrix(); + + LeftArmModel.AddNode(newScene.Root); + + _leftArmMt = LeftArmModel.HxTransform3D; + + if (newScene.Root.TryGetBound(out var bound)) { // Must use UI thread to set value back. - ModelCentroidPoint = centroid; + if (modelName == "LeftShoulder.obj") + { + LeftShoulderBoundingBox = bound; + } + } - foreach (var node in newScene.Root.Traverse()) + if (modelName == "LeftArm1.obj") { - if (node is MeshNode meshNode) + foreach (var node in newScene.Root.Traverse()) { - meshNode.Material = DiffuseMaterials.PureWhite; + if (node is MeshNode meshNode) + { + meshNode.Material = DiffuseMaterials.PureWhite; + } } } - } - else if (modelName == "Body1.obj") - { - foreach (var node in newScene.Root.Traverse()) + else if (modelName == "LeftArm2.obj") { - if (node is MeshNode meshNode) + foreach (var node in newScene.Root.Traverse()) { - meshNode.Material = _pinkModelMaterial; + if (node is MeshNode meshNode) + { + meshNode.Material = _pinkModelMaterial; + } } } } } - } - foreach (var modelName in rightArm) - { - var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; - var newScene = _importer.Load(modelPath); - if (newScene != null && newScene.Root != null) + foreach (var modelName in baseBody) { - // Pre-attach and calculate all scene info in a separate task. - newScene.Root.Attach(EffectsManager); - newScene.Root.UpdateAllTransformMatrix(); - - RightArmModel.AddNode(newScene.Root); - - _rightArmMt = RightArmModel.HxTransform3D; - - if (newScene.Root.TryGetBound(out var bound)) + var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; + var newScene = _importer.Load(modelPath); + if (newScene != null && newScene.Root != null) { - // Must use UI thread to set value back. - if (modelName == "RightShoulder.obj") - { - RightShoulderBoundingBox = bound; - } + // Pre-attach and calculate all scene info in a separate task. + newScene.Root.Attach(EffectsManager); + newScene.Root.UpdateAllTransformMatrix(); - } + BaseModel.AddNode(newScene.Root); - if (modelName == "RightArm1.obj") - { - foreach (var node in newScene.Root.Traverse()) + _baseMt = BaseModel.HxTransform3D; + + if (newScene.Root.TryGetBound(out var bound)) { - if (node is MeshNode meshNode) + // Must use UI thread to set value back. + if (modelName == "Base.obj") { - meshNode.Material = DiffuseMaterials.PureWhite; + BaseBoundingBox = bound; } - } - } - else if (modelName == "RightArm2.obj") - { - foreach (var node in newScene.Root.Traverse()) - { - if (node is MeshNode meshNode) - { - meshNode.Material = _pinkModelMaterial; - } - } - } - } - } - - foreach (var modelName in leftArm) - { - var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; - var newScene = _importer.Load(modelPath); - if (newScene != null && newScene.Root != null) - { - // Pre-attach and calculate all scene info in a separate task. - newScene.Root.Attach(EffectsManager); - newScene.Root.UpdateAllTransformMatrix(); - - LeftArmModel.AddNode(newScene.Root); - - _leftArmMt = LeftArmModel.HxTransform3D; - - if (newScene.Root.TryGetBound(out var bound)) - { - // Must use UI thread to set value back. - if (modelName == "LeftShoulder.obj") - { - LeftShoulderBoundingBox = bound; } - } - - if (modelName == "LeftArm1.obj") - { - foreach (var node in newScene.Root.Traverse()) - { - if (node is MeshNode meshNode) - { - meshNode.Material = DiffuseMaterials.PureWhite; - } - } - } - else if (modelName == "LeftArm2.obj") - { - foreach (var node in newScene.Root.Traverse()) - { - if (node is MeshNode meshNode) - { - meshNode.Material = _pinkModelMaterial; - } - } - } - } - } - - foreach (var modelName in baseBody) - { - var modelPath = Package.Current.InstalledLocation.Path + $"\\Assets\\ElectronBotModel\\{modelName}"; - var newScene = _importer.Load(modelPath); - if (newScene != null && newScene.Root != null) - { - // Pre-attach and calculate all scene info in a separate task. - newScene.Root.Attach(EffectsManager); - newScene.Root.UpdateAllTransformMatrix(); - - BaseModel.AddNode(newScene.Root); - - _baseMt = BaseModel.HxTransform3D; - - if (newScene.Root.TryGetBound(out var bound)) - { - // Must use UI thread to set value back. if (modelName == "Base.obj") { - BaseBoundingBox = bound; - } - - } - - if (modelName == "Base.obj") - { - foreach (var node in newScene.Root.Traverse()) - { - if (node is MeshNode meshNode) + foreach (var node in newScene.Root.Traverse()) { - meshNode.Material = DiffuseMaterials.PureWhite; + if (node is MeshNode meshNode) + { + meshNode.Material = DiffuseMaterials.PureWhite; + } } } } } + + FocusCameraToScene(); + + ElectronBotHelper.Instance.ModelActionFrame += Instance_ModelActionFrame; } - - FocusCameraToScene(); - - ElectronBotHelper.Instance.ModelActionFrame += Instance_ModelActionFrame; - } - catch (Exception) - { - ToastHelper.SendToast("模型加载失败", TimeSpan.FromSeconds(3)); - } + catch (Exception) + { + ToastHelper.SendToast("模型加载失败", TimeSpan.FromSeconds(3)); + } + }); + } public void UnLoaded() @@ -436,86 +440,97 @@ public partial class ModelLoadCompactOverlayViewModel : ObservableRecipient private void Instance_ModelActionFrame(object? sender, Verdure.ElectronBot.Core.Models.ModelActionFrame e) { - BodyModel.HxTransform3D = _bodyMt * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); - - Material = new DiffuseMaterial() + App.MainWindow.DispatcherQueue.TryEnqueue(() => { - EnableUnLit = false, - DiffuseMap = LoadTextureByStream(e.FrameStream) - }; + BodyModel.HxTransform3D = _bodyMt * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); - - var nodeList = HeadModel.GroupNode; - - foreach (var itemMode in nodeList.Items) - { - if (itemMode.Name == "Head3.obj") + Material = new DiffuseMaterial() { - foreach (var node in itemMode.Traverse()) + EnableUnLit = false, + DiffuseMap = LoadTextureByStream(e.FrameStream) + }; + + + var nodeList = HeadModel.GroupNode; + + foreach (var itemMode in nodeList.Items) + { + if (itemMode.Name == "Head3.obj") { - if (node is MeshNode meshNode) + foreach (var node in itemMode.Traverse()) { - meshNode.Material = Material; + try + { + if (node is MeshNode meshNode) + { + meshNode.Material = Material; + } + } + catch (Exception) + { + + } + } } } - } - var rightList = RightShoulderBoundingBox.GetCorners(); + var rightList = RightShoulderBoundingBox.GetCorners(); - var rightAverage = new SharpDX.Vector3( - (rightList[1].X + rightList[5].X) / 2f, - ((rightList[1].Y + rightList[5].Y) / 2f) - 8f, - (rightList[1].Z + rightList[5].Z) / 2f); + var rightAverage = new SharpDX.Vector3( + (rightList[1].X + rightList[5].X) / 2f, + ((rightList[1].Y + rightList[5].Y) / 2f) - 8f, + (rightList[1].Z + rightList[5].Z) / 2f); - var leftList = LeftShoulderBoundingBox.GetCorners(); + var leftList = LeftShoulderBoundingBox.GetCorners(); - var leftAverage = new SharpDX.Vector3( - (leftList[0].X + leftList[4].X) / 2f, - ((leftList[0].Y + leftList[4].Y) / 2f) - 8f, - (leftList[0].Z + leftList[4].Z) / 2f); + var leftAverage = new SharpDX.Vector3( + (leftList[0].X + leftList[4].X) / 2f, + ((leftList[0].Y + leftList[4].Y) / 2f) - 8f, + (leftList[0].Z + leftList[4].Z) / 2f); - var translationMatrix = Matrix.Translation(-rightAverage.X, -rightAverage.Y, -rightAverage.Z); + var translationMatrix = Matrix.Translation(-rightAverage.X, -rightAverage.Y, -rightAverage.Z); - var tr2 = _rightArmMt * translationMatrix; + var tr2 = _rightArmMt * translationMatrix; - var tr3 = tr2 * Matrix.RotationZ(MathUtil.DegreesToRadians(-(e.J2))); - var tr4 = tr3 * Matrix.RotationX(MathUtil.DegreesToRadians(-(e.J3))); + var tr3 = tr2 * Matrix.RotationZ(MathUtil.DegreesToRadians(-(e.J2))); + var tr4 = tr3 * Matrix.RotationX(MathUtil.DegreesToRadians(-(e.J3))); - var tr5 = tr4 * Matrix.Translation(rightAverage.X, rightAverage.Y, rightAverage.Z); + var tr5 = tr4 * Matrix.Translation(rightAverage.X, rightAverage.Y, rightAverage.Z); - var tr6 = tr5 * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); + var tr6 = tr5 * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); - RightArmModel.HxTransform3D = tr6; + RightArmModel.HxTransform3D = tr6; - var leftMatrix = Matrix.Translation(-leftAverage.X, -leftAverage.Y, -leftAverage.Z); + var leftMatrix = Matrix.Translation(-leftAverage.X, -leftAverage.Y, -leftAverage.Z); - var leftTr2 = _leftArmMt * leftMatrix; + var leftTr2 = _leftArmMt * leftMatrix; - var leftTr3 = leftTr2 * Matrix.RotationZ(MathUtil.DegreesToRadians((e.J4))); - var leftTr4 = leftTr3 * Matrix.RotationX(MathUtil.DegreesToRadians(-(e.J5))); + var leftTr3 = leftTr2 * Matrix.RotationZ(MathUtil.DegreesToRadians((e.J4))); + var leftTr4 = leftTr3 * Matrix.RotationX(MathUtil.DegreesToRadians(-(e.J5))); - var leftTr5 = leftTr4 * Matrix.Translation(leftAverage.X, leftAverage.Y, leftAverage.Z); + var leftTr5 = leftTr4 * Matrix.Translation(leftAverage.X, leftAverage.Y, leftAverage.Z); - var leftTr6 = leftTr5 * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); + var leftTr6 = leftTr5 * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); - LeftArmModel.HxTransform3D = leftTr6; + LeftArmModel.HxTransform3D = leftTr6; - var headMatrix = Matrix.Translation(-HeadModelCentroidPoint.X, -HeadModelCentroidPoint.Y, -HeadModelCentroidPoint.Z); + var headMatrix = Matrix.Translation(-HeadModelCentroidPoint.X, -HeadModelCentroidPoint.Y, -HeadModelCentroidPoint.Z); - var headTr2 = _headMt * headMatrix; + var headTr2 = _headMt * headMatrix; - var headTr3 = headTr2 * Matrix.RotationX(MathUtil.DegreesToRadians(-(e.J1))); + var headTr3 = headTr2 * Matrix.RotationX(MathUtil.DegreesToRadians(-(e.J1))); - var headTr4 = headTr3 * Matrix.Translation(HeadModelCentroidPoint.X, HeadModelCentroidPoint.Y, HeadModelCentroidPoint.Z); + var headTr4 = headTr3 * Matrix.Translation(HeadModelCentroidPoint.X, HeadModelCentroidPoint.Y, HeadModelCentroidPoint.Z); - var headTr5 = headTr4 * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); + var headTr5 = headTr4 * Matrix.RotationY(MathUtil.DegreesToRadians((e.J6))); - HeadModel.HxTransform3D = headTr5; + HeadModel.HxTransform3D = headTr5; + }); } private void FocusCameraToScene() diff --git a/src/ElectronBot.Braincase/Views/CameraEmojisPage.xaml b/src/ElectronBot.Braincase/Views/CameraEmojisPage.xaml index 57038cf..1fb4d57 100644 --- a/src/ElectronBot.Braincase/Views/CameraEmojisPage.xaml +++ b/src/ElectronBot.Braincase/Views/CameraEmojisPage.xaml @@ -2,60 +2,66 @@ x:Class="ElectronBot.Braincase.Views.CameraEmojisPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:controlLocal="using:ElectronBot.Braincase.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="using:ElectronBot.Braincase.Views" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + BorderBrush="{ThemeResource SystemAccentColor}" + BorderThickness="4" + CornerRadius="8"> + + --> + + + + + + - +