Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hemei
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
潘栩锋
hemei
Commits
7ee393fd
Commit
7ee393fd
authored
Jan 09, 2020
by
540597360@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用数据ID标识数据
parent
759d1131
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
255 additions
and
154 deletions
+255
-154
Page_HeatDetector.xaml.cs
...x/FLY.HeatingHelper.UI/UIModule/Page_HeatDetector.xaml.cs
+11
-6
UC_AirRingShift.xaml
...st.Fix/FLY.HeatingHelper.UI/UIModule/UC_AirRingShift.xaml
+2
-1
UC_AirRingShift.xaml.cs
...Fix/FLY.HeatingHelper.UI/UIModule/UC_AirRingShift.xaml.cs
+23
-0
UC_FrameDiffViewModel.cs
...ix/FLY.HeatingHelper.UI/UIModule/UC_FrameDiffViewModel.cs
+3
-1
UC_FramePicker.xaml.cs
....Fix/FLY.HeatingHelper.UI/UIModule/UC_FramePicker.xaml.cs
+6
-2
IThickHeatData.cs
....ThickHeatAnalyst.Fix/FLY.HeatingHelper/IThickHeatData.cs
+50
-70
ThickHeatData.cs
...Y.ThickHeatAnalyst.Fix/FLY.HeatingHelper/ThickHeatData.cs
+160
-74
No files found.
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper.UI/UIModule/Page_HeatDetector.xaml.cs
View file @
7ee393fd
...
...
@@ -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>
/// 选择要处理的数据(按I
ndex
)
/// 选择要处理的数据(按I
D
)
/// </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
;
...
...
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper.UI/UIModule/UC_AirRingShift.xaml
View file @
7ee393fd
...
...
@@ -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>
...
...
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper.UI/UIModule/UC_AirRingShift.xaml.cs
View file @
7ee393fd
...
...
@@ -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
;
...
...
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper.UI/UIModule/UC_FrameDiffViewModel.cs
View file @
7ee393fd
...
...
@@ -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
();
...
...
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper.UI/UIModule/UC_FramePicker.xaml.cs
View file @
7ee393fd
...
...
@@ -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
;
}
});
}
...
...
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper/IThickHeatData.cs
View file @
7ee393fd
...
...
@@ -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
...
...
Project.FLY.ThickHeatAnalyst.Fix/FLY.HeatingHelper/ThickHeatData.cs
View file @
7ee393fd
...
...
@@ -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>
p
ublic
int
[]
CalculateMaxHeatVariation
(
object
_aclass
)
p
rivate
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>
p
ublic
double
CalculateHeatToThickFactor
(
double
[]
heats
,
double
[]
thicks
,
double
thickmean
)
p
rivate
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
=
_
heat
s
[
0
].
Count
();
int
cnt
=
_
thick
s
[
0
].
Count
();
if
((
to
>=
cnt
)
||
(
to
<
0
))
to
=
cnt
-
1
;
if
((
from
<
0
)
||
(
from
>
to
))
from
=
0
;
return
_
heat
s
[
idx
].
Skip
(
from
).
Take
(
to
-
from
+
1
).
ToArray
();
return
_
thick
s
[
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
[
i
d
x
])
>
0.001
)
if
(
Math
.
Abs
(
newAngle
-
_rotAngles
[
i
nde
x
])
>
0.001
)
{
ret
=
ReSampleForChangeRotAngle
(
ret
,
_resetBolts
[
i
dx
],
newAngle
/
_rotAngles
[
id
x
]);
ret
=
ReSampleForChangeRotAngle
(
ret
,
_resetBolts
[
i
ndex
],
newAngle
/
_rotAngles
[
inde
x
]);
}
}
if
(
newResetBolt
!=
int
.
MaxValue
)
{
int
cnt
=
ret
.
Count
();
int
s
=
newResetBolt
-
_resetBolts
[
i
d
x
];
int
s
=
newResetBolt
-
_resetBolts
[
i
nde
x
];
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
(
GetHeats
ByIndex
((
i
)
,
-
1
,
-
1
));
var
h2
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetHeats
ByIndex
((
j
)
,
-
1
,
-
1
));
var
v1
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetThicks
ByIndex
((
i
)
,
-
1
,
-
1
));
var
v2
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetThicks
ByIndex
((
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
=
GetRotAngle
ByIndex
(
idxB
);
double
angle_L
=
GetRotAngle
ByIndex
(
idxL
);
int
rb_B
=
GetResetBolt
ByIndex
(
idxB
);
int
rb_L
=
GetResetBolt
ByIndex
(
idxL
);
Vector
<
double
>
vthickL
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetThicks
ByIndex
(
idxL
,
rb_B
,
angle_B
));
Vector
<
double
>
vthickB
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetThicks
ByIndex
(
idxB
,
-
1
,
-
1
));
Vector
<
double
>
v_heatL
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetHeats
ByIndex
(
idxL
,
-
1
,
-
1
));
Vector
<
double
>
v_heatB
=
Vector
<
double
>.
Build
.
DenseOfArray
(
GetHeats
ByIndex
(
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
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment