Files
2026-04-17 14:55:32 -04:00

121 lines
5.8 KiB
C#

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<double> yValues = new List<double>(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;
}
}
}
}