private void anchorLookedUp(String anchorId) { Log.Debug("ASADemo", "anchor " + anchorId); this.anchorId = anchorId; destroySession(); cloudAnchorManager = new AzureSpatialAnchorsManager(sceneView.Session); cloudAnchorManager.AnchorLocated += (s, e) => RunOnUiThread(() => { CloudSpatialAnchor anchor = e.P0.Anchor; if (e.P0.Status == LocateAnchorStatus.AlreadyTracked || e.P0.Status == LocateAnchorStatus.Located) { AnchorVisual foundVisual = new AnchorVisual(anchor.LocalAnchor); foundVisual.SetCloudAnchor(anchor); foundVisual.AnchorNode.SetParent(arFragment.ArSceneView.Scene); String cloudAnchorIdentifier = foundVisual.CloudAnchor.Identifier; foundVisual.SetColor(foundColor); foundVisual.Render(arFragment); anchorVisuals[cloudAnchorIdentifier] = foundVisual; } }); cloudAnchorManager.LocateAnchorsCompleted += (s, e) => { currentStep = DemoStep.Choosing; RunOnUiThread(() => { textView.Text = "Anchor located!"; enableCorrectUIControls(); }); }; cloudAnchorManager.Start(); AnchorLocateCriteria criteria = new AnchorLocateCriteria(); criteria.SetIdentifiers(new string[] { anchorId }); cloudAnchorManager.StartLocating(criteria); }
private async void advanceDemo() { switch (currentDemoStep) { case DemoStep.SaveCloudAnchor: AnchorVisual visual = anchorVisuals[""]; if (visual == null) { return; } if (!enoughDataForSaving) { return; } // Hide the back button until we're done RunOnUiThread(() => backButton.Visibility = ViewStates.Gone); setupLocalCloudAnchor(visual); try { await cloudAnchorManager.CreateAnchorAsync(visual.CloudAnchor); } catch (System.Exception ex) { anchorSaveFailed(ex.Message); } lock (progressLock) { RunOnUiThread(() => { scanProgressText.Visibility = ViewStates.Gone; scanProgressText.Text = ""; actionButton.Visibility = ViewStates.Invisible; statusText.Text = "Saving cloud anchor..."; }); currentDemoStep = DemoStep.SavingCloudAnchor; } break; case DemoStep.CreateSessionForQuery: cloudAnchorManager.Stop(); cloudAnchorManager.Reset(); clearVisuals(); RunOnUiThread(() => { statusText.Text = ""; actionButton.Text = "Locate anchor"; }); currentDemoStep = DemoStep.LookForAnchor; break; case DemoStep.LookForAnchor: // We need to restart the session to find anchors we created. startNewSession(); AnchorLocateCriteria criteria = new AnchorLocateCriteria(); criteria.SetIdentifiers(new string[] { anchorID }); // Cannot run more than one watcher concurrently stopWatcher(); cloudAnchorManager.StartLocating(criteria); RunOnUiThread(() => { actionButton.Visibility = ViewStates.Invisible; statusText.Text = "Look for anchor"; }); break; case DemoStep.LookForNearbyAnchors: if (anchorVisuals.Count == 0 || !anchorVisuals.ContainsKey(anchorID)) { RunOnUiThread(() => statusText.Text = "Cannot locate nearby. Previous anchor not yet located."); break; } AnchorLocateCriteria nearbyLocateCriteria = new AnchorLocateCriteria(); NearAnchorCriteria nearAnchorCriteria = new NearAnchorCriteria(); nearAnchorCriteria.DistanceInMeters = 5; nearAnchorCriteria.SourceAnchor = anchorVisuals[anchorID].CloudAnchor; nearbyLocateCriteria.NearAnchor = nearAnchorCriteria; // Cannot run more than one watcher concurrently stopWatcher(); cloudAnchorManager.StartLocating(nearbyLocateCriteria); RunOnUiThread(() => { actionButton.Visibility = ViewStates.Invisible; statusText.Text = "Locating..."; }); break; case DemoStep.End: foreach (AnchorVisual toDeleteVisual in anchorVisuals.Values) { var _ = cloudAnchorManager.DeleteAnchorAsync(toDeleteVisual.CloudAnchor); } destroySession(); RunOnUiThread(() => { actionButton.Text = "Restart"; statusText.Text = ""; backButton.Visibility = ViewStates.Visible; }); currentDemoStep = DemoStep.Restart; break; case DemoStep.Restart: startDemo(); break; } }