Commit 8e4e5914 LN

PcbOffsetInfo增加json处理

1 个父辈 fdc8b6d2
......@@ -9,6 +9,8 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using TSA_V.LoadCSVLibrary;
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace TSA_V.DeviceLibrary
{
......@@ -98,6 +100,7 @@ namespace TSA_V.DeviceLibrary
public void SetPCBOffset(int pcbIndex, PcbOffsetInfo value)
{
mPCbOffsetMap[pcbIndex] = value;
LogUtil.info("boardName=" + boardName + ", SetPCBOffset: pcbIndex=" + pcbIndex + ", value=" + value.ToString());
}
public int PointColor = Color.White.ToArgb();
......@@ -546,6 +549,7 @@ namespace TSA_V.DeviceLibrary
public long uTime;
}
[JsonConverter(typeof(PcbOffsetInfoConverter))]
public class PcbOffsetInfo
{
......@@ -565,4 +569,89 @@ namespace TSA_V.DeviceLibrary
}
// 兼容旧版数据格式的转换器:支持字符串 "x, y"、数组 [x,y,(a)]、对象 {X:x,Y:y,A:a}
public class PcbOffsetInfoConverter : JsonConverter<PcbOffsetInfo>
{
public override void WriteJson(JsonWriter writer, PcbOffsetInfo value, JsonSerializer serializer)
{
if (value == null)
{
writer.WriteNull();
return;
}
writer.WriteStartObject();
writer.WritePropertyName("X");
writer.WriteValue(value.X);
writer.WritePropertyName("Y");
writer.WriteValue(value.Y);
writer.WritePropertyName("A");
writer.WriteValue(value.A);
writer.WriteEndObject();
}
public override PcbOffsetInfo ReadJson(JsonReader reader, Type objectType, PcbOffsetInfo existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
try
{
switch (reader.TokenType)
{
case JsonToken.String:
{
string s = (reader.Value as string) ?? string.Empty;
var parts = s.Split(new[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select(p => p.Trim()).ToArray();
int x = parts.Length > 0 && int.TryParse(parts[0], out var xi) ? xi : 0;
int y = parts.Length > 1 && int.TryParse(parts[1], out var yi) ? yi : 0;
int a = parts.Length > 2 && int.TryParse(parts[2], out var ai) ? ai : 0;
return new PcbOffsetInfo(x, y, a);
}
case JsonToken.StartArray:
{
var arr = JArray.Load(reader);
int x = arr.Count > 0 ? SafeInt(arr[0]) : 0;
int y = arr.Count > 1 ? SafeInt(arr[1]) : 0;
int a = arr.Count > 2 ? SafeInt(arr[2]) : 0;
return new PcbOffsetInfo(x, y, a);
}
case JsonToken.StartObject:
{
var obj = JObject.Load(reader);
int x = SafeInt(obj["X"] ?? obj["x"]);
int y = SafeInt(obj["Y"] ?? obj["y"]);
int a = SafeInt(obj["A"] ?? obj["a"]);
return new PcbOffsetInfo(x, y, a);
}
case JsonToken.Integer:
case JsonToken.Float:
{
// 单值时,视为 X,Y/A = 0(极少出现,做兜底)
int x = Convert.ToInt32(reader.Value);
return new PcbOffsetInfo(x, 0, 0);
}
default:
return new PcbOffsetInfo(0, 0, 0);
}
}
catch
{
// 解析失败兜底,避免导入中断
return new PcbOffsetInfo(0, 0, 0);
}
}
private static int SafeInt(JToken t)
{
if (t == null) return 0;
if (t.Type == JTokenType.Integer) return (int)t;
if (t.Type == JTokenType.Float) return (int)((double)t);
if (t.Type == JTokenType.String && int.TryParse((string)t, out var v)) return v;
return 0;
}
}
}
......@@ -139,7 +139,7 @@ namespace TSA_V.DeviceLibrary
//smtPoint.PointSize = 4;
//smtPoint.NodePositionX = BPoint.NodePositionX - (BPoint.NodePositionX - APoint.NodePositionX) * (BPoint.PositionX - smtPoint.PositionX) / (BPoint.PositionX - APoint.PositionX);
//smtPoint.NodePositionY = BPoint.NodePositionY - (BPoint.NodePositionY - APoint.NodePositionY) * (BPoint.PositionY - smtPoint.PositionY) / (BPoint.PositionY - APoint.PositionY);
LogUtil.info($" 【{smtPoint.PN}】图片坐标【{smtPoint.PositionX},{smtPoint.PositionY}】旧坐标【{oldX},{oldY}】新坐标【{smtPoint.NodePositionX},{smtPoint.NodePositionY}】" +
LogUtil.debug($" 【{smtPoint.PN}】图片坐标【{smtPoint.PositionX},{smtPoint.PositionY}】旧坐标【{oldX},{oldY}】新坐标【{smtPoint.NodePositionX},{smtPoint.NodePositionY}】" +
$"点尺寸({smtPoint.PointSizeX},{smtPoint.PointSizeY}),画笔宽{smtPoint.PenWidth}");
return smtPoint;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!