/********************************************
* 版本号: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);
}
}
}