Commit 7ee393fd authored by 540597360@qq.com's avatar 540597360@qq.com

用数据ID标识数据

parent 759d1131
......@@ -133,7 +133,8 @@ namespace FLY.HeatingHelper.UI.UIModule
/// </summary>
public void Calculate_From_Class_To_Rxx()
{
int from = _vm.Selected_Idx_From, to = _vm.Selected_Idx_To;
int from = _vm._data.GetIndexFromID(_vm.Selected_Idx_From),
to = _vm._data.GetIndexFromID(_vm.Selected_Idx_To);
_vm.RX = from;
_vm.RY = myChart.AxisY.First().ActualMaxValue;
......@@ -248,7 +249,7 @@ namespace FLY.HeatingHelper.UI.UIModule
public DateTime DataTo { get; set; }
/// <summary>
/// 选择要处理的数据(按Index
/// 选择要处理的数据(按ID
/// </summary>
public int Selected_Idx_From { get; set; }
public int Selected_Idx_To { get; set; }
......@@ -278,9 +279,11 @@ namespace FLY.HeatingHelper.UI.UIModule
{
Selected_Idx_From = from;
Selected_Idx_To = to;
var tmp = _data.GetDateTimeByID(from);
DataFrom = (DateTime)tmp;
tmp = _data.GetDateTimeByID(to);
DataTo = (DateTime)tmp;
Update_Tab1();
DataFrom = Xaxis[Selected_Idx_From];
DataTo = Xaxis[Selected_Idx_To];
}
}
......@@ -296,8 +299,10 @@ namespace FLY.HeatingHelper.UI.UIModule
_selected_class = _sclass;
Selected_Idx_From = from;
Selected_Idx_To = to;
DataFrom = Xaxis[Selected_Idx_From];
DataTo = Xaxis[Selected_Idx_To];
var tmp = _data.GetDateTimeByID(from);
DataFrom = (DateTime)tmp;
tmp = _data.GetDateTimeByID(to);
DataTo = (DateTime)tmp;
return;
}
break;
......
......@@ -71,6 +71,7 @@
<TextBlock Text="锁定设置:"/>
<RadioButton Content="锁定1幅" Grid.Column="1" IsChecked="{Binding LockFrames,Converter={StaticResource lfc},ConverterParameter=1}"/>
<RadioButton Content="锁定2幅" Grid.Column="2" IsChecked="{Binding LockFrames,Converter={StaticResource lfc},ConverterParameter=2}"/>
<RadioButton Content="无锁定" Grid.Column="3" IsChecked="{Binding LockFrames,Converter={StaticResource lfc},ConverterParameter=0}"/>
</Grid>
<Grid DockPanel.Dock="Top">
<ProgressBar Value="{Binding SearchProgressValue}" Width="{Binding ElementName=searchBtn, Path=ActualWidth}"/>
......@@ -94,7 +95,7 @@
<TextBlock Text="{Binding RotAngle,StringFormat={}{0:f1}}" Style="{StaticResource tb_style}"/>
<Button Content="增加" Margin="3,0,0,0" Click="Angle_Add"/>
<Button Content="减少" Margin="3,0,0,0" Click="Angle_Sub"/>
<Button Content="自动试算" Margin="3,0,0,0"/>
<Button Content="搜索旋转角度" Margin="3,0,0,0" Click="Search_Angle"/>
</StackPanel>
<Button Content="应用" DockPanel.Dock="Bottom"/>
</DockPanel>
......
......@@ -88,6 +88,10 @@ namespace FLY.HeatingHelper.UI.UIModule
{
mainVM.Change_Angle(0.5);
}
private void Search_Angle(object sender, RoutedEventArgs e)
{
}
}
public class UC_AirRingShiftViewModel:INotifyPropertyChanged
......@@ -386,6 +390,19 @@ namespace FLY.HeatingHelper.UI.UIModule
}
}
public void SearchAngle()
{
var tmp = _data.SearchMaxSimilarity(_data.GetIndexFromID(vm1.SelectedFrame),
_data.GetIndexFromID(vm2.SelectedFrame), 15, true);
RotAngle = tmp.Item3 + vm1.RotAngle;
TandH_Corel = tmp.Item2;
AirRingShift = tmp.Item1;
int rb = AirRingShift + vm1.ResetBolt;
while (rb >= _data.BoltCnt) rb -= _data.BoltCnt;
while (rb < 0) rb += _data.BoltCnt;
ResetBolt = rb;
}
public void AutoSearchAndCal_Shift()
{
SearchEnabled = false;
......@@ -393,6 +410,12 @@ namespace FLY.HeatingHelper.UI.UIModule
int searchCnt = int.MaxValue;
int start = vm1.MinFrame;
int end = vm1.MaxFrame;
if (LockFrames == 2)
{
SearchAngle();
SearchEnabled = true;
return;
}
if (LockFrames == 1)
{
searchCnt = 1;
......
......@@ -18,7 +18,9 @@ namespace FLY.HeatingHelper.UI.UIModule
public UC_FrameDiffViewModel()
{
}
/// <summary>
/// 两个ID
/// </summary>
public int FrameIdx1 { get; set; } = -1;
public int FrameIdx2 { get; set; } = -1;
public SeriesCollection MySeries { get; set; } = new SeriesCollection();
......
......@@ -266,14 +266,18 @@ namespace FLY.HeatingHelper.UI.UIModule
{
if (SelectedFrame > MinFrame)
{
SelectedFrame--;
var tmp = _data.GetRelativeID(SelectedFrame, -1);
if (tmp >= 0)
SelectedFrame = tmp;
}
});
NxtCmd = new RelayCommand(() =>
{
if (SelectedFrame < MaxFrame)
{
SelectedFrame++;
var tmp = _data.GetRelativeID(SelectedFrame, 1);
if (tmp >= 0)
SelectedFrame = tmp;
}
});
}
......
......@@ -15,11 +15,7 @@ namespace FLY.HeatingHelper
/// </summary>
public interface IThickHeatData : INotifyPropertyChanged
{
bool IsDataReady { get; }
bool BeginUse(bool isAsync = true);
void EndUse();
#region 用于UI的接口
/// <summary>
/// 数据库中存在的数据范围
/// </summary>
......@@ -43,39 +39,17 @@ namespace FLY.HeatingHelper
/// </summary>
int AirRingShift { get; }
/// <summary>
/// MaxHeatVariationIdx1,MaxHeatVariationIdx2指示两幅数据,这两幅数据的加热量变化最大
/// </summary>
int MaxHeatVariationIdx1 { get; }
int MaxHeatVariationIdx2 { get; }
StateCode State { get; }
#endregion
/// <summary>
/// 通知新数据产生
/// </summary>
bool NewDataArrived { set; }
/// <summary>
/// 计算最合适的判断范围,FromTo也可以自行设定,计算DFrom和DTo的值
/// </summary>
//void CalculateFromTo();
/// <summary>
/// 计算加热最大变化量,计算出两个索引值
/// </summary>
int[] CalculateMaxHeatVariation(object _aclass);
int CalculateFromToByClass(int selected_class, ref int from, ref int to);
#region 一些辅助计算的函数
/// <summary>
/// 通过加热变化量和厚度变化量计算加热到厚度的比例系数
/// </summary>
/// <param name="heats">加热变化量</param>
/// <param name="thicks">厚度变化量</param>
/// <returns></returns>
double CalculateHeatToThickFactor(double[] heats, double[] thicks, double thickmean);
/// <summary>
/// 计算两个frame的加热和厚度差的协相关向量。
/// </summary>
double[] CalculateCorrelVector(double[] heats, double[] thicks);
......@@ -84,6 +58,7 @@ namespace FLY.HeatingHelper
#endregion
void SetDB(string dbname);
#region 获取数据接口
/// <summary>
/// 获取厚度和加热的值
/// </summary>
......@@ -100,15 +75,19 @@ namespace FLY.HeatingHelper
List<double> Dat_Sigmas { get; }
List<double> Dat_Means { get; }
int BoltCnt { get; }
int GetIndexFromID(int id);
int GetRelativeID(int id, int relative);
/// <summary>
/// 计算风环偏转值
/// 依据数据ID获取数据时间
/// </summary>
void CalculateAirRingShift();
/// <param name="id"></param>
/// <returns></returns>
DateTime? GetDateTimeByID(int id);
#endregion
int BoltCnt { get; }
double[] HeatEffect { get; set; }
#region 整体分析和局部分析的功能jiekou
List<HeatBoltAnalystItem> SearchFeaturedBoltsItem(int startIdx, int endIdx,
int searchNum, int maxFrameInterval, int heatRating,
int neglectHeatRate, int Separation, int shiftRange);
......@@ -117,6 +96,16 @@ namespace FLY.HeatingHelper
ProgressChangedEventHandler report,
RunWorkerCompletedEventHandler runcomplete,
int midbolt, double searchRange, bool SearchRotAngle, bool isAsync);
/// <summary>
///
/// </summary>
/// <param name="idxL"></param>
/// <param name="idxB"></param>
/// <param name="searchRange"></param>
/// <param name="SearchRotAngle"></param>
/// <returns>返回值:Tuple<偏转数,相关系数,旋转角度变化量></returns>
Tuple<int, double, double> SearchMaxSimilarity(int idxL, int idxB, double searchRange, bool SearchRotAngle);
#endregion
#region 数据库数据变化后自动运行
List<ThickHeatEvent> AutoDetectEvents { get; }
......@@ -129,20 +118,41 @@ namespace FLY.HeatingHelper
/// 搜索旋转角度的范围,例如15,则在当前度数下搜索正负15度
/// </summary>
double SearchingAngle { get; set; }
/// <summary>
/// 该参数设定不参加搜索的数据
/// </summary>
int NotSearchMinFrame { get; set; }
StateCode State { get; }
/// <summary>
/// 检查数据库,当数据库有新数据时,更新DataTo属性,并读取新数据到对象中。该函数可以一定时间间隔执行。
/// </summary>
void RefreshData();
bool IsDataReady { get; }
bool BeginUse(bool isAsync = true);
void EndUse();
#endregion
}
public enum StateCode
{
STC_NODAT, // 没有数据
STC_IDLE, // 空闲
STC_READING, // 读取数据
STC_UPDATING // 检查新数据
}
#region 厚度加热数据自动处理结果事件
public class ThickHeatEvent
{
public ThickHeatEventCode EvtCode;
public object EvtData;
}
public enum ThickHeatEventCode
{
EVC_RingShift,
EVC_HeatBoltItem,
}
public class MaxSimilarityResult
{
public int frameIdx1;
......@@ -153,14 +163,6 @@ namespace FLY.HeatingHelper
public double ThickToHeatFactor;
}
public enum StateCode
{
STC_NODAT, // 没有数据
STC_IDLE, // 空闲
STC_READING, // 读取数据
STC_UPDATING // 检查新数据
}
public class HeatBoltAnalystItem
{
public int FrameIdx1 { get; set; }
......@@ -183,28 +185,6 @@ namespace FLY.HeatingHelper
Similarity = from.Similarity;
}
}
#region 厚度加热数据自动处理结果事件
public enum ThickHeatEventCode
{
EVC_RingShift,
EVC_HeatBoltItem,
}
public class EVTD_RingShift
{
public int frameIdx1;
public int frameIdx2;
public double shifted;
public double degree;
public double similarity;
}
public class ThickHeatEvent
{
public ThickHeatEventCode EvtCode;
public object EvtData;
}
#endregion
#region DataHelper
......
......@@ -126,22 +126,6 @@ namespace FLY.HeatingHelper
Monitor.Exit(_sync);
}
public int MaxHeatVariationIdx1
{
get
{
return _select_frame_idx1;
}
}
public int MaxHeatVariationIdx2
{
get
{
return _select_frame_idx2;
}
}
public bool NewDataArrived { set => RefreshData(); }
public DateTime TotalDataFrom { get; protected set; }
......@@ -346,8 +330,8 @@ namespace FLY.HeatingHelper
{
if (selected_class < thickClasses.Count())
{
from = thickClasses[selected_class].from;
to = thickClasses[selected_class].to;
from = _ids[thickClasses[selected_class].from];
to = _ids[thickClasses[selected_class].to];
return selected_class;
}
return -1;
......@@ -359,8 +343,8 @@ namespace FLY.HeatingHelper
{
if (thickClasses[i].points_idx.Count() >= 2)
{
from = thickClasses[i].from;
to = thickClasses[i].to;
from = _ids[thickClasses[i].from];
to = _ids[thickClasses[i].to];
return i;
}
}
......@@ -398,7 +382,7 @@ namespace FLY.HeatingHelper
/// <summary>
/// 运用选出类(数据)的点计算最大加热变化。返回产生最大值的数据索引
/// </summary>
public int[] CalculateMaxHeatVariation(object _aclass)
private int[] CalculateMaxHeatVariation(object _aclass)
{
ThickClass _theclass = _aclass as ThickClass;
int cnt = _theclass.points_idx.Count();
......@@ -615,7 +599,7 @@ namespace FLY.HeatingHelper
/// <param name="thicks">厚度变化量</param>
/// <param name="thickmean">厚度均值</param>
/// <returns></returns>
public double CalculateHeatToThickFactor(double[] heats, double[] thicks, double thickmean)
private double CalculateHeatToThickFactor(double[] heats, double[] thicks, double thickmean)
{
int cnt = thicks.Count();
if (cnt < 2) return double.NaN;
......@@ -669,6 +653,16 @@ namespace FLY.HeatingHelper
}
return d.ToArray();
}
public int GetIndexFromID(int id)
{
int cnt = _ids.Count();
for(int i = 0; i < cnt; i++)
{
if (_ids[i] == id) return i;
}
return -1;
}
#endregion
#region 获取数据
......@@ -682,65 +676,116 @@ namespace FLY.HeatingHelper
/// <returns></returns>
public double[] GetThicks(int idx, int from, int to)
{
int cnt = _thicks[0].Count();
if ((to >= cnt) || (to < 0)) to = cnt - 1;
if ((from < 0) || (from > to)) from = 0;
return _thicks[idx].Skip(from).Take(to - from + 1).ToArray();
int index = GetIndexFromID(idx);
if (index < 0) return null;
return GetThicksByIndex(index, from, to);
}
/// <summary>
/// 获取某幅加热数据的一部分
/// </summary>
/// <param name="idx"></param>
/// <param name="from"></param>
/// <param name="to"></param>
/// <returns></returns>
public double[] GetHeats(int idx, int from, int to)
private double[] GetThicksByIndex(int idx,int from, int to)
{
int cnt = _heats[0].Count();
int cnt = _thicks[0].Count();
if ((to >= cnt) || (to < 0)) to = cnt - 1;
if ((from < 0) || (from > to)) from = 0;
return _heats[idx].Skip(from).Take(to - from + 1).ToArray();
return _thicks[idx].Skip(from).Take(to - from + 1).ToArray();
}
public double[] GetThicks(int idx, int newResetBolt, double newAngle)
{
double[] ret = GetThicks(idx, -1, -1);
if (ret is null) return null;
int index = GetIndexFromID(idx);
if (!double.IsNaN(newAngle))
{
if (Math.Abs(newAngle - _rotAngles[index]) > 0.001)
{
ret = ReSampleForChangeRotAngle(ret, _resetBolts[index], newAngle / _rotAngles[index]);
}
}
if (newResetBolt != int.MaxValue)
{
int cnt = ret.Count();
int s = newResetBolt - _resetBolts[index];
while (s < 0) s += cnt;
while (s >= cnt) s -= cnt;
return ret.Concat(ret).Skip(cnt - s).Take(cnt).ToArray();
}
return ret;
}
private double[] GetThicksByIndex(int idx, int newResetBolt, double newAngle)
{
double[] ret = GetThicksByIndex(idx, -1, -1);
if (ret is null) return null;
int index = idx;
if (!double.IsNaN(newAngle))
{
if (Math.Abs(newAngle - _rotAngles[idx]) > 0.001)
if (Math.Abs(newAngle - _rotAngles[index]) > 0.001)
{
ret = ReSampleForChangeRotAngle(ret, _resetBolts[idx], newAngle / _rotAngles[idx]);
ret = ReSampleForChangeRotAngle(ret, _resetBolts[index], newAngle / _rotAngles[index]);
}
}
if (newResetBolt != int.MaxValue)
{
int cnt = ret.Count();
int s = newResetBolt - _resetBolts[idx];
int s = newResetBolt - _resetBolts[index];
while (s < 0) s += cnt;
while (s >= cnt) s -= cnt;
return ret.Concat(ret).Skip(cnt-s).Take(cnt).ToArray();
return ret.Concat(ret).Skip(cnt - s).Take(cnt).ToArray();
}
return ret;
}
/// <summary>
/// 获取某幅加热数据的一部分
/// </summary>
/// <param name="idx"></param>
/// <param name="from"></param>
/// <param name="to"></param>
/// <returns></returns>
public double[] GetHeats(int idx, int from, int to)
{
int index = GetIndexFromID(idx);
if (index < 0) return null;
return GetHeatsByIndex(index, from, to);
}
private double[] GetHeatsByIndex(int idx, int from, int to)
{
int cnt = _heats[0].Count();
if ((to >= cnt) || (to < 0)) to = cnt - 1;
if ((from < 0) || (from > to)) from = 0;
return _heats[idx].Skip(from).Take(to - from + 1).ToArray();
}
/// <summary>
/// 获取某幅厚度数据的复位分区号
/// </summary>
/// <param name="idx"></param>
/// <returns></returns>
public int GetResetBolt(int idx)
{
int index = GetIndexFromID(idx);
if (index < 0) return -1;
return GetResetBoltByIndex(index);
}
private int GetResetBoltByIndex(int idx)
{
return _resetBolts[idx];
}
/// <summary>
/// 获取某幅厚度数据的旋转角度
/// </summary>
/// <param name="idx"></param>
/// <returns></returns>
public double GetRotAngle(int idx)
{
int index = GetIndexFromID(idx);
if (index < 0) return -1;
return GetRotAngleByIndex(index);
}
private double GetRotAngleByIndex(int idx)
{
return _rotAngles[idx];
}
public int NormalBolt(int bolt, int boltcnt)
{
if (boltcnt == int.MaxValue) boltcnt = BoltCnt;
......@@ -752,6 +797,21 @@ namespace FLY.HeatingHelper
public List<DateTime> Dat_Times { get { return _dat_times; } }
public List<double> Dat_Sigmas { get { return _thick_2sigmas; } }
public List<double> Dat_Means { get { return _thick_means; } }
public int GetRelativeID(int id, int relative)
{
int idx = GetIndexFromID(id);
if (idx < 0) return -1;
idx += relative;
if (idx < 0 || idx >= _ids.Count()) return -1;
return _ids[idx];
}
public DateTime? GetDateTimeByID(int id)
{
int idx = GetIndexFromID(id);
if (idx < 0) return null;
return _dat_times[idx];
}
#endregion
interface ISearchModel
{
......@@ -942,6 +1002,12 @@ namespace FLY.HeatingHelper
public List<HeatBoltAnalystItem> SearchFeaturedBoltsItem(int startIdx, int endIdx, int searchNum, int maxFrameInterval, int heatRating,
int neglectHeatRate, int Separation, int shiftRange)
{
startIdx = GetIndexFromID(startIdx);
endIdx = GetIndexFromID(endIdx);
if (startIdx < 0 || endIdx < 0)
{
return null;
}
int i = startIdx, ki;
int j, k;
List<HeatBoltAnalystItem> result = new List<HeatBoltAnalystItem>();
......@@ -949,10 +1015,10 @@ namespace FLY.HeatingHelper
{
for (j = i - 1, k = 0; (j >= startIdx) && (k < maxFrameInterval); j--, k++)
{
var h1 = Vector<double>.Build.DenseOfArray(GetHeats(i, -1, -1));
var h2 = Vector<double>.Build.DenseOfArray(GetHeats(j, -1, -1));
var v1 = Vector<double>.Build.DenseOfArray(GetThicks(i, -1, -1));
var v2 = Vector<double>.Build.DenseOfArray(GetThicks(j, -1, -1));
var h1 = Vector<double>.Build.DenseOfArray(GetHeatsByIndex((i), -1, -1));
var h2 = Vector<double>.Build.DenseOfArray(GetHeatsByIndex((j), -1, -1));
var v1 = Vector<double>.Build.DenseOfArray(GetThicksByIndex((i), -1, -1));
var v2 = Vector<double>.Build.DenseOfArray(GetThicksByIndex((j), -1, -1));
var h3 = h2 - h1;
var v3 = v1 - v2;
var cnt = h3.Count;
......@@ -977,14 +1043,22 @@ namespace FLY.HeatingHelper
var tmpr = dm.GetResult();
if (tmpr.Count() == 0) continue;
h4 = EffectFilter(h3.ToArray());
h4 = h4.Concat(h4).ToArray();
h4 = h4.Concat(h4).Concat(h4).ToArray();
foreach (var item in tmpr)
{
item.FrameIdx1 = i;
item.FrameIdx2 = j;
item.FrameIdx1 = _ids[i];
item.FrameIdx2 = _ids[j];
int from, to;
from = item.StartBolt - Separation;
to = item.EndBolt + Separation;
// 修正from,to的值
if (from > to) to += cnt;
if (from < 0)
{
from += cnt;
to += cnt;
}
double maxcor = double.MinValue;
int maxshift = 0;
for (int jj = -shiftRange; jj <= shiftRange; jj++)
......@@ -1064,8 +1138,13 @@ namespace FLY.HeatingHelper
BackgroundWorker bk = new BackgroundWorker();
var handler = new DoWorkEventHandler((o, e) =>
{
int fmin = startIdx;
int fmax = endIdx;
int fmin = GetIndexFromID(startIdx);
int fmax = GetIndexFromID(endIdx);
if (fmin < 0 || fmax < 0)
{
result.frameIdx1 = -1;
return;
}
int i, j, k, ki;
double maxcorel = -100;
int theshift = 0;
......@@ -1099,15 +1178,15 @@ namespace FLY.HeatingHelper
}
}
}
result.frameIdx1 = idx1;
result.frameIdx2 = idx2;
result.frameIdx1 = _ids[idx1];
result.frameIdx2 = _ids[idx2];
result.frameShift = theshift;
result.similarity = maxcorel;
result.deltaAngle = deltaAngle;
var angle = GetRotAngle(idx1) + deltaAngle;
var heat = DataHelper.VectorSub(GetHeats(idx2, -1, -1), GetHeats(idx1, -1, -1));
var t1 = GetThicks(idx1, int.MinValue, angle);
var th = DataHelper.VectorSub(t1, GetThicks(idx2, int.MaxValue, angle));
var angle = GetRotAngle(_ids[idx1]) + deltaAngle;
var heat = DataHelper.VectorSub(GetHeats(_ids[idx2], -1, -1), GetHeats(_ids[idx1], -1, -1));
var t1 = GetThicks(_ids[idx1], int.MinValue, angle);
var th = DataHelper.VectorSub(t1, GetThicks(_ids[idx2], int.MaxValue, angle));
result.ThickToHeatFactor = CalculateHeatToThickFactor(heat, th,
MathNet.Numerics.Statistics.Statistics.Mean(t1));
});
......@@ -1131,7 +1210,14 @@ namespace FLY.HeatingHelper
runcomplete(bk, null);
}
}
/// <summary>
///
/// </summary>
/// <param name="idxL"></param>
/// <param name="idxB"></param>
/// <param name="searchRange"></param>
/// <param name="SearchRotAngle"></param>
/// <returns>返回值:Tuple<偏转数,相关系数,旋转角度变化量></returns>
public Tuple<int,double,double> SearchMaxSimilarity(int idxL,int idxB,double searchRange,bool SearchRotAngle)
{
double maxcorel = double.MinValue;
......@@ -1143,14 +1229,14 @@ namespace FLY.HeatingHelper
idxL = idxB;
idxB = idxL;
}
double angle_B = GetRotAngle(idxB);
double angle_L = GetRotAngle(idxL);
int rb_B = GetResetBolt(idxB);
int rb_L = GetResetBolt(idxL);
Vector<double> vthickL = Vector<double>.Build.DenseOfArray(GetThicks(idxL, rb_B, angle_B));
Vector<double> vthickB = Vector<double>.Build.DenseOfArray(GetThicks(idxB, -1, -1));
Vector<double> v_heatL = Vector<double>.Build.DenseOfArray(GetHeats(idxL, -1, -1));
Vector<double> v_heatB = Vector<double>.Build.DenseOfArray(GetHeats(idxB, -1, -1));
double angle_B = GetRotAngleByIndex(idxB);
double angle_L = GetRotAngleByIndex(idxL);
int rb_B = GetResetBoltByIndex(idxB);
int rb_L = GetResetBoltByIndex(idxL);
Vector<double> vthickL = Vector<double>.Build.DenseOfArray(GetThicksByIndex(idxL, rb_B, angle_B));
Vector<double> vthickB = Vector<double>.Build.DenseOfArray(GetThicksByIndex(idxB, -1, -1));
Vector<double> v_heatL = Vector<double>.Build.DenseOfArray(GetHeatsByIndex(idxL, -1, -1));
Vector<double> v_heatB = Vector<double>.Build.DenseOfArray(GetHeatsByIndex(idxB, -1, -1));
if (!SearchRotAngle)
{
double[] corels = CalculateCorrelVector((vthickL - vthickB).ToArray(), (v_heatB - v_heatL).ToArray());
......@@ -1197,10 +1283,7 @@ namespace FLY.HeatingHelper
/// 搜索旋转角度的范围,例如15,则在当前度数下搜索正负15度
/// </summary>
public double SearchingAngle { get; set; }
/// <summary>
/// 该参数设定不参加搜索的数据
/// </summary>
public int NotSearchMinFrame { get; set; }
/// <summary>
///
/// </summary>
......@@ -1235,13 +1318,16 @@ namespace FLY.HeatingHelper
},
int.MaxValue, 10, true, false);
var r = SearchFeaturedBoltsItem(thickClasses[0].from, thickClasses[0].to, newitems, 5, 100, 5, 5, 5);
foreach (HeatBoltAnalystItem it in r)
if (r != null)
{
tmp.Add(new ThickHeatEvent()
foreach (HeatBoltAnalystItem it in r)
{
EvtCode = ThickHeatEventCode.EVC_HeatBoltItem,
EvtData = it as object
});
tmp.Add(new ThickHeatEvent()
{
EvtCode = ThickHeatEventCode.EVC_HeatBoltItem,
EvtData = it as object
});
}
}
AutoDetectEvents = tmp;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment