using Hawkeye.VisionBuilder.Workflow.Datatypes; using Hawkeye.VisionBuilder.Workflow.Datatypes.Elements.Rectangle; using Hawkeye.VisionBuilder.Workflow.Operations.Attributes; using OpenCvSharp; namespace Hawkeye.VisionBuilder.Workflow.Operations.Morphology; [Category("Morphology")] public class CutOperation:BaseOperation { private readonly WorkflowList _workflowList; public Guid ReferencePoint { get; set; } = new Guid(); public RectangleElement? SearchArea { get; set; } = null; public CutOperation(WorkflowList workflowList) { _workflowList = workflowList; SearchArea = new RectangleElement() { Editable = true, Location = Vector2.One * 5, Size = new Vector2(100, 100), IsGood = true }; CanHaveProcessingError = false; } public override void SetParameters(Dictionary parameters) { base.SetParameters(parameters); SearchArea.SetPivot(_workflowList.GetOriginById(ReferencePoint).Origin.Location); } protected override void InterpretInternal(Context context) { if (!CheckImageExists(context))return; SearchArea.MovePivot(_workflowList.GetOriginById(ReferencePoint).Origin.Location); context.GraphicsElements.Add(SearchArea); var img = context.ActiveImage.ImageData; var mat = new Mat(img.Size(), img.Type(), Scalar.Black); SearchArea.FillMat(mat); var cut = img.BitwiseAnd(mat).ToMat(); context.ActiveImage=new HawkeyeImage() { ImageData = cut }; Status="Cut"; Result = true; } public override void Save(BinaryWriter bw) { base.Save(bw); bw.Write(ReferencePoint.ToString()); SearchArea.Save(bw); } public override void Load(BinaryReader br) { base.Load(br); ReferencePoint = new Guid(br.ReadString()); SearchArea = new RectangleElement(); SearchArea.Load(br); } }