|
5 | 5 | using System.Collections.ObjectModel; |
6 | 6 | using System.IO; |
7 | 7 | using System.Linq; |
| 8 | +using System.Runtime.Serialization; |
| 9 | +using System.Runtime.Serialization.Json; |
8 | 10 | using System.Text; |
9 | 11 | using System.Threading.Tasks; |
10 | 12 | using System.Windows; |
@@ -549,41 +551,74 @@ private void EyeTracking_ViveProEyeSettingButton_Click(object sender, RoutedEven |
549 | 551 | win.ShowDialog(); |
550 | 552 | } |
551 | 553 |
|
| 554 | + [DataContract] |
| 555 | + private class CameraPlusConfig |
| 556 | + { |
| 557 | + [DataMember] |
| 558 | + public float FieldOfView { get; set; } |
| 559 | + [DataMember] |
| 560 | + public TransformElements ThirdPersonPos = new TransformElements(); |
| 561 | + [DataMember] |
| 562 | + public TransformElements ThirdPersonRot = new TransformElements(); |
| 563 | + } |
| 564 | + [DataContract] |
| 565 | + private class TransformElements |
| 566 | + { |
| 567 | + [DataMember] |
| 568 | + public float x { get; set; } |
| 569 | + [DataMember] |
| 570 | + public float y { get; set; } |
| 571 | + [DataMember] |
| 572 | + public float z { get; set; } |
| 573 | + } |
552 | 574 | private async void CameraPlus_ImportButton_Click(object sender, RoutedEventArgs e) |
553 | 575 | { |
554 | 576 | Globals.LoadCommonSettings(); |
555 | 577 |
|
556 | 578 | var ofd = new OpenFileDialog(); |
557 | 579 |
|
558 | | - ofd.Filter = "cameraplus.cfg|cameraplus.cfg"; |
| 580 | + ofd.Filter = "cameraplus (*.cfg;*.json) | *.cfg;*.json"; |
559 | 581 | ofd.InitialDirectory = Globals.ExistDirectoryOrNull(Globals.CurrentCommonSettingsWPF.CurrentPathOnCameraPlusFileDialog); |
560 | 582 | if (ofd.ShowDialog() == true) |
561 | 583 | { |
562 | 584 | var configs = new Dictionary<string, string>(); |
563 | | - var lines = File.ReadAllLines(ofd.FileName); |
564 | | - foreach (var line in lines) |
| 585 | + if (ofd.FileName.ToLower().Contains(".json")) |
565 | 586 | { |
566 | | - if (line.Contains("=")) |
| 587 | + var c = new CameraPlusConfig(); |
| 588 | + using (var ms = new FileStream(ofd.FileName, FileMode.Open)) |
567 | 589 | { |
568 | | - var items = line.Split(new string[] { "=" }, 2, StringSplitOptions.None); |
569 | | - configs.Add(items[0], items[1]); |
| 590 | + var serializer = new DataContractJsonSerializer(typeof(CameraPlusConfig)); |
| 591 | + c = (CameraPlusConfig)serializer.ReadObject(ms); |
570 | 592 | } |
| 593 | + await Globals.Client?.SendCommandAsync(new PipeCommands.ImportCameraPlus { x = c.ThirdPersonPos.x, y = c.ThirdPersonPos.y, z = c.ThirdPersonPos.z, rx = c.ThirdPersonRot.x, ry = c.ThirdPersonRot.y, rz = c.ThirdPersonRot.z, fov = c.FieldOfView }); |
571 | 594 | } |
572 | | - Func<string, float> GetFloat = (string key) => |
| 595 | + else |
573 | 596 | { |
574 | | - if (configs.ContainsKey(key) == false) { return 0.0f; } |
575 | | - if (float.TryParse(configs[key], out var ret)) { return ret; } |
576 | | - return 0.0f; |
577 | | - }; |
578 | | - var x = GetFloat("posx"); |
579 | | - var y = GetFloat("posy"); |
580 | | - var z = GetFloat("posz"); |
581 | | - var rx = GetFloat("angx"); |
582 | | - var ry = GetFloat("angy"); |
583 | | - var rz = GetFloat("angz"); |
584 | | - var fov = GetFloat("fov"); |
585 | | - |
586 | | - await Globals.Client?.SendCommandAsync(new PipeCommands.ImportCameraPlus { x = x, y = y, z = z, rx = rx, ry = ry, rz = rz, fov = fov }); |
| 597 | + var lines = File.ReadAllLines(ofd.FileName); |
| 598 | + foreach (var line in lines) |
| 599 | + { |
| 600 | + if (line.Contains("=")) |
| 601 | + { |
| 602 | + var items = line.Split(new string[] { "=" }, 2, StringSplitOptions.None); |
| 603 | + configs.Add(items[0], items[1]); |
| 604 | + } |
| 605 | + } |
| 606 | + Func<string, float> GetFloat = (string key) => |
| 607 | + { |
| 608 | + if (configs.ContainsKey(key) == false) { return 0.0f; } |
| 609 | + if (float.TryParse(configs[key], out var ret)) { return ret; } |
| 610 | + return 0.0f; |
| 611 | + }; |
| 612 | + var x = GetFloat("posx"); |
| 613 | + var y = GetFloat("posy"); |
| 614 | + var z = GetFloat("posz"); |
| 615 | + var rx = GetFloat("angx"); |
| 616 | + var ry = GetFloat("angy"); |
| 617 | + var rz = GetFloat("angz"); |
| 618 | + var fov = GetFloat("fov"); |
| 619 | + |
| 620 | + await Globals.Client?.SendCommandAsync(new PipeCommands.ImportCameraPlus { x = x, y = y, z = z, rx = rx, ry = ry, rz = rz, fov = fov }); |
| 621 | + } |
587 | 622 | if (Globals.CurrentCommonSettingsWPF.CurrentPathOnCameraPlusFileDialog != System.IO.Path.GetDirectoryName(ofd.FileName)) |
588 | 623 | { |
589 | 624 | Globals.CurrentCommonSettingsWPF.CurrentPathOnCameraPlusFileDialog = System.IO.Path.GetDirectoryName(ofd.FileName); |
|
0 commit comments