[VisionPro] Introducción al script C#

1. Funciones principales

        Ejecute con la herramienta ToolBlocks para obtener resultados de salida más deterministas

2. Configuración

 Hay tres lugares que se pueden cambiar.

Propiedad: establece las propiedades de esta clase.

Método GroupRun: Aquí está el contenido principal de la operación del script

Método ModifyLastRunRecord: se utiliza para procesar el resultado final después de que se ejecuta el script.

3. Referencia del código de script

#region namespace imports
using System;
using System.Collections;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro3D;
using Cognex.VisionPro.PMAlign;
using Cognex.VisionPro.CalibFix;
using Cognex.VisionPro.ImageProcessing;
using Cognex.VisionPro.Caliper;
using Cognex.VisionPro.Blob;
#endregion

public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
  #region Private Member Variables
  private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
  CogCircle blobRoi = new CogCircle();
  CogGraphicCollection blobs = new CogGraphicCollection();
  #endregion

  /// <summary>
  /// Called when the parent tool is run.
  /// Add code here to customize or replace the normal run behavior.
  /// </summary>
  /// <param name="message">Sets the Message in the tool's RunStatus.</param>
  /// <param name="result">Sets the Result in the tool's RunStatus</param>
  /// <returns>True if the tool should run normally,
  ///          False if GroupRun customizes run behavior</returns>
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {
    // To let the execution stop in this script when a debugger is attached, uncomment the following lines.
    // #if DEBUG
    // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();
    // #endif


    // Run each tool using the RunTool function
    CogPMAlignTool PMATool = mToolBlock.Tools["CogPMAlignTool1"] as CogPMAlignTool;
    CogFixtureTool fixture = mToolBlock.Tools["CogFixtureTool1"] as CogFixtureTool;
    CogAffineTransformTool transform = mToolBlock.Tools["CogAffineTransformTool1"] as CogAffineTransformTool;
    CogCopyRegionTool copyRegion1 = mToolBlock.Tools["CogCopyRegionTool1"] as CogCopyRegionTool;
    CogCopyRegionTool copyRegion2 = mToolBlock.Tools["CogCopyRegionTool2"] as CogCopyRegionTool;
    CogFindCircleTool findCircle = mToolBlock.Tools["CogFindCircleTool1"] as  CogFindCircleTool;
    PMATool.Run();
    fixture.Run();
    transform.Run();
    copyRegion1.Run();
    copyRegion2.Run();
    findCircle.Run();
   
    blobRoi = findCircle.Results.GetCircle();
    blobRoi.Radius = blobRoi.Radius - 50.0;
    
    CogBlobTool blobTool = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
    blobTool.Region = blobRoi;
    blobTool.Run();
    blobs.Clear();
    var blobRes = blobTool.Results.GetBlobs();
    for (int i = 0; i < blobRes.Count; ++i)
    {
      CogPolygon poly = new CogPolygon();
      poly = blobRes[i].GetBoundary();
      poly.Color = CogColorConstants.Orange;
      blobs.Add(poly.Copy(CogCopyShapeConstants.All));
    }
    mToolBlock.Outputs["blobCounts"].Value = blobRes.Count;
    
    CogImage8Grey image = (CogImage8Grey) mToolBlock.Inputs["OutputImage"].Value;
    Bitmap bitmap = image.ToBitmap();
    CogTransform2DLinear affine = PMATool.Results[0].GetPose();
    for(int i = 0;i < blobRes.Count;i++)
    {
      CogPolygon poly = new CogPolygon();      
      poly = blobRes[i].GetBoundary();
      int pointsNumber = poly.NumVertices;
      double xMin = 5120;
      double yMin = 5120;
      double xMax = 0;
      double yMax = 0;
      for(int ii = 0;ii < pointsNumber;ii++)
      {
        double x =  poly.GetVertexX(ii);
        double y =  poly.GetVertexY(ii);
        double xMap = 0;
        double yMap = 0;
        affine.MapPoint(x,y,out xMap,out yMap);
        xMin = xMap < xMin ? xMap : xMin;
        yMin = yMap < yMin ? yMap : yMin;
        xMax = xMap > xMax ? xMap : xMax;
        yMax = yMap > yMax ? yMap : yMax;
      }
      double temp = xMin;
      while(temp <= xMax)
      {
        bitmap.SetPixel((int)temp,(int)yMin-3, Color.Red);  
        bitmap.SetPixel((int)temp,(int)yMax+3, Color.Red);
        temp=temp+1;
      }
      temp = yMin;
      while(temp < yMax)
      {
        bitmap.SetPixel((int)xMin-3,(int)temp, Color.Red);  
        bitmap.SetPixel((int)xMax+3,(int)temp, Color.Red);
        temp = temp + 1;
      }
    }
    mToolBlock.Outputs["OutputImages"].Value = new CogImage24PlanarColor(bitmap);
    
    return false;
  }

  #region When the Current Run Record is Created
  /// <summary>
  /// Called when the current record may have changed and is being reconstructed
  /// </summary>
  /// <param name="currentRecord">
  /// The new currentRecord is available to be initialized or customized.</param>
  public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord)
  {
  }
  #endregion

  #region When the Last Run Record is Created
  /// <summary>
  /// Called when the last run record may have changed and is being reconstructed
  /// </summary>
  /// <param name="lastRecord">
  /// The new last run record is available to be initialized or customized.</param>
  public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord)
  {
    blobRoi.Color = CogColorConstants.Green;
    mToolBlock.AddGraphicToRunRecord(blobRoi, lastRecord, "CogAffineTransformTool1.OutputImage", "");
    foreach(ICogGraphic p in blobs)
      mToolBlock.AddGraphicToRunRecord(p, lastRecord, "CogAffineTransformTool1.OutputImage", "");
  }
  #endregion

  #region When the Script is Initialized
  /// <summary>
  /// Perform any initialization required by your script here
  /// </summary>
  /// <param name="host">The host tool</param>
  public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host)
  {
    // DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE
    base.Initialize(host);


    // Store a local copy of the script host
    this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host));
  }
  #endregion

}

Primero defina este parámetro ToolBlock y luego primero recorra (o defina cada nombre de variable de herramienta ToolBlock) para ejecutar cada herramienta en el método GroupRun. Después de eso es su propia operación personalizada.

Supongo que te gusta

Origin blog.csdn.net/weixin_43163656/article/details/127689660
Recomendado
Clasificación