From ab4f98f76c6b69d8adfabdbddf30ba53a20d1770 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Sun, 1 Aug 2021 20:05:15 +0200 Subject: [PATCH] =?UTF-8?q?fix=20scan=20transformation=20for=20y=C2=B0=20?= =?UTF-8?q?=3D=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Program.cs | 26 +++++++++----- .../Services/ScanConverterServiceTest.cs | 2 +- .../PointCloudWeb.Server.sln.DotSettings.user | 10 +++++- .../Services/ScanConverterService.cs | 36 ++++++++++++------- .../Services/ScanDataService.cs | 6 ++-- .../src/store/pointCloudInfo/store.js | 4 +-- 6 files changed, 56 insertions(+), 28 deletions(-) diff --git a/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs b/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs index dbfa9df..f985cab 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs @@ -12,38 +12,48 @@ namespace PointCloudWeb.Server.ScanConverter { private static void Main() { - var scanPoints = File.ReadAllLines("C:\\Users\\timwu\\Desktop\\Scans\\0yGrad-edited-scan.csv") + var scanPoints = File.ReadAllLines("C:/Users/timwu/Desktop/Scans/0yGrad-scan-org.csv") .Select(v => ScanDataPointFromCsv(v)) .Where(scan => scan.DistanceMM > 0) .ToList(); var result = new List(); - var converter = new ScanConverterService(); foreach (var scan in scanPoints) { - result.Add(converter.Transform(scan)); + result.Add(ScanConverterService.Transform(scan)); //Console.WriteLine(result.Count + ":: " + scan.ToString() + " => " + result[result.Count - 1].ToString()); } result.RemoveAll(point => point.X == 0 && point.Y == 0 & point.Z == 0); - string csv = String.Join("\n", result.Select(point => point.X + ", " + point.Y + ", " + point.Z).ToArray()); + var csv = "x,y,z\n" + string.Join("\n", result.Select(point => point.X + ", " + point.Y + ", " + point.Z).ToArray()); - File.WriteAllText("C:\\Users\\timwu\\Desktop\\Scans\\0yGrad-pc.csv", csv); + File.WriteAllText("C:\\Users\\timwu\\Desktop\\Scans\\0yGrad-pc-org.csv", csv); Console.WriteLine("Convert finished"); - Console.ReadLine(); + // Console.ReadLine(); } private static ScanDataPoint ScanDataPointFromCsv(string csvLine) { string[] values = csvLine.Split(','); - return new ScanDataPoint( + var scan = new ScanDataPoint( ray: Convert.ToDouble(values[0], CultureInfo.InvariantCulture), rax: Convert.ToDouble(values[1], CultureInfo.InvariantCulture), - distanceMM: Convert.ToInt32(values[2], CultureInfo.InvariantCulture) + distanceMM: (int)Convert.ToDouble(values[2], CultureInfo.InvariantCulture) ); + + //scan.RAX += 90; + // scan.RAY += 90; + + //scan.RAX %= 360; + // scan.RAY %= 360; + + return scan; + if (scan.RAX == 1) return scan; + + return new ScanDataPoint(); } } } \ No newline at end of file diff --git a/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs b/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs index fbae4e8..06bac3f 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs @@ -64,7 +64,7 @@ namespace PointCloudWeb.Server.Tests.Services var expected = new Point(x, y, z); var service = new ScanConverterService(); - var point = service.Transform(scan); + var point = ScanConverterService.Transform(scan); Assert.Equal(expected, point); } } diff --git a/PointCloudWeb.Server/PointCloudWeb.Server.sln.DotSettings.user b/PointCloudWeb.Server/PointCloudWeb.Server.sln.DotSettings.user index 1ac451f..bf316d7 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server.sln.DotSettings.user +++ b/PointCloudWeb.Server/PointCloudWeb.Server.sln.DotSettings.user @@ -1,3 +1,11 @@  - ShowAndRun \ No newline at end of file + ShowAndRun + INFO + True + <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &lt;PointCloudWeb.Server.Tests&gt; #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&lt;PointCloudWeb.Server.Tests&gt;" /> +</SessionState> + <SessionState ContinuousTestingMode="0" Name="All tests from &lt;PointCloudWeb.Server.Tests&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&lt;PointCloudWeb.Server.Tests&gt;" /> +</SessionState> \ No newline at end of file diff --git a/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs b/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs index 33cee2c..fea8d99 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs @@ -6,21 +6,22 @@ namespace PointCloudWeb.Server.Services { public class ScanConverterService { - public Point Transform(ScanDataPoint scan) + public static Point Transform(ScanDataPoint scan) { - if (scan.RAX >= 180 || scan.RAY >= 180) - return new Point(0, 0, 0); + // if (scan.RAX >= 90 || scan.RAY >= 90) + // return new Point(0, 0, 0); var degreeXa = scan.RAX; var degreeYa = scan.RAY; - //if (degreeXA > 270 && degreeYA > 270) - //{ - // degreeXA -= 270; - // degreeYA -= 270; - // factorZ = -1; - //} - + var factorY = 1; + var factorZ = 1; + if (180 <= degreeXa && degreeXa <= 360) + { + factorY = -1; + factorZ = -1; + } + var degreeXb = 180 - 90 - degreeXa; var degreeYb = 180 - 90 - degreeYa; @@ -34,6 +35,17 @@ namespace PointCloudWeb.Server.Services var sinYa = Math.Sin(radYa); var sinYb = Math.Sin(radYb); + if (sinXa == 0) + { + sinXa = 1; + sinXb = 0; + } + if (sinYa == 0) + { + sinYa = 1; + sinYb = 0; + } + var z = Math.Sqrt( Math.Pow( Math.Pow(sinXb, 2) / Math.Pow(sinXa, 2) @@ -46,8 +58,8 @@ namespace PointCloudWeb.Server.Services var p = new Point() { X = NumericUtils.Round(z * sinYb / sinYa), - Y = NumericUtils.Round(z * sinXb / sinXa), - Z = NumericUtils.Round(z) + Y = factorY * NumericUtils.Round(z * sinXb / sinXa), + Z = factorZ * NumericUtils.Round(z) }; return p; diff --git a/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanDataService.cs b/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanDataService.cs index 2f143c6..550cb3f 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanDataService.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanDataService.cs @@ -7,12 +7,10 @@ namespace PointCloudWeb.Server.Services public class ScanDataService { private readonly PointCloudService _pointCloudService; - private readonly ScanConverterService _scanConverterService; - public ScanDataService(PointCloudService pointCloudService, ScanConverterService scanConverterService) + public ScanDataService(PointCloudService pointCloudService) { _pointCloudService = pointCloudService; - _scanConverterService = scanConverterService; } private IList ConvertToPoints(ScanDataList scanData) @@ -21,7 +19,7 @@ namespace PointCloudWeb.Server.Services foreach (var scan in scanData.ScanPoints) { - list.Add(_scanConverterService.Transform(scan)); + list.Add(ScanConverterService.Transform(scan)); } return list; diff --git a/PointCloudWeb.Web/src/store/pointCloudInfo/store.js b/PointCloudWeb.Web/src/store/pointCloudInfo/store.js index 5c5bd11..ae07023 100644 --- a/PointCloudWeb.Web/src/store/pointCloudInfo/store.js +++ b/PointCloudWeb.Web/src/store/pointCloudInfo/store.js @@ -49,10 +49,10 @@ export default { axios .put(globals.API_URL + 'pointcloudinfo', pointCloudInfo) .then(response => { - setTimeout(() => { + setTimeout(() => { commit('UPDATE_PC', { action: "update", data: response.data }); commit('SET_LOADING', false); - }, 80)(); + }, 80); }).catch(() => { commit('SET_LOADING', false) })