Ejemplo n.º 1
0
    // Deactivates the given dataset.
    // This can only be done when the tracker is not running.
    public override bool DeactivateDataSet(DataSet dataSet)
    {
        if (dataSet == null)
        {
            Debug.LogError("Dataset is null.");
            return(false);
        }

        DataSetImpl dataSetImpl = (DataSetImpl)dataSet;

        if (QCARWrapper.Instance.ImageTrackerDeactivateDataSet(dataSetImpl.DataSetPtr) == 0)
        {
            Debug.LogError("Could not deactivate dataset.");
            return(false);
        }

        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        // Deactivate all Trackables.
        foreach (Trackable trackable in dataSet.GetTrackables())
        {
            stateManager.EnableTrackableBehavioursForTrackable(trackable, false);
        }

        mActiveDataSets.Remove(dataSetImpl);
        return(true);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// Enable this search result for tracking
    ///
    /// Creates an ImageTarget for local detection and tracking of this target.
    /// If the given game object has no ImageTargetBehaviour, a new one will be created.
    /// Note that this call may result in an earlier ImageTarget that was enabled for
    /// tracking to be destroyed, including its ImageTargetBehaviour.
    /// Thus it is not advised to hold a pointer to an
    /// ealier created ImageTarget after calling enableTracking again. Returns
    /// NULL if the target failed to be enabled for tracking.
    /// </summary>
    public override ImageTargetBehaviour EnableTracking(TargetSearchResult result, GameObject gameObject)
    {
        // create a new trackable in native
        IntPtr imageTargetPtr    = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ImageTargetData)));
        int    newTrackableCount = QCARWrapper.Instance.TargetFinderEnableTracking(result.TargetSearchResultPtr, imageTargetPtr);

        ImageTargetData imageTargetData = (ImageTargetData)
                                          Marshal.PtrToStructure(imageTargetPtr, typeof(ImageTargetData));

        Marshal.FreeHGlobal(imageTargetPtr);

        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        // if successful, create a new trackable here and add it to internal collection
        ImageTargetBehaviour imageTargetBehaviour = null;

        if (imageTargetData.id == -1)
        {
            Debug.LogError("TargetSearchResult " + result.TargetName + " could not be enabled for tracking.");
        }
        else
        {
            ImageTarget newImageTarget = new CloudRecoImageTargetImpl(result.TargetName, imageTargetData.id, imageTargetData.size);

            // Add newly created Image Target to dictionary.
            mImageTargets[imageTargetData.id] = newImageTarget;

            // Find or create ImageTargetBehaviour for this ImageTarget:
            imageTargetBehaviour = stateManager.FindOrCreateImageTargetBehaviourForTrackable(newImageTarget, gameObject);
        }

        // get a list of currently existing trackables
        IntPtr imageTargetIdArrayPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * newTrackableCount);

        QCARWrapper.Instance.TargetFinderGetImageTargets(imageTargetIdArrayPtr, newTrackableCount);

        List <int> targetIds = new List <int>();

        for (int i = 0; i < newTrackableCount; i++)
        {
            IntPtr targetIdPtr = new IntPtr(imageTargetIdArrayPtr.ToInt32() + i * Marshal.SizeOf(typeof(int)));
            int    targetID    = Marshal.ReadInt32(targetIdPtr);
            targetIds.Add(targetID);
        }

        Marshal.FreeHGlobal(imageTargetIdArrayPtr);

        // delete those targets that no longer exist
        foreach (ImageTarget imageTarget in mImageTargets.Values.ToArray())
        {
            if (!targetIds.Contains(imageTarget.ID))
            {
                stateManager.DestroyTrackableBehavioursForTrackable(imageTarget);
                mImageTargets.Remove(imageTarget.ID);
            }
        }


        return(imageTargetBehaviour);
    }
Ejemplo n.º 3
0
    // Deinitialize QCAR and trackers when QCARBehaviour is destroyed.
    void OnDestroy()
    {
        // clear all trackable results in the StateManager
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        stateManager.ClearTrackableBehaviours();

        // Destroy all the datasets
        ImageTracker imageTracker = (ImageTracker)TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER);

        if (imageTracker != null)
        {
            imageTracker.DestroyAllDataSets(false);
            imageTracker.Stop();
        }

        // Destroy all the markers
        MarkerTracker markerTracker = (MarkerTracker)TrackerManager.Instance.GetTracker(Tracker.Type.MARKER_TRACKER);

        if (markerTracker != null)
        {
            markerTracker.DestroyAllMarkers(false);
            markerTracker.Stop();
        }

        TextTracker textTracker = (TextTracker)TrackerManager.Instance.GetTracker(Tracker.Type.TEXT_TRACKER);

        if (textTracker != null)
        {
            textTracker.Stop();
        }

        // Deinit the QCARManager
        QCARManager.Instance.Deinit();

        // Deinit the trackers
        if (TrackerManager.Instance.GetTracker(Tracker.Type.MARKER_TRACKER) != null)
        {
            TrackerManager.Instance.DeinitTracker(Tracker.Type.MARKER_TRACKER);
        }

        if (TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER) != null)
        {
            TrackerManager.Instance.DeinitTracker(Tracker.Type.IMAGE_TRACKER);
        }

        if (TrackerManager.Instance.GetTracker(Tracker.Type.TEXT_TRACKER) != null)
        {
            TrackerManager.Instance.DeinitTracker(Tracker.Type.TEXT_TRACKER);
        }

        if (QCARRuntimeUtilities.IsPlayMode())
        {
            // deinit explicitly if running in the emulator
            QCARWrapper.Instance.QcarDeinit();
        }
    }
Ejemplo n.º 4
0
    public override void Stop()
    {
        QCARWrapper.Instance.MarkerTrackerStop();
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        foreach (Marker marker in this.mMarkerDict.Values)
        {
            stateManager.SetTrackableBehavioursForTrackableToNotFound(marker);
        }
    }
    public override void Stop()
    {
        QCARWrapper.Instance.ImageTrackerStop();
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        foreach (DataSetImpl impl2 in this.mActiveDataSets)
        {
            foreach (Trackable trackable in impl2.GetTrackables())
            {
                stateManager.SetTrackableBehavioursForTrackableToNotFound(trackable);
            }
        }
    }
Ejemplo n.º 6
0
    // Stops the tracker.
    // The tracker needs to be stopped before Trackables can be modified.
    public override void Stop()
    {
        QCARWrapper.Instance.ImageTrackerStop();

        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        // If a dataset is active, than mark all trackables as not found:
        foreach (DataSetImpl activeDataSet in mActiveDataSets)
        {
            foreach (Trackable trackable in activeDataSet.GetTrackables())
            {
                stateManager.SetTrackableBehavioursForTrackableToNotFound(trackable);
            }
        }
    }
Ejemplo n.º 7
0
    public override MarkerAbstractBehaviour CreateMarker(int markerID, string trackableName, float size)
    {
        int id = this.RegisterMarker(markerID, trackableName, size);

        if (id == -1)
        {
            Debug.LogError("Could not create marker with id " + markerID + ".");
            return(null);
        }
        Marker trackable = new MarkerImpl(trackableName, id, size, markerID);

        this.mMarkerDict[id] = trackable;
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        return(stateManager.CreateNewMarkerBehaviourForMarker(trackable, trackableName));
    }
Ejemplo n.º 8
0
    /// <summary>
    /// Clears all targets enabled for tracking
    ///
    /// Destroys all ImageTargets that have been created via EnableTracking().
    /// </summary>
    public override void ClearTrackables(bool destroyGameObjects = true)
    {
        // call native function
        QCARWrapper.Instance.TargetFinderClearTrackables();

        // destroy ImageTargetBehaviours in StateManager
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        foreach (ImageTarget imageTarget in mImageTargets.Values)
        {
            stateManager.DestroyTrackableBehavioursForTrackable(imageTarget, destroyGameObjects);
        }

        // clear internal collection
        mImageTargets.Clear();
    }
Ejemplo n.º 9
0
    /// <summary>
    /// This method must not be called while the dataset is active or it will return false.
    /// </summary>
    public override bool Destroy(Trackable trackable, bool destroyGameObject)
    {
        if (QCARWrapper.Instance.DataSetDestroyTrackable(mDataSetPtr, trackable.ID) == 0)
        {
            Debug.LogError("Could not destroy trackable with id " + trackable.ID + ".");
            return(false);
        }

        mTrackablesDict.Remove(trackable.ID);

        if (destroyGameObject)
        {
            StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
            stateManager.DestroyTrackableBehavioursForTrackable(trackable);
        }
        return(true);
    }
    // Destroys the marker associated with the given MarkerBehaviour
    // at native code.
    public override bool DestroyMarker(Marker marker, bool destroyGameObject)
    {
        if (QCARWrapper.Instance.MarkerTrackerDestroyMarker(marker.ID) == 0)
        {
            Debug.LogError("Could not destroy marker with id " + marker.MarkerID + ".");
            return(false);
        }

        mMarkerDict.Remove(marker.ID);


        if (destroyGameObject)
        {
            StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
            stateManager.DestroyTrackableBehavioursForTrackable(marker);
        }

        return(true);
    }
Ejemplo n.º 11
0
    public override ImageTargetAbstractBehaviour EnableTracking(TargetFinder.TargetSearchResult result, GameObject gameObject)
    {
        IntPtr          trackableData          = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ImageTargetData)));
        int             trackableIdArrayLength = QCARWrapper.Instance.TargetFinderEnableTracking(result.TargetSearchResultPtr, trackableData);
        ImageTargetData data = (ImageTargetData)Marshal.PtrToStructure(trackableData, typeof(ImageTargetData));

        Marshal.FreeHGlobal(trackableData);
        StateManagerImpl             stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
        ImageTargetAbstractBehaviour behaviour    = null;

        if (data.id == -1)
        {
            Debug.LogError("TargetSearchResult " + result.TargetName + " could not be enabled for tracking.");
        }
        else
        {
            ImageTarget trackable = new CloudRecoImageTargetImpl(result.TargetName, data.id, data.size);
            this.mImageTargets[data.id] = trackable;
            behaviour = stateManager.FindOrCreateImageTargetBehaviourForTrackable(trackable, gameObject);
        }
        IntPtr trackableIdArray = Marshal.AllocHGlobal((int)(Marshal.SizeOf(typeof(int)) * trackableIdArrayLength));

        QCARWrapper.Instance.TargetFinderGetImageTargets(trackableIdArray, trackableIdArrayLength);
        List <int> list = new List <int>();

        for (int i = 0; i < trackableIdArrayLength; i++)
        {
            IntPtr ptr  = new IntPtr(trackableIdArray.ToInt32() + (i * Marshal.SizeOf(typeof(int))));
            int    item = Marshal.ReadInt32(ptr);
            list.Add(item);
        }
        Marshal.FreeHGlobal(trackableIdArray);
        foreach (ImageTarget target2 in this.mImageTargets.Values.ToArray <ImageTarget>())
        {
            if (!list.Contains(target2.ID))
            {
                stateManager.DestroyTrackableBehavioursForTrackable(target2, true);
                this.mImageTargets.Remove(target2.ID);
            }
        }
        return(behaviour);
    }
    public override DataSetTrackableBehaviour CreateTrackable(TrackableSource trackableSource, GameObject gameObject)
    {
        TrackableSourceImpl impl       = (TrackableSourceImpl)trackableSource;
        int              capacity      = 0x80;
        StringBuilder    trackableName = new StringBuilder(capacity);
        IntPtr           trackableData = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SimpleTargetData)));
        int              num2          = QCARWrapper.Instance.DataSetCreateTrackable(this.mDataSetPtr, impl.TrackableSourcePtr, trackableName, capacity, trackableData);
        SimpleTargetData data          = (SimpleTargetData)Marshal.PtrToStructure(trackableData, typeof(SimpleTargetData));

        Marshal.FreeHGlobal(trackableData);
        if (num2 == TypeMapping.GetTypeID(typeof(ImageTarget)))
        {
            ImageTarget trackable = new ImageTargetImpl(trackableName.ToString(), data.id, ImageTargetType.USER_DEFINED, this);
            this.mTrackablesDict[data.id] = trackable;
            Debug.Log(string.Format("Trackable created: {0}, {1}", num2, trackableName));
            StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
            return(stateManager.FindOrCreateImageTargetBehaviourForTrackable(trackable, gameObject, this));
        }
        Debug.LogError("DataSet.CreateTrackable returned unknown or incompatible trackable type!");
        return(null);
    }
Ejemplo n.º 13
0
    // Adds a single trackable from a source and a given gameobject to this dataset
    public override DataSetTrackableBehaviour CreateTrackable(TrackableSource trackableSource, GameObject gameObject)
    {
        // create a trackable in native from the trackable source handle:
        TrackableSourceImpl trackableSourceImpl = (TrackableSourceImpl)trackableSource;

        // QCAR support names up to 64 characters in length, but here we allocate
        // a slightly larger buffer:
        int nameLength = 128;

        System.Text.StringBuilder trackableName = new System.Text.StringBuilder(nameLength);

        IntPtr targetDataPtr =
            Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SimpleTargetData)));
        TrackableType trackableType = (TrackableType)QCARWrapper.Instance.DataSetCreateTrackable(mDataSetPtr, trackableSourceImpl.TrackableSourcePtr, trackableName, nameLength, targetDataPtr);

        SimpleTargetData targetData = (SimpleTargetData)
                                      Marshal.PtrToStructure(targetDataPtr, typeof(SimpleTargetData));

        Marshal.FreeHGlobal(targetDataPtr);

        // currently only supported for ImageTargets:
        if (trackableType == TrackableType.IMAGE_TARGET)
        {
            ImageTarget newImageTarget = new ImageTargetImpl(trackableName.ToString(), targetData.id, ImageTargetType.USER_DEFINED, this);

            // Add newly created Image Target to dictionary.
            mTrackablesDict[targetData.id] = newImageTarget;

            Debug.Log(string.Format("Trackable created: {0}, {1}", trackableType, trackableName));

            // Find or create ImageTargetBehaviour for this ImageTarget:
            StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
            return(stateManager.FindOrCreateImageTargetBehaviourForTrackable(newImageTarget, gameObject, this));
        }
        else
        {
            Debug.LogError("DataSet.CreateTrackable returned unknown or incompatible trackable type!");
            return(null);
        }
    }
    // Creates a marker with the given id, name, and size.
    // Registers the marker at native code.
    // Returns a MarkerBehaviour object to receive updates.
    public override MarkerBehaviour CreateMarker(int markerID, String trackableName, float size)
    {
        int trackableID = RegisterMarker(markerID, trackableName, size);

        if (trackableID == -1)
        {
            Debug.LogError("Could not create marker with id " + markerID + ".");
            return(null);
        }

        // create a new marker object:
        Marker marker = new MarkerImpl(trackableName, trackableID, size, markerID);

        // Add newly created Marker to dictionary.
        mMarkerDict[trackableID] = marker;

        // let the state manager create a new Marker Behaviour and return it:
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
        MarkerBehaviour  newMB        = stateManager.CreateNewMarkerBehaviourForMarker(marker, trackableName);

        return(newMB);
    }
    // Loads data set from the given path.
    // Storage type is used to correctly interpret the given path.
    public override bool Load(String path, StorageType storageType)
    {
        if (mDataSetPtr == IntPtr.Zero)
        {
            Debug.LogError("Called Load without a data set object");
            return(false);
        }

        // copied on purpose because original value is needed later on
        String actualPath = path;

        if (storageType == StorageType.STORAGE_APPRESOURCE && QCARRuntimeUtilities.IsPlayMode())
        {
            actualPath = "Assets/StreamingAssets/" + actualPath;
        }

        if (QCARWrapper.Instance.DataSetLoad(actualPath, (int)storageType, mDataSetPtr) == 0)
        {
            Debug.LogError("Did not load: " + path);
            return(false);
        }

        // Set path and storage type to associate data sets with Trackables.
        mPath        = path;
        mStorageType = storageType;


        // Create Trackabls in this dataset.
        CreateImageTargets();
        CreateMultiTargets();
        CreateCylinderTargets();

        // associate existing TrackableBehaviours with the trackables in this dataset and create missing behaviours:
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        stateManager.AssociateTrackableBehavioursForDataSet(this);

        return(true);
    }
    public override bool ActivateDataSet(DataSet dataSet)
    {
        if (dataSet == null)
        {
            Debug.LogError("Dataset is null.");
            return(false);
        }
        DataSetImpl item = (DataSetImpl)dataSet;

        if (QCARWrapper.Instance.ImageTrackerActivateDataSet(item.DataSetPtr) == 0)
        {
            Debug.LogError("Could not activate dataset.");
            return(false);
        }
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        foreach (Trackable trackable in item.GetTrackables())
        {
            stateManager.EnableTrackableBehavioursForTrackable(trackable, true);
        }
        this.mActiveDataSets.Add(item);
        return(true);
    }
Ejemplo n.º 17
0
    // Unmarshal and process the tracking data
    private void UpdateTrackers(FrameState frameState)
    {
        // Unmarshal the trackable data
        // Take our array of unmanaged data from native and create an array of
        // TrackableResultData structures to work with (one per trackable, regardless
        // of whether or not that trackable is visible this frame).
        for (int i = 0; i < frameState.numTrackableResults; i++)
        {
            IntPtr trackablePtr = new IntPtr(frameState.trackableDataArray.ToInt32() + i *
                                             Marshal.SizeOf(typeof(TrackableResultData)));
            TrackableResultData trackableResultData = (TrackableResultData)
                                                      Marshal.PtrToStructure(trackablePtr, typeof(TrackableResultData));
            mTrackableResultDataArray[i] = trackableResultData;
        }

        // Add newly found Trackables to the queue, remove lost ones
        // We keep track of the order in which Trackables become visible for the
        // AUTO World Center mode. This keeps the camera from jumping around in the
        // scene too much.
        foreach (TrackableResultData trackableData in mTrackableResultDataArray)
        {
            // We found a trackable (or set of Trackables) that match this id
            if ((trackableData.status == TrackableBehaviour.Status.DETECTED ||
                 trackableData.status ==
                 TrackableBehaviour.Status.TRACKED))
            {
                if (!mTrackableFoundQueue.Contains(trackableData.id))
                {
                    // The trackable just became visible, add it to the queue
                    mTrackableFoundQueue.AddLast(trackableData.id);
                }
            }
            else
            {
                if (mTrackableFoundQueue.Contains(trackableData.id))
                {
                    // The trackable just disappeared, remove it from the queue
                    mTrackableFoundQueue.Remove(trackableData.id);
                }
            }
        }

        // now remove those from the TrackableFoundQueue that were not in this frame's results:
        List <int> trackableFoundQueueCopy = new List <int>(mTrackableFoundQueue);

        foreach (int id in trackableFoundQueueCopy)
        {
            // check if the trackable is in this frame's results:
            if (Array.Exists(mTrackableResultDataArray, tr => tr.id == id))
            {
                break;
            }

            // not in the results, remove it from the queue
            mTrackableFoundQueue.Remove(id);
        }

        StateManagerImpl stateManager = (StateManagerImpl)
                                        TrackerManager.Instance.GetStateManager();

        // The "scene origin" is only used in world center mode auto or user.
        int originTrackableID = -1;

        if (mWorldCenterMode == QCARBehaviour.WorldCenterMode.SPECIFIC_TARGET &&
            mWorldCenter != null)
        {
            originTrackableID = mWorldCenter.Trackable.ID;
        }
        else if (mWorldCenterMode == QCARBehaviour.WorldCenterMode.FIRST_TARGET)
        {
            stateManager.RemoveDisabledTrackablesFromQueue(ref mTrackableFoundQueue);
            if (mTrackableFoundQueue.Count > 0)
            {
                originTrackableID = mTrackableFoundQueue.First.Value;
            }
        }

        // Unmarshal words and word results
        UpdateWordTrackables(frameState);

        // Update the Camera pose before Trackable poses are updated.
        stateManager.UpdateCameraPose(mARCamera, mTrackableResultDataArray, originTrackableID);

        // Update the Trackable poses.
        stateManager.UpdateTrackablePoses(mARCamera, mTrackableResultDataArray, originTrackableID, frameState.frameIndex);

        // Update Word Trackables
        stateManager.UpdateWords(mARCamera, mWordDataArray, mWordResultDataArray);

        // Update Virtual Button states.
        stateManager.UpdateVirtualButtons(frameState.numVirtualButtonResults, frameState.vbDataArray);
    }
Ejemplo n.º 18
0
    // Starts up the QCAR extension with the properties that were set in the
    // Unity inspector.
    void Start()
    {
        // keeps the ARCamera object alive across scenes:
        if (KeepAliveBehaviour.Instance != null && KeepAliveBehaviour.Instance.KeepARCameraAlive)
        {
            DontDestroyOnLoad(gameObject);
        }

        Debug.Log("QCARWrapper.Start");
        // First we check if QCAR initialized correctly.
        if (QCARUnity.CheckInitializationError() != QCARUnity.InitError.INIT_SUCCESS)
        {
            mIsInitialized = false;
            return;
        }

        // Initialize the trackers if they haven't already been initialized.
        if (TrackerManager.Instance.GetTracker(Tracker.Type.MARKER_TRACKER) == null)
        {
            TrackerManager.Instance.InitTracker(Tracker.Type.MARKER_TRACKER);
        }

        if (TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER) == null)
        {
            TrackerManager.Instance.InitTracker(Tracker.Type.IMAGE_TRACKER);
        }

        // Cache the camera start values
        mCachedDrawVideoBackground   = QCARManager.Instance.DrawVideoBackground;
        mCachedCameraClearFlags      = this.camera.clearFlags;
        mCachedCameraBackgroundColor = this.camera.backgroundColor;

        // keep the device's screen turned on and bright.
        Screen.sleepTimeout = SleepTimeout.NeverSleep;

        // Reset the camera clear flags and create a simple material
        ResetCameraClearFlags();
        mClearMaterial = new Material(Shader.Find("Diffuse"));

        // Set QCAR hints from the Inspector options
        QCARUnity.SetHint(QCARUnity.QCARHint.HINT_MAX_SIMULTANEOUS_IMAGE_TARGETS,
                          MaxSimultaneousImageTargets);

        // Set the Unity version for internal use
        QCARUnityImpl.SetUnityVersion(Application.persistentDataPath, true);

        // register markers in QCAR:
        StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

        stateManager.AssociateMarkerBehaviours();

        // Start the camera and tracker
        StartQCAR();

        // Initialize the QCARManager
        QCARManager.Instance.WorldCenterMode = mWorldCenterMode;
        QCARManager.Instance.WorldCenter     = mWorldCenter;
        QCARManager.Instance.ARCamera        = camera;
        QCARManager.Instance.Init();

        // Initialize local variables
        mIsInitialized = true;

        // Let the trackable event handlers know that QCAR has been initialized
        foreach (ITrackerEventHandler handler in mTrackerEventHandlers)
        {
            handler.OnInitialized();
        }

        mHasStartedOnce = true;
    }
Ejemplo n.º 19
0
 private void OnLevelWasLoaded()
 {
     if (this.mKeepARCameraAlive)
     {
         List <TrackableBehaviour> list;
         StateManagerImpl          stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager();
         if (this.mKeepTrackableBehavioursAlive)
         {
             list = stateManager.GetTrackableBehaviours().ToList <TrackableBehaviour>();
             foreach (WordAbstractBehaviour behaviour in stateManager.GetWordManager().GetTrackableBehaviours())
             {
                 list.Add(behaviour);
             }
         }
         else
         {
             list = new List <TrackableBehaviour>();
         }
         foreach (ILoadLevelEventHandler handler in this.mHandlers)
         {
             handler.OnLevelLoaded(list);
         }
         TrackableBehaviour[] behaviourArray = (TrackableBehaviour[])UnityEngine.Object.FindObjectsOfType(typeof(TrackableBehaviour));
         stateManager.RemoveDestroyedTrackables();
         stateManager.AssociateMarkerBehaviours();
         ImageTracker tracker = TrackerManager.Instance.GetTracker <ImageTracker>();
         if (tracker != null)
         {
             IEnumerable <DataSet> dataSets = tracker.GetDataSets();
             List <DataSet>        list2    = tracker.GetActiveDataSets().ToList <DataSet>();
             foreach (DataSet set in dataSets)
             {
                 if (list2.Contains(set))
                 {
                     tracker.DeactivateDataSet(set);
                 }
                 stateManager.AssociateTrackableBehavioursForDataSet(set);
                 if (list2.Contains(set))
                 {
                     tracker.ActivateDataSet(set);
                 }
             }
         }
         bool flag = false;
         TextRecoAbstractBehaviour behaviour2 = (TextRecoAbstractBehaviour)UnityEngine.Object.FindObjectOfType(typeof(TextRecoAbstractBehaviour));
         if (behaviour2 != null)
         {
             if (!behaviour2.IsInitialized)
             {
                 flag = true;
             }
             else
             {
                 WordManagerImpl wordManager = (WordManagerImpl)stateManager.GetWordManager();
                 wordManager.RemoveDestroyedTrackables();
                 wordManager.InitializeWordBehaviourTemplates();
             }
         }
         List <TrackableBehaviour>           disabledTrackables  = new List <TrackableBehaviour>();
         IEnumerable <TrackableBehaviour>    trackableBehaviours = stateManager.GetTrackableBehaviours();
         IEnumerable <WordAbstractBehaviour> source = stateManager.GetWordManager().GetTrackableBehaviours();
         foreach (TrackableBehaviour behaviour3 in behaviourArray)
         {
             if (behaviour3 is WordAbstractBehaviour)
             {
                 if (!flag && !source.Contains <WordAbstractBehaviour>((behaviour3 as WordAbstractBehaviour)))
                 {
                     behaviour3.gameObject.SetActive(false);
                     disabledTrackables.Add(behaviour3);
                 }
             }
             else if ((!(behaviour3 is ImageTargetAbstractBehaviour) || (((IEditorImageTargetBehaviour)behaviour3).ImageTargetType == ImageTargetType.PREDEFINED)) && !trackableBehaviours.Contains <TrackableBehaviour>(behaviour3))
             {
                 behaviour3.gameObject.SetActive(false);
                 disabledTrackables.Add(behaviour3);
             }
         }
         foreach (ILoadLevelEventHandler handler2 in this.mHandlers)
         {
             handler2.OnDuplicateTrackablesDisabled(disabledTrackables);
         }
     }
 }