private void SafeAdd <T>(NRTrackable trackable, List <T> trackables) where T : NRTrackable
 {
     if (trackable is T)
     {
         trackables.Add(trackable as T);
     }
 }
Пример #2
0
        /**
         * @brief Get the list of trackables with specified filter.
         * @param[out] trackableList A list where the returned trackable stored. The previous values will be cleared.
         * @param filter Query filter.
         */
        public void GetTrackables <T>(List <T> trackables, NRTrackableQueryFilter filter) where T : NRTrackable
        {
            if (m_LastUpdateFrame < Time.frameCount)
            {
                TrackableType t_type = GetTrackableType <T>();
                // Update trackable by type
                UpdateTrackables(t_type);

                // Find the new trackable in this frame
                m_NewTrackables.Clear();
                for (int i = 0; i < m_AllTrackables.Count; i++)
                {
                    NRTrackable trackable = m_AllTrackables[i];
                    if (!m_OldTrackables.Contains(trackable))
                    {
                        m_NewTrackables.Add(trackable);
                        m_OldTrackables.Add(trackable);
                    }
                }

                m_LastUpdateFrame = Time.frameCount;
            }

            trackables.Clear();

            if (filter == NRTrackableQueryFilter.All)
            {
                for (int i = 0; i < m_AllTrackables.Count; i++)
                {
                    SafeAdd <T>(m_AllTrackables[i], trackables);
                }
            }
            else if (filter == NRTrackableQueryFilter.New)
            {
                for (int i = 0; i < m_NewTrackables.Count; i++)
                {
                    SafeAdd <T>(m_NewTrackables[i], trackables);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Create a anchor for the trackable object
        /// </summary>
        /// <param name="trackable">Instantiate a NRAnchor object which Update trackable pose every frame</param>
        /// <returns>NRAnchor</returns>
        public static NRAnchor Factory(NRTrackable trackable)
        {
            if (trackable == null)
            {
                return(null);
            }

            NRAnchor result;

            if (m_AnchorDict.TryGetValue(trackable.GetDataBaseIndex(), out result))
            {
                return(result);
            }

            NRAnchor anchor = (new GameObject()).AddComponent <NRAnchor>();

            anchor.gameObject.name = "Anchor";
            anchor.Trackable       = trackable;

            m_AnchorDict.Add(trackable.GetDataBaseIndex(), anchor);
            return(anchor);
        }
Пример #4
0
        /**
         * @brief Get the list of trackables with specified filter.
         * @param[out] trackableList A list where the returned trackable stored. The previous values will be cleared.
         * @param filter Query filter.
         */
        public void GetTrackables <T>(List <T> trackables, NRTrackableQueryFilter filter) where T : NRTrackable
        {
            TrackableType t_type = GetTrackableType <T>();

#if !UNITY_EDITOR_OSX
            // Update trackable by type
            UpdateTrackables(t_type);
#endif

            // Find the new trackable in this frame
            m_NewTrackables.Clear();
            for (int i = 0; i < m_AllTrackables.Count; i++)
            {
                NRTrackable trackable = m_AllTrackables[i];
                if (!m_OldTrackables.Contains(trackable))
                {
                    m_NewTrackables.Add(trackable);
                    m_OldTrackables.Add(trackable);
                }
            }

            trackables.Clear();

            if (filter == NRTrackableQueryFilter.All)
            {
                for (int i = 0; i < m_AllTrackables.Count; i++)
                {
                    SafeAdd <T>(m_AllTrackables[i], trackables);
                }
            }
            else if (filter == NRTrackableQueryFilter.New)
            {
                for (int i = 0; i < m_NewTrackables.Count; i++)
                {
                    SafeAdd <T>(m_NewTrackables[i], trackables);
                }
            }
        }
Пример #5
0
 public void Initialize(NRTrackable trackable)
 {
     Trackable = trackable;
 }