关于visionPro9.0版本的c#高级脚本编写(1)

学习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));
  }
}

四、一些快捷键

  1. 注释
  • ctrl+k+c //注释代码块
  • ctrl+k+u //取消注释
  1. 对齐
  • ctrl+k+d
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值