public static Task Execute(ConvertVerb command, ILogger logger) { if (File.Exists(command.InputFile) == false) { logger.Fatal("Input file does not exist!"); Environment.Exit(0); } var baseOutput = string.Join(".", command.InputFile.Split(".").SkipLast(1)); var reader = FileFormatDetector.GetCloudStreamReader(command.InputFile, command.InputFormat); using var writer = FileFormatDetector.GetCloudStreamWriter( command.OutputFile ?? $"{baseOutput}.{command.OutputFormat.ToString().ToLower()}", command.OutputFormat ); var ps = reader.ReadPointSet(); while (ps != null) { writer.WritePointSet(ps); ps = reader.ReadPointSet(); } return(Task.CompletedTask); }
private static Task <IList <Tree> > ExecuteFromRaw(DetectTreesCommand command, ILogger logger) { using var streamReader = FileFormatDetector.GetCloudStreamReader(command.Input); if (streamReader == null) { logger.Fatal("Not supported data format."); Environment.Exit(0); } var cloud = new Cloud(streamReader); var terrain = new Terrain(cloud, command.Resolution); foreach (var point in cloud) { point.Z -= terrain.GetHeight(point); } var slices = cloud .Slice(command.SliceHeight.GetValueOrDefault(0.1)) .Where(slice => slice != null).OrderBy(slice => slice.Height) .ToList(); var pointSetGroups = FilteringFlow.GetFilteredPointSetGroups(command.FiltersConfigurationFile, logger, slices); var pointSetGroup = new PointSetGroup(pointSetGroups.SelectMany(p => p.PointSets).ToList()); var trees = Detect(pointSetGroup); return(Task.FromResult(trees)); }
public static Task Execute(SliceCommand command, ILogger logger) { if (File.Exists(command.Input) == false) { logger.Fatal("Provided cloud point data file does not exist!"); Environment.Exit(0); } using var streamReader = FileFormatDetector.GetCloudStreamReader(command.Input); if (streamReader == null) { logger.Fatal("Not supported data format."); Environment.Exit(0); } if (File.Exists(command.TerrainPath) == false) { logger.Fatal("Terrain file does not exist!"); Environment.Exit(0); } var cloud = new Cloud(streamReader); var terrain = Terrain.Import(command.TerrainPath); var slices = cloud.Slice(command.SliceHeight).Where(slice => slice != null).OrderBy(slice => slice.Height).ToList(); foreach (var pointSlice in slices) { foreach (var pointSet in pointSlice.PointSets) { foreach (var point in pointSet) { point.Z -= terrain.GetHeight(point); } } } using var writer = new GpdWriter(command.Output, null, (float)command.SliceHeight); writer.WriteSlices(slices); return(Task.CompletedTask); }
public static Task Execute(TerrainCommand command, ILogger logger) { if (File.Exists(command.Input) == false) { logger.Fatal("Provided cloud point data file does not exist!"); Environment.Exit(0); } using var streamReader = FileFormatDetector.GetCloudStreamReader(command.Input); if (streamReader == null) { logger.Fatal("Not supported data format."); Environment.Exit(0); } var cloud = new Cloud(streamReader); var terrain = new Terrain(cloud, command.Resolution, command.MaxHeight); terrain.Export(command.Output); return(Task.CompletedTask); }