/// <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); }
/// <summary> /// Initialize the visual effect. /// </summary> /// <param name="trackable">The Trackable that's associated to this object.</param> public void InitializeWithTrackable(Trackable trackable) { if (trackable is InstantPlacementPoint) { _instantPlacementPoint = trackable as InstantPlacementPoint; _isOn = _instantPlacementPoint.TrackingMethod != InstantPlacementPointTrackingMethod.FullTracking; } else { _isOn = false; } if (_isOn) { var renderer = GetComponent <MeshRenderer>(); renderer.materials = HolographicMaterials; } }