You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.5 KiB
C#
187 lines
5.5 KiB
C#
using System;
|
|
using HalconDotNet;
|
|
|
|
namespace ViewWindow.Model
|
|
{
|
|
|
|
/// <summary>
|
|
/// This class is a base class containing virtual methods for handling
|
|
/// ROIs. Therefore, an inheriting class needs to define/override these
|
|
/// methods to provide the ROIController with the necessary information on
|
|
/// its (= the ROIs) shape and position. The example project provides
|
|
/// derived ROI shapes for rectangles, lines, circles, and circular arcs.
|
|
/// To use other shapes you must derive a new class from the base class
|
|
/// ROI and implement its methods.
|
|
/// </summary>
|
|
[Serializable]
|
|
public class ROI
|
|
{
|
|
private string color = "yellow";
|
|
|
|
public string Color
|
|
{
|
|
get { return this.color; }
|
|
set { this.color = value; }
|
|
}
|
|
|
|
private string _type;
|
|
public string Type
|
|
{
|
|
get
|
|
{
|
|
return this._type ;
|
|
}
|
|
set
|
|
{
|
|
this._type = value;
|
|
}
|
|
}
|
|
|
|
// class members of inheriting ROI classes
|
|
protected int NumHandles;
|
|
protected int activeHandleIdx;
|
|
|
|
/// <summary>
|
|
/// Flag to define the ROI to be 'positive' or 'negative'.
|
|
/// </summary>
|
|
protected int OperatorFlag;
|
|
|
|
/// <summary>Parameter to define the line style of the ROI.</summary>
|
|
public HTuple flagLineStyle;
|
|
|
|
/// <summary>Constant for a positive ROI flag.</summary>
|
|
public const int POSITIVE_FLAG = ROIController.MODE_ROI_POS;
|
|
|
|
/// <summary>Constant for a negative ROI flag.</summary>
|
|
public const int NEGATIVE_FLAG = ROIController.MODE_ROI_NEG;
|
|
|
|
public const int ROI_TYPE_LINE = 10;
|
|
public const int ROI_TYPE_CIRCLE = 11;
|
|
public const int ROI_TYPE_CIRCLEARC = 12;
|
|
public const int ROI_TYPE_RECTANCLE1 = 13;
|
|
public const int ROI_TYPE_RECTANGLE2 = 14;
|
|
|
|
|
|
protected HTuple posOperation = new HTuple();
|
|
protected HTuple negOperation = new HTuple(new int[] { 2, 2 });
|
|
|
|
/// <summary>Constructor of abstract ROI class.</summary>
|
|
public ROI() { }
|
|
|
|
public virtual void createRectangle1(double row1, double col1, double row2, double col2) { }
|
|
public virtual void createRectangle2(double row, double col, double phi, double length1, double length2) { }
|
|
public virtual void createCircle(double row,double col,double radius) { }
|
|
public virtual void createLine(double beginRow, double beginCol, double endRow, double endCol) { }
|
|
|
|
/// <summary>Creates a new ROI instance at the mouse position.</summary>
|
|
/// <param name="midX">
|
|
/// x (=column) coordinate for ROI
|
|
/// </param>
|
|
/// <param name="midY">
|
|
/// y (=row) coordinate for ROI
|
|
/// </param>
|
|
public virtual void createROI(double midX, double midY) { }
|
|
|
|
/// <summary>Paints the ROI into the supplied window.</summary>
|
|
/// <param name="window">HALCON window</param>
|
|
public virtual void draw(HalconDotNet.HWindow window) { }
|
|
|
|
/// <summary>
|
|
/// Returns the distance of the ROI handle being
|
|
/// closest to the image point(x,y)
|
|
/// </summary>
|
|
/// <param name="x">x (=column) coordinate</param>
|
|
/// <param name="y">y (=row) coordinate</param>
|
|
/// <returns>
|
|
/// Distance of the closest ROI handle.
|
|
/// </returns>
|
|
public virtual double distToClosestHandle(double x, double y)
|
|
{
|
|
return 0.0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Paints the active handle of the ROI object into the supplied window.
|
|
/// </summary>
|
|
/// <param name="window">HALCON window</param>
|
|
public virtual void displayActive(HalconDotNet.HWindow window) { }
|
|
|
|
/// <summary>
|
|
/// Recalculates the shape of the ROI. Translation is
|
|
/// performed at the active handle of the ROI object
|
|
/// for the image coordinate (x,y).
|
|
/// </summary>
|
|
/// <param name="x">x (=column) coordinate</param>
|
|
/// <param name="y">y (=row) coordinate</param>
|
|
public virtual void moveByHandle(double x, double y) { }
|
|
|
|
/// <summary>Gets the HALCON region described by the ROI.</summary>
|
|
public virtual HRegion getRegion()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public virtual double getDistanceFromStartPoint(double row, double col)
|
|
{
|
|
return 0.0;
|
|
}
|
|
/// <summary>
|
|
/// Gets the model information described by
|
|
/// the ROI.
|
|
/// </summary>
|
|
public virtual HTuple getModelData()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
/// <summary>Number of handles defined for the ROI.</summary>
|
|
/// <returns>Number of handles</returns>
|
|
public int getNumHandles()
|
|
{
|
|
return NumHandles;
|
|
}
|
|
|
|
/// <summary>Gets the active handle of the ROI.</summary>
|
|
/// <returns>Index of the active handle (from the handle list)</returns>
|
|
public int getActHandleIdx()
|
|
{
|
|
return activeHandleIdx;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the sign of the ROI object, being either
|
|
/// 'positive' or 'negative'. This sign is used when creating a model
|
|
/// region for matching applications from a list of ROIs.
|
|
/// </summary>
|
|
public int getOperatorFlag()
|
|
{
|
|
return OperatorFlag;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets the sign of a ROI object to be positive or negative.
|
|
/// The sign is used when creating a model region for matching
|
|
/// applications by summing up all positive and negative ROI models
|
|
/// created so far.
|
|
/// </summary>
|
|
/// <param name="flag">Sign of ROI object</param>
|
|
public void setOperatorFlag(int flag)
|
|
{
|
|
OperatorFlag = flag;
|
|
|
|
switch (OperatorFlag)
|
|
{
|
|
case ROI.POSITIVE_FLAG:
|
|
flagLineStyle = posOperation;
|
|
break;
|
|
case ROI.NEGATIVE_FLAG:
|
|
flagLineStyle = negOperation;
|
|
break;
|
|
default:
|
|
flagLineStyle = posOperation;
|
|
break;
|
|
}
|
|
}
|
|
}//end of class
|
|
}//end of namespace
|