Exemplo n.º 1
0
 private void Update()
 {
     UnityEditorUpdate();
     if (m_state == State.FinalizeScan)
     {
         if (!m_spatialUnderstanding.ScanStatsReportStillWorking)
         {
             Debug.Log("Finalizing scan...");
             m_state = State.WaitingForScanCompletion;
             m_spatialUnderstanding.RequestFinishScan();
         }
         //TODO: timeout and error handling?
     }
     else if (m_state == State.WaitingForMeshImport)
     {
         if (m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive == false)
         {
             Debug.Log("Found " + m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters().Count + " meshes (import active=" + m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive + ")");
             HideSpatialMesh();
             SetSpatialUnderstandingMaterial(spatialUnderstandingOcclusionMaterial);
             SurfacePlaneDeformationManager.Instance.SetSpatialMeshFilters(m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters());
             //QueryFloorPositions();
             m_state = State.Playing;
         }
         //TODO: timeout?
     }
     else if (m_state == State.Playing)
     {
     }
 }
Exemplo n.º 2
0
    private void Update()
    {
        if (m_scanningComplete)
        {
            return;
        }
        switch (m_spatialUnderstandingState)
        {
        case SpatialUnderstandingState.FinalizeScan:
            //TODO: timeout?
            if (!m_spatialUnderstanding.ScanStatsReportStillWorking)
            {
                Debug.Log("Finalizing scan...");
                m_spatialUnderstanding.RequestFinishScan();
                m_spatialUnderstandingState = SpatialUnderstandingState.WaitingForScanCompletion;
            }
            break;

        case SpatialUnderstandingState.WaitingForMeshImport:
            //TODO: timeout?
            if (m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive == false)
            {
                Debug.Log("Found " + m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters().Count + " meshes (import active=" + m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive + ")");
                if (!visualizeSpatialMeshes)
                {
                    HideSpatialMappingMeshes();
                }
                if (!visualizeSpatialUnderstandingMeshes)
                {
                    SetSpatialUnderstandingMaterial(occlusionMaterial);
                }
                SurfacePlaneDeformationManager.Instance.SetSpatialMeshFilters(m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters());
                m_spatialUnderstandingState = SpatialUnderstandingState.WaitingForPlacementSolverInit;
            }
            break;

        case SpatialUnderstandingState.WaitingForPlacementSolverInit:
            //TODO: error checking and timeout?
            if (!m_placementSolverInitialized)
            {
                m_placementSolverInitialized = (SpatialUnderstandingDllObjectPlacement.Solver_Init() == 1);
                Debug.Log("Placement Solver initialization " + (m_placementSolverInitialized ? "succeeded" : "FAILED"));
                if (m_placementSolverInitialized)
                {
                    if (OnScanComplete != null)
                    {
                        OnScanComplete();
                    }
                    m_scanningComplete          = true;
                    m_spatialUnderstandingState = SpatialUnderstandingState.Finished;
                }
            }
            break;

        default:
            break;
        }
    }
Exemplo n.º 3
0
    void OnTapped()
    {
        if (finished)
        {
            return;
        }

        Debug.Log("scan finish");
        finished = true;
        mappingManager.StopObserver();
        spatialUnderstanding.RequestFinishScan();
        recognizer.StopCapturingGestures();
        customMesh.DrawProcessedMesh = false;
    }
Exemplo n.º 4
0
    private void Update()
    {
        if (m_scanningComplete)
        {
            return;
        }
        SpatialUnderstandingDll.Imports.PlayspaceStats stats;
        switch (m_spatialUnderstandingState)
        {
        case State.StartScanning:
            // Start spatial mapping (SpatialUnderstanding requires this, too)
            if (!m_spatialMappingManager.IsObserverRunning())
            {
                m_spatialMappingManager.StartObserver();
            }
            m_spatialMappingManager.DrawVisualMeshes = visualizeSpatialMeshes;
            m_spatialUnderstanding.ScanStateChanged += OnScanStateChanged;
            m_spatialUnderstanding.RequestBeginScanning();
            m_spatialMappingManager.SetSurfaceMaterial(renderingMaterial);
            m_spatialUnderstandingState = State.Scanning;
            break;

        case State.Scanning:
            if (GetStats(out stats))
            {
                Debug.Log("NumFloor=" + stats.NumFloor + ", NumWallX-=" + stats.NumWall_XNeg + ", NumWallX+=" + stats.NumWall_XPos + ", NumWallZ-=" + stats.NumWall_ZNeg + ", NumWallZ+=" + stats.NumWall_ZPos);
            }
            break;

        case State.FinalizeScan:
            //TODO: timeout?
            // Note: this is pretty subtle -- ScanStatsReportStillWorking is *not*
            // automatically updated. It reuses a cached object. GetStats() will
            // fetch the latest object by calling the appropriate query function.
            GetStats(out stats);
            if (!m_spatialUnderstanding.ScanStatsReportStillWorking)
            {
                Debug.Log("Finalizing scan...");
                m_spatialUnderstanding.RequestFinishScan();
                m_spatialUnderstandingState = State.WaitingForScanCompletion;
            }
            break;

        case State.WaitingForMeshImport:
            //TODO: timeout?
            if (m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive == false)
            {
                List <MeshFilter> meshFilters = m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters();
                Debug.Log("Found " + meshFilters.Count + " meshes (import active=" + m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive + ")");
                if (!visualizeSpatialMeshes)
                {
                    DisableSpatialMappingMeshes();
                }
                ApplyVisualizationSettings();
                //SurfacePlaneDeformationManager.Instance.SetSpatialMeshFilters(meshFilters);
                if (buildNavMesh)
                {
                    m_navMeshBuilder.AddSourceMeshes(meshFilters, m_spatialUnderstanding.transform);
                }
                m_spatialUnderstandingState = State.WaitingForPlacementSolverInit;
            }
            break;

        case State.WaitingForPlacementSolverInit:
            //TODO: error checking and timeout?
            bool navMeshFinished = !buildNavMesh || (buildNavMesh && m_navMeshBuilder.isFinished);
            if (!m_solverInitCalled)
            {
                m_solverInitCalled = true;
                StartCoroutine(InitSolverCoroutine());
                if (buildNavMesh)
                {
                    m_navMeshBuilder.BuildAsync();
                }
            }
            else if (m_solverInitialized && navMeshFinished)
            {
                ApplyStaticBatching();
                m_scanningComplete          = true;
                m_spatialUnderstandingState = State.Finished;
                if (OnScanComplete != null)
                {
                    OnScanComplete();
                }
            }
            break;

        default:
            break;
        }
    }
Exemplo n.º 5
0
    private void Update()
    {
        if (m_scanningComplete)
        {
            return;
        }
        switch (m_spatialUnderstandingState)
        {
        case SpatialUnderstandingState.StartScanning:
            // Start spatial mapping (SpatialUnderstanding requires this, too)
            if (!m_spatialMappingManager.IsObserverRunning())
            {
                m_spatialMappingManager.StartObserver();
            }
            m_spatialMappingManager.DrawVisualMeshes = visualizeSpatialMeshes;
            m_spatialUnderstanding.ScanStateChanged += OnScanStateChanged;
            m_spatialUnderstanding.RequestBeginScanning();
            m_spatialMappingManager.SetSurfaceMaterial(renderingMaterial);
            m_spatialUnderstandingState = SpatialUnderstandingState.Scanning;
            break;

        case SpatialUnderstandingState.FinalizeScan:
            //TODO: timeout?
            if (!m_spatialUnderstanding.ScanStatsReportStillWorking)
            {
                Debug.Log("Finalizing scan...");
                m_spatialUnderstanding.RequestFinishScan();
                m_spatialUnderstandingState = SpatialUnderstandingState.WaitingForScanCompletion;
            }
            break;

        case SpatialUnderstandingState.WaitingForMeshImport:
            //TODO: timeout?
            if (m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive == false)
            {
                Debug.Log("Found " + m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters().Count + " meshes (import active=" + m_spatialUnderstanding.UnderstandingCustomMesh.IsImportActive + ")");
                if (!visualizeSpatialMeshes)
                {
                    DisableSpatialMappingMeshes();
                }
                ApplyVisualizationSettings();
                //SurfacePlaneDeformationManager.Instance.SetSpatialMeshFilters(m_spatialUnderstanding.UnderstandingCustomMesh.GetMeshFilters());
                m_spatialUnderstandingState = SpatialUnderstandingState.WaitingForPlacementSolverInit;
            }
            break;

        case SpatialUnderstandingState.WaitingForPlacementSolverInit:
            //TODO: error checking and timeout?
            if (!m_placementSolverInitialized)
            {
                m_placementSolverInitialized = (SpatialUnderstandingDllObjectPlacement.Solver_Init() == 1);
                Debug.Log("Placement Solver initialization " + (m_placementSolverInitialized ? "succeeded" : "FAILED"));
                if (m_placementSolverInitialized)
                {
                    if (OnScanComplete != null)
                    {
                        OnScanComplete();
                    }
                    m_scanningComplete          = true;
                    m_spatialUnderstandingState = SpatialUnderstandingState.Finished;
                }
            }
            break;

        default:
            break;
        }
    }
Exemplo n.º 6
0
        static IEnumerator DoMapping()
        {
            if (SpatialInfoReady)
            {
                WorldErrors.Print("Spatial Info Already There");
                yield break;
            }

            //turn off rendering if we're not scanning, store old mode
            UnityEngine.XR.WSA.SpatialMappingRenderer             smRend   = FindObjectOfType <UnityEngine.XR.WSA.SpatialMappingRenderer>();
            UnityEngine.XR.WSA.SpatialMappingRenderer.RenderState oldState = UnityEngine.XR.WSA.SpatialMappingRenderer.RenderState.Occlusion;
            if (smRend != null)
            {
                oldState           = smRend.renderState;
                smRend.renderState = UnityEngine.XR.WSA.SpatialMappingRenderer.RenderState.None;
            }
            running = true;

            //is there an instance present?
            SpatialUnderstanding puInst = SpatialUnderstanding.Instance;

            if (puInst == null || !puInst.AllowSpatialUnderstanding)
            {
                Debug.LogError("No Spatial Understanding Instance, or not supported in build.");
                WorldErrors.Print("No Instance");
                yield break;
            }

            //can it scan?
            while (!SpatialUnderstanding.IsInitialized)
            {
                WorldErrors.Print("Not initialized");
                yield return(null);
            }

            puInst.UnderstandingCustomMesh.DrawProcessedMesh = true;

            bool requestedFinish = false;

            WorldErrors.Print("" + puInst.AutoBeginScanning + ", " + puInst.ScanState);
            if (!puInst.AutoBeginScanning && (puInst.ScanState == SpatialUnderstanding.ScanStates.ReadyToScan || puInst.ScanState == SpatialUnderstanding.ScanStates.None || puInst.ScanState == SpatialUnderstanding.ScanStates.Done))
            {
                WorldErrors.Print("Request Begin Scan");
                puInst.RequestBeginScanning();
            }

            //yield until scan automatically finishes, or it is stopped, or time runs out
            while (puInst.ScanState != SpatialUnderstanding.ScanStates.Done)
            {
                timer += Time.deltaTime;
                if (!requestedFinish && timer > targetTime)
                {
                    puInst.RequestFinishScan();
                    requestedFinish = true;
                    puInst.UnderstandingCustomMesh.DrawProcessedMesh = false;
                }
                yield return(null);
            }

            //signal we're ready to share data
            SpatialInfoReady = true;
            if (ready != null)
            {
                ready();
            }

            //reset rendering again if we have a mapping renderer
            if (smRend != null)
            {
                smRend.renderState = oldState;
            }

            running = false;
        }