使用 CogRecordDisplay控件
这个示例展示了如何使用 CogRecordDisplay 在表单上显示 Blob Tool 的 LastRunRecord 图形。
它还演示了如何通过 BlobTool 的 LastRunRecordEnable 属性有选择性地启用或禁用不同的图形特性。这个模式可以应用于所有 VisionPro 工具。
具体步骤如下:
1. 添加引用
Csharp
using Cognex.VisionPro;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.Exceptions;
using Cognex.VisionPro.ImageFile;
2. 界面设计
1. 新建Windows窗体
2. 添加TabControl控件,增加3个Tabpage.
3. tab1添加CogRecordDisplay控件和2个Button按钮,用于显示图像,运行关闭程序,添加GroupBox,增加3个CheckBox.
4. tab2 添加CogImageFileEditV2控件
5. tab3 添加CogBlobEditV2控件
3. 加载图像和视觉工具图形选中状态
Csharp
private CogImageFileTool CogImageFileTool;
private CogBlobTool BlobTool;
private void InitializeDisplay()
{
string sImageFile = Environment.GetEnvironmentVariable("VPRO_ROOT");
try
{
if (sImageFile == "")
{
throw new Exception("环境变量VPRO_ROOT未配置");
}
sImageFile += @"\images\bracket_std.idb";
CogImageFileTool = cogImageFileEditV21.Subject;
CogImageFileTool.Operator.Open(sImageFile, CogImageFileModeConstants.Read);
BlobTool = cogBlobEditV21.Subject;
BlobTool.Changed += BlobTool_Changed;
BlobTool.Ran += BlobTool_Ran;
BlobTool.DataBindings.Add("InputImage", CogImageFileTool, "OutputImage");
CogImageFileTool.Run();
BlobTool.Run();
SyncGraphicsControls();
}
catch (CogFileOpenException ex)
{
DisplayErrorAndExit(ex.GetType().ToString(), "Caught exception:" + ex.Message + Environment.NewLine + "File" + sImageFile + "is not found");
this.Dispose(true);
}
catch (CogException ex)
{
DisplayErrorAndExit(ex.GetType().ToString(), "Caught Cognex exception:" + ex.Message);
this.Dispose(true);
}
catch (Exception ex) {
DisplayErrorAndExit(ex.GetType().ToString(),"Caught System exception:"+ex.Message);
this.Dispose(true);
}
}
private void DisplayErrorAndExit(string errorType, string message)
{
MessageBox.Show(message,"GraphicsRecord",MessageBoxButtons.OK);
this.Close();
}
private void SyncGraphicsControls()
{
chkShowBoundingBox.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle) != 0;
chkShowBoundary.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsBoundary) != 0;
chkShowCOM.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsCenterOfMass) != 0;
}
4. 订阅Blob工具Ran和Change事件
Csharp
//处理 Blob 工具运行后的事件。如果运行结果不是接受状态,则显示消息框
private void BlobTool_Ran(object sender, EventArgs e)
{
if (BlobTool.RunStatus.Result!=CogToolResultConstants.Accept)
{
MessageBox.Show(BlobTool.RunStatus.Message,"GraphicsRecord");
}
}
//处理 Blob 工具状态变化的事件 检查是否更新了图形记录。如果更新了,创建最后一次运行记录并更新显示
private void BlobTool_Changed(object sender, Cognex.VisionPro.CogChangedEventArgs e)
{
bool GraphicsRecordUpdated = false;
if ((e.StateFlags & CogBlobTool.SfLastRunRecordEnable)!=0)
{
SyncGraphicsControls();
GraphicsRecordUpdated = true;
}
if ((e.StateFlags & CogBlobTool.SfCreateLastRunRecord) != 0) {
GraphicsRecordUpdated = true;
}
if (GraphicsRecordUpdated)
{
ICogRecord lastRunRecord = BlobTool.CreateLastRunRecord();
if (lastRunRecord!=null && lastRunRecord.SubRecords.ContainsKey("InputImage"))
{
cogRecordDisplay1.Record = lastRunRecord.SubRecords["InputImage"];
cogRecordDisplay1.Fit(true);
}
else
{
cogRecordDisplay1.Record = null;
}
}
}
5. 处理按钮点击事件
Csharp
private void button1_Click(object sender, EventArgs e)
{
if (CogImageFileTool!=null)
{
CogImageFileTool.Run();
}
if (BlobTool!=null)
{
BlobTool.Run();
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
6. 处理视觉工具图形选择改变事件
Csharp
private void chkShowBoundingBox_CheckedChanged(object sender, EventArgs e)
{
SetLastRunRecordEnableFlag(chkShowBoundingBox.Checked,CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle);
}
private void chkShowBoundary_CheckedChanged(object sender, EventArgs e)
{
SetLastRunRecordEnableFlag(chkShowBoundary.Checked,CogBlobLastRunRecordConstants.ResultsBoundary);
}
private void chkShowCOM_CheckedChanged(object sender, EventArgs e)
{
SetLastRunRecordEnableFlag(chkShowCOM.Checked,CogBlobLastRunRecordConstants.ResultsCenterOfMass);
}
//当复选框的状态变化时,调用SetLastRunRecordEnableFlag方法更新 Blob 工具的图形记录启用标志。
//SetLastRunRecordEnableFlag方法根据复选框的选中状态启用或禁用 Blob 工具的特定图形特性
private void SetLastRunRecordEnableFlag(bool enabled, CogBlobLastRunRecordConstants flag)
{
if (enabled)
{
BlobTool.LastRunRecordEnable |= flag;
}
else
{
BlobTool.LastRunRecordEnable &= ~flag;
}
}
7. 界面效果
8. 项目示例
整理了包含本文章的11个使用C#进行Cognex VisionPro二次开发学习笔记的示例源码,涵盖了从创建基于QuickBuild的应用程序到使用PMAlign和Caliper工具进行图像处理的多种实践案例,欢迎学习和指正
视觉领域 + 计算机视觉 + Cognex VisionPro + C#二次开发示例
扩展
CogBlobLastRunRecordConstants
是 Cognex VisionPro 框架中定义的一组常量,用于指示 Blob 工具在运行时生成的图形记录的不同特性。这些常量可以用来启用或禁用特定的图形结果记录,以便在后续的分析或显示中使用。
常见常量
以下是一些可能的 CogBlobLastRunRecordConstants
常量及其说明(具体常量可能根据 Cognex 的版本有所不同):
-
ResultsBoundingBoxExtremaAngle
:- 表示生成的图形记录中包含边界框的极值角度信息。
- 适用于需要显示对象的边界信息的场景。
-
ResultsBoundary
:- 表示生成的图形记录中包含边界的详细信息。
- 可用于在图像上显示检测到的物体的边界轮廓。
-
ResultsCenterOfMass
:- 表示生成的图形记录中包含对象的质心位置。
- 在需要分析物体位置或重心的应用中非常有用。
如何使用这些常量
CogBlobLastRunRecordConstants
常量通常在以下场景中使用:
-
启用或禁用图形特性:
-
在用户界面中,可以通过复选框或其他控件让用户选择要显示的图形特性。
-
根据用户的选择,更新
BlobTool.LastRunRecordEnable
属性。例如:csharpif (enabled) { BlobTool.LastRunRecordEnable |= CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle; } else { BlobTool.LastRunRecordEnable &= ~CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle; }
-
以上代码片段表示如果用户启用边界框特性,就将该常量添加到
LastRunRecordEnable
中;如果用户禁用,则将其移除。
-
-
在图形同步中使用:
-
当运行 Blob 工具后,可以检查
LastRunRecordEnable
中的标志,以确定哪些图形特性已启用,并相应地更新用户界面的状态(如复选框的选中状态)。 -
例如:
csharpchkShowBoundingBox.Checked = (BlobTool.LastRunRecordEnable & CogBlobLastRunRecordConstants.ResultsBoundingBoxExtremaAngle) != 0;
-
-
创建和显示图形记录:
-
在 Blob 工具运行后,可以创建一个最后运行记录并根据启用的特性进行图形显示。
-
例如:
csharpICogRecord lastRunRecord = BlobTool.CreateLastRunRecord(); // 根据不同的记录信息更新显示
-
通过检查
lastRunRecord
中的特性,可以决定如何在用户界面中呈现结果。
-
总结
CogBlobLastRunRecordConstants
常量提供了一种灵活的方式来控制 Blob 工具生成的图形记录的特性。通过使用这些常量,可以根据用户的需求来动态调整图形的显示方式,从而增强应用程序的交互性和可用性。