コード例 #1
0
        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;
            }
        }
コード例 #5
0
        private Anchor createAnchor(HitResult hitResult)
        {
            AnchorVisual visual = new AnchorVisual(hitResult.CreateAnchor());

            visual.SetColor(readyColor);
            visual.Render(arFragment);
            anchorVisuals[""] = visual;

            return(visual.LocalAnchor);
        }
コード例 #6
0
 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;
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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;
            }
        }