2026-03-30 17:09:29 +09:00

52 lines
2.1 KiB
C#

using VisionCommon;
using System.Collections.Generic;
namespace VisionAligner {
/// <summary>
/// 얼라인 계산을 담당한다
/// </summary>
public abstract class Aligner {
/// <summary>
/// 얼라인 정보를 초기화한다
/// </summary>
public abstract void Clear();
/// <summary>
/// N-포인트 얼라인을 진행한다
/// </summary>
/// <param name="meaPoints">패턴 검출 위치</param>
/// <param name="refPoints">레퍼런스(기준) 위치</param>
/// <param name="flipY">좌표계의 Y축 반전 여부</param>
/// <returns>얼라인 결과</returns>
public abstract AlignResult Align(List<DoublePoint> meaPoints, List<DoublePoint> refPoints, int flipY);
/// <summary>
/// 1-포인트 얼라인을 진행한다
/// </summary>
/// <param name="meaPoint">패턴 검출 위치</param>
/// <param name="refPoint">레퍼런스(기준) 위치</param>
/// <param name="flipY">좌표계의 Y축 반전 여부</param>
/// <returns>얼라인 결과</returns>
public abstract AlignResult Align(DoublePoint meaPoint, DoublePoint refPoint, Angle theta, int flipY);
/// <summary>
/// 외부에서 레시피가 새로 저장된 경우, 레시피를 갱신해준다.
/// </summary>
/// <param name="alignMode">얼라인 모드</param>
public abstract void UpdateRecipe(AlignMode alignMode); // 레시피가 변경된 경우, 업데이트
/// <summary>
/// 얼라인 상태가 NG인지 확인
/// </summary>
/// <param name="status">얼라인 상태</param>
/// <returns>얼라인 상태가 NG인 여부</returns>
public bool IsAlignStatusNG(AlignStatus status) {
switch (status) {
case AlignStatus.NOT_FOUND:
case AlignStatus.ALIGN_LIMIT_OVER:
case AlignStatus.RETRY_COUNT_OVER:
case AlignStatus.DISTANCE_NG:
return true;
default:
return false;
}
}
}
}