Example #1
0
        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>();
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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 ? "&nbsp;&nbsp;" : string.Empty;

                            if (Math.Abs(anyTwoDigitsNumber) > 0 && Math.Abs(offsets[i]) >= 0 && Math.Abs(offsets[i]) < TWO_DIGITS_NUMBER)
                            {
                                space += "&nbsp;&nbsp;";
                            }

                            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));
        }