Example #1
0
        static TrackingState GetTrackingState(XRPlaneSubsystem planeSubsystem, TrackableId planeId)
        {
            TrackingState trackingState;

            PlaneApi.TryGetTrackingState(planeId, out trackingState);
            return(trackingState);
        }
Example #2
0
        internal void UpdateBoundary(XRPlaneSubsystem subsystem)
        {
            // subsystem cannot be null here
            if (subsystem.SubsystemDescriptor.supportsBoundaryVertices)
            {
                subsystem.GetBoundary(trackableId, Allocator.Persistent, ref m_Boundary);
            }
            else
            {
                if (!m_Boundary.IsCreated)
                {
                    m_Boundary = new NativeArray <Vector2>(4, Allocator.Persistent);
                }
                else if (m_Boundary.Length != 4)
                {
                    m_Boundary.Dispose();
                    m_Boundary = new NativeArray <Vector2>(4, Allocator.Persistent);
                }

                var extents = sessionRelativeData.extents;
                m_Boundary[0] = new Vector2(-extents.x, -extents.y);
                m_Boundary[1] = new Vector2(-extents.x, extents.y);
                m_Boundary[2] = new Vector2(extents.x, extents.y);
                m_Boundary[3] = new Vector2(extents.x, -extents.y);
            }

            if (boundaryChanged != null)
            {
                CheckForBoundaryChanges();
            }
        }
Example #3
0
        /// <summary>
        /// Retrieve the <c>TrackingState</c> of the given <paramref name="planeId"/>.
        /// </summary>
        /// <param name="planeSubsystem">The <c>XRPlaneSubsystem</c> being extended.</param>
        /// <param name="planeId">The <c>TrackableId</c> associated with this plane.</param>
        /// <returns>The <c>TrackingState</c> of the plane with id <paramref name="planeId"/>.</returns>
        public static TrackingState GetTrackingState(this XRPlaneSubsystem planeSubsystem, TrackableId planeId)
        {
            if (planeSubsystem == null)
            {
                throw new ArgumentNullException("planeSubsystem");
            }

            return(s_GetTrackingStateDelegate(planeSubsystem, planeId));
        }
        /// <summary>
        /// Attempt to set the <see cref="PlaneDetectionFlags"/>.
        /// </summary>
        /// <param name="planeSubsystem">The <c>XRPlaneSubsystem</c> being extended.</param>
        /// <param name="flags">The plane detection mode(s) to enable.</param>
        /// <returns><c>true</c> if the flags were successfully set, <c>false</c> otherwise.</returns>
        public static bool TrySetPlaneDetectionFlags(this XRPlaneSubsystem planeSubsystem, PlaneDetectionFlags flags)
        {
            if (planeSubsystem == null)
            {
                throw new ArgumentNullException("planeSubsystem");
            }

            return(s_TrySetPlaneDetectionFlagsDelegate(planeSubsystem, flags));
        }
Example #5
0
        /// <summary>
        /// Retrieves a native <c>IntPtr</c> associated with a plane with <c>TrackableId</c>
        /// <paramref name="trackableId"/>.
        /// </summary>
        /// <param name="planeSubsystem">The <c>XRPlaneSubsystem</c> being extended.</param>
        /// <param name="trackableId">The <c>TrackableId</c> of a reference point.</param>
        /// <returns>An <c>IntPtr</c> associated with the reference point, or <c>IntPtr.Zero</c> if unavailable.</returns>
        public static IntPtr GetNativePtr(this XRPlaneSubsystem planeSubsystem,
                                          TrackableId planeId)
        {
            if (planeSubsystem == null)
            {
                throw new ArgumentNullException("planeSubsystem");
            }

            return(s_GetNativePtrDelegate(planeSubsystem, planeId));
        }
 public static BoundedPlane GetPlane(this XRPlaneSubsystem planeSubsystem, TrackableId trackableId)
 {
     planeSubsystem.GetAllPlanes(s_BoundedPlanes);
     foreach (var plane in s_BoundedPlanes)
     {
         if (plane.Id == trackableId)
         {
             return(plane);
         }
     }
     return(new BoundedPlane());
 }
Example #7
0
 /// <summary>
 /// Sets the active subsystem whose extension methods should be used.
 /// </summary>
 /// <param name="planeSubsystem">The <c>XRPlaneSubsystem</c> being extended.</param>
 public static void ActivateExtensions(this XRPlaneSubsystem planeSubsystem)
 {
     if (planeSubsystem == null)
     {
         SetDefaultDelegates();
     }
     else
     {
         var id = planeSubsystem.SubsystemDescriptor.id;
         s_GetNativePtrDelegate     = RegistrationHelper.GetValueOrDefault(s_GetNativePtrDelegates, id, DefaultGetNativePtr);
         s_GetTrackingStateDelegate = RegistrationHelper.GetValueOrDefault(s_GetTrackingStateDelegates, id, DefaultGetTrackingState);
     }
 }
        /// <summary>
        /// Retrieve the <c>TrackingState</c> of the given <paramref name="planeId"/>.
        /// </summary>
        /// <param name="planeSubsystem">The <c>XRPlaneSubsystem</c> being extended.</param>
        /// <param name="planeId">The <c>TrackableId</c> associated with this plane.</param>
        /// <returns>The <c>TrackingState</c> of the plane with id <paramref name="planeId"/>.</returns>
        public static TrackingState GetTrackingState(this XRPlaneSubsystem planeSubsystem, TrackableId planeId)
        {
            if (planeSubsystem == null)
            {
                throw new ArgumentNullException("planeSubsystem");
            }

            Func <XRPlaneSubsystem, TrackableId, TrackingState> handler;

            if (s_GetTrackingStateDelegates.TryGetValue(planeSubsystem.SubsystemDescriptor.id, out handler))
            {
                return(handler(planeSubsystem, planeId));
            }
            else
            {
                return(TrackingState.Unknown);
            }
        }
Example #9
0
        void OnSceneGUI(SceneView sceneView)
        {
            if (visualizeRemotingData && EditorApplication.isPlaying)
            {
                if (m_depth == null)
                {
                    m_depth = CreateSubsystem <XRDepthSubsystemDescriptor, XRDepthSubsystem>(m_depthDescriptors,
                                                                                             m_subsystemFilter);

                    m_depth.Start();
                }

                m_depth.GetPoints(points);

                if (m_plane == null)
                {
                    m_plane = CreateSubsystem <XRPlaneSubsystemDescriptor, XRPlaneSubsystem>(m_planeDescriptors,
                                                                                             m_subsystemFilter);

                    m_plane.Start();
                }

                foreach (var p in points)
                {
                    Handles.color = pointOutlineColor;
                    Handles.DrawWireCube(p, Vector3.one * visualizeScale);
                }

                points.Clear();
                planes.Clear();
                m_plane.GetAllPlanes(planes);

                foreach (var plane in planes)
                {
                    if (plane.TryGetBoundary(points))
                    {
                        Handles.color = planeColor;

                        var boundaryArray = points.ToArray();
                        Handles.DrawAAConvexPolygon(boundaryArray);

                        Handles.color = planeOutlineColor;

                        Handles.DrawPolyLine(boundaryArray);
                        Handles.DrawLine(boundaryArray[boundaryArray.Length - 1], boundaryArray[0]);
                    }
                }

                Handles.color = Color.white;

                if (visualizeCameraPath)
                {
                    foreach (var cameraPos in m_cameraPositions)
                    {
                        Handles.DrawPolyLine(m_cameraPositions.ToArray());
                    }
                }

                Handles.color = cameraSidePlaneOutlineColor;

                if (cameraToStream != null)
                {
                    var       camera         = cameraToStream;
                    Vector3[] frustumCorners = new Vector3[4];
                    camera.CalculateFrustumCorners(new Rect(0, 0, 1, 1), camera.farClipPlane, Camera.MonoOrStereoscopicEye.Mono, frustumCorners);

                    for (int i = 0; i < 4; i++)
                    {
                        var worldSpaceCorner = camera.transform.TransformVector(frustumCorners[i]);
                        Handles.DrawLine(cameraToStream.transform.position, worldSpaceCorner);
                    }

                    Handles.color = cameraFarPlaneOutlineColor;

                    Handles.DrawLine(camera.transform.TransformVector(frustumCorners[0]), camera.transform.TransformVector(frustumCorners[1]));
                    Handles.DrawLine(camera.transform.TransformVector(frustumCorners[1]), camera.transform.TransformVector(frustumCorners[2]));
                    Handles.DrawLine(camera.transform.TransformVector(frustumCorners[2]), camera.transform.TransformVector(frustumCorners[3]));
                    Handles.DrawLine(camera.transform.TransformVector(frustumCorners[3]), camera.transform.TransformVector(frustumCorners[0]));

                    Handles.color = cameraSidePlaneColor;

                    Vector3[] topFrustrum = { camera.transform.TransformVector(frustumCorners[1]), camera.transform.TransformVector(frustumCorners[2]), camera.transform.position };
                    Handles.DrawAAConvexPolygon(topFrustrum);

                    Vector3[] sideFrustrum = { camera.transform.TransformVector(frustumCorners[2]), camera.transform.TransformVector(frustumCorners[3]), camera.transform.position };
                    Handles.DrawAAConvexPolygon(sideFrustrum);

                    Vector3[] bottomFrustrum = { camera.transform.TransformVector(frustumCorners[3]), camera.transform.TransformVector(frustumCorners[0]), camera.transform.position };
                    Handles.DrawAAConvexPolygon(bottomFrustrum);

                    Vector3[] leftFrustrum = { camera.transform.TransformVector(frustumCorners[0]), camera.transform.TransformVector(frustumCorners[1]), camera.transform.position };
                    Handles.DrawAAConvexPolygon(leftFrustrum);

                    Handles.color = cameraFarPlaneColor;

                    Vector3[] cameraFrustrum = { camera.transform.TransformVector(frustumCorners[0]), camera.transform.TransformVector(frustumCorners[1]), camera.transform.TransformVector(frustumCorners[2]), camera.transform.TransformVector(frustumCorners[3]) };

                    Handles.DrawAAConvexPolygon(cameraFrustrum);
                }
                Handles.BeginGUI();

                Handles.EndGUI();
            }
        }
Example #10
0
 static IntPtr DefaultGetNativePtr(XRPlaneSubsystem referencePointSubsystem,
                                   TrackableId trackableId)
 {
     return(IntPtr.Zero);
 }
Example #11
0
 static TrackingState DefaultGetTrackingState(this XRPlaneSubsystem planeSubsystem, TrackableId planeId)
 {
     return(TrackingState.Unknown);
 }
 static bool DefaultTrySetPlaneDetectionFlags(
     XRPlaneSubsystem planeSubsystem, PlaneDetectionFlags flags)
 {
     return(false);
 }
Example #13
0
 static IntPtr GetNativePtr(XRPlaneSubsystem planeSubsystem, TrackableId planeId)
 {
     return(Api.UnityARCore_getNativePlanePtr(planeId));
 }
Example #14
0
 static TrackingState GetTrackingState(XRPlaneSubsystem planeSubsystem, TrackableId planeId)
 {
     return(Api.UnityARCore_getAnchorTrackingState(planeId));
 }
Example #15
0
 static bool TrySetPlaneDetectionFlags(XRPlaneSubsystem planeSubsystem, PlaneDetectionFlags flags)
 {
     return(Api.UnityARCore_trySetPlaneDetectionFlags(flags));
 }
Example #16
0
 public void SetSubsystemDependencies(XRDepthSubsystem depth, XRPlaneSubsystem plane)
 {
     xrDepthSubsystem = depth;
     xrPlaneSubsystem = plane;
 }