Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
NS200
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
图表
网络
创建新的问题
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit d313fbe3
由
张东亮
编写于
2023-04-10 17:00:01 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1
1 个父辈
363fea0d
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
129 行增加
和
15 行删除
DeviceLibrary/AutoScanAndLabel/Common.cs
DeviceLibrary/AutoScanAndLabel/Common.cs
查看文件 @
d313fbe
...
...
@@ -111,6 +111,123 @@ namespace DeviceLibrary
/// <returns></returns>
public
static
Point
CalcLabelPoint
(
LabelParam
labelParam
,
Point
org
,
int
Label_R_Offset
,
int
Label_R_Angle_Diff
,
out
int
labelAngle
)
{
bool
singlefeature
=
ConfigHelper
.
Config
.
Get
(
"UseSingleFeatureCode"
,
true
);
if
(
singlefeature
)
return
calcSinglePrimaryLabelPoint
(
labelParam
,
org
,
Label_R_Offset
,
Label_R_Angle_Diff
,
out
labelAngle
);
else
return
calcMultiPrimaryLabelPoint
(
labelParam
,
org
,
Label_R_Offset
,
Label_R_Angle_Diff
,
out
labelAngle
);
}
static
Point
calcSinglePrimaryLabelPoint
(
LabelParam
labelParam
,
Point
org
,
int
Label_R_Offset
,
int
Label_R_Angle_Diff
,
out
int
labelAngle
)
{
//标签位置
SolidBrush
blue
=
new
SolidBrush
(
Color
.
DarkBlue
);
//料盘中心点
SolidBrush
red
=
new
SolidBrush
(
Color
.
Red
);
SolidBrush
tmpPlace
=
new
SolidBrush
(
Color
.
BlueViolet
);
//贴标位置
SolidBrush
yeelow
=
new
SolidBrush
(
Color
.
Yellow
);
Font
font
=
new
Font
(
FontFamily
.
GenericSansSerif
,
60
);
Pen
Greenpen
=
new
Pen
(
Color
.
Green
,
10
);
Bitmap
srcbitmap
;
if
(
File
.
Exists
(
labelParam
.
bitmapfilename
))
{
srcbitmap
=
new
Bitmap
(
labelParam
.
bitmapfilename
);
}
else
{
srcbitmap
=
new
Bitmap
(
3648
,
3648
);
}
Bitmap
bitmap
=
new
Bitmap
(
srcbitmap
.
Width
,
srcbitmap
.
Height
,
PixelFormat
.
Format32bppArgb
);
Graphics
g
=
Graphics
.
FromImage
(
bitmap
);
g
.
DrawImage
(
srcbitmap
,
0
,
0
);
int
srcbitmap_Width
=
srcbitmap
.
Width
;
srcbitmap
.
Dispose
();
Size
pointsize
=
new
Size
(
60
,
60
);
int
widthOffset
=
0
;
Point
Right_Batch_Point
=
org
;
g
.
FillEllipse
(
red
,
new
Rectangle
(
Right_Batch_Point
,
pointsize
));
int
angle
=
0
;
if
(
labelParam
.
codeInfos
.
Count
==
0
)
{
labelAngle
=
0
;
return
Point
.
Empty
;
}
var
feature
=
labelParam
.
codeInfos
[
0
];
Point
op
=
new
Point
(
feature
.
X
,
feature
.
Y
);
g
.
FillEllipse
(
blue
,
new
Rectangle
(
op
,
pointsize
));
var
a
=
(
int
)
getAngle
(
Right_Batch_Point
,
op
);
angle
=
a
<
0
?
360
+
a
:
a
;
widthOffset
=
(
int
)
Common
.
distance
(
org
,
op
);
LogUtil
.
info
(
$
"angle:{a}, widthOffset:{widthOffset}"
);
if
(
labelParam
.
PlateW
==
15
)
{
labelAngle
=
angle
+
120
;
}
else
if
(
labelParam
.
PlateW
==
13
)
{
labelAngle
=
angle
+
180
;
}
else
{
labelAngle
=
angle
+
180
;
}
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
LogUtil
.
info
(
$
"labelAngle1:{labelAngle}"
);
var
p1
=
PointWithAngle
(
org
,
labelAngle
,
widthOffset
);
g
.
FillEllipse
(
tmpPlace
,
new
Rectangle
(
p1
,
pointsize
));
//匹配照片角度与贴标旋转轴的角度差--左右两侧角度
labelAngle
+=
83
;
LogUtil
.
info
(
$
"labelAngle2:{labelAngle}"
);
//g.FillEllipse(red, new Rectangle(PointRotate(org, op, labelAngle), pointsize));
//贴标坐标
var
p2
=
PointWithAngle
(
org
,
labelAngle
,
widthOffset
);
//贴标偏移
var
p3
=
PointWithAngle
(
p2
,
labelAngle
,
Label_R_Offset
);
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
if
(
labelAngle
<=
180
)
{
labelAngle
=
Label_R_Angle_Diff
-
(
180
-
labelAngle
);
}
else
{
labelAngle
=
(
labelAngle
-
180
)
+
Label_R_Angle_Diff
;
}
//labelAngle = 360 - labelAngle;
////贴标位置相对于水平正方向的角度
//LogUtil.info($"labelAngle4:{labelAngle}");
////标签横向位置相对圆心的角度
//labelAngle += Label_R_Angle_Diff;
labelAngle
=
labelAngle
<
0
?
labelAngle
+
360
:
labelAngle
;
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
LogUtil
.
info
(
$
"labelAngle5:{labelAngle}"
);
g
.
FillEllipse
(
yeelow
,
new
Rectangle
(
p2
,
pointsize
));
g
.
Save
();
g
.
Dispose
();
string
dir
=
"/image/labeldebug/"
;
if
(!
Directory
.
Exists
(
dir
))
Directory
.
CreateDirectory
(
dir
);
string
filepath
=
dir
+
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd-HH-mm-ss"
)
+
".jpg"
;
bitmap
.
Save
(
filepath
,
ImageFormat
.
Jpeg
);
LabelResult
?.
Invoke
(
new
LabelResult
()
{
Bitmap
=
(
Bitmap
)
bitmap
.
Clone
()
});
bitmap
.
Dispose
();
return
p2
;
}
static
Point
calcMultiPrimaryLabelPoint
(
LabelParam
labelParam
,
Point
org
,
int
Label_R_Offset
,
int
Label_R_Angle_Diff
,
out
int
labelAngle
)
{
labelAngle
=
0
;
//标签位置
SolidBrush
blue
=
new
SolidBrush
(
Color
.
DarkBlue
);
//料盘中心点
...
...
@@ -165,25 +282,22 @@ namespace DeviceLibrary
labelAngle
=
0
;
return
Point
.
Empty
;
}
angles
.
Sort
();
if
(
labelParam
.
PlateW
==
15
)
for
(
int
i
=
0
;
i
<
angles
.
Count
-
2
;
i
++
)
{
labelAngle
=
angles
[
0
]
+
120
;
}
else
if
(
labelParam
.
PlateW
==
13
)
{
labelAngle
=
angles
[
0
]
+
180
;
}
else
{
labelAngle
=
angles
[
0
]
+
180
;
int
min
=
angles
[
i
];
int
max
=
angles
[
i
+
1
];
if
((
max
-
min
)>
labelAngle
)
{
labelAngle
=
(
max
-
min
)/
2
;
LogUtil
.
info
(
$
"labelAngle{i}:{labelAngle}"
);
}
}
widthOffset
=
widthOffsets
[
0
];
LogUtil
.
info
(
$
"use widthOffset:{widthOffset}"
);
widthOffset
=
widthOffsets
.
Min
();
LogUtil
.
info
(
$
"use widthOffset:{widthOffset},angle:{labelAngle}"
);
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
labelAngle
=
labelAngle
>
360
?
labelAngle
-
360
:
labelAngle
;
LogUtil
.
info
(
$
"labelAngle1:{labelAngle}"
);
var
p1
=
PointWithAngle
(
org
,
labelAngle
,
widthOffset
);
g
.
FillEllipse
(
tmpPlace
,
new
Rectangle
(
p1
,
pointsize
));
//匹配照片角度与贴标旋转轴的角度差--左右两侧角度
...
...
@@ -204,7 +318,7 @@ namespace DeviceLibrary
}
else
{
labelAngle
=
(
labelAngle
-
180
)
+
Label_R_Angle_Diff
;
labelAngle
=
(
labelAngle
-
180
)
+
Label_R_Angle_Diff
;
}
//labelAngle = 360 - labelAngle;
////贴标位置相对于水平正方向的角度
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论