hawkeye camera support(not tested)

This commit is contained in:
meelstorm
2025-08-19 12:45:50 +02:00
parent f80b275ad8
commit 6ef6aced8d
170 changed files with 20190 additions and 72 deletions

View File

@@ -155,4 +155,54 @@ public class FindBlobOperation : BaseOperation, IHaveOrigin, IHaveSearchArea
SearchArea.Load(br);
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(MinArea)] = MinArea;
dict[nameof(MaxArea)] = MaxArea;
dict[nameof(MinRadius)] = MinRadius;
dict[nameof(MaxRadius)] = MaxRadius;
dict[nameof(BadIfFound)] = BadIfFound;
dict[nameof(ReferenceId)] = ReferenceId.ToString();
// Save SearchArea properties manually
dict["SearchArea_Editable"] = SearchArea.Editable;
dict["SearchArea_IsGood"] = SearchArea.IsGood;
dict["SearchArea_LocationX"] = SearchArea.Location.X;
dict["SearchArea_LocationY"] = SearchArea.Location.Y;
dict["SearchArea_OffsetX"] = SearchArea.Offset.X;
dict["SearchArea_OffsetY"] = SearchArea.Offset.Y;
dict["SearchArea_SizeX"] = SearchArea.Size.X;
dict["SearchArea_SizeY"] = SearchArea.Size.Y;
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(MinArea)))
MinArea = Convert.ToInt32(dict[nameof(MinArea)]);
if (dict.ContainsKey(nameof(MaxArea)))
MaxArea = Convert.ToInt32(dict[nameof(MaxArea)]);
if (dict.ContainsKey(nameof(MinRadius)))
MinRadius = Convert.ToInt32(dict[nameof(MinRadius)]);
if (dict.ContainsKey(nameof(MaxRadius)))
MaxRadius = Convert.ToInt32(dict[nameof(MaxRadius)]);
if (dict.ContainsKey(nameof(BadIfFound)))
BadIfFound = Convert.ToBoolean(dict[nameof(BadIfFound)]);
if (dict.ContainsKey(nameof(ReferenceId)))
ReferenceId = new Guid(dict[nameof(ReferenceId)].ToString());
// Load SearchArea properties manually
if (dict.ContainsKey("SearchArea_Editable"))
SearchArea.Editable = Convert.ToBoolean(dict["SearchArea_Editable"]);
if (dict.ContainsKey("SearchArea_IsGood"))
SearchArea.IsGood = Convert.ToBoolean(dict["SearchArea_IsGood"]);
if (dict.ContainsKey("SearchArea_LocationX") && dict.ContainsKey("SearchArea_LocationY"))
SearchArea.Location = new Vector2(Convert.ToSingle(dict["SearchArea_LocationX"]), Convert.ToSingle(dict["SearchArea_LocationY"]));
if (dict.ContainsKey("SearchArea_OffsetX") && dict.ContainsKey("SearchArea_OffsetY"))
SearchArea.Offset = new Vector2(Convert.ToSingle(dict["SearchArea_OffsetX"]), Convert.ToSingle(dict["SearchArea_OffsetY"]));
if (dict.ContainsKey("SearchArea_SizeX") && dict.ContainsKey("SearchArea_SizeY"))
SearchArea.Size = new Vector2(Convert.ToSingle(dict["SearchArea_SizeX"]), Convert.ToSingle(dict["SearchArea_SizeY"]));
}
}

View File

@@ -230,4 +230,78 @@ public class FindManyBlobsExtOperation : BaseOperation
ReferenceId = new Guid(br.ReadString());
SearchArea.Load(br);
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(MinArea)] = MinArea;
dict[nameof(MaxArea)] = MaxArea;
dict[nameof(MinRadius)] = MinRadius;
dict[nameof(MaxRadius)] = MaxRadius;
dict[nameof(CheckInternalRadius)] = CheckInternalRadius;
dict[nameof(MinInternalRadius)] = MinInternalRadius;
dict[nameof(MaxInternalRadius)] = MaxInternalRadius;
dict[nameof(CheckWidth)] = CheckWidth;
dict[nameof(MinWidth)] = MinWidth;
dict[nameof(MaxWidth)] = MaxWidth;
dict[nameof(CheckHeight)] = CheckHeight;
dict[nameof(MinHeight)] = MinHeight;
dict[nameof(MaxHeight)] = MaxHeight;
dict[nameof(ReferenceId)] = ReferenceId.ToString();
// Save SearchArea properties manually
dict["SearchArea_Editable"] = SearchArea.Editable;
dict["SearchArea_IsGood"] = SearchArea.IsGood;
dict["SearchArea_LocationX"] = SearchArea.Location.X;
dict["SearchArea_LocationY"] = SearchArea.Location.Y;
dict["SearchArea_OffsetX"] = SearchArea.Offset.X;
dict["SearchArea_OffsetY"] = SearchArea.Offset.Y;
dict["SearchArea_SizeX"] = SearchArea.Size.X;
dict["SearchArea_SizeY"] = SearchArea.Size.Y;
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(MinArea)))
MinArea = Convert.ToInt32(dict[nameof(MinArea)]);
if (dict.ContainsKey(nameof(MaxArea)))
MaxArea = Convert.ToInt32(dict[nameof(MaxArea)]);
if (dict.ContainsKey(nameof(MinRadius)))
MinRadius = Convert.ToInt32(dict[nameof(MinRadius)]);
if (dict.ContainsKey(nameof(MaxRadius)))
MaxRadius = Convert.ToInt32(dict[nameof(MaxRadius)]);
if (dict.ContainsKey(nameof(CheckInternalRadius)))
CheckInternalRadius = Convert.ToBoolean(dict[nameof(CheckInternalRadius)]);
if (dict.ContainsKey(nameof(MinInternalRadius)))
MinInternalRadius = Convert.ToInt32(dict[nameof(MinInternalRadius)]);
if (dict.ContainsKey(nameof(MaxInternalRadius)))
MaxInternalRadius = Convert.ToInt32(dict[nameof(MaxInternalRadius)]);
if (dict.ContainsKey(nameof(CheckWidth)))
CheckWidth = Convert.ToBoolean(dict[nameof(CheckWidth)]);
if (dict.ContainsKey(nameof(MinWidth)))
MinWidth = Convert.ToInt32(dict[nameof(MinWidth)]);
if (dict.ContainsKey(nameof(MaxWidth)))
MaxWidth = Convert.ToInt32(dict[nameof(MaxWidth)]);
if (dict.ContainsKey(nameof(CheckHeight)))
CheckHeight = Convert.ToBoolean(dict[nameof(CheckHeight)]);
if (dict.ContainsKey(nameof(MinHeight)))
MinHeight = Convert.ToInt32(dict[nameof(MinHeight)]);
if (dict.ContainsKey(nameof(MaxHeight)))
MaxHeight = Convert.ToInt32(dict[nameof(MaxHeight)]);
if (dict.ContainsKey(nameof(ReferenceId)))
ReferenceId = new Guid(dict[nameof(ReferenceId)].ToString());
// Load SearchArea properties manually
if (dict.ContainsKey("SearchArea_Editable"))
SearchArea.Editable = Convert.ToBoolean(dict["SearchArea_Editable"]);
if (dict.ContainsKey("SearchArea_IsGood"))
SearchArea.IsGood = Convert.ToBoolean(dict["SearchArea_IsGood"]);
if (dict.ContainsKey("SearchArea_LocationX") && dict.ContainsKey("SearchArea_LocationY"))
SearchArea.Location = new Vector2(Convert.ToSingle(dict["SearchArea_LocationX"]), Convert.ToSingle(dict["SearchArea_LocationY"]));
if (dict.ContainsKey("SearchArea_OffsetX") && dict.ContainsKey("SearchArea_OffsetY"))
SearchArea.Offset = new Vector2(Convert.ToSingle(dict["SearchArea_OffsetX"]), Convert.ToSingle(dict["SearchArea_OffsetY"]));
if (dict.ContainsKey("SearchArea_SizeX") && dict.ContainsKey("SearchArea_SizeY"))
SearchArea.Size = new Vector2(Convert.ToSingle(dict["SearchArea_SizeX"]), Convert.ToSingle(dict["SearchArea_SizeY"]));
}
}

View File

@@ -172,4 +172,51 @@ public class FindManyBlobsOperation:BaseOperation
SearchArea.Load(br);
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(MinArea)] = MinArea;
dict[nameof(MaxArea)] = MaxArea;
dict[nameof(MinRadius)] = MinRadius;
dict[nameof(MaxRadius)] = MaxRadius;
dict[nameof(ReferenceId)] = ReferenceId.ToString();
// Save SearchArea properties manually
dict["SearchArea_Editable"] = SearchArea.Editable;
dict["SearchArea_IsGood"] = SearchArea.IsGood;
dict["SearchArea_LocationX"] = SearchArea.Location.X;
dict["SearchArea_LocationY"] = SearchArea.Location.Y;
dict["SearchArea_OffsetX"] = SearchArea.Offset.X;
dict["SearchArea_OffsetY"] = SearchArea.Offset.Y;
dict["SearchArea_SizeX"] = SearchArea.Size.X;
dict["SearchArea_SizeY"] = SearchArea.Size.Y;
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(MinArea)))
MinArea = Convert.ToInt32(dict[nameof(MinArea)]);
if (dict.ContainsKey(nameof(MaxArea)))
MaxArea = Convert.ToInt32(dict[nameof(MaxArea)]);
if (dict.ContainsKey(nameof(MinRadius)))
MinRadius = Convert.ToInt32(dict[nameof(MinRadius)]);
if (dict.ContainsKey(nameof(MaxRadius)))
MaxRadius = Convert.ToInt32(dict[nameof(MaxRadius)]);
if (dict.ContainsKey(nameof(ReferenceId)))
ReferenceId = new Guid(dict[nameof(ReferenceId)].ToString());
// Load SearchArea properties manually
if (dict.ContainsKey("SearchArea_Editable"))
SearchArea.Editable = Convert.ToBoolean(dict["SearchArea_Editable"]);
if (dict.ContainsKey("SearchArea_IsGood"))
SearchArea.IsGood = Convert.ToBoolean(dict["SearchArea_IsGood"]);
if (dict.ContainsKey("SearchArea_LocationX") && dict.ContainsKey("SearchArea_LocationY"))
SearchArea.Location = new Vector2(Convert.ToSingle(dict["SearchArea_LocationX"]), Convert.ToSingle(dict["SearchArea_LocationY"]));
if (dict.ContainsKey("SearchArea_OffsetX") && dict.ContainsKey("SearchArea_OffsetY"))
SearchArea.Offset = new Vector2(Convert.ToSingle(dict["SearchArea_OffsetX"]), Convert.ToSingle(dict["SearchArea_OffsetY"]));
if (dict.ContainsKey("SearchArea_SizeX") && dict.ContainsKey("SearchArea_SizeY"))
SearchArea.Size = new Vector2(Convert.ToSingle(dict["SearchArea_SizeX"]), Convert.ToSingle(dict["SearchArea_SizeY"]));
}
}

View File

@@ -109,4 +109,54 @@ public class FindRectangleOperation:BaseOperation
BadIfFound = br.ReadBoolean();
SearchArea.Load(br);
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(MinWidth)] = MinWidth;
dict[nameof(MaxWidth)] = MaxWidth;
dict[nameof(MinHeight)] = MinHeight;
dict[nameof(MaxHeight)] = MaxHeight;
dict[nameof(BadIfFound)] = BadIfFound;
dict[nameof(ReferenceId)] = ReferenceId.ToString();
// Save SearchArea properties manually
dict["SearchArea_Editable"] = SearchArea.Editable;
dict["SearchArea_IsGood"] = SearchArea.IsGood;
dict["SearchArea_LocationX"] = SearchArea.Location.X;
dict["SearchArea_LocationY"] = SearchArea.Location.Y;
dict["SearchArea_OffsetX"] = SearchArea.Offset.X;
dict["SearchArea_OffsetY"] = SearchArea.Offset.Y;
dict["SearchArea_SizeX"] = SearchArea.Size.X;
dict["SearchArea_SizeY"] = SearchArea.Size.Y;
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(MinWidth)))
MinWidth = Convert.ToInt32(dict[nameof(MinWidth)]);
if (dict.ContainsKey(nameof(MaxWidth)))
MaxWidth = Convert.ToInt32(dict[nameof(MaxWidth)]);
if (dict.ContainsKey(nameof(MinHeight)))
MinHeight = Convert.ToInt32(dict[nameof(MinHeight)]);
if (dict.ContainsKey(nameof(MaxHeight)))
MaxHeight = Convert.ToInt32(dict[nameof(MaxHeight)]);
if (dict.ContainsKey(nameof(BadIfFound)))
BadIfFound = Convert.ToBoolean(dict[nameof(BadIfFound)]);
if (dict.ContainsKey(nameof(ReferenceId)))
ReferenceId = new Guid(dict[nameof(ReferenceId)].ToString());
// Load SearchArea properties manually
if (dict.ContainsKey("SearchArea_Editable"))
SearchArea.Editable = Convert.ToBoolean(dict["SearchArea_Editable"]);
if (dict.ContainsKey("SearchArea_IsGood"))
SearchArea.IsGood = Convert.ToBoolean(dict["SearchArea_IsGood"]);
if (dict.ContainsKey("SearchArea_LocationX") && dict.ContainsKey("SearchArea_LocationY"))
SearchArea.Location = new Vector2(Convert.ToSingle(dict["SearchArea_LocationX"]), Convert.ToSingle(dict["SearchArea_LocationY"]));
if (dict.ContainsKey("SearchArea_OffsetX") && dict.ContainsKey("SearchArea_OffsetY"))
SearchArea.Offset = new Vector2(Convert.ToSingle(dict["SearchArea_OffsetX"]), Convert.ToSingle(dict["SearchArea_OffsetY"]));
if (dict.ContainsKey("SearchArea_SizeX") && dict.ContainsKey("SearchArea_SizeY"))
SearchArea.Size = new Vector2(Convert.ToSingle(dict["SearchArea_SizeX"]), Convert.ToSingle(dict["SearchArea_SizeY"]));
}
}

View File

@@ -103,4 +103,23 @@ public class TwoBlobsAlign:BaseOperation,IHaveOrigin
DesiredAngle = br.ReadInt32();
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(Reference1)] = Reference1.ToString();
dict[nameof(Reference2)] = Reference2.ToString();
dict[nameof(DesiredAngle)] = DesiredAngle;
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(Reference1)))
Reference1 = new Guid(dict[nameof(Reference1)].ToString());
if (dict.ContainsKey(nameof(Reference2)))
Reference2 = new Guid(dict[nameof(Reference2)].ToString());
if (dict.ContainsKey(nameof(DesiredAngle)))
DesiredAngle = Convert.ToInt32(dict[nameof(DesiredAngle)]);
}
}

View File

@@ -100,5 +100,21 @@ public class EdgeIntersectionOperation : BaseOperation, IHaveOrigin
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(ReferenceEdge1)] = ReferenceEdge1.ToString();
dict[nameof(ReferenceEdge2)] = ReferenceEdge2.ToString();
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(ReferenceEdge1)))
ReferenceEdge1 = new Guid(dict[nameof(ReferenceEdge1)].ToString());
if (dict.ContainsKey(nameof(ReferenceEdge2)))
ReferenceEdge2 = new Guid(dict[nameof(ReferenceEdge2)].ToString());
}
public OriginElement Origin { get; set; } = OriginElement.Default;
}

View File

@@ -124,6 +124,48 @@ public class FindEdgeOperation : BaseOperation, IHaveEdge, IHaveOrigin
SearchArea.Load(br);
}
public override void Save(Dictionary<string, object> dict)
{
base.Save(dict);
dict[nameof(ReferenceId)] = ReferenceId.ToString();
// Save RotatedRectangleElement SearchArea properties manually
dict["SearchArea_Editable"] = SearchArea.Editable;
dict["SearchArea_IsGood"] = SearchArea.IsGood;
dict["SearchArea_LocationX"] = SearchArea.Location.X;
dict["SearchArea_LocationY"] = SearchArea.Location.Y;
dict["SearchArea_OffsetX"] = SearchArea.Offset.X;
dict["SearchArea_OffsetY"] = SearchArea.Offset.Y;
dict["SearchArea_HeightX"] = SearchArea.Height.X;
dict["SearchArea_HeightY"] = SearchArea.Height.Y;
dict["SearchArea_HalfWidth"] = SearchArea.HalfWidth;
}
public override void Load(Dictionary<string, object> dict)
{
base.Load(dict);
if (dict.ContainsKey(nameof(ReferenceId)))
ReferenceId = new Guid(dict[nameof(ReferenceId)].ToString());
// Load RotatedRectangleElement SearchArea properties manually
if (dict.ContainsKey("SearchArea_Editable") || dict.ContainsKey("SearchArea_LocationX") || dict.ContainsKey("SearchArea_HeightX"))
{
SearchArea = new RotatedRectangleElement();
if (dict.ContainsKey("SearchArea_Editable"))
SearchArea.Editable = Convert.ToBoolean(dict["SearchArea_Editable"]);
if (dict.ContainsKey("SearchArea_IsGood"))
SearchArea.IsGood = Convert.ToBoolean(dict["SearchArea_IsGood"]);
if (dict.ContainsKey("SearchArea_LocationX") && dict.ContainsKey("SearchArea_LocationY"))
SearchArea.Location = new Vector2(Convert.ToSingle(dict["SearchArea_LocationX"]), Convert.ToSingle(dict["SearchArea_LocationY"]));
if (dict.ContainsKey("SearchArea_OffsetX") && dict.ContainsKey("SearchArea_OffsetY"))
SearchArea.Offset = new Vector2(Convert.ToSingle(dict["SearchArea_OffsetX"]), Convert.ToSingle(dict["SearchArea_OffsetY"]));
if (dict.ContainsKey("SearchArea_HeightX") && dict.ContainsKey("SearchArea_HeightY"))
SearchArea.Height = new Vector2(Convert.ToSingle(dict["SearchArea_HeightX"]), Convert.ToSingle(dict["SearchArea_HeightY"]));
if (dict.ContainsKey("SearchArea_HalfWidth"))
SearchArea.HalfWidth = Convert.ToSingle(dict["SearchArea_HalfWidth"]);
}
}
public RotatedRectangleElement SearchArea { get; set; }
public OriginElement Origin { get; set; }