add loading of sample Point Clouds

The files are from ETH-Apartment Dataset
This commit is contained in:
Tim Wundenberg
2021-08-03 21:33:14 +02:00
parent ab4f98f76c
commit 04de194255
8 changed files with 740625 additions and 32 deletions

View File

@@ -12,7 +12,7 @@ namespace PointCloudWeb.Server.ScanConverter
{
private static void Main()
{
var scanPoints = File.ReadAllLines("C:/Users/timwu/Desktop/Scans/0yGrad-scan-org.csv")
var scanPoints = File.ReadAllLines("C:/Users/timwu/Desktop/Scans/Esszimmer-scan.csv")
.Select(v => ScanDataPointFromCsv(v))
.Where(scan => scan.DistanceMM > 0)
.ToList();
@@ -29,7 +29,7 @@ namespace PointCloudWeb.Server.ScanConverter
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-org.csv", csv);
File.WriteAllText("C:\\Users\\timwu\\Desktop\\Scans\\Esszimmer-pc.csv", csv);
Console.WriteLine("Convert finished");
// Console.ReadLine();
@@ -44,11 +44,8 @@ namespace PointCloudWeb.Server.ScanConverter
distanceMM: (int)Convert.ToDouble(values[2], CultureInfo.InvariantCulture)
);
//scan.RAX += 90;
// scan.RAY += 90;
//scan.RAX %= 360;
// scan.RAY %= 360;
//scan.RAX = (scan.RAX + 90) % 360;
//scan.RAY = (scan.RAY + 90) % 360;
return scan;
if (scan.RAX == 1) return scan;

View File

@@ -3,9 +3,11 @@
<s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">ShowAndRun</s:String>
<s:String x:Key="/Default/CodeInspection/PencilsConfiguration/ActualSeverity/@EntryValue">INFO</s:String>
<s:Boolean x:Key="/Default/Environment/InlayHints/GeneralInlayHintsOptions/EnableInlayHints/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=5420edfd_002D53ed_002D4360_002D91dc_002D622a0704440e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &amp;lt;PointCloudWeb.Server.Tests&amp;gt; #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=5420edfd_002D53ed_002D4360_002D91dc_002D622a0704440e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="All tests from &amp;lt;PointCloudWeb.Server.Tests&amp;gt; #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&amp;lt;PointCloudWeb.Server.Tests&amp;gt;" /&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=6e4a2479_002Dacc5_002D40ad_002Dab6f_002Dff921657a24c/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="All tests from &amp;lt;PointCloudWeb.Server.Tests&amp;gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=6e4a2479_002Dacc5_002D40ad_002Dab6f_002Dff921657a24c/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &amp;lt;PointCloudWeb.Server.Tests&amp;gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&amp;lt;PointCloudWeb.Server.Tests&amp;gt;" /&gt;&#xD;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>
&lt;/SessionState&gt;</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hokuyo/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Potree/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
namespace PointCloudWeb.Server
{
public static class Globals
{
static Globals()
{
PotreeDataPath = "";
}
public static string PotreeDataPath { get; }
}
}

View File

@@ -1,33 +1,64 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using PointCloudWeb.Server.Models;
namespace PointCloudWeb.Server.Services
{
{
public class PointCloudService
{
//private readonly IPointCloudRegistationService pointCloudRegistation;
//private readonly IPointCloudRegistrationService pointCloudRegistration;
private readonly PointCloudCollection _pointClouds;
public PointCloudService(/*IPointCloudRegistationService pointCloudRegistation*/)
public PointCloudService(/*IPointCloudRegistrationService pointCloudRegistration*/)
{
_pointClouds = new PointCloudCollection();
//this.pointCloudRegistation = pointCloudRegistation;
//this.pointCloudRegistration = pointCloudRegistration;
InitSampleData();
}
private static int TextToCoordinate(string text)
{
var dDecimal = Convert.ToDecimal(text, CultureInfo.InvariantCulture);
dDecimal *= 100_000_000; //convert decimal points to integer points
return (int)dDecimal;
}
private static void LoadPointCloudFromEthFile(PointCloud target, string path)
{
var lines = File.ReadLines(path );
foreach (var line in lines)
{
//skip header
if (line.Contains("x,y,z"))
continue;
var values = line.Split(',');
var point = new Point(
TextToCoordinate(values[1]),
TextToCoordinate(values[2]),
TextToCoordinate(values[3])
);
target.Points.Add(point);
}
}
private void ConvertPointsToPotree()
{
var path = Globals.PotreeDataPath;
}
private void InitSampleData()
{
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 1"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 2"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 3"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 4"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 5"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 6"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 7"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 8"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 9"));
_pointClouds.Add(new PointCloud(Guid.NewGuid(), "Scan 10"));
var pc = new PointCloud(Guid.NewGuid(), "Scan 1");
LoadPointCloudFromEthFile(pc, "ETH-Data/Hokuyo_0.csv");
_pointClouds.Add(pc);
pc = new PointCloud(Guid.NewGuid(), "Scan 2");
LoadPointCloudFromEthFile(pc, "ETH-Data/Hokuyo_1.csv");
_pointClouds.Add(pc);
}
private void RaiseIfNotExists(Guid id)
@@ -65,7 +96,7 @@ namespace PointCloudWeb.Server.Services
// if (_pointClouds.IndexOf(pointCloud) == 0)
// return;
//var transformation = pointCloudRegistation.RegisterPointCloud(pointCloud, pointClouds[0]);
//var transformation = pointCloudRegistration.RegisterPointCloud(pointCloud, pointClouds[0]);
//pointCloud.Transformation = transformation;
}

View File

@@ -11,17 +11,17 @@ namespace PointCloudWeb.Server.Services
// if (scan.RAX >= 90 || scan.RAY >= 90)
// return new Point(0, 0, 0);
var degreeXa = scan.RAX;
var degreeXa = (scan.RAX) % 360;
var degreeYa = scan.RAY;
var factorY = 1;
var factorZ = 1;
if (180 <= degreeXa && degreeXa <= 360)
{
factorY = -1;
factorZ = -1;
factorY = -1;
factorZ = -1;
}
var degreeXb = 180 - 90 - degreeXa;
var degreeYb = 180 - 90 - degreeYa;
@@ -40,6 +40,7 @@ namespace PointCloudWeb.Server.Services
sinXa = 1;
sinXb = 0;
}
if (sinYa == 0)
{
sinYa = 1;
@@ -53,14 +54,26 @@ namespace PointCloudWeb.Server.Services
+ 1
, -1)
* Math.Pow(scan.DistanceMM, 2)
);
);
var p = new Point()
var p = new Point
{
X = NumericUtils.Round(z * sinYb / sinYa),
Y = factorY * NumericUtils.Round(z * sinXb / sinXa),
Z = factorZ * NumericUtils.Round(z)
};
return p;
//https://stackoverflow.com/questions/52781607/3d-point-from-two-angles-and-a-distance
var pitch = radYa;
var yaw = radXa;
p = new Point
{
X = (int) (scan.DistanceMM * Math.Sin(yaw) * Math.Cos(pitch)),
Y = (int) (scan.DistanceMM * Math.Sin(pitch)),
Z = (int) (scan.DistanceMM * Math.Cos(yaw) * Math.Cos(pitch))
};
return p;
}

View File

@@ -3,7 +3,6 @@ import modulePCI from './pointCloudInfo/store.js'
export default createStore({
namespaced: true,
strict: true,
state: {
dummy: "dummy"
},