Commit d313fbe3 张东亮

1

1 个父辈 363fea0d
...@@ -111,6 +111,123 @@ namespace DeviceLibrary ...@@ -111,6 +111,123 @@ namespace DeviceLibrary
/// <returns></returns> /// <returns></returns>
public static Point CalcLabelPoint(LabelParam labelParam, Point org, int Label_R_Offset, int Label_R_Angle_Diff, out int labelAngle) 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); SolidBrush blue = new SolidBrush(Color.DarkBlue);
//料盘中心点 //料盘中心点
...@@ -165,25 +282,22 @@ namespace DeviceLibrary ...@@ -165,25 +282,22 @@ namespace DeviceLibrary
labelAngle = 0; labelAngle = 0;
return Point.Empty; return Point.Empty;
} }
angles.Sort();
if (labelParam.PlateW == 15) for (int i = 0; i < angles.Count - 2; i++)
{ {
labelAngle = angles[0] + 120; int min = angles[i];
} int max = angles[i + 1];
else if (labelParam.PlateW == 13) if((max-min)>labelAngle)
{ {
labelAngle = angles[0] + 180; labelAngle = (max - min)/2;
LogUtil.info($"labelAngle{i}:{labelAngle}");
} }
else
{
labelAngle = angles[0] + 180;
} }
widthOffset = widthOffsets.Min();
widthOffset = widthOffsets[0]; LogUtil.info($"use widthOffset:{widthOffset},angle:{labelAngle}");
LogUtil.info($"use widthOffset:{widthOffset}");
labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle; labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle; labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
LogUtil.info($"labelAngle1:{labelAngle}");
var p1 = PointWithAngle(org, labelAngle, widthOffset); var p1 = PointWithAngle(org, labelAngle, widthOffset);
g.FillEllipse(tmpPlace, new Rectangle(p1, pointsize)); g.FillEllipse(tmpPlace, new Rectangle(p1, pointsize));
//匹配照片角度与贴标旋转轴的角度差--左右两侧角度 //匹配照片角度与贴标旋转轴的角度差--左右两侧角度
...@@ -204,7 +318,7 @@ namespace DeviceLibrary ...@@ -204,7 +318,7 @@ namespace DeviceLibrary
} }
else else
{ {
labelAngle=(labelAngle - 180) + Label_R_Angle_Diff; labelAngle = (labelAngle - 180) + Label_R_Angle_Diff;
} }
//labelAngle = 360 - labelAngle; //labelAngle = 360 - labelAngle;
////贴标位置相对于水平正方向的角度 ////贴标位置相对于水平正方向的角度
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!