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