/******************************************** * 版本号:V1.2 * 作者: 孙剑 * 最后修改时间:2022年5月23日 * * 类功能说明: * * * 第一个方法: * public static bool PMARunStatus(CogPMAlignTool pmaTool, int i) 可保证任何情况下使用PMATool的结果是可用的, * 不可用时返回false。程序不会报错和崩溃。 * ------------------------------------------- * 调用例程: * double pmaRotation = 0; * double pmaX = 0; * double pmaY = 0; * if (CPMARunStatus.PMARunStatus(myPMATool, 1)) { pmaRotation = myPMATool.Results[i].GetPose().Rotation; pmaX = myPMATool.Results[i].GetPose().TranslationX; pmaY = myPMATool.Results[i].GetPose().TranslationY; } * -------------------------------------------- * 第二个方法 在cogRecordDisplay_0的控件上画出匹配的外形轮廓和十字标线, * 注意,您如果没让PMATool图形显示您所要的轮廓线,有可能不能画出 * CPMARunStatus.DrawPMA(myPMATool, cogRecordDisplay_0); * * 第三个方法只是画了一个自定义的十字。 * * 备注:画图的方法是在一个CogRecordDisplay上画出。 * ********************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using Cognex.VisionPro.PMAlign; using Cognex.VisionPro; namespace AVP.CRobot { /// /// 返回CogPMAlignTool的运行结果,请调用PMARunStatus方法 /// class CPMARunStatus { /// /// 返回CogPMAlignTool的运行结果,工具运行成功,并且数量>=i 的时候返回true /// /// PMA工具Tool /// 预期找到的数量 /// 数量>=i 的时候返回true public static bool PMARunStatus(CogPMAlignTool pmaTool, int i) { if (pmaTool.RunStatus.Result == CogToolResultConstants.Accept) { if (pmaTool.Results.Count >= i) return true; } return false; } /// /// 利用输入的PMATool,在CogRecordDisplay 上画出找到工件的轮廓 /// /// 输入的PMATool /// 输入要显示的CogRecordDisplay public static void DrawPMA(CogPMAlignTool pmaTool, CogRecordDisplay disp) { if (pmaTool.RunStatus.Result == CogToolResultConstants.Accept) { if (pmaTool.Results.Count > 0) //判断输入的PMATool是否有结果,才可以画图 { foreach (CogPMAlignResult item in pmaTool.Results) { disp.InteractiveGraphics.Add(item.CreateResultGraphics(CogPMAlignResultGraphicConstants.MatchFeatures), "", false); disp.InteractiveGraphics.Add(item.CreateResultGraphics(CogPMAlignResultGraphicConstants.CoordinateAxes), "", false); } } } } /// /// 画十字 /// /// /// /// /// /// /// public static void DrawPointMarker(double centerX, double centerY, double angle, CogColorConstants color, CogRecordDisplay myDisplay, string spaceName) { CogPointMarker cgMarker = new CogPointMarker { X = centerX, Y = centerY, Rotation = angle, //弧度 Color = color, SelectedSpaceName = spaceName, Interactive = true, LineWidthInScreenPixels = 2, SizeInScreenPixels = 50 }; myDisplay.InteractiveGraphics.Add(cgMarker, null, false); } /// /// 在给定的图像空间中画圆 /// /// /// /// /// /// public static void DrawCircle(double centerX, double centerY, CogColorConstants color, CogRecordDisplay myDisplay, string spaceName) { CogCircle cgCirlcle = new CogCircle { CenterX = centerX, CenterY = centerY, Color = color, SelectedSpaceName = spaceName }; myDisplay.InteractiveGraphics.Add(cgCirlcle, null, false); } /// /// 在给定的图像空间中画线段 /// /// /// /// /// /// /// /// public static void DrawLineSegment(double startX, double startY, double endX, double endY, CogColorConstants color, CogRecordDisplay myDisplay, string spaceName) { CogLineSegment cgLineSegment = new CogLineSegment { StartX = startX, StartY = startY, EndX = endX, EndY = endY, Color = color, SelectedSpaceName = spaceName, StartPointAdornment = CogLineSegmentAdornmentConstants.Arrow, EndPointAdornment = CogLineSegmentAdornmentConstants.Arrow }; myDisplay.InteractiveGraphics.Add(cgLineSegment, null, false); } } }