using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace DTS.Slice.PedestrianAndHeadReports { public class UprLegReport : ReportBase { public UprLegReport(PedestrianAndHeadTest parent) : base(parent) { } protected override void _testParent_PropertyChanged(object sender, PropertyChangedEventArgs e) { base._testParent_PropertyChanged(sender, e); switch (e.PropertyName) { case "Graph-x-UPRLEG_Force-x-ChannelUnit": //make sure all channels are in the right unit break; } } public const string UPR_MOMENT_ID = "UPR_Moment"; public const string MID_MOMENT_ID = "MID_Moment"; public const string LWR_MOMENT_ID = "LWR_Moment"; public const string UPR_TOTALFORCE_ID = "UPR_ForceComined"; public const string UPR_FORCE_ID = "UPR_Force"; public const string LWR_FORCE_ID = "LWR_Force"; protected override void InitializeGraphs() { base.InitializeGraphs(); AddGraph(new ReportGraph(KnownGraphs.UPRLEG_Force.ToString(), "Force", new MeasurementUnit[] { MeasurementUnitList.GetMeasurementUnit("N"), MeasurementUnitList.GetMeasurementUnit("kN") }, new GraphChannel[] { new VectorAddition(UPR_TOTALFORCE_ID, "Combined Force", "合成荷重"), new GraphChannel(UPR_FORCE_ID, "UPR Force", "UPRF"), new GraphChannel(LWR_FORCE_ID, "LWR Force", "LWRF") },Properties.Settings.Default.PROTECTIONREPORT_UPRFORCEThreshold)); AddGraph(new ReportGraph(KnownGraphs.UPRLeg_Moment.ToString(), "Moment", new MeasurementUnit[]{ MeasurementUnitList.GetMeasurementUnit("Nm") }, new GraphChannel[]{ new GraphChannel(UPR_MOMENT_ID, "UPR", "UPRM"), new GraphChannel(MID_MOMENT_ID, "MID", "MIDM"), new GraphChannel(LWR_MOMENT_ID, "LWR", "LWRM") },Properties.Settings.Default.PROTECTIONREPORT_UPRMOMENTThreshold)); } protected override void InitializeProperties() { base.InitializeProperties(); SetPossibleValues(PedestrianAndHeadTest.Fields.ImpactorType.ToString(), new string[] { "UPR LEG" }); SetValue(PedestrianAndHeadTest.Fields.FrequencyClass.ToString(), (new SensorDB.FilterClass(DTS.SensorDB.FilterClass.FilterClassType.CFC180)).ToString()); } public override ReportTypes GetReportType() { return ReportTypes.UPRLeg; } private volatile bool _drawingGraph = false; public override void DrawGraph(KnownGraphs graph, C1.Win.C1Chart.C1Chart chart) { switch (graph) { case KnownGraphs.UPRLEG_Force: { if (_drawingGraph) { return; } try { _drawingGraph = true; var channelX = GetChannel(KnownGraphs.UPRLEG_Force, UPR_FORCE_ID); var channelY = GetChannel(KnownGraphs.UPRLEG_Force, LWR_FORCE_ID); if (null == channelX || null == channelY || null == channelX.Channel || null == channelY.Channel) { return; } try { string euX = (channelX.Channel as DTS.DAS.Concepts.DAS.Channel.IEngineeringUnitAware).EngineeringUnits; string euY = (channelY.Channel as DTS.DAS.Concepts.DAS.Channel.IEngineeringUnitAware).EngineeringUnits; var x = new DTS.Calculations.ChannelData(euX); x.FilteredEU = channelX.Channel.DataEu.ToArray(); var y = new DTS.Calculations.ChannelData(euY); y.FilteredEU = channelY.Channel.DataEu.ToArray(); List yValues = new List(y.FilteredEU.Length); for (int i = 0; i < x.FilteredEU.Length && i < y.FilteredEU.Length; i++) { yValues.Add(x.FilteredEU[i] + y.FilteredEU[i]); } DTS.Slice.Control.Event.Module.Channel.AdditiveVectorCalculatedChannel cc = new DTS.Slice.Control.Event.Module.Channel.AdditiveVectorCalculatedChannel( "TOTAL FORCE", DTS.Slice.Control.Event.Module.Channel.CalculatedChannel.XUnits.msec, euX, new double[0], yValues.ToArray(), DTS.Slice.Control.Event.Module.Channel.CalculatedChannel.Operation.Resultant, 0, channelX.Channel.ParentModule); ReviewTestChannel rtc = new ReviewTestChannel(cc, channelX.ParentTest); var g = GetGraph(ReportBase.KnownGraphs.UPRLEG_Force.ToString()); g.SetReviewTestChannel(UPR_TOTALFORCE_ID, rtc); } catch (System.Exception) { } base.DrawGraph(graph, chart); } catch (System.Exception) { } finally { _drawingGraph = false; } } break; default: base.DrawGraph(graph, chart); break; } } } }