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