学习visionPro也有一段时间了,接下来记录一下脚本的语法问题
一、c#脚本的类及 使用集合图形
使用集合图形,要导入空间命名
using System.Collections.Generic;
//这就是c#的类
public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
CogGraphicCollection col = new CogGraphicCollection(); //定义集合图形
//在类里面的变量为全局变量
List<int> list2 = new List<int>();
bool sum = true;
int isTrue,isFalse,o;
String startTime;
}
二、c#脚本的方法及 小用list
//这个为类中的方法,且在visionPro外面运行是运行方法而不是类
public override bool GroupRun(ref string message, ref CogToolResultConstants result)
{
//这里定义的为局部变量只能在方法内使用
List<int> list1 = new List<int>();
bool FlowResult = true;
CogPMAlignTool PMA1 = (CogPMAlignTool) mToolBlock.Tools["CogPMAlignTool1"];
CogFixtureTool FixtureTool1 = (CogFixtureTool) mToolBlock.Tools["CogFixtureTool1"];
CogToolBlock cbt = mToolBlock.Tools["findCg"] as CogToolBlock;
CogPMAlignTool cpt1 = (CogPMAlignTool) cbt.Tools["CogPMAlignTool1"];
CogPMAlignTool cpt2 = (CogPMAlignTool) cbt.Tools["CogPMAlignTool2"];
CogPMAlignTool[] cpt = new CogPMAlignTool[]{cpt1,cpt2};
if(PMA1.RunStatus.Result == CogToolResultConstants.Accept && PMA1.Results.Count == 1)
{
for( int i = -4 ;i < 4 ;i++)
{
CogTransform2DLinear trans1 = FixtureTool1.RunParams.UnfixturedFromFixturedTransform as CogTransform2DLinear;
//角度旋转
trans1.Rotation = PMA1.Results[0].GetPose().Rotation + i * Math.PI / 4;
FixtureTool1.Run();
//运行模板匹配工具
cbt.Run();
for (int j = 0; j < cpt.Length; j++)
{
//获取模板匹配工具的仿射矩形匹配范围,region:匹配范围
CogRectangleAffine c1 = cpt[j].Pattern.TrainRegion as CogRectangleAffine;
//旋转角度trans1,并设置模板匹配工具的匹配范围,找出结果
CogRectangleAffine c2 = c1.Map(trans1, CogCopyShapeConstants.All) as CogRectangleAffine;
c2.Color = cpt[j].Results.Count != 1 ? CogColorConstants.Red : CogColorConstants.Green;
//添加CogRectangleAffine类型到集合图形中
col.Add(c2);
CogGraphicLabel label = new CogGraphicLabel();
int d = col.Count - 1;
if(cpt[j].Results.Count!=1){
list1.Add(d);
}
//这样就可以只获取第一个的模板匹配
if(d % 3 == 0){
CogRectangleAffine rect = col[d] as CogRectangleAffine;
double x = rect.CenterX;
double y = rect.CenterY;
//防止找不到模板cpt1.Results[0]为null而报错,导致运行不了
if(cpt[j].Results.Count != 0){
label.SetXYText(x, y, cpt1.Results[0].Score.ToString("F3"));//F3为保留小数点后三位
}
label.Color = CogColorConstants.Blue;
//添加标签类到集合图形中
col.Add(label);
}
} //大for循环
}//大if判断
else{
FlowResult = false;
}
bool tiaoshi = (bool) mToolBlock.Inputs["tiaoshi"].Value;
int okCount = (int) mToolBlock.Outputs["okCount"].Value;
//获取当前时间
mToolBlock.Outputs["startTime"].Value = System.DateTime.Now.ToString();
if(list1.Count == list2.Count && list2 != null){
//这块语法糖是比较两个list是否相等。
list1.ForEach(t =>
compare = list2.Equals(t)
);
}
list2.Clear();
//这是复制list1到另一个list2上
list1.ForEach(i => list2.Add(i));
if(tiaoshi){
if(FlowResult != sum){
o = FlowResult == true ? ++isTrue : ++isFalse;
}
else if(sum){
o = FlowResult == true ? ++isTrue : ++isFalse;
}
}else{
mToolBlock.Outputs["okCount"].Value = isTrue;
}
return false;
}
三、初始方法 及 最后运行的方法
public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord)
{
foreach(ICogGraphic x in col){
mToolBlock.AddGraphicToRunRecord(x, lastRecord, "CogImageConvertTool1.OutputImage", "sc");
}
}
public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host)
{
base.Initialize(host);
this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock) (host));
}
}
四、一些快捷键
- 注释
- ctrl+k+c //注释代码块
- ctrl+k+u //取消注释
- 对齐
- ctrl+k+d