Search code examples
androidkotlinarcore

ArCore: How to restrict PlaneFindingMode to only vertical surfaces?


I am new to ARCORE and Kotlin and trying a simple android-kotlin app that need to detect walls. I know Google's made it possible with PlaneFindingMode.VERTICAL tag, but I am not sure how to use it.

any help would be appreciated.


Solution

  • Possible duplicate here but I'll answer it anyway.

    This implementation is probably applicable to ARCore as well. But I tested this with SceneForm SDK

    Setup the AR Session first and use an extension function to modify plane finding.

    override fun onResume() {
        super.onResume()
    
        //Check if ARSession is null. If it is, instantiate it
        if(arSession == null) {
            arSession = Session(this@EdgeActivity)
            arSession?.setupPlaneFinding()
        }
    }
    
    
    // Setup plane detection
    private fun Session.setupPlaneFinding() {
    
        //Create the config
        arConfig = Config(this)
    
        //Pause the session | Not sure if this is required for modifying plane detection. I was using this for something else, try & modify at your end
        pause()
    
        // Modify the plane finding mode
        arConfig?.planeFindingMode = Config.PlaneFindingMode.VERTICAL
    
        //Reinstate the session
        resume()
    
        //Sceneform requires that the ARCore session is configured to the UpdateMode LATEST_CAMERA_IMAGE. | I kept getting an exception if I remove this line. Again, this method is part of a bigger code, this particular line may not be required at your end. Try & Modify
        arConfig?.updateMode = Config.UpdateMode.LATEST_CAMERA_IMAGE
    
        //Reconfigure the session
        configure(arConfig)
    
        //Setup the session with ARSceneView | Very important
        fragment.arSceneView.setupSession(this)
    }