/// <summary> /// Creates multiple ARImageVisualizers and adds it to a reference list. /// </summary> /// <param name="_imagesToVisualize">List of AugmentedImages to visualize</param> void CreateVisualizerObjects(List <AugmentedImage> _imagesToVisualize) { foreach (AugmentedImage image in _imagesToVisualize) { //Create an anchor at centre of image to ensure that transformation is relative to real world Anchor anchor = image.CreateAnchor(image.CenterPose); //Only continue if anchor is legit if (anchor != null) { //Get instance of visualizer from object pool ARImageVisualiser visualizer = ObjectPool.GetExisting <ARImageVisualiser>(); //Set parent of visualizer to anchor visualizer.transform.SetParent(anchor.transform); //Set image of visualizer visualizer.m_image = image; //Set visualizer to active visualizer.gameObject.SetActive(true); //Add visualizer to list m_listOfVisualizedObjects.Add(visualizer); //Set anchor to self-destruct Destroy(anchor, 0.2f); } } }
/// <summary> /// When Images are tracked and added into the list, a visualiser will then be set on top of them /// </summary> public void SetVisualisersOnImages() { foreach (var _image in m_TempAugmentedImagesList) { // Get visualiser from image in list and store it ARImageVisualiser m_visualiser = null; m_visualiser = GetVisualiser(_image, m_visualiser); // if there is no visualiser for that image and it is tracked, add one if (m_visualiser == null && _image.TrackingState == TrackingState.Tracking) { AddVisualiser(_image); } else if (_image.TrackingState != TrackingState.Tracking && m_visualiser != null) { //m_trackingStateDebug.text = "Count of Dictionary: " + m_Visualizers.Count; RemoveVisualiser(_image, m_visualiser); //m_trackingStateDebug2.text = "Count of Dictionary: " + m_Visualizers.Count; } //m_debuggingText.text = "prev index: " + m_prevIndex; if (_image.DatabaseIndex == m_prevIndex) { continue; } // remove the visualiser //RemoveVisualiser(_image, m_visualiser); // remove images from list -> trackable images are still there m_trackingStateDebug.text = "Before Count of imagelist: " + m_TempAugmentedImagesList.Count; m_TempAugmentedImagesList.RemoveAt(_image.DatabaseIndex); m_trackingStateDebug2.text = "After Count of imagelist: " + m_TempAugmentedImagesList.Count; } }
/// <summary> /// Add Visualiser and anchors for updated augmented images that are tracking and do not previously have a visualizer /// </summary> public void AddVisualiser(AugmentedImage _imageToAddTo) { // Create an anchor at centre of image to ensure that transformation is relative to real world Anchor anchor = _imageToAddTo.CreateAnchor(_imageToAddTo.CenterPose); // Create new visualiser and set as anchor's child ( so to keep the visualiser in that place ) ARImageVisualiser visualizer = Instantiate(AugmentedImageVisualizerPrefab, anchor.transform) as ARImageVisualiser; // Set image of visualiser to be image that is tracked visualizer.m_image = _imageToAddTo; //m_prevIndex = _imageToAddTo.DatabaseIndex; // Add to Dictionary m_Visualizers.Add(_imageToAddTo.DatabaseIndex, visualizer); }
private void Start() { //Get current session from session manager m_arSession = ARSessionManager.Instance.GetSession(); //Initialise lists m_trackedImages = new List <AugmentedImage>(); m_listOfVisualizedObjects = new List <ARImageVisualiser>(); //Set screen to never timeout Screen.sleepTimeout = SleepTimeout.NeverSleep; //Create Object Pool for ARImageVisualiser for (int i = 0; i < m_objectPoolStartSize; i++) { //Create instance of visualizer GameObject visualizerObject = Instantiate(m_arVisualizerPrefab); visualizerObject.SetActive(false); //Get component ARImageVisualiser visualizer = visualizerObject.GetComponent <ARImageVisualiser>(); //Add to object pool ObjectPool.Add(visualizer); } }
/// <summary> /// Get the visualiser of the Image in list /// </summary> public ARImageVisualiser GetVisualiser(AugmentedImage _imageTracked, ARImageVisualiser _addVisualiser) { m_Visualizers.TryGetValue(_imageTracked.DatabaseIndex, out _addVisualiser); return(_addVisualiser); }
/// <summary> /// Remove a Visualiser from an image if it stops updating /// </summary> public void RemoveVisualiser(AugmentedImage _imageToRemoveFrom, ARImageVisualiser _visualiserToRemove) { // Remove Visualiser from image and Destroys it Destroy(m_Visualizers[_imageToRemoveFrom.DatabaseIndex].gameObject); m_Visualizers.Remove(_imageToRemoveFrom.DatabaseIndex); }