using System.Collections.Generic;
using UnityEngine;
using ZIM.Unity;
using o0InfraredLocate.ZIM;
///
/// JC-补充接口
///
public partial class ScreenLocate
{
public bool IsScreenLoateOK()
{
return screenIdentification != null &&
screenIdentification.Screen != null &&
screenIdentification.Screen.Active;
}
public bool IsScreenLocateManualDoing()
{
return mode == Mode.ScreenLocateManual;
}
public Texture2D EnterScreenLocateManual()
{
CreateUVCTexture2DIfNeeded();
Texture2D texture = mUVCTexture2D.zimAutoLight(0);
mode = Mode.ScreenLocateManual;
return texture;
}
///
/// 屏幕定位时候的实际点转换成算法里面的点
/// 左下、右下、右上、左上 => 左下,右下,左上,右上 (算法)
///
///
public void QuitScreenLocateManual(List points)
{
if (points != null && points.Count == 4)
{
var size = getUVCCameraInfoSize;
Debug.Log("QuitScreenLocateManual Size:" + size);
var quad = new QuadrilateralInCamera(
new o0.Geometry2D.Float.Vector(points[0].x * size.x, points[0].y * size.y),
new o0.Geometry2D.Float.Vector(points[1].x * size.x, points[1].y * size.y),
new o0.Geometry2D.Float.Vector(points[3].x * size.x, points[3].y * size.y),
new o0.Geometry2D.Float.Vector(points[2].x * size.x, points[2].y * size.y),
size.o0Vector());
//screenIdentification?.SetScreenQuad(quad);
screenIdentification.QuadManual = quad;
Debug.Log($"[ScreenLocate] 记录手动数据: {quad}");
}
ToMode(Mode.InfraredLocate);
}
///
/// 传入算法对应的点来设置算法屏幕四边形
///
///
public void QuadUnityVectorListToScreenQuad(List points)
{
if (points != null && points.Count == 4)
{
var size = getUVCCameraInfoSize;
screenIdentification?.SetScreenQuad(
new QuadrilateralInCamera(
new o0.Geometry2D.Float.Vector(points[0].x * size.x, points[0].y * size.y),
new o0.Geometry2D.Float.Vector(points[1].x * size.x, points[1].y * size.y),
new o0.Geometry2D.Float.Vector(points[2].x * size.x, points[2].y * size.y),
new o0.Geometry2D.Float.Vector(points[3].x * size.x, points[3].y * size.y),
size.o0Vector()
)
);
}
ToMode(Mode.InfraredLocate);
}
///
/// 自动校准
///
public void EnterScreenLocateManualAuto()
{
//自动定位时候,清除一下记录的点
//quadUnityVectorList.Clear();
//InfraredCameraHelper?.InvokeOnUVCPosUpdate(quadUnityVectorList);
BtnScreenLocate();
}
///
/// 设置Capture值,测试用
///
///
public void SetCapture(int value)
{
Capture = value;
}
///
/// 设置Delay值,测试用
///
///
public void SetDelay(int value)
{
Delay = value;
}
///
/// 校准点位置同步到[调试面板]
///
public void SyncInfraredDemo()
{
if (quadUnityVectorList.Count == 0) return;
// Vector2 texSize = getUVCCameraInfoSize;
Debug.Log("[ScreenLocate] SyncInfraredDemo : " + PrintVector2List(quadUnityVectorList));
//同步到infaredDemo
FindObjectOfType()?.SetLocatePointsToCameraRender(
quadUnityVectorList,
1,
1);
}
///
/// 校准点位置同步到[手动校准页面]
///
public void SyncInfraredScreenPositioningView()
{
if (quadUnityVectorList.Count == 0) return;
//同步位置
FindObjectOfType()?.SyncScreenPosition();
}
}