protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { var request = item as TRexCutFillDetailsRequest; if (request == null) { ThrowRequestTypeCastException <TRexCutFillDetailsRequest>(); } var siteModel = GetSiteModel(request.ProjectUid); var filter = ConvertFilter(request.Filter, siteModel); var operation = new CutFillStatisticsOperation(); var cutFillResult = await operation.ExecuteAsync(new CutFillStatisticsArgument() { ProjectID = siteModel.ID, Filters = new FilterSet(filter), ReferenceDesign = new DesignOffset(request.DesignDescriptor.FileUid ?? Guid.Empty, request.DesignDescriptor.Offset), Offsets = request.CutFillTolerances, Overrides = AutoMapperUtility.Automapper.Map <OverrideParameters>(request.Overrides), LiftParams = ConvertLift(request.LiftSettings, request.Filter?.LayerType) }); if (cutFillResult != null) { if (cutFillResult.ResultStatus == RequestErrorStatus.OK) { return(new CompactionCutFillDetailedResult(cutFillResult.Percents)); } throw CreateServiceException <CutFillExecutor>(cutFillResult.ResultStatus); } throw CreateServiceException <CutFillExecutor>(); }
public async Task SiteModelWithSingleSubGrid_FullExtents_WithSingleFlatTriangleDesignAboutOrigin() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); AddDesignProfilerGridRouting(); var siteModel = BuildModelForSingleSubGridCutFill(0.1f); var designUid = DITAGFileAndSubGridRequestsWithIgniteFixture.ConstructSingleFlatTriangleDesignAboutOrigin(ref siteModel, 2.0f); var operation = new CutFillStatisticsOperation(); var argument = SimpleCutFillStatisticsArgument(siteModel, designUid, 0); argument.Offsets = new[] { 1.0, 0.4, 0.2, 0.0, -0.2, -0.4, -1.0 }; var result = await operation.ExecuteAsync(argument); result.Should().NotBeNull(); result.ResultStatus.Should().Be(RequestErrorStatus.OK); result.Counts[0].Should().Be(693); result.Counts[1].Should().Be(105); result.Counts[2].Should().Be(27); result.Counts[3].Should().Be(33); result.Counts[4].Should().Be(24); result.Counts[5].Should().Be(20); result.Counts[6].Should().Be(1); long sum = result.Counts.Sum(); for (int i = 0; i < result.Counts.Length; i++) { result.Percents[i].Should().Be((double)result.Counts[i] / sum * 100); } }
public async Task SiteModelWithSingleCell_FullExtents_NoDesign() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = BuildModelForSingleCellCutFill(HEIGHT_INCREMENT_0_5); var operation = new CutFillStatisticsOperation(); var argument = SimpleCutFillStatisticsArgument(siteModel, Guid.NewGuid(), 1.5); var result = await operation.ExecuteAsync(argument); result.Should().NotBeNull(); result.ResultStatus.Should().Be(RequestErrorStatus.NoDesignProvided); }
public async Task EmptySiteModel_FullExtents_NoDesign() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); var siteModel = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel(); var operation = new CutFillStatisticsOperation(); var argument = SimpleCutFillStatisticsArgument(siteModel, Guid.NewGuid(), 1.5); var result = await operation.ExecuteAsync(argument); result.Should().NotBeNull(); result.ResultStatus.Should().Be(RequestErrorStatus.FailedToRequestDatamodelStatistics); }
public async Task DebugCutFillStatistics() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); AddDesignProfilerGridRouting(); var tagFiles = Directory.GetFiles(Path.Combine("TestData", "TAGFiles", "Dimensions-Machine 4250986182719752"), "*.tag").ToArray(); var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out _); var designUid = DITAGFileAndSubGridRequestsWithIgniteFixture.AddDesignToSiteModel(ref siteModel, Path.Combine("TestData", "Common"), "Large Sites Road - Trimble Road.ttm", false); var operation = new CutFillStatisticsOperation(); var argument = SimpleCutFillStatisticsArgument(siteModel, designUid, 0); argument.Offsets = new[] { 0.5, 0.2, 0.1, 0.0, -0.1, -0.2, -0.5 }; var result = await operation.ExecuteAsync(argument); }
public async Task SiteModelWithSingleCell_FullExtents_WithSingleFlatTriangleDesignAboutOrigin() { AddClusterComputeGridRouting(); AddApplicationGridRouting(); AddDesignProfilerGridRouting(); var siteModel = BuildModelForSingleCellCutFill(HEIGHT_INCREMENT_0_5); var designUid = DITAGFileAndSubGridRequestsWithIgniteFixture.ConstructSingleFlatTriangleDesignAboutOrigin(ref siteModel, 1.0f); var operation = new CutFillStatisticsOperation(); var argument = SimpleCutFillStatisticsArgument(siteModel, designUid, 0); argument.Offsets = new[] { 0.5, 0.2, 0.1, 0.0, -0.1, -0.2, -0.5 }; var result = await operation.ExecuteAsync(argument); result.Should().NotBeNull(); result.ResultStatus.Should().Be(RequestErrorStatus.OK); result.Counts[0].Should().Be(1); result.Percents[0].Should().Be(100); }
public async Task <JsonResult> GetCutFillStatistics([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides, [FromQuery] Guid cutFillDesignUid, [FromQuery] double?cutFillOffset) { string resultToReturn; if (!Guid.TryParse(siteModelID, out var UID)) { resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>"; } else if (cutFillDesignUid == Guid.Empty) { resultToReturn = "<b>Missing CutFill Design UID</b>"; } else { var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false); var offsets = new[] { 0.5, 0.2, 0.1, 0, -0.1, -0.2, -0.5 }; if (siteModel == null) { resultToReturn = $"<b>Site model {UID} is unavailable</b>"; } else { var sw = new Stopwatch(); sw.Start(); var operation = new CutFillStatisticsOperation(); var result = await operation.ExecuteAsync(new CutFillStatisticsArgument() { ProjectID = siteModel.ID, Filters = new FilterSet { Filters = new[] { new CombinedFilter() } }, ReferenceDesign = new DesignOffset(cutFillDesignUid, cutFillOffset ?? 0), Offsets = offsets, Overrides = overrides }); if (result != null) { string resultString = $"<b>Cut/Fill statistics Results (in {sw.Elapsed}) :</b><br/>"; resultString += "<b>================================================</b><br/>"; var anyNegativeNumber = offsets.ToList().Find(s => s < 0); var anyTwoDigitsNumber = offsets.ToList().Find(s => Math.Abs(s) >= TWO_DIGITS_NUMBER); for (int i = 0; i < offsets.Length; i++) { string space = anyNegativeNumber < 0 && offsets[i] >= 0 ? " " : string.Empty; if (Math.Abs(anyTwoDigitsNumber) > 0 && Math.Abs(offsets[i]) >= 0 && Math.Abs(offsets[i]) < TWO_DIGITS_NUMBER) { space += " "; } resultString += $"<b>{space}{offsets[i]:##0.0}</b> - {result.Percents[i]:##0.#0}%<br/>"; } resultToReturn = resultString; } else { resultToReturn = "<b>No result</b>"; } } } return(new JsonResult(resultToReturn)); }