Initial files
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\LASRead\LASRead.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,140 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using LASFormat;
|
||||
using LASRead;
|
||||
using LASRead.LASFormat;
|
||||
using Microsoft.CSharp.RuntimeBinder;
|
||||
|
||||
namespace LasInteractor
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("LAS Interactor. Provides methods to interact with .las files.");
|
||||
Console.WriteLine("(c) 2020 Brychan Dempsey.\n.las Format (c) 2002-2019 American Society for Photogrammetry and Remote Sensing (ASPRS)\n");
|
||||
Console.WriteLine("This software is intended for testing purposes only.");
|
||||
Console.WriteLine("Currently, it is only compatible with processors that work in Little-Endian byte orders. Your system is {0} LE.\n", BitConverter.IsLittleEndian ? "" : "not");
|
||||
Console.WriteLine("Enter a mode:");
|
||||
Console.WriteLine("r - read a .las file");
|
||||
Console.WriteLine("g - generate a .las file");
|
||||
Console.WriteLine("c - collects the points into xyz format");
|
||||
Console.WriteLine("z - compress via 7zip (experimental)");
|
||||
ConsoleKeyInfo c = Console.ReadKey();
|
||||
while(c.Key != ConsoleKey.Q)
|
||||
{
|
||||
if (c.Key == ConsoleKey.R)
|
||||
{
|
||||
Console.WriteLine("Read a file mode selected.\nPrint full data to console? (Y/n)");
|
||||
c = Console.ReadKey();
|
||||
while (c.Key != ConsoleKey.Y && c.Key != ConsoleKey.N)
|
||||
{
|
||||
Console.WriteLine("Please enter Y/n");
|
||||
c = Console.ReadKey();
|
||||
}
|
||||
Console.WriteLine("Enter the full file path:");
|
||||
string path = Console.ReadLine();
|
||||
ReadFile(path, c.Key == ConsoleKey.Y);
|
||||
}
|
||||
|
||||
c = Console.ReadKey();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void ReadFile(string source, bool printAll)
|
||||
{
|
||||
Console.WriteLine("Reading {0}", source);
|
||||
FileStream fs = File.OpenRead(source);
|
||||
Console.WriteLine("File is {0} bytes", fs.Length);
|
||||
LASFile lasFile = new LASFile(fs);
|
||||
/*FileStream os = File.OpenWrite("tdata.dat");
|
||||
RawPoints rp = new RawPoints(lasFile, os);
|
||||
rp.Run(); */
|
||||
Console.WriteLine(new string('/', 20));
|
||||
Console.Write(new string('/', 6));
|
||||
Console.Write(" Header ");
|
||||
Console.WriteLine(new string('/', 6));
|
||||
Console.WriteLine(new string('/', 20));
|
||||
Console.Write(lasFile.Header.ToString());
|
||||
Console.WriteLine(new string('/', 20));
|
||||
if (printAll)
|
||||
{
|
||||
Console.WriteLine("VLRs:");
|
||||
Console.WriteLine("press enter to continue (q breaks the loop)");
|
||||
Console.ReadLine();
|
||||
foreach (Record record in lasFile.vlrCollection)
|
||||
{
|
||||
Console.WriteLine(record.ToString());
|
||||
string s = Console.ReadLine();
|
||||
if (s.Equals("q")) break;
|
||||
}
|
||||
Console.WriteLine("PDRs:");
|
||||
Console.WriteLine("press enter to continue (q breaks the loop)");
|
||||
Console.ReadLine();
|
||||
byte lastClass = 0;
|
||||
foreach (IPointDataRecord pdr in lasFile.points)
|
||||
{
|
||||
if (pdr.Classification == lastClass)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(pdr.ToString());
|
||||
lastClass = pdr.Classification;
|
||||
// Generics abuse
|
||||
// Searches points for the method GetEnumerator() (of PDRCollection<T>), then searches the returned PDREnumerator<T> for EstimateRemainder()
|
||||
dynamic underlyingeEnumerator = lasFile.points.GetType().GetMethod("GetEnumerator").Invoke(lasFile.points, null);
|
||||
string estimation = ((int)underlyingeEnumerator.GetType().GetMethod("EstimateRemainder").Invoke(underlyingeEnumerator, null)).ToString();
|
||||
|
||||
Console.WriteLine(estimation); //.GetEnumerator().EstimateRemainder());
|
||||
string s = Console.ReadLine();
|
||||
if (s.Equals("q")) break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Console.WriteLine("EVLRs:");
|
||||
Console.WriteLine("press enter to continue (q breaks the loop)");
|
||||
Console.ReadLine();
|
||||
foreach (Record record in lasFile.evlrCollection)
|
||||
{
|
||||
Console.WriteLine(record.ToString());
|
||||
string s = Console.ReadLine();
|
||||
if (s.Equals("q")) break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Number of VLRs:");
|
||||
Console.WriteLine(lasFile.Header.NumberVLRs);
|
||||
Console.WriteLine("Number of PDRs:");
|
||||
Console.WriteLine(Math.Max(lasFile.Header.LegacyNumberOfPointRecords, lasFile.Header.NumberPointRecords));
|
||||
if (lasFile.Header.VersionMajor >= 1 && lasFile.Header.VersionMinor >= 4)
|
||||
{
|
||||
Console.WriteLine("Number of Extended VLRs:");
|
||||
Console.WriteLine(lasFile.Header.NumberOfExtendedVLRs);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("File Version is < v1.4. No additional data");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void GenerateLAS()
|
||||
{
|
||||
Stream s = new MemoryStream(); // Use a memory stream to save the enumerables. Copy the stream if needed
|
||||
// Create a 163.84 * 163.84 * 163.84 grid
|
||||
LASFile lasFile = new LASFile(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user