//this function will add newly trackable into trackableManager public void GetAllTrackables(List <ARTrackable> trackableList) { trackableList.Clear(); IntPtr trackableListHandle = m_ndkSession.TrackableAdapter.CreateList(); NDKAPI.HwArSession_getAllTrackables(m_ndkSession.SessionHandle, NDKARTrackableType.BaseTrackable, trackableListHandle); int cntOfTrackable = m_ndkSession.TrackableAdapter.GetListSize(trackableListHandle); for (int i = 0; i < cntOfTrackable; i++) { IntPtr trackableHandle = m_ndkSession.TrackableAdapter.AcquireListItem(trackableListHandle, i); //todo the following code is to mask 0x41520105 in arcore NDKARTrackableType type = m_ndkSession.TrackableAdapter.GetType(trackableHandle); if ((int)type == 0x41520105) { m_ndkSession.TrackableAdapter.Release(trackableHandle); continue; } trackableList.Add(m_ndkSession.TrackableManager.ARTrackableFactory(trackableHandle, true)); } m_ndkSession.TrackableAdapter.DestroyList(trackableListHandle); }
public NDKARTrackableType GetType(IntPtr trackableHandle) { NDKARTrackableType type = NDKARTrackableType.BaseTrackable; NDKAPI.HwArTrackable_getType(m_ndkSession.SessionHandle, trackableHandle, ref type); return(type); }
public void GetUpdatedTrackables(List <ARTrackable> trackableList) { IntPtr trackableListHandle = m_ndkSession.TrackableAdapter.CreateList(); NDKAPI.HwArFrame_getUpdatedTrackables(m_ndkSession.SessionHandle, m_ndkSession.FrameHandle, NDKARTrackableType.BaseTrackable, trackableListHandle); int sizeOfList = m_ndkSession.TrackableAdapter.GetListSize(trackableListHandle); trackableList.Clear(); for (int i = 0; i < sizeOfList; i++) { IntPtr trackableHandle = m_ndkSession.TrackableAdapter.AcquireListItem(trackableListHandle, i); //todo the flollowing code is used to mask the unpublic trackable of arcore NDKARTrackableType trackableType = m_ndkSession.TrackableAdapter.GetType(trackableHandle); if ((int)trackableType == 0x41520105) { m_ndkSession.TrackableAdapter.Release(trackableHandle); continue; } trackableList.Add(m_ndkSession.TrackableManager.ARTrackableFactory(trackableHandle, false)); } m_ndkSession.TrackableAdapter.DestroyList(trackableListHandle); }
public ARTrackable ARTrackableFactory(IntPtr nativeHandle, bool isCreate = false) { if (nativeHandle == IntPtr.Zero) { return(null); } ARTrackable result; if (m_trackableDict.TryGetValue(nativeHandle, out result)) { m_ndkSession.TrackableAdapter.Release(nativeHandle); return(result); } if (isCreate) { NDKARTrackableType ndkTrackableType = m_ndkSession.TrackableAdapter.GetType(nativeHandle); ARDebug.LogInfo("trackable type {0}", ndkTrackableType.ToString()); switch (ndkTrackableType) { case NDKARTrackableType.Plane: result = new ARPlane(nativeHandle, m_ndkSession); break; case NDKARTrackableType.Point: result = new ARPoint(nativeHandle, m_ndkSession); break; case NDKARTrackableType.Body: result = new ARBody(nativeHandle, m_ndkSession); break; case NDKARTrackableType.Hand: result = new ARHand(nativeHandle, m_ndkSession); break; case NDKARTrackableType.Face: result = new ARFace(nativeHandle, m_ndkSession); break; case NDKARTrackableType.AugmentedImage: result = new ARAugmentedImage(nativeHandle, m_ndkSession); break; //todo add more trackable default: m_ndkSession.TrackableAdapter.Release(nativeHandle); throw new NotImplementedException("ARTrackableFactory: no constructor for requested type"); } m_trackableDict.Add(nativeHandle, result); return(result); } return(null); }
public static extern void HwArTrackable_getType(IntPtr sessionHandle, IntPtr trackableHandle, ref NDKARTrackableType trackableType);
public static extern void HwArSession_getAllTrackables(IntPtr sessionHandle, NDKARTrackableType filterType, IntPtr outTrackableListHandle);
public static extern void HwArFrame_getUpdatedTrackables(IntPtr sessionHandle, IntPtr frameHandle, NDKARTrackableType filterType, IntPtr outTrackableListHandle);