Пример #1
0
        public void ValidateUpdatingCmvDetailsColorsTest()
        {
            CompactionProjectSettingsColors colors = new CompactionProjectSettingsColors(useDefaultCMVDetailsColors: false, cmvDetailsColors: new List <uint>
            {
                0x01579B, // 87963
                0x2473AE, // 2388910
                0x488FC1, // 4755393
                0x6BACD5, // 7056597
                0x8FC8E8, // 9423080
                0xB3E5FC, // 11789820
                0xDBECC8, // 14413000
                0x99CB65, // 10079077
                0x649E38, // 6594104
                0x2D681D, // 2975773
                0xFFCCD2, // 16764114
                0xF6A3A8, // 16163752
                0xEE7A7E, // 15628926
                0xE55154, // 15028564
                0xDD282A, // 14493738
                0xD50000  // 13959168
            });

            Assert.ThrowsException <ServiceException>(() => colors.Validate(null));

            colors.UpdateCmvDetailsColorsIfRequired();
            colors.Validate(null);
        }
Пример #2
0
        public void Initialize(ILogger log, IConfigurationStore configurationStore, IFileImportProxy fileImportProxy, ICompactionSettingsManager settingsManager, Guid?projectUid, long projectId, CompactionProjectSettings projectSettings, CompactionProjectSettingsColors projectSettingsColors, IHeaderDictionary headers, FilterResult filter, DesignDescriptor designDescriptor)
        {
            filter?.Validate(); // Should be moved to FilterResult.CreateFilterObsolete().

            Log = log;
            ConfigurationStore = configurationStore;
            FileImportProxy    = fileImportProxy;
            SettingsManager    = settingsManager;

            ProjectUid            = projectUid;
            ProjectId             = projectId;
            Headers               = headers;
            ProjectSettings       = projectSettings;
            ProjectSettingsColors = projectSettingsColors;
            Filter           = filter;
            DesignDescriptor = designDescriptor;
        }
Пример #3
0
        /// <summary>
        /// Deserializes the project settings colors
        /// </summary>
        /// <param name="projectSettings">JSON representation of the project settings</param>
        /// <returns>The project settings colors instance</returns>
        private CompactionProjectSettingsColors GetProjectSettingsColors(string projectSettings)
        {
            CompactionProjectSettingsColors ps = null;

            if (!string.IsNullOrEmpty(projectSettings))
            {
                try
                {
                    ps = JsonConvert.DeserializeObject <CompactionProjectSettingsColors>(projectSettings);
                }
                catch (Exception ex)
                {
                    throw new ServiceException(HttpStatusCode.BadRequest,
                                               new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError,
                                                                           ex.Message));
                }
            }
            return(ps);
        }
Пример #4
0
        /// <summary>
        /// Gets the requested tile from Raptor
        /// </summary>
        /// <param name="projectSettings">Project settings to use for Raptor</param>
        /// <param name="projectSettingsColors"></param>
        /// <param name="filter">Filter to use for Raptor</param>
        /// <param name="projectId">Legacy project ID</param>
        /// <param name="projectUid">Unique project identifier</param>
        /// <param name="mode">Display mode; type of data requested</param>
        /// <param name="width">Width of the tile</param>
        /// <param name="height">Height of the tile in pixels</param>
        /// <param name="bbox">Bounding box in radians</param>
        /// <param name="cutFillDesign">Design descriptor for cut-fill</param>
        /// <param name="baseFilter">Base filter for  summary volumes</param>
        /// <param name="topFilter">Top filter for  summary volumes</param>
        /// <param name="volumeDesign">Design descriptor for summary volumes design</param>
        /// <param name="volumeCalcType">Type of summary volumes calculation</param>
        /// <param name="customHeaders">Custom request headers</param>
        /// <returns>Tile result</returns>
        public async Task <TileResult> GetProductionDataTile(CompactionProjectSettings projectSettings, CompactionProjectSettingsColors projectSettingsColors, FilterResult filter, long projectId, Guid projectUid, DisplayMode mode, ushort width, ushort height, BoundingBox2DLatLon bbox, DesignDescriptor cutFillDesign, FilterResult baseFilter, FilterResult topFilter, DesignDescriptor volumeDesign, VolumeCalcType?volumeCalcType, IHeaderDictionary customHeaders, string userId, bool explicitFilters = false)
        {
            var getTile = true;
            ElevationStatisticsResult elevationExtents = null;
            TileRequest tileRequest = null;

            try
            {
                elevationExtents = await GetElevationExtents(projectSettings, filter, projectId, projectUid, mode, customHeaders, userId);
            }
            catch (ServiceException se)
            {
                getTile = mode != DisplayMode.Height;
                if (log.IsTraceEnabled())
                {
                    log.LogTrace(
                        $"Failed to get elevation extents for height request with error: {se.GetResult.Code}:{se.GetResult.Message} a transparent tile will be generated");
                }
            }

            if (getTile)
            {
                tileRequest = requestFactory.Create <TileRequestHelper>(r => r
                                                                        .ProjectUid(projectUid)
                                                                        .ProjectId(projectId)
                                                                        .Headers(customHeaders)
                                                                        .ProjectSettings(projectSettings)
                                                                        .ProjectSettingsColors(projectSettingsColors)
                                                                        .Filter(filter)
                                                                        .DesignDescriptor(cutFillDesign))
                              .SetVolumeCalcType(volumeCalcType)
                              .SetVolumeDesign(volumeDesign)
                              .SetBaseFilter(baseFilter)
                              .SetTopFilter(topFilter)
                              .CreateTileRequest(mode, width, height, bbox, elevationExtents, explicitFilters);

                //TileRequest is both v1 and v2 model so cannot change its validation directly.
                //However for v2 we want to return a transparent empty tile for cut-fill if no design specified.
                //So catch the validation exception for this case.
                try
                {
                    tileRequest.Validate();
                }
                catch (ServiceException se)
                {
                    if (tileRequest.Mode == DisplayMode.CutFill &&
                        se.Code == HttpStatusCode.BadRequest &&
                        se.GetResult.Code == ContractExecutionStatesEnum.ValidationError)
                    {
                        if (
                            se is MissingDesignDescriptorException ||
                            se is TwoFiltersRequiredException ||
                            se is SingleFilterRequiredException)
                        {
                            getTile = false;
                        }
                    }
                    //Rethrow any other exception
                    if (getTile)
                    {
                        throw;
                    }
                }
            }

            TileResult tileResult = null;

            if (getTile)
            {
                try
                {
                    tileResult = await RequestExecutorContainerFactory
                                 .Build <CompactionTileExecutor>(logger,
#if RAPTOR
                                                                 raptorClient,
#endif
                                                                 configStore : ConfigStore, trexCompactionDataProxy : TRexCompactionDataProxy, customHeaders : customHeaders,
                                                                 userId : userId, fileImportProxy : FileImportProxy)
                                 .ProcessAsync(tileRequest) as TileResult;
                }
                catch (Exception ex)
                {
                    log.LogWarning($"Exception: {ex.Message} {ex.StackTrace}");
                }
            }

            return(tileResult?.TileData != null
        ? tileResult
        : TileResult.EmptyTile(WebMercatorProjection.TILE_SIZE, WebMercatorProjection.TILE_SIZE));
        }
Пример #5
0
 /// <summary>
 /// Sets the compaction settings colors used for the project.
 /// </summary>
 /// <param name="projectSettingsColors"></param>
 public ProductionDataRequestFactory ProjectSettingsColors(CompactionProjectSettingsColors projectSettingsColors)
 {
     this.projectSettingsColors = projectSettingsColors;
     return(this);
 }
Пример #6
0
        public List <ColorPalette> CompactionPalette(DisplayMode mode, ElevationStatisticsResult elevExtents,
                                                     CompactionProjectSettings projectSettings, CompactionProjectSettingsColors projectSettingsColors)
        {
            var palette = new List <ColorPalette>();

            bool useDefaultValue;
            uint underColor;
            uint onColor;
            uint overColor;

            switch (mode)
            {
            case DisplayMode.Design3D:
            case DisplayMode.Height:
            {
                if (elevExtents == null)
                {
                    palette = null;
                }
                else
                {
                    //Compaction elevation palette has 31 colors, original Raptor one had 30 colors
                    var colors = projectSettingsColors.useDefaultElevationColors.HasValue &&
                                 projectSettingsColors.useDefaultElevationColors.Value
                ? CompactionProjectSettingsColors.DefaultSettings.elevationColors
                : projectSettingsColors.elevationColors;
                    var step = (elevExtents.MaxElevation - elevExtents.MinElevation) / (colors.Count - 1);

                    for (var i = 0; i < colors.Count; i++)
                    {
                        palette.Add(new ColorPalette(colors[i], elevExtents.MinElevation + i * step));
                    }
                }

                break;
            }

            case DisplayMode.CCV:
            {
                var cmvDetailsSettings = CompactionCmvSettingsEx(projectSettings);
                var cmvColors          = projectSettingsColors.useDefaultCMVDetailsColors.HasValue &&
                                         projectSettingsColors.useDefaultCMVDetailsColors.Value
              ? CompactionProjectSettingsColors.DefaultSettings.cmvDetailsColors
              : projectSettingsColors.cmvDetailsColors;

                for (var i = 0; i < cmvDetailsSettings.CustomCMVDetailTargets.Length; i++)
                {
                    //The last color and value are for above...
                    palette.Add(new ColorPalette(cmvColors[i], cmvDetailsSettings.CustomCMVDetailTargets[i]));
                }
                break;
            }

            case DisplayMode.PassCount:
            {
                var passCountSettings     = CompactionPassCountSettings(projectSettings);
                var passCountDetailColors = projectSettingsColors.useDefaultPassCountDetailsColors.HasValue &&
                                            projectSettingsColors.useDefaultPassCountDetailsColors.Value
              ? CompactionProjectSettingsColors.DefaultSettings.passCountDetailsColors
              : projectSettingsColors.passCountDetailsColors;

                for (var i = 0; i < passCountSettings.passCounts.Length; i++)
                {
                    //The colors and values for 1-8
                    palette.Add(new ColorPalette(passCountDetailColors[i], passCountSettings.passCounts[i]));
                }
                //The 9th color and value (for above)
                palette.Add(new ColorPalette(passCountDetailColors[8], passCountSettings.passCounts[7] + 1));
                break;
            }

            case DisplayMode.PassCountSummary:
            {
                //Values don't matter here as no machine override for compaction
                useDefaultValue = projectSettingsColors.useDefaultPassCountSummaryColors.HasValue &&
                                  projectSettingsColors.useDefaultPassCountSummaryColors.Value;

                underColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.passCountUnderTargetColor.Value
              : projectSettingsColors.passCountUnderTargetColor ??
                             CompactionProjectSettingsColors.DefaultSettings.passCountUnderTargetColor.Value;

                onColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.passCountOnTargetColor.Value
              : projectSettingsColors.passCountOnTargetColor ??
                          CompactionProjectSettingsColors.DefaultSettings.passCountOnTargetColor.Value;

                overColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.passCountOverTargetColor.Value
              : projectSettingsColors.passCountOverTargetColor ??
                            CompactionProjectSettingsColors.DefaultSettings.passCountOverTargetColor.Value;

                palette.Add(new ColorPalette(underColor, ColorSettings.Default.passCountMinimum.value));
                palette.Add(new ColorPalette(onColor, ColorSettings.Default.passCountTarget.value));
                palette.Add(new ColorPalette(overColor, ColorSettings.Default.passCountMaximum.value));
                break;
            }

            case DisplayMode.CutFill:
            {
                //Note: cut-fill also requires a design for tile requests
                var cutFillTolerances = CompactionCutFillSettings(projectSettings);
                var cutFillColors     = projectSettingsColors.useDefaultCutFillColors.HasValue &&
                                        projectSettingsColors.useDefaultCutFillColors.Value
              ? CompactionProjectSettingsColors.DefaultSettings.cutFillColors
              : projectSettingsColors.cutFillColors;

                for (var i = 0; i < cutFillColors.Count; i++)
                {
                    palette.Add(new ColorPalette(cutFillColors[i], cutFillTolerances[i]));
                }
                break;
            }

            case DisplayMode.TemperatureSummary:
            {
                useDefaultValue = projectSettingsColors.useDefaultTemperatureSummaryColors.HasValue &&
                                  projectSettingsColors.useDefaultTemperatureSummaryColors.Value;

                underColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.temperatureUnderTargetColor.Value
              : projectSettingsColors.temperatureUnderTargetColor ??
                             CompactionProjectSettingsColors.DefaultSettings.temperatureUnderTargetColor.Value;

                onColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.temperatureOnTargetColor.Value
              : projectSettingsColors.temperatureOnTargetColor ??
                          CompactionProjectSettingsColors.DefaultSettings.temperatureOnTargetColor.Value;

                overColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.temperatureOverTargetColor.Value
              : projectSettingsColors.temperatureOverTargetColor ??
                            CompactionProjectSettingsColors.DefaultSettings.temperatureOverTargetColor.Value;

                palette.Add(new ColorPalette(underColor, 0));
                palette.Add(new ColorPalette(onColor, 1));
                palette.Add(new ColorPalette(overColor, 2));
                break;
            }

            case DisplayMode.CCVPercentSummary:
            {
                useDefaultValue = projectSettingsColors.useDefaultCMVSummaryColors.HasValue &&
                                  projectSettingsColors.useDefaultCMVSummaryColors.Value;

                underColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.cmvUnderTargetColor.Value
              : projectSettingsColors.cmvUnderTargetColor ??
                             CompactionProjectSettingsColors.DefaultSettings.cmvUnderTargetColor.Value;

                onColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.cmvOnTargetColor.Value
              : projectSettingsColors.cmvOnTargetColor ??
                          CompactionProjectSettingsColors.DefaultSettings.cmvOnTargetColor.Value;

                overColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.cmvOverTargetColor.Value
              : projectSettingsColors.cmvOverTargetColor ??
                            CompactionProjectSettingsColors.DefaultSettings.cmvOverTargetColor.Value;

                palette.Add(new ColorPalette(onColor, 0));
                palette.Add(new ColorPalette(ColorSettings.Default.ccvSummaryWorkInProgressLayerColor, 1));
                palette.Add(new ColorPalette(underColor, 2));
                palette.Add(new ColorPalette(overColor, 3));
                palette.Add(new ColorPalette(ColorSettings.Default.ccvSummaryTooThickLayerColor, 4));
                palette.Add(new ColorPalette(ColorSettings.Default.ccvSummaryApprovedLayerColor, 5));
                break;
            }

            case DisplayMode.MDPPercentSummary:
            {
                useDefaultValue = projectSettingsColors.useDefaultMDPSummaryColors.HasValue &&
                                  projectSettingsColors.useDefaultMDPSummaryColors.Value;

                underColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.mdpUnderTargetColor.Value
              : projectSettingsColors.mdpUnderTargetColor ??
                             CompactionProjectSettingsColors.DefaultSettings.mdpUnderTargetColor.Value;

                onColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.mdpOnTargetColor.Value
              : projectSettingsColors.mdpOnTargetColor ??
                          CompactionProjectSettingsColors.DefaultSettings.mdpOnTargetColor.Value;

                overColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.mdpOverTargetColor.Value
              : projectSettingsColors.mdpOverTargetColor ??
                            CompactionProjectSettingsColors.DefaultSettings.mdpOverTargetColor.Value;

                palette.Add(new ColorPalette(onColor, 0));
                palette.Add(new ColorPalette(ColorSettings.Default.mdpSummaryWorkInProgressLayerColor, 1));
                palette.Add(new ColorPalette(underColor, 2));
                palette.Add(new ColorPalette(overColor, 3));
                palette.Add(new ColorPalette(ColorSettings.Default.mdpSummaryTooThickLayerColor, 4));
                palette.Add(new ColorPalette(ColorSettings.Default.mdpSummaryApprovedLayerColor, 5));
                break;
            }

            case DisplayMode.TargetSpeedSummary:
            {
                useDefaultValue = projectSettingsColors.useDefaultSpeedSummaryColors.HasValue &&
                                  projectSettingsColors.useDefaultSpeedSummaryColors.Value;

                underColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.speedUnderTargetColor.Value
              : projectSettingsColors.speedUnderTargetColor ??
                             CompactionProjectSettingsColors.DefaultSettings.speedUnderTargetColor.Value;

                onColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.speedOnTargetColor.Value
              : projectSettingsColors.speedOnTargetColor ??
                          CompactionProjectSettingsColors.DefaultSettings.speedOnTargetColor.Value;

                overColor = useDefaultValue
              ? CompactionProjectSettingsColors.DefaultSettings.speedOverTargetColor.Value
              : projectSettingsColors.speedOverTargetColor ??
                            CompactionProjectSettingsColors.DefaultSettings.speedOverTargetColor.Value;

                palette.Add(new ColorPalette(underColor, 0));
                palette.Add(new ColorPalette(onColor, 1));
                palette.Add(new ColorPalette(overColor, 2));
                break;
            }

            case DisplayMode.CMVChange:
            {
                var cmvPercentChangeSettings = CompactionCmvPercentChangeSettings(projectSettings);
                var cmvPercentChangeColors   = projectSettingsColors.useDefaultCMVPercentColors.HasValue &&
                                               projectSettingsColors.useDefaultCMVPercentColors.Value
              ? CompactionProjectSettingsColors.DefaultSettings.cmvPercentColors
              : projectSettingsColors.cmvPercentColors;

                //The first color and value are for below...
                palette.Add(new ColorPalette(cmvPercentChangeColors[0], double.MinValue));

                for (var i = 0; i < cmvPercentChangeSettings.Length; i++)
                {
                    //The last color and value are for above...
                    palette.Add(new ColorPalette(cmvPercentChangeColors[i + 1], cmvPercentChangeSettings[i]));
                }

                break;
            }

            case DisplayMode.TemperatureDetail:
            {
                var temperatureDetailsSettings = CompactionTemperatureDetailsSettings(projectSettings);
                var temperatureColors          = projectSettingsColors.useDefaultTemperatureDetailsColors.HasValue &&
                                                 projectSettingsColors.useDefaultTemperatureDetailsColors.Value
              ? CompactionProjectSettingsColors.DefaultSettings.temperatureDetailsColors
              : projectSettingsColors.temperatureDetailsColors;

                for (var i = 0; i < temperatureDetailsSettings.Length; i++)
                {
                    palette.Add(new ColorPalette(temperatureColors[i], temperatureDetailsSettings[i]));
                }
                break;
            }
            }
            return(palette);
        }