private void SpatialAnchorsSession_AnchorLocated(object sender, AnchorLocatedEventArgs e) { LocateAnchorStatus status = e.Status; switch (status) { case LocateAnchorStatus.AlreadyTracked: break; case LocateAnchorStatus.Located: { CloudSpatialAnchor anchor = e.Anchor; Debug.WriteLine("Cloud Anchor found! Identifier : " + anchor.Identifier); AnchorVisual visual = new AnchorVisual { cloudAnchor = anchor, identifier = anchor.Identifier, localAnchor = anchor.LocalAnchor }; this.anchorVisuals[visual.identifier] = visual; this.scnView.Session.AddAnchor(anchor.LocalAnchor); this.PlaceCube(visual.localAnchor); break; } case LocateAnchorStatus.NotLocated: case LocateAnchorStatus.NotLocatedAnchorDoesNotExist: break; } this.OnAnchorLocated?.Invoke(sender, e); }
private SCNNode PlaceCube(ARAnchor anchor) { AnchorVisual visual = this.anchorVisuals.Values.FirstOrDefault(a => a.localAnchor == anchor); if (visual is null) { return(null); } Debug.WriteLine($"renderer:nodeForAnchor with local anchor {anchor} at {anchor.Transform}"); SCNBox box = new SCNBox { Width = 0.2f, Height = 0.2f, Length = 0.2f }; if (visual.identifier != this.unsavedAnchorId) { box.FirstMaterial.Diffuse.Contents = this.foundColor; } else { box.FirstMaterial.Diffuse.Contents = this.readyColor; } this.localAnchorCube = box; SCNNode cubeNode = new SCNNode { Position = visual.localAnchor.Transform.ToPosition(), Geometry = box }; this.scnView.Scene.RootNode.AddChildNode(cubeNode); visual.node = cubeNode; return(visual.node); }
protected virtual void AnchorSaveSuccess(CloudSpatialAnchor result) { this.saveCount += 1; this.localAnchorCube.FirstMaterial.Diffuse.Contents = this.savedColor; this.targetId = result.Identifier; Console.WriteLine("ASADemo: created anchor: " + this.targetId); AnchorVisual visual = this.anchorVisuals[this.unsavedAnchorId]; visual.cloudAnchor = this.cloudAnchor; visual.identifier = this.cloudAnchor.Identifier; this.anchorVisuals[visual.identifier] = visual; this.anchorVisuals.TryRemove(this.unsavedAnchorId, out _); this.localAnchor = null; }
public void CreateLocalAnchor(ref NMatrix4 transform) { if (this.localAnchor != null) { return; } this.localAnchor = new ARAnchor(transform); this.scnView.Session.AddAnchor(this.localAnchor); // Put the local anchor in the anchorVisuals list with a special key AnchorVisual visual = new AnchorVisual { identifier = this.unsavedAnchorId, localAnchor = this.localAnchor }; this.anchorVisuals[visual.identifier] = visual; this.PlaceCube(this.localAnchor); this.UpdateMainStatusTitle("Create Cloud Anchor (once at 100%)"); }