Ejemplo n.º 1
0
        //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);
        }
Ejemplo n.º 2
0
        public NDKARTrackableType GetType(IntPtr trackableHandle)
        {
            NDKARTrackableType type = NDKARTrackableType.BaseTrackable;

            NDKAPI.HwArTrackable_getType(m_ndkSession.SessionHandle, trackableHandle, ref type);
            return(type);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 public static extern void HwArTrackable_getType(IntPtr sessionHandle, IntPtr trackableHandle,
                                                 ref NDKARTrackableType trackableType);
Ejemplo n.º 6
0
 public static extern void HwArSession_getAllTrackables(IntPtr sessionHandle,
                                                        NDKARTrackableType filterType, IntPtr outTrackableListHandle);
Ejemplo n.º 7
0
 public static extern void HwArFrame_getUpdatedTrackables(IntPtr sessionHandle, IntPtr frameHandle,
                                                          NDKARTrackableType filterType, IntPtr outTrackableListHandle);