private async void transitionToSaving(AnchorVisual visual) { Log.Debug("ASADemo:", "transition to saving"); currentStep = DemoStep.Saving; enableCorrectUIControls(); Log.Debug("ASADemo", "creating anchor"); CloudSpatialAnchor cloudAnchor = new CloudSpatialAnchor(); visual.SetCloudAnchor(cloudAnchor); cloudAnchor.LocalAnchor = visual.LocalAnchor; try { var anchor = await cloudAnchorManager.CreateAnchorAsync(cloudAnchor); String anchorId = anchor.Identifier; Log.Debug("ASADemo:", "created anchor: " + anchorId); visual.SetColor(savedColor); anchorVisuals[anchorId] = visual; anchorVisuals.Remove(""); Log.Debug("ASADemo", "recording anchor with web service"); AnchorPoster poster = new AnchorPoster(SharingAnchorsServiceUrl); Log.Debug("ASADemo", "anchorId: " + anchorId); var result = await poster.PostAnchorAsync(anchorId); anchorPosted(result); } catch (System.Exception ex) { string exceptionMessage = (ex is CloudSpatialException cse) ? cse.ErrorCode.ToString() : ex.Message; createAnchorExceptionCompletion(exceptionMessage); visual.SetColor(failedColor); } }
private Anchor createAnchor(HitResult hitResult) { AnchorVisual visual = new AnchorVisual(hitResult.CreateAnchor()); visual.SetColor(readyColor); visual.Render(arFragment); anchorVisuals[""] = visual; RunOnUiThread(() => { scanProgressText.Visibility = ViewStates.Visible; if (enoughDataForSaving) { statusText.Text = "Ready to save"; actionButton.Text = "Save cloud anchor"; actionButton.Visibility = ViewStates.Visible; } else { statusText.Text = "Move around the anchor"; } }); currentDemoStep = DemoStep.SaveCloudAnchor; return(visual.LocalAnchor); }
private void anchorSaveFailed(String message) { RunOnUiThread(() => statusText.Text = message); AnchorVisual visual = anchorVisuals[""]; visual.SetColor(failedColor); }
private void anchorSaveSuccess(CloudSpatialAnchor result) { saveCount++; anchorID = result.Identifier; Log.Debug("ASADemo:", "created anchor: " + anchorID); AnchorVisual visual = anchorVisuals[""]; visual.SetColor(savedColor); anchorVisuals[anchorID] = visual; anchorVisuals.Remove(""); if (basicDemo || saveCount == numberOfNearbyAnchors) { RunOnUiThread(() => { statusText.Text = ""; actionButton.Visibility = ViewStates.Visible; }); currentDemoStep = DemoStep.CreateSessionForQuery; advanceDemo(); } else { // Need to create more anchors for nearby demo RunOnUiThread(() => { statusText.Text = "Tap a surface to create next anchor"; actionButton.Visibility = ViewStates.Invisible; }); currentDemoStep = DemoStep.CreateLocalAnchor; } }
private Anchor createAnchor(HitResult hitResult) { AnchorVisual visual = new AnchorVisual(hitResult.CreateAnchor()); visual.SetColor(readyColor); visual.Render(arFragment); anchorVisuals[""] = visual; return(visual.LocalAnchor); }
private void onTapArPlaneListener(HitResult hitResult, Plane plane, MotionEvent motionEvent) { if (currentStep == DemoStep.Creating) { AnchorVisual visual = anchorVisuals[""]; if (visual == null) { createAnchor(hitResult); } } }
private void renderLocatedAnchor(CloudSpatialAnchor anchor) { 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; }
private void setupLocalCloudAnchor(AnchorVisual visual) { CloudSpatialAnchor cloudAnchor = new CloudSpatialAnchor(); cloudAnchor.LocalAnchor = visual.LocalAnchor; visual.SetCloudAnchor(cloudAnchor); // In this sample app we delete the cloud anchor explicitly, but you can also set it to expire automatically Date now = new Date(); Calendar cal = Calendar.Instance; cal.Time = now; cal.Add(CalendarField.Date, 7); Date oneWeekFromNow = cal.Time; cloudAnchor.Expiration = oneWeekFromNow; }
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); }
public void createButtonClicked(View v) { textView.Text = "Scan your environment and place an anchor"; destroySession(); cloudAnchorManager = new AzureSpatialAnchorsManager(sceneView.Session); cloudAnchorManager.SessionUpdated += (s, args) => { if (currentStep == DemoStep.Creating) { float progress = args.P0.Status.RecommendedForCreateProgress; if (progress >= 1.0) { AnchorVisual visual = anchorVisuals[""]; if (visual != null) { //Transition to saving... transitionToSaving(visual); } else { feedbackText = "Tap somewhere to place an anchor."; } } else { feedbackText = $"Progress is {progress.ToString("P2")}"; } } }; cloudAnchorManager.Start(); currentStep = DemoStep.Creating; enableCorrectUIControls(); }
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; } }