/// <summary> /// Factory method for creating and reusing TrackedPlane references from native handles. /// </summary> /// <param name="nativeHandle">A native handle to a plane that has been acquired. RELEASE WILL BE HANDLED BY /// THIS METHOD.</param> /// <returns>A reference to a tracked plane. </returns> public Trackable TrackableFactory(IntPtr nativeHandle) { if (nativeHandle == IntPtr.Zero) { return(null); } Trackable result; if (m_TrackableDict.TryGetValue(nativeHandle, out result)) { // Release aquired handle and return cached result. m_NativeSession.TrackableApi.Release(nativeHandle); return(result); } ApiTrackableType trackableType = m_NativeSession.TrackableApi.GetType(nativeHandle); if (trackableType == ApiTrackableType.Plane) { result = new TrackedPlane(nativeHandle, m_NativeSession); } else if (trackableType == ApiTrackableType.Point) { result = new TrackedPoint(nativeHandle, m_NativeSession); } else { UnityEngine.Debug.LogFormat("Cant find {0}", trackableType); throw new NotImplementedException("TrackableFactory:: No constructor for requested trackable type."); } m_TrackableDict.Add(nativeHandle, result); return(result); }
/// <summary> /// Factory method for creating and reusing Trackable references from native handles. /// </summary> /// <param name="nativeHandle">A native handle to a plane that has been acquired. RELEASE /// WILL BE HANDLED BY THIS METHOD.</param> /// <returns>A reference to the Trackable. May return <c>null</c> on error or if Trackable /// is not handled.</returns> public Trackable TrackableFactory(IntPtr nativeHandle) { if (nativeHandle == IntPtr.Zero) { return(null); } Trackable result; if (_trackableDict.TryGetValue(nativeHandle, out result)) { // Release aquired handle and return cached result. _nativeSession.TrackableApi.Release(nativeHandle); return(result); } // This block needs to construct classes marked Obsolete since those versions are always // the most derived type. #pragma warning disable 618 // Obsolete warning ApiTrackableType trackableType = _nativeSession.TrackableApi.GetType(nativeHandle); if (trackableType == ApiTrackableType.Plane) { result = new TrackedPlane(nativeHandle, _nativeSession); } else if (trackableType == ApiTrackableType.Point) { result = new TrackedPoint(nativeHandle, _nativeSession); } else if (trackableType == ApiTrackableType.InstantPlacementPoint) { result = new InstantPlacementPoint(nativeHandle, _nativeSession); } else if (trackableType == ApiTrackableType.AugmentedImage) { result = new AugmentedImage(nativeHandle, _nativeSession); } else if (trackableType == ApiTrackableType.AugmentedFace) { result = new AugmentedFace(nativeHandle, _nativeSession); } else if (ExperimentManager.Instance.IsManagingTrackableType((int)trackableType)) { result = ExperimentManager.Instance.TrackableFactory((int)trackableType, nativeHandle); } else { Debug.LogWarning( "TrackableFactory::No constructor for requested trackable type."); } #pragma warning restore 618 if (result != null) { _trackableDict.Add(nativeHandle, result); } return(result); }