예제 #1
0
        private void UpdateMappingStatus(ARWorldMappingStatus mappingStatus)
        {
            // Check the mapping status of the worldmap to be able to save the worldmap when in a good state
            switch (mappingStatus)
            {
            case ARWorldMappingStatus.NotAvailable:
                this.mappingStateLabel.Text          = "Mapping state: Not Available";
                this.mappingStateLabel.TextColor     = UIColor.Red;
                this.saveAsKeyPositionButton.Enabled = false;
                //this.saveButton.Enabled = false;
                break;

            case ARWorldMappingStatus.Limited:
                this.mappingStateLabel.Text          = "Mapping state: Limited";
                this.mappingStateLabel.TextColor     = UIColor.Red;
                this.saveAsKeyPositionButton.Enabled = false;
                //this.saveButton.Enabled = false;
                break;

            case ARWorldMappingStatus.Extending:
                this.mappingStateLabel.Text          = "Mapping state: Extending";
                this.mappingStateLabel.TextColor     = UIColor.Red;
                this.saveAsKeyPositionButton.Enabled = false;
                //this.saveButton.Enabled = false;
                break;

            case ARWorldMappingStatus.Mapped:
                this.mappingStateLabel.Text          = "Mapping state: Mapped";
                this.mappingStateLabel.TextColor     = UIColor.Green;
                this.saveAsKeyPositionButton.Enabled = true;
                //this.saveButton.Enabled = true;
                break;
            }
        }
예제 #2
0
        public static string GetDescription(this ARWorldMappingStatus status)
        {
            string result = null;

            switch (status)
            {
            case ARWorldMappingStatus.NotAvailable:
                result = "Not Available";
                break;

            case ARWorldMappingStatus.Limited:
                result = "Limited";
                break;

            case ARWorldMappingStatus.Extending:
                result = "Extending";
                break;

            case ARWorldMappingStatus.Mapped:
                result = "Mapped";
                break;
            }

            return(result);
        }
예제 #3
0
    private void Update()
    {
        if (_session != null)
        {
#if UNITY_IOS
            var sessionSubsystem = (ARKitSessionSubsystem)_session.subsystem;
#else
            XRSessionSubsystem sessionSubsystem = null;
#endif
            if (sessionSubsystem == null)
            {
                return;
            }
            if (_status != sessionSubsystem.worldMappingStatus)
            {
                Debug.Log(string.Format("Mapping Status Changed: {0}", sessionSubsystem.worldMappingStatus));
                _status = sessionSubsystem.worldMappingStatus;
                if (_status == ARWorldMappingStatus.Mapped)
                {
                    if (waitCreate != null)
                    {
                        waitCreate.Invoke();
                        waitCreate = null;
                    }
                    else if (waitFound != null)
                    {
                        waitFound.Invoke();
                        waitFound = null;
                    }
                }
            }
        }
    }
예제 #4
0
 // checking if the camera is currently in mapped state
 public bool CanSave(ARWorldMappingStatus status)
 {
     if (status == ARWorldMappingStatus.ARWorldMappingStatusMapped || status == ARWorldMappingStatus.ARWorldMappingStatusExtending)
     {
         return(true);
     }
     return(false);
 }
예제 #5
0
 void OnEnable()
 {
     statusText.text   = "Look around with device to map area";
     hasStartedMapping = false;
     mappingDone       = false;
     currentMapStatus  = ARWorldMappingStatus.ARWorldMappingStatusNotAvailable;
     //hook worldmapping status
     UnityARSessionNativeInterface.ARFrameUpdatedEvent += OnWorldMapStatusChange;
 }
 public UnityARCamera(UnityARMatrix4x4 wt, UnityARMatrix4x4 pm, ARTrackingState ats, ARTrackingStateReason atsr, UnityVideoParams uvp, UnityARLightData lightDat, UnityARMatrix4x4 dt, Vector3[] pointCloud, ARWorldMappingStatus awms)
 {
     worldTransform     = wt;
     projectionMatrix   = pm;
     trackingState      = ats;
     trackingReason     = atsr;
     videoParams        = uvp;
     lightData          = lightDat;
     displayTransform   = dt;
     pointCloudData     = pointCloud;
     worldMappingStatus = awms;
 }
예제 #7
0
 public serializableUnityARCamera(serializableUnityARMatrix4x4 wt, serializableUnityARMatrix4x4 pm, ARTrackingState ats, ARTrackingStateReason atsr, UnityVideoParams uvp, UnityARLightData lightDat, serializableUnityARMatrix4x4 dt, serializablePointCloud spc,
                                  ARWorldMappingStatus awms)
 {
     worldTransform     = wt;
     projectionMatrix   = pm;
     trackingState      = ats;
     trackingReason     = atsr;
     videoParams        = uvp;
     lightData          = lightDat;
     displayTransform   = dt;
     pointCloud         = spc;
     worldMappingStatus = awms;
 }
예제 #8
0
    void OnWorldMapStatusChange(UnityARCamera cam)
    {
        if (!hasStartedMapping)
        {
            hasStartedMapping = true;
        }
        if (!mappingDone)
        {
            currentMapStatus = cam.worldMappingStatus;

            if (currentMapStatus != ARWorldMappingStatus.ARWorldMappingStatusMapped && currentMapStatus != ARWorldMappingStatus.ARWorldMappingStatusExtending)
            {
                statusText.text = "Look around with device to map area";
            }
            else if (currentMapStatus == ARWorldMappingStatus.ARWorldMappingStatusMapped)
            {
                statusText.text = "Area mapped! Saving...";
            }
        }
    }
예제 #9
0
 void Update()
 {
     #if UNITY_IOS
     var sessionSubsystem = (ARKitSessionSubsystem)m_ARSession.subsystem;
     if (mappingStatus != sessionSubsystem.worldMappingStatus)
     {
         mappingStatus = sessionSubsystem.worldMappingStatus;
         if (mappingStatus == ARWorldMappingStatus.Mapped)
         {
             if (MappingIsSufficient != null)
             {
                 MappingIsSufficient.Raise();
             }
         }
         else
         {
             if (MappingIsNotSufficient != null)
             {
                 MappingIsNotSufficient.Raise();
             }
         }
     }
     #endif
 }
예제 #10
0
 public KeyPositionAnchor(UIImage image, OpenTK.NMatrix4 transform, ARWorldMappingStatus mappingStatus) : base("KeyPosition", transform)
 {
     this.Image         = image;
     this.MappingStatus = mappingStatus;
 }
예제 #11
0
 
 //unhook worldmapping status
       UnityARSessionNativeInterface.ARFrameUpdatedEvent -= OnWorldMapStatusChange;
   }
    
    void OnWorldMapStatusChange(UnityARCamera cam)
    {
        if(!hasStartedMapping)
        {
            hasStartedMapping = true;
        }   
        if(!mappingDone)
        {
            currentMapStatus = cam.worldMappingStatus;

            if(currentMapStatus != ARWorldMappingStatus.ARWorldMappingStatusMapped && currentMapStatus != ARWorldMappingStatus.ARWorldMappingStatusExtending)
            {
                statusText.text = "Look around with device to map area";
            }
            else if (currentMapStatus == ARWorldMappingStatus.ARWorldMappingStatusMapped)
            {
              statusText.text = "Area Mapped. Saving...";
            }
        }
  }

 public IEnumerator MapArea()
   {
      //while (world map status != mapped)
        while (currentMapStatus != ARWorldMappingStatus.ARWorldMappingStatusMapped)
        {
            yield return null;
        }

       worldMapSaved = false;
     //unhook world mapping status
        UnityARSessionNativeInterface.ARFrameUpdatedEvent -= OnWorldMapStatusChange;

        //save current map async(WorldMapCreated)
        UnityARSessionNativeInterface.GetARSessionNativeInterface().GetCurrentWorldMapAsync(WorldMapCreated);

       while (!worldMapSaved)
        {
            yield return null;
        }

        //statusText.text = "";
   }

    void WorldMapCreated(ARWorldMap worldMap)
    {
        mappedWorld = worldMap;
        worldMapSaved = true;
예제 #12
0
 void OnFrameUpdate(UnityARCamera arCamera)
 {
     m_LastReason = arCamera.trackingReason;
     lastStatus   = arCamera.worldMappingStatus;
 }