private CompactionProfileResult <CompactionProfileCell> ProcessProductionDataWithRaptor( CompactionProfileProductionDataRequest request) { MemoryStream memoryStream; var filter = RaptorConverters.ConvertFilter(request.Filter, request.ProjectId, raptorClient); var designDescriptor = RaptorConverters.DesignDescriptor(request.CutFillDesignDescriptor); var alignmentDescriptor = RaptorConverters.DesignDescriptor(request.AlignmentDesign); var liftBuildSettings = RaptorConverters.ConvertLift(request.LiftBuildSettings, TFilterLayerMethod.flmNone); ProfilesHelper.ConvertProfileEndPositions(request.GridPoints, request.WGS84Points, out var startPt, out var endPt, out var positionsAreGrid); if (request.IsAlignmentDesign) { var args = ASNode.RequestAlignmentProfile.RPC.__Global.Construct_RequestAlignmentProfile_Args (request.ProjectId ?? VelociraptorConstants.NO_PROJECT_ID, ProfilesHelper.PROFILE_TYPE_NOT_REQUIRED, request.StartStation ?? ValidationConstants3D.MIN_STATION, request.EndStation ?? ValidationConstants3D.MIN_STATION, alignmentDescriptor, filter, liftBuildSettings, designDescriptor, request.ReturnAllPassesAndLayers); memoryStream = raptorClient.GetAlignmentProfile(args); } else { var args = ASNode.RequestProfile.RPC.__Global.Construct_RequestProfile_Args (request.ProjectId ?? VelociraptorConstants.NO_PROJECT_ID, ProfilesHelper.PROFILE_TYPE_HEIGHT, positionsAreGrid, startPt, endPt, filter, liftBuildSettings, designDescriptor, request.ReturnAllPassesAndLayers); memoryStream = raptorClient.GetProfile(args); } return(memoryStream != null?ConvertProfileResult(memoryStream, request.LiftBuildSettings) : null); }
/// <summary> /// Process profile request to get summary volumes profile /// </summary> /// <param name="request">Profile request</param> /// <param name="totalResult">Results for other production data profile types</param> /// <returns>Summary volumes profile</returns> private async Task <CompactionProfileDataResult> ProcessSummaryVolumes(CompactionProfileProductionDataRequest request, CompactionProfileResult <CompactionProfileDataResult> totalResult) { var volumesResult = #if RAPTOR UseTRexGateway("ENABLE_TREX_GATEWAY_PROFILING") ? #endif await ProcessSummaryVolumesWithTRexGateway(request) #if RAPTOR : ProcessSummaryVolumesWithRaptor(request) #endif ; //If we have no other profile results apart from summary volumes, set the total grid distance if (totalResult.results.Count == 0 && volumesResult != null) { totalResult.gridDistanceBetweenProfilePoints = volumesResult.gridDistanceBetweenProfilePoints; } //If we have other profile types but no summary volumes, add summary volumes with just slicer end points if (volumesResult == null && totalResult.results.Count > 0) { var startSlicer = new CompactionSummaryVolumesProfileCell(SumVolGapCell); var endSlicer = new CompactionSummaryVolumesProfileCell(SumVolGapCell); endSlicer.station = totalResult.gridDistanceBetweenProfilePoints; volumesResult = new CompactionProfileResult <CompactionSummaryVolumesProfileCell> { gridDistanceBetweenProfilePoints = totalResult.gridDistanceBetweenProfilePoints, results = new List <CompactionSummaryVolumesProfileCell> { startSlicer, endSlicer } }; } return(profileResultHelper.RearrangeProfileResult(volumesResult, request.VolumeCalcType)); }
/// <summary> /// Process the profile request to get production data profiles /// </summary> /// <param name="request">Profile request</param> /// <returns>Profile for each production data type except summary volumes</returns> private async Task <CompactionProfileResult <CompactionProfileDataResult> > ProcessProductionData(CompactionProfileProductionDataRequest request) { CompactionProfileResult <CompactionProfileDataResult> totalResult; var productionDataProfileResult = #if RAPTOR UseTRexGateway("ENABLE_TREX_GATEWAY_PROFILING") ? #endif await ProcessProductionDataWithTRexGateway(request) #if RAPTOR : ProcessProductionDataWithRaptor(request) #endif ; if (productionDataProfileResult != null) { totalResult = profileResultHelper.RearrangeProfileResult(productionDataProfileResult); } else { //For convenience return empty list rather than null for easier manipulation totalResult = new CompactionProfileResult <CompactionProfileDataResult> { results = new List <CompactionProfileDataResult>() }; } return(totalResult); }
private CompactionProfileResult <CompactionSummaryVolumesProfileCell> ProcessSummaryVolumesWithRaptor(CompactionProfileProductionDataRequest request) { var alignmentDescriptor = RaptorConverters.DesignDescriptor(request.AlignmentDesign); var liftBuildSettings = RaptorConverters.ConvertLift(request.LiftBuildSettings, TFilterLayerMethod.flmNone); var baseFilter = RaptorConverters.ConvertFilter(request.BaseFilter, request.ProjectId, raptorClient); var topFilter = RaptorConverters.ConvertFilter(request.TopFilter, request.ProjectId, raptorClient); var volumeDesignDescriptor = RaptorConverters.DesignDescriptor(request.VolumeDesignDescriptor); ProfilesHelper.ConvertProfileEndPositions(request.GridPoints, request.WGS84Points, out var startPt, out var endPt, out var positionsAreGrid); if (request.VolumeCalcType.HasValue && request.VolumeCalcType.Value != VolumeCalcType.None) { var volCalcType = (TComputeICVolumesType)request.VolumeCalcType.Value; if (volCalcType == TComputeICVolumesType.ic_cvtBetween2Filters && !request.ExplicitFilters) { RaptorConverters.AdjustFilterToFilter(ref baseFilter, topFilter); } MemoryStream memoryStream; if (request.IsAlignmentDesign) { var args = ASNode.RequestSummaryVolumesAlignmentProfile.RPC.__Global .Construct_RequestSummaryVolumesAlignmentProfile_Args (request.ProjectId ?? VelociraptorConstants.NO_PROJECT_ID, ProfilesHelper.PROFILE_TYPE_NOT_REQUIRED, volCalcType, request.StartStation ?? ValidationConstants3D.MIN_STATION, request.EndStation ?? ValidationConstants3D.MIN_STATION, alignmentDescriptor, baseFilter, topFilter, liftBuildSettings, volumeDesignDescriptor); memoryStream = raptorClient.GetSummaryVolumesAlignmentProfile(args); } else { var args = ASNode.RequestSummaryVolumesProfile.RPC.__Global.Construct_RequestSummaryVolumesProfile_Args( request.ProjectId ?? VelociraptorConstants.NO_PROJECT_ID, ProfilesHelper.PROFILE_TYPE_HEIGHT, volCalcType, startPt, endPt, positionsAreGrid, baseFilter, topFilter, liftBuildSettings, volumeDesignDescriptor); memoryStream = raptorClient.GetSummaryVolumesProfile(args); } return(memoryStream != null?ConvertSummaryVolumesProfileResult(memoryStream, request.VolumeCalcType.Value) : null); } return(null); }
private async Task <CompactionProfileResult <CompactionSummaryVolumesProfileCell> > ProcessSummaryVolumesWithTRexGateway(CompactionProfileProductionDataRequest request) { if (request.IsAlignmentDesign) { throw new ServiceException(HttpStatusCode.BadRequest, new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "TRex unsupported request")); } var volumeCalcType = request.VolumeCalcType ?? VolumeCalcType.None; if (volumeCalcType != VolumeCalcType.None) { var baseFilter = request.BaseFilter; var topFilter = request.TopFilter; if (volumeCalcType == VolumeCalcType.GroundToGround && !request.ExplicitFilters) { (baseFilter, topFilter) = FilterUtilities.AdjustFilterToFilter(request.BaseFilter, request.TopFilter); } var liftBuildSettings = request.LiftBuildSettings; var summaryVolumesProfileDataRequest = new SummaryVolumesProfileDataRequest( request.ProjectUid ?? Guid.Empty, baseFilter, topFilter, request.VolumeDesignDescriptor?.FileUid, request.VolumeDesignDescriptor?.Offset, ConvertVolumeCalcType(volumeCalcType), request.GridPoints != null, request.GridPoints?.x1 ?? request.WGS84Points.lon1, request.GridPoints?.y1 ?? request.WGS84Points.lat1, request.GridPoints?.x2 ?? request.WGS84Points.lon2, request.GridPoints?.y2 ?? request.WGS84Points.lat2, AutoMapperUtility.Automapper.Map <OverridingTargets>(liftBuildSettings), AutoMapperUtility.Automapper.Map <LiftSettings>(liftBuildSettings) ); var trexResult = await trexCompactionDataProxy.SendDataPostRequest <ProfileDataResult <SummaryVolumeProfileCell>, SummaryVolumesProfileDataRequest>(summaryVolumesProfileDataRequest, "/volumes/summary/profile", customHeaders); return(trexResult != null?ConvertTRexSummaryVolumesProfileResult(trexResult, volumeCalcType) : null); } return(null); }
private async Task <CompactionProfileResult <CompactionProfileCell> > ProcessProductionDataWithTRexGateway(CompactionProfileProductionDataRequest request) { if (request.IsAlignmentDesign) { throw new ServiceException(HttpStatusCode.BadRequest, new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "TRex unsupported request")); } var liftBuildSettings = request.LiftBuildSettings; var productionDataProfileDataRequest = new ProductionDataProfileDataRequest( request.ProjectUid ?? Guid.Empty, request.Filter, request.ReturnAllPassesAndLayers, request.CutFillDesignDescriptor?.FileUid, request.CutFillDesignDescriptor?.Offset, request.GridPoints != null, request.GridPoints?.x1 ?? (request.WGS84Points?.lon1 ?? 0.0), request.GridPoints?.y1 ?? (request.WGS84Points?.lat1 ?? 0.0), request.GridPoints?.x2 ?? (request.WGS84Points?.lon2 ?? 0.0), request.GridPoints?.y2 ?? (request.WGS84Points?.lat2 ?? 0.0), AutoMapperUtility.Automapper.Map <OverridingTargets>(liftBuildSettings), AutoMapperUtility.Automapper.Map <LiftSettings>(liftBuildSettings)); var trexResult = await trexCompactionDataProxy.SendDataPostRequest <ProfileDataResult <ProfileCellData>, ProductionDataProfileDataRequest>(productionDataProfileDataRequest, "/productiondata/profile", customHeaders); return(trexResult != null && trexResult.HasData() ? ConvertTRexProductioDataProfileResult(trexResult, request.LiftBuildSettings) : null); }