visionPro9.0版のC#高度なスクリプト作成について

しばらくvisionProを学習してきたので、スクリプトの文法問題を記録しておきます

1. 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;
}

2 つ、C# スクリプト メソッドと小さなリスト

//这个为类中的方法,且在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;
}

3. 初期方法と最終的な実行方法

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

4. いくつかのショートカット キー

  1. ノート
  • ctrl+k+c //コードブロックをコメントする
  • ctrl+k+u //コメントを解除
  1. 整列する
  • Ctrl+K+D

おすすめ

転載: blog.csdn.net/GDIUOOO/article/details/129307582