Example #1
0
        public void Test_CellDatumRequestArgument_ClusterCompute_CreationWithArgs()
        {
            Guid        siteModelID     = Guid.NewGuid();
            DisplayMode mode            = DisplayMode.MachineSpeed;
            XYZ         neeCoords       = new XYZ(12345.6789, 98765.4321);
            int         otgCellX        = 16234;
            int         otgCellY        = 55236;
            IFilterSet  filters         = new FilterSet();
            var         referenceDesign = new DesignOffset(Guid.NewGuid(), 12.34);
            var         overrides       = new OverrideParameters {
                OverrideMachineMDP = true, OverridingMachineMDP = 321
            };
            var arg = new CellDatumRequestArgument_ClusterCompute(siteModelID, mode, neeCoords, otgCellX, otgCellY, filters, referenceDesign, overrides, null);

            Assert.NotNull(arg);
            Assert.Equal(siteModelID, arg.ProjectID);
            Assert.Equal(mode, arg.Mode);
            Assert.Equal(neeCoords, arg.NEECoords);
            Assert.Equal(otgCellX, arg.OTGCellX);
            Assert.Equal(otgCellY, arg.OTGCellY);
            Assert.Equal(filters, arg.Filters);
            Assert.Equal(referenceDesign.DesignID, arg.ReferenceDesign.DesignID);
            Assert.Equal(referenceDesign.Offset, arg.ReferenceDesign.Offset);
            Assert.Equal(overrides.OverrideMachineMDP, arg.Overrides.OverrideMachineMDP);
            Assert.Equal(overrides.OverridingMachineMDP, arg.Overrides.OverridingMachineMDP);
        }
Example #2
0
 /// <summary>
 /// Constructor...
 /// </summary>
 public FilteredValueAssignmentContext()
 {
     FilteredValue.Clear();
     PreviousFilteredValue.Clear();
     CellProfile   = null;
     LowestPassIdx = Common.Consts.NullLowestPassIdx;
     Overrides     = new OverrideParameters();
     LiftParams    = new LiftParameters();
 }
Example #3
0
        public async Task <JsonResult> GetMDPSummary([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new MDPStatisticsOperation();
                    var result    = await operation.ExecuteAsync(
                        new MDPStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet()
                        {
                            Filters = new[] { new CombinedFilter() }
                        },
                        Overrides = overrides
                    }
                        );

                    if (result != null)
                    {
                        string resultString = $"<b>MDP Summary Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";
                        resultString += $"<b>Above MDP Percentage:</b> {result.AboveTargetPercent}<br/>";
                        resultString += $"<b>Within MDP Percentage Range:</b> {result.WithinTargetPercent}<br/>";
                        resultString += $"<b>Below MDP Percentage:</b> {result.BelowTargetPercent}<br/>";
                        resultString += $"<b>Total Area Covered in Sq Meters:</b> {result.TotalAreaCoveredSqMeters}<br/>";

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #4
0
        public async Task <JsonResult> GetTile(
            [FromRoute] string siteModelID,
            [FromQuery] double minX,
            [FromQuery] double minY,
            [FromQuery] double maxX,
            [FromQuery] double maxY,
            [FromQuery] int mode,
            [FromQuery] ushort pixelsX,
            [FromQuery] ushort pixelsY,
            [FromQuery] Guid?cutFillDesignUid,
            [FromQuery] double?offset,
            [FromBody] OverrideParameters overrides)
        {
            var request = new TileRenderRequest();

            var siteModelUid = Guid.Parse(siteModelID);
            var siteModel    = DIContext.Obtain <ISiteModels>().GetSiteModel(siteModelUid);

            if (siteModel == null)
            {
                return(new JsonResult(new TileResult(null)));
            }

            var displayMode = (DisplayMode)mode;

            var filters = displayMode == DisplayMode.CutFill || displayMode == DisplayMode.VolumeCoverage
        ? new FilterSet(new CombinedFilter(), new CombinedFilter())
        : new FilterSet(new CombinedFilter());

            if (displayMode == DisplayMode.CutFill || displayMode == DisplayMode.VolumeCoverage)
            {
                filters.Filters[0].AttributeFilter.ElevationType          = Common.Types.ElevationType.First;
                filters.Filters[0].AttributeFilter.HasElevationTypeFilter = true;
            }

            var response = await request.ExecuteAsync(new TileRenderRequestArgument(
                                                          siteModelUid,
                                                          displayMode,
                                                          ConvertColorPalettes(displayMode, siteModel, overrides),
                                                          new BoundingWorldExtent3D(minX, minY, maxX, maxY),
                                                          true,
                                                          pixelsX,
                                                          pixelsY,
                                                          filters,
                                                          new DesignOffset(cutFillDesignUid ?? Guid.Empty, offset ?? 0.0),
                                                          displayMode == DisplayMode.CutFill ? VolumeComputationType.BetweenFilterAndDesign : VolumeComputationType.None

                                                          ));

            return(new JsonResult(new TileResult(response?.TileBitmapData)));
        }
Example #5
0
        public void Test_OverrideParameters_Custom()
        {
            var overrides = new OverrideParameters
            {
                OverrideMachineCCV                 = true,
                OverridingMachineCCV               = 72,
                CMVRange                           = new CMVRangePercentageRecord(91, 108),
                OverrideMachineMDP                 = true,
                OverridingMachineMDP               = 24,
                MDPRange                           = new MDPRangePercentageRecord(87, 123),
                OverridingTargetPassCountRange     = new PassCountRangeRecord(3, 7),
                OverrideTargetPassCount            = true,
                OverridingTemperatureWarningLevels = new TemperatureWarningLevelsRecord(250, 692),
                OverrideTemperatureWarningLevels   = true,
                TargetMachineSpeed                 = new MachineSpeedExtendedRecord(12, 163),
            };

            SimpleBinarizableInstanceTester.TestClass(overrides, "Custom override parameters not same after round trip serialisation");
        }
Example #6
0
        public void Test_CellDatumRequestArgument_ApplicationService_CreationWithArgs()
        {
            Guid        siteModelID     = Guid.NewGuid();
            DisplayMode mode            = DisplayMode.MachineSpeed;
            bool        coordsAreGrid   = false;
            XYZ         latLngPoint     = new XYZ(12345.6789, 98765.4321);
            IFilterSet  filters         = new FilterSet();
            var         referenceDesign = new DesignOffset(Guid.NewGuid(), 12.34);
            var         overrides       = new OverrideParameters {
                OverrideMachineMDP = true, OverridingMachineMDP = 321
            };
            var arg = new CellDatumRequestArgument_ApplicationService(siteModelID, mode, coordsAreGrid, latLngPoint, filters, referenceDesign, overrides);

            Assert.NotNull(arg);
            Assert.Equal(siteModelID, arg.ProjectID);
            Assert.Equal(mode, arg.Mode);
            Assert.Equal(coordsAreGrid, arg.CoordsAreGrid);
            Assert.Equal(latLngPoint, arg.Point);
            Assert.Equal(filters, arg.Filters);
            Assert.Equal(referenceDesign.DesignID, arg.ReferenceDesign.DesignID);
            Assert.Equal(referenceDesign.Offset, arg.ReferenceDesign.Offset);
            Assert.Equal(overrides.OverrideMachineMDP, arg.Overrides.OverrideMachineMDP);
            Assert.Equal(overrides.OverridingMachineMDP, arg.Overrides.OverridingMachineMDP);
        }
Example #7
0
        public override void InternalFromBinary(IBinaryRawReader reader)
        {
            base.InternalFromBinary(reader);

            var version = VersionSerializationHelper.CheckVersionByte(reader, VERSION_NUMBER);

            if (version == 1)
            {
                TRexNodeID = reader.ReadGuid() ?? Guid.Empty;
                ProjectID  = reader.ReadGuid() ?? Guid.Empty;

                if (reader.ReadBoolean())
                {
                    ReferenceDesign = new DesignOffset();
                    ReferenceDesign.FromBinary(reader);
                }

                if (reader.ReadBoolean())
                {
                    Filters = DI.DIContext.ObtainRequired <IFilterSet>();
                    Filters.FromBinary(reader);
                }

                if (reader.ReadBoolean())
                {
                    Overrides = new OverrideParameters();
                    Overrides.FromBinary(reader);
                }

                if (reader.ReadBoolean())
                {
                    LiftParams = new LiftParameters();
                    LiftParams.FromBinary(reader);
                }
            }
        }
Example #8
0
        [InlineData(DisplayMode.CutFill, 3.5)]//1.5 offset from 5
        public async Task Test_CellDatumRequest_ApplicationService_Execute_SingleCellSiteModelLastPass(DisplayMode mode, double expectedValue)
        {
            AddApplicationGridRouting();
            AddClusterComputeGridRouting();
            AddDesignProfilerGridRouting();

            var baseTime        = DateTime.UtcNow;
            var siteModel       = BuildModelForSingleCellDatum(baseTime);
            var designUid       = DITAGFileAndSubGridRequestsWithIgniteFixture.ConstructSingleFlatTriangleDesignAboutOrigin(ref siteModel, 1.0f);
            var referenceDesign = new DesignOffset(designUid, 1.5);
            //Just do one override to test it's hooked up. The rest are tested in the cluster compute tests
            var overrides = new OverrideParameters
            {
                OverrideMachineCCV   = true,
                OverridingMachineCCV = 440
            };
            var request  = new CellDatumRequest_ApplicationService();
            var response = await request.ExecuteAsync(CreateCellDatumRequestArgument_ApplicationService(siteModel, referenceDesign, mode, overrides));

            response.Should().NotBeNull();
            Assert.Equal(CellDatumReturnCode.ValueFound, response.ReturnCode);
            Assert.Equal(expectedValue, response.Value);
            Assert.Equal(baseTime.AddMinutes(10), response.TimeStampUTC);
        }
Example #9
0
        public void Test_OverrideParameters_Defaults()
        {
            var overrides = new OverrideParameters();

            SimpleBinarizableInstanceTester.TestClass(overrides, "Default override parameters not same after round trip serialisation");
        }
Example #10
0
        /// <summary>
        /// Get the profile value of this cell for the mode.
        /// </summary>
        private (int index, double value, double value2) ProfileValue(int mode, ProfileCell cell, OverrideParameters overrides)
        {
            var NULL_VALUE = (NO_INDEX, double.NaN, double.NaN);

            double value;
            int    index;

            switch ((DisplayMode)mode)
            {
            case DisplayMode.CCV:
                if (cell.CellTargetCCV == 0 || cell.CellTargetCCV == CellPassConsts.NullCCV ||
                    cell.CellCCV == CellPassConsts.NullCCV)
                {
                    return(NULL_VALUE);
                }
                return(NO_INDEX, cell.CellCCV / 10.0, 0);

            case DisplayMode.CCVPercent:
            case DisplayMode.CCVPercentSummary:
                if (cell.CellTargetCCV == 0 || cell.CellTargetCCV == CellPassConsts.NullCCV ||
                    cell.CellCCV == CellPassConsts.NullCCV)
                {
                    return(NULL_VALUE);
                }
                value = (double)cell.CellCCV / (double)cell.CellTargetCCV * 100;
                index = value <overrides.CMVRange.Min?BELOW_TARGET : value> overrides.CMVRange.Max ? ABOVE_TARGET : ON_TARGET;
                return(index, value, 0);

            case DisplayMode.CMVChange:
            case DisplayMode.CCVPercentChange:
                if (cell.CellCCV == CellPassConsts.NullCCV)
                {
                    return(NULL_VALUE);
                }
                value = cell.CellPreviousMeasuredCCV == CellPassConsts.NullCCV ? 100 :
                        (double)(cell.CellCCV - cell.CellPreviousMeasuredCCV) / (double)cell.CellPreviousMeasuredCCV * 100;
                return(NO_INDEX, value, 0);

            case DisplayMode.PassCount:
                if (cell.TopLayerPassCount == CellPassConsts.NullPassCountValue)
                {
                    return(NULL_VALUE);
                }
                return(NO_INDEX, cell.TopLayerPassCount, 0);

            case DisplayMode.PassCountSummary:
                if (cell.TopLayerPassCount == CellPassConsts.NullPassCountValue || cell.CellLastElev == CellPassConsts.NullHeight)
                {
                    return(NULL_VALUE);
                }
                index = cell.TopLayerPassCount <cell.TopLayerPassCountTargetRangeMin?BELOW_TARGET :
                                                cell.TopLayerPassCount> cell.TopLayerPassCountTargetRangeMax ? ABOVE_TARGET : ON_TARGET;
                return(index, 0, 0);

            case DisplayMode.CutFill:
                if (cell.CellLastCompositeElev == CellPassConsts.NullHeight || cell.DesignElev == CellPassConsts.NullHeight)
                {
                    return(NULL_VALUE);
                }
                value = cell.CellLastCompositeElev - cell.DesignElev;
                return(NO_INDEX, value, 0);

            case DisplayMode.TemperatureSummary:
                if (cell.CellMaterialTemperature == CellPassConsts.NullMaterialTemperatureValue || cell.CellMaterialTemperatureElev == CellPassConsts.NullHeight)
                {
                    return(NULL_VALUE);
                }
                index = cell.CellMaterialTemperature <cell.CellMaterialTemperatureWarnMin?BELOW_TARGET :
                                                      cell.CellMaterialTemperature> cell.CellMaterialTemperatureWarnMax ? ABOVE_TARGET : ON_TARGET;
                return(index, 0, 0);

            case DisplayMode.TemperatureDetail:
                if (cell.CellMaterialTemperature == CellPassConsts.NullMaterialTemperatureValue)
                {
                    return(NULL_VALUE);
                }
                return(NO_INDEX, cell.CellMaterialTemperature / 10.0, 0);

            case DisplayMode.MDPPercentSummary:
                if (cell.CellTargetMDP == 0 || cell.CellTargetMDP == CellPassConsts.NullMDP ||
                    cell.CellMDP == CellPassConsts.NullMDP)
                {
                    return(NULL_VALUE);
                }
                value = (double)cell.CellMDP / (double)cell.CellTargetMDP * 100;
                index = value <overrides.MDPRange.Min?BELOW_TARGET : value> overrides.MDPRange.Max ? ABOVE_TARGET : ON_TARGET;
                return(index, value, 0);

            case DisplayMode.TargetSpeedSummary:
                if (cell.CellMaxSpeed == CellPassConsts.NullMachineSpeed || cell.CellLastElev == CellPassConsts.NullHeight)
                {
                    return(NULL_VALUE);
                }
                index = cell.CellMaxSpeed > overrides.TargetMachineSpeed.Max ? ABOVE_TARGET :
                        //cell.CellMinSpeed < overrides.TargetMachineSpeed.Min &&
                        cell.CellMaxSpeed < overrides.TargetMachineSpeed.Min ? BELOW_TARGET : ON_TARGET;
                return(index, cell.CellMinSpeed / KM_HR_TO_CM_SEC, cell.CellMaxSpeed / KM_HR_TO_CM_SEC);

            case DisplayMode.Height:
            default:
                if (cell.CellLastElev == CellPassConsts.NullHeight)
                {
                    return(NULL_VALUE);
                }
                return(NO_INDEX, cell.CellLastElev, 0);
            }
        }
Example #11
0
        public async Task <JsonResult> ComputeProductionDataProfile(string siteModelID,
                                                                    [FromQuery] double startX,
                                                                    [FromQuery] double startY,
                                                                    [FromQuery] double endX,
                                                                    [FromQuery] double endY,
                                                                    [FromQuery] int displayMode,
                                                                    [FromQuery] Guid?cutFillDesignUid,
                                                                    [FromQuery] double?offset,
                                                                    [FromBody] OverrideParameters overrides)
        {
            var siteModelUid = Guid.Parse(siteModelID);

            /*
             * //Use default values for now
             * var overrides = new OverrideParameters
             * {
             * CMVRange = new CMVRangePercentageRecord(80, 130),
             * MDPRange = new MDPRangePercentageRecord(80, 130),
             * TargetMachineSpeed = new MachineSpeedExtendedRecord((ushort) (5 * KM_HR_TO_CM_SEC), (ushort) (10 * KM_HR_TO_CM_SEC))
             * };
             */

            var arg = new ProfileRequestArgument_ApplicationService
            {
                ProjectID                = siteModelUid,
                ProfileTypeRequired      = GridDataType.Height,
                ProfileStyle             = ProfileStyle.CellPasses,
                PositionsAreGrid         = true,
                Filters                  = new FilterSet(new[] { new CombinedFilter() }),
                ReferenceDesign          = new DesignOffset(cutFillDesignUid ?? Guid.Empty, offset ?? 0.0),
                StartPoint               = new WGS84Point(lon: startX, lat: startY),
                EndPoint                 = new WGS84Point(lon: endX, lat: endY),
                ReturnAllPassesAndLayers = false,
                Overrides                = overrides
            };

            // Compute a profile from the bottom left of the screen extents to the top right
            var request  = new ProfileRequest_ApplicationService_ProfileCell();
            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"));
            }

            var results = (from x in response.ProfileCells
                           let v = ProfileValue(displayMode, x, overrides)
                                   select new
            {
                station = x.Station,
                elevation = ProfileElevation(displayMode, x),
                index = v.index,
                value = v.value,
                value2 = v.value2
            });

            return(new JsonResult(results));
        }
Example #12
0
        private PaletteBase ConvertColorPalettes(DisplayMode mode, ISiteModel siteModel, OverrideParameters overrides)
        {
            const double PERCENTAGE_RANGE_MIN        = 0.0;
            const double PERCENTAGE_RANGE_MAX        = 100.0;
            const ushort PASS_COUNT_TARGET_RANGE_MIN = 1;
            const ushort PASS_COUNT_TARGET_RANGE_MAX = ushort.MaxValue;
            const ushort TEMPERATURE_LEVELS_MIN      = 0;
            const ushort TEMPERATURE_LEVELS_MAX      = 100;

            PaletteBase convertedPalette;

            switch (mode)
            {
            case DisplayMode.CCA:
                convertedPalette = new CCAPalette();
                break;

            case DisplayMode.CCASummary:
                convertedPalette = new CCASummaryPalette();
                break;

            case DisplayMode.CCV:
                convertedPalette = new CMVPalette();

                var cmvPalette = ((CMVPalette)convertedPalette);

                cmvPalette.CMVPercentageRange.Min = overrides?.CMVRange.Min ?? PERCENTAGE_RANGE_MIN;
                cmvPalette.CMVPercentageRange.Max = overrides?.CMVRange.Max ?? PERCENTAGE_RANGE_MAX;

                cmvPalette.UseMachineTargetCMV = !overrides?.OverrideMachineCCV ?? true;
                cmvPalette.AbsoluteTargetCMV   = overrides?.OverridingMachineCCV ?? 0;

                cmvPalette.TargetCCVColour           = Color.Green;
                cmvPalette.DefaultDecoupledCMVColour = Color.Black;
                break;

            case DisplayMode.CCVPercent:
            case DisplayMode.CCVPercentSummary:
            case DisplayMode.CCVPercentChange:
                convertedPalette = new CCVPercentPalette();

                var cmvSummaryPalette = ((CCVPercentPalette)convertedPalette);

                cmvSummaryPalette.CMVPercentageRange.Min = overrides?.CMVRange.Min ?? PERCENTAGE_RANGE_MIN;
                cmvSummaryPalette.CMVPercentageRange.Max = overrides?.CMVRange.Max ?? PERCENTAGE_RANGE_MAX;

                cmvSummaryPalette.UseMachineTargetCMV = !overrides?.OverrideMachineCCV ?? true;
                cmvSummaryPalette.AbsoluteTargetCMV   = overrides?.OverridingMachineCCV ?? 0;
                break;

            case DisplayMode.CMVChange:
                convertedPalette = new CMVChangePalette();

                var cmvPercentChangePalette = ((CMVChangePalette)convertedPalette);

                cmvPercentChangePalette.CMVPercentageRange.Min = overrides?.CMVRange.Min ?? PERCENTAGE_RANGE_MIN;
                cmvPercentChangePalette.CMVPercentageRange.Max = overrides?.CMVRange.Max ?? PERCENTAGE_RANGE_MAX;

                cmvPercentChangePalette.UseAbsoluteValues = false;

                cmvPercentChangePalette.UseMachineTargetCMV = !overrides?.OverrideMachineCCV ?? true;
                cmvPercentChangePalette.AbsoluteTargetCMV   = overrides?.OverridingMachineCCV ?? 0;

                cmvPercentChangePalette.TargetCCVColour           = Color.Green;
                cmvPercentChangePalette.DefaultDecoupledCMVColour = Color.Black;
                break;

            case DisplayMode.CutFill:
                convertedPalette = new CutFillPalette();
                break;

            case DisplayMode.Height:
                var extent = siteModel.GetAdjustedDataModelSpatialExtents(new Guid[0]);

                convertedPalette = new HeightPalette(extent.MinZ, extent.MaxZ);
                break;

            case DisplayMode.MDP:
                convertedPalette = new MDPPalette();

                var mdpPalette = ((MDPPalette)convertedPalette);

                mdpPalette.MDPPercentageRange.Min = overrides?.MDPRange.Min ?? PERCENTAGE_RANGE_MIN;
                mdpPalette.MDPPercentageRange.Max = overrides?.MDPRange.Max ?? PERCENTAGE_RANGE_MAX;

                mdpPalette.UseMachineTargetMDP = !overrides?.OverrideMachineMDP ?? true;
                mdpPalette.AbsoluteTargetMDP   = overrides?.OverridingMachineMDP ?? 0;

                mdpPalette.TargetMDPColour = Color.Green;
                break;

            case DisplayMode.MDPPercentSummary:
                convertedPalette = new MDPSummaryPalette();

                var mdpSummaryPalette = ((MDPSummaryPalette)convertedPalette);

                mdpSummaryPalette.MDPPercentageRange.Min = overrides?.MDPRange.Min ?? PERCENTAGE_RANGE_MIN;
                mdpSummaryPalette.MDPPercentageRange.Max = overrides?.MDPRange.Max ?? PERCENTAGE_RANGE_MAX;

                mdpSummaryPalette.UseMachineTargetMDP = !overrides?.OverrideMachineMDP ?? true;
                mdpSummaryPalette.AbsoluteTargetMDP   = overrides?.OverridingMachineMDP ?? 0;
                break;

            case DisplayMode.PassCount:
                convertedPalette = new PassCountPalette();
                break;

            case DisplayMode.PassCountSummary:
                convertedPalette = new PassCountSummaryPalette();

                var passCountPalette = ((PassCountSummaryPalette)convertedPalette);

                passCountPalette.UseMachineTargetPass     = !overrides?.OverrideTargetPassCount ?? true;
                passCountPalette.TargetPassCountRange.Min = overrides?.OverridingTargetPassCountRange.Min ?? PASS_COUNT_TARGET_RANGE_MIN;
                passCountPalette.TargetPassCountRange.Max = overrides?.OverridingTargetPassCountRange.Max ?? PASS_COUNT_TARGET_RANGE_MAX;
                break;

            case DisplayMode.MachineSpeed:
                convertedPalette = new SpeedPalette();
                break;

            case DisplayMode.TargetSpeedSummary:
                convertedPalette = new SpeedSummaryPalette();

                var speedSummaryPalette = ((SpeedSummaryPalette)convertedPalette);

                speedSummaryPalette.MachineSpeedTarget.Min = overrides?.TargetMachineSpeed.Min ?? CellPassConsts.NullMachineSpeed;
                speedSummaryPalette.MachineSpeedTarget.Max = overrides?.TargetMachineSpeed.Max ?? CellPassConsts.NullMachineSpeed;
                break;

            case DisplayMode.TemperatureDetail:
                convertedPalette = new TemperaturePalette();
                break;

            case DisplayMode.TemperatureSummary:
                convertedPalette = new TemperatureSummaryPalette();

                var temperatureSummaryPalette = ((TemperatureSummaryPalette)convertedPalette);

                temperatureSummaryPalette.UseMachineTempWarningLevels = !overrides?.OverrideTemperatureWarningLevels ?? true;
                temperatureSummaryPalette.TemperatureLevels.Min       = overrides?.OverridingTemperatureWarningLevels.Min ?? TEMPERATURE_LEVELS_MIN;
                temperatureSummaryPalette.TemperatureLevels.Max       = overrides?.OverridingTemperatureWarningLevels.Max ?? TEMPERATURE_LEVELS_MAX;
                break;

            default:
                throw new TRexException($"No implemented color palette for this mode ({mode})");
            }

            return(convertedPalette);
        }
Example #13
0
        public async Task <JsonResult> GetCMVChange([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel       = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);
                var cmvPercentBands = new double[] { short.MinValue, -50.0, -20.0, -10.0, 0.0, 10.0, 20.0, 50.0 };

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new CMVChangeStatisticsOperation();
                    var result    = await operation.ExecuteAsync(
                        new CMVChangeStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet()
                        {
                            Filters = new[] { new CombinedFilter() }
                        },
                        CMVChangeDetailsDataValues = cmvPercentBands,
                        Overrides = overrides
                    }
                        );

                    if (result != null)
                    {
                        string resultString = $"<b>CMV Percent Change Details Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";

                        var anyNegativeNumber  = cmvPercentBands.ToList().Find(s => s < 0);
                        var anyTwoDigitsNumber = cmvPercentBands.ToList().Find(s => Math.Abs(s) >= TWO_DIGITS_NUMBER);

                        for (int i = 0; i < cmvPercentBands.Length; i++)
                        {
                            string space = anyNegativeNumber < 0 && cmvPercentBands[i] >= 0 ? "&nbsp;&nbsp;" : string.Empty;

                            if (Math.Abs(anyTwoDigitsNumber) > 0 && Math.Abs(cmvPercentBands[i]) >= 0 && Math.Abs(cmvPercentBands[i]) < TWO_DIGITS_NUMBER)
                            {
                                space += "&nbsp;&nbsp;";
                            }

                            if (cmvPercentBands[i] == short.MinValue)
                            {
                                resultString += $"<b>{space}<{cmvPercentBands[i + 1]:##0.#0}%</b> - {result.Percents[i]:##0.#0}%<br/>";
                            }
                            else
                            {
                                resultString += $"<b>{space}{cmvPercentBands[i]:##0.#0}%</b> - {result.Percents[i]:##0.#0}%<br/>";
                            }
                        }

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #14
0
        public async Task <JsonResult> GetElevationRange([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new ElevationStatisticsOperation();
                    var result    = await operation.ExecuteAsync(new ElevationStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet {
                            Filters = new[] { new CombinedFilter() }
                        },
                        Overrides = overrides
                    });

                    if (result != null)
                    {
                        var resultString = $"<b>Elevation Statistics Result (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";
                        resultString += $"<b>Minimum Elevation:</b> {result.MinElevation}<br/>";
                        resultString += $"<b>Maximum Elevation:</b> {result.MaxElevation}<br/>";
                        resultString += $"<b>Coverage Area:</b> {result.CoverageArea}<br/>";
                        resultString += "<b>Bounding Extents:</b><br/>";
                        resultString += $"<b>Minimum X:</b> {result.BoundingExtents.MinX}<br/>";
                        resultString += $"<b>Minimum Y:</b> {result.BoundingExtents.MinY}<br/>";
                        resultString += $"<b>Minimum Z:</b> {result.BoundingExtents.MinZ}<br/>";
                        resultString += $"<b>Maximum X:</b> {result.BoundingExtents.MaxX}<br/>";
                        resultString += $"<b>Maximum Y:</b> {result.BoundingExtents.MaxY}<br/>";
                        resultString += $"<b>Maximum Z:</b> {result.BoundingExtents.MaxZ}<br/>";

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #15
0
        public async Task <JsonResult> GetCutFillStatistics([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides,
                                                            [FromQuery] Guid cutFillDesignUid,
                                                            [FromQuery] double?cutFillOffset)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else if (cutFillDesignUid == Guid.Empty)
            {
                resultToReturn = "<b>Missing CutFill Design UID</b>";
            }
            else
            {
                var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);
                var offsets   = new[] { 0.5, 0.2, 0.1, 0, -0.1, -0.2, -0.5 };

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new CutFillStatisticsOperation();
                    var result    = await operation.ExecuteAsync(new CutFillStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet {
                            Filters = new[] { new CombinedFilter() }
                        },
                        ReferenceDesign = new DesignOffset(cutFillDesignUid, cutFillOffset ?? 0),
                        Offsets         = offsets,
                        Overrides       = overrides
                    });

                    if (result != null)
                    {
                        string resultString = $"<b>Cut/Fill statistics Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";

                        var anyNegativeNumber  = offsets.ToList().Find(s => s < 0);
                        var anyTwoDigitsNumber = offsets.ToList().Find(s => Math.Abs(s) >= TWO_DIGITS_NUMBER);

                        for (int i = 0; i < offsets.Length; i++)
                        {
                            string space = anyNegativeNumber < 0 && offsets[i] >= 0 ? "&nbsp;&nbsp;" : string.Empty;

                            if (Math.Abs(anyTwoDigitsNumber) > 0 && Math.Abs(offsets[i]) >= 0 && Math.Abs(offsets[i]) < TWO_DIGITS_NUMBER)
                            {
                                space += "&nbsp;&nbsp;";
                            }

                            resultString += $"<b>{space}{offsets[i]:##0.0}</b> - {result.Percents[i]:##0.#0}%<br/>";
                        }

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #16
0
        public async Task <JsonResult> GetTemperatureDetails([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            const int TEMP_DENOMINATOR = 10;
            string    resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel        = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);
                var temperatureBands = new[] { 0, 120, 140, 160, 4000 };

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new TemperatureStatisticsOperation();
                    var result    = await operation.ExecuteAsync(
                        new TemperatureStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet()
                        {
                            Filters = new[] { new CombinedFilter() }
                        },
                        TemperatureDetailValues = temperatureBands,
                        Overrides = overrides
                    }
                        );

                    if (result != null)
                    {
                        string resultString = $"<b>Temperature Details Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";

                        var anyTwoDigitsNumber   = temperatureBands.ToList().Find(s => (s / TEMP_DENOMINATOR) >= TWO_DIGITS_NUMBER && (s / TEMP_DENOMINATOR) < THREE_DIGITS_NUMBER);
                        var anyThreeDigitsNumber = temperatureBands.ToList().Find(s => (s / TEMP_DENOMINATOR) >= THREE_DIGITS_NUMBER);

                        for (int i = 0; i < temperatureBands.Length; i++)
                        {
                            string space = anyThreeDigitsNumber > 0 && temperatureBands[i] / TEMP_DENOMINATOR < THREE_DIGITS_NUMBER ? "&nbsp;&nbsp;" : string.Empty;

                            if (anyTwoDigitsNumber > 0 && temperatureBands[i] / TEMP_DENOMINATOR < TWO_DIGITS_NUMBER)
                            {
                                space += "&nbsp;&nbsp;";
                            }

                            resultString += $"<b>{space}{(temperatureBands[i] / TEMP_DENOMINATOR):##0.0}</b> - {result.Percents[i]:##0.#0}%<br/>";
                        }

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #17
0
        public async Task <JsonResult> GetPassCountDetails([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel      = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);
                var passCountBands = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new PassCountStatisticsOperation();
                    var result    = await operation.ExecuteAsync(
                        new PassCountStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet()
                        {
                            Filters = new[] { new CombinedFilter() }
                        },
                        PassCountDetailValues = passCountBands,
                        Overrides             = overrides
                    }
                        );

                    if (result != null)
                    {
                        string resultString = $"<b>Pass Count Details Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";

                        var anyTwoDigitsNumber = passCountBands.ToList().Find(s => s >= TWO_DIGITS_NUMBER);
                        for (int i = 0; i < passCountBands.Length; i++)
                        {
                            string space = anyTwoDigitsNumber > 0 && passCountBands[i] < TWO_DIGITS_NUMBER ? "&nbsp;&nbsp;" : string.Empty;
                            resultString += $"<b>{space}{passCountBands[i]}</b> - {result.Percents[i]:##0.#0}%<br/>";
                        }

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }