Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }