using System.Collections.Generic; using UnityEngine; using static Ximmerse.XR.PluginVioFusion; namespace Ximmerse.XR.Tag { /// /// A component that implements the large spatial positioning function, including the field properties required by the function. /// [AddComponentMenu("Ximmerse XR/Tag Ground Plane")] public class TagGroundPlane : GroundSpace { #region Property internal static List tagGroundPlaneList = new List(); private int m_beaconCoordSystemFlag = 1; private float timer = 0; public int TrackId { get => trackID; set => trackID = value; } public bool DebugView { get => m_debugView; set => m_debugView = value; } public float Size { get => m_size; set => m_size = value; } public float BeaconDriftRecenterDistanceThreshold { get => m_distance; set => m_distance = value; } public float BeaconDriftRecenterAngleThreshold { get => m_angle; set => m_angle = value; } public float BeaconConfidenceThresh { get => m_Confidence; set => m_Confidence = value; } public float BeaconMinDistanceThresh { get => m_minDistance; set => m_minDistance = value; } public float BeaconMaxDistanceThresh { get => m_maxDistance; set => m_maxDistance = value; } public int BeaconCoordSystemFlag { get => m_beaconCoordSystemFlag; set => m_beaconCoordSystemFlag = value; } private XAttrBeaconInWorldInfo SetBeaconFusion() { //< ÉèÖÃbeacon µ½ vio fusion£¬Æ½·Å Vector3 pos = FixXRPosition(); Quaternion rot = FixXRRotation(); XAttrBeaconInWorldInfo beacon_in_world_info = new XAttrBeaconInWorldInfo(trackID); beacon_in_world_info.drift_recenter_angle_threshold = BeaconDriftRecenterAngleThreshold; beacon_in_world_info.drift_recenter_distance_threshold = BeaconDriftRecenterDistanceThreshold; beacon_in_world_info.group_id = -1; beacon_in_world_info.coord_system_flag = BeaconCoordSystemFlag; //0=right hand coord system, 1 = left hand coord system beacon_in_world_info.confidence_thresh = BeaconConfidenceThresh; beacon_in_world_info.max_distance_thresh = BeaconMaxDistanceThresh; beacon_in_world_info.min_distance_thresh = BeaconMinDistanceThresh; beacon_in_world_info.beacon_id = trackID; beacon_in_world_info.rotation[0] = rot.x; beacon_in_world_info.rotation[1] = rot.y; beacon_in_world_info.rotation[2] = rot.z; beacon_in_world_info.rotation[3] = rot.w; beacon_in_world_info.position[0] = pos.x; beacon_in_world_info.position[1] = pos.y; beacon_in_world_info.position[2] = pos.z; return beacon_in_world_info; } public XAttrBeaconInWorldInfo beacon_info { get => SetBeaconFusion(); } /// /// tracking state /// public bool isTracking { get => IsTracking(); } protected override void Awake() { tagGroundPlaneList.Add(this); } protected override void OnDestroy() { tagGroundPlaneList.Remove(this); } #endregion } }