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); }
/// <summary> /// Constructor... /// </summary> public FilteredValueAssignmentContext() { FilteredValue.Clear(); PreviousFilteredValue.Clear(); CellProfile = null; LowestPassIdx = Common.Consts.NullLowestPassIdx; Overrides = new OverrideParameters(); LiftParams = new LiftParameters(); }
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)); }
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))); }
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"); }
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); }
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); } } }
[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); }
public void Test_OverrideParameters_Defaults() { var overrides = new OverrideParameters(); SimpleBinarizableInstanceTester.TestClass(overrides, "Default override parameters not same after round trip serialisation"); }
/// <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); } }
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)); }
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); }
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 ? " " : string.Empty; if (Math.Abs(anyTwoDigitsNumber) > 0 && Math.Abs(cmvPercentBands[i]) >= 0 && Math.Abs(cmvPercentBands[i]) < TWO_DIGITS_NUMBER) { space += " "; } 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)); }
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)); }
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 ? " " : string.Empty; if (Math.Abs(anyTwoDigitsNumber) > 0 && Math.Abs(offsets[i]) >= 0 && Math.Abs(offsets[i]) < TWO_DIGITS_NUMBER) { space += " "; } 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)); }
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 ? " " : string.Empty; if (anyTwoDigitsNumber > 0 && temperatureBands[i] / TEMP_DENOMINATOR < TWO_DIGITS_NUMBER) { space += " "; } 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)); }
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 ? " " : 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)); }