Esempio n. 1
0
        public async Task <JsonResult> ComputeSummaryVolumesProfile(string siteModelID,
                                                                    [FromQuery] double startX,
                                                                    [FromQuery] double startY,
                                                                    [FromQuery] double endX,
                                                                    [FromQuery] double endY)
        {
            //TODO: can add design to ground and ground to design by passing the cutFillDesignUid

            var siteModelUid = Guid.Parse(siteModelID);

            var arg = new ProfileRequestArgument_ApplicationService
            {
                ProjectID                = siteModelUid,
                ProfileTypeRequired      = GridDataType.Height,
                ProfileStyle             = ProfileStyle.SummaryVolume,
                PositionsAreGrid         = true,
                Filters                  = new FilterSet(new CombinedFilter(), new CombinedFilter()),
                StartPoint               = new WGS84Point(lon: startX, lat: startY),
                EndPoint                 = new WGS84Point(lon: endX, lat: endY),
                ReturnAllPassesAndLayers = false,
                VolumeType               = VolumeComputationType.Between2Filters
            };

            // This is a simple earliest filter to latest filter test
            arg.Filters.Filters[0].AttributeFilter.ReturnEarliestFilteredCellPass = true;
            arg.Filters.Filters[1].AttributeFilter.ReturnEarliestFilteredCellPass = false;

            // Compute a profile from the bottom left of the screen extents to the top right
            var request = new ProfileRequest_ApplicationService_SummaryVolumeProfileCell();

            var response = await request.ExecuteAsync(arg);

            if (response == null)
            {
                return(new JsonResult(@"Profile response is null"));
            }

            if (response.ProfileCells == null)
            {
                return(new JsonResult(@"Profile response contains no profile cells"));
            }

            return(new JsonResult(response.ProfileCells.Select(x => new XYZS(0, 0, x.LastCellPassElevation2 - x.LastCellPassElevation1, x.Station, -1))));
        }
Esempio n. 2
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            var request = item as SummaryVolumesProfileDataRequest;

            if (request == null)
            {
                ThrowRequestTypeCastException <SummaryVolumesProfileDataRequest>();
            }

            var siteModel       = GetSiteModel(request.ProjectUid);
            var baseFilter      = ConvertFilter(request.Filter, siteModel);
            var topFilter       = ConvertFilter(request.TopFilter, siteModel);
            var referenceDesign = new DesignOffset(request.ReferenceDesignUid ?? Guid.Empty, request.ReferenceDesignOffset ?? 0);


            var arg = new ProfileRequestArgument_ApplicationService
            {
                ProjectID                = request.ProjectUid,
                ProfileTypeRequired      = GridDataType.Height,
                ProfileStyle             = ProfileStyle.SummaryVolume,
                PositionsAreGrid         = request.PositionsAreGrid,
                Filters                  = new FilterSet(baseFilter, topFilter),
                ReferenceDesign          = referenceDesign,
                StartPoint               = new WGS84Point(lon: request.StartX, lat: request.StartY, request.PositionsAreGrid ? Consts.NullDouble : 0),//coord conversion requires elevation set
                EndPoint                 = new WGS84Point(lon: request.EndX, lat: request.EndY, request.PositionsAreGrid ? Consts.NullDouble : 0),
                ReturnAllPassesAndLayers = false,
                VolumeType               = ConvertVolumesHelper.ConvertVolumesType(request.VolumeCalcType),
                Overrides                = AutoMapperUtility.Automapper.Map <OverrideParameters>(request.Overrides),
                LiftParams               = ConvertLift(request.LiftSettings, request.Filter?.LayerType)
            };

            // Compute a profile from the bottom left of the screen extents to the top right
            var svRequest = new ProfileRequest_ApplicationService_SummaryVolumeProfileCell();

            var response = await svRequest.ExecuteAsync(arg);

            if (response != null)
            {
                return(ConvertResult(response));
            }

            throw new ServiceException(HttpStatusCode.BadRequest, new ContractExecutionResult(ContractExecutionStatesEnum.FailedToGetResults,
                                                                                              "Failed to get requested Summary Volumes Profile data"));
        }
Esempio n. 3
0
        public async Task SummaryVolumeProfileCell_SingleCell_FlatDesignAtOrigin_FilterToDesignOrDesignToFilter(VolumeComputationType volumeComputationType, float designElevation,
                                                                                                                float lastPassElevation1, float lastPassElevation2, int checkCellIndex)
        {
            AddRoutings();

            var sm     = BuildModelForSingleCell();
            var design = DITAGFileAndSubGridRequestsWithIgniteFixture.ConstructSingleFlatTriangleDesignAboutOrigin(ref sm, designElevation);

            var arg = new ProfileRequestArgument_ApplicationService
            {
                ProjectID           = sm.ID,
                ProfileTypeRequired = GridDataType.Height,
                ProfileStyle        = ProfileStyle.SummaryVolume,
                PositionsAreGrid    = true,
                Filters             = new FilterSet(
                    new CombinedFilter
                {
                    AttributeFilter = new CellPassAttributeFilter {
                        ReturnEarliestFilteredCellPass = true
                    }
                },
                    new CombinedFilter()),
                ReferenceDesign          = new DesignOffset(design, 0),
                StartPoint               = new WGS84Point(-1.0, sm.Grid.CellSize / 2),
                EndPoint                 = new WGS84Point(1.0, sm.Grid.CellSize / 2),
                ReturnAllPassesAndLayers = false,
                VolumeType               = volumeComputationType
            };

            // Compute a profile from the bottom left of the screen extents to the top right
            var svRequest = new ProfileRequest_ApplicationService_SummaryVolumeProfileCell();
            var response  = await svRequest.ExecuteAsync(arg);

            response.Should().NotBeNull();
            response.ResultStatus.Should().Be(RequestErrorStatus.OK);
            response.ProfileCells.Count.Should().Be(6);
            response.ProfileCells[checkCellIndex].DesignElev.Should().Be(designElevation);
            response.ProfileCells[checkCellIndex].LastCellPassElevation1.Should().Be(lastPassElevation1);
            response.ProfileCells[checkCellIndex].LastCellPassElevation2.Should().Be(lastPassElevation2);
            response.ProfileCells[checkCellIndex].InterceptLength.Should().BeApproximately(sm.Grid.CellSize, 0.001);
            response.ProfileCells[checkCellIndex].OTGCellX.Should().Be(SubGridTreeConsts.DefaultIndexOriginOffset);
            response.ProfileCells[checkCellIndex].OTGCellY.Should().Be(SubGridTreeConsts.DefaultIndexOriginOffset);
        }
Esempio n. 4
0
        public void Creation_SummaryVolumeProfileCell()
        {
            var req = new ProfileRequest_ApplicationService_SummaryVolumeProfileCell();

            req.Should().NotBeNull();
        }