Untitled

 avatar
unknown
plain_text
5 months ago
4.6 kB
6
Indexable
 @Composable
    fun ARSceneContent(latlongpointslist: ArrayList<LatLng>) {
        Box(modifier = Modifier.fillMaxSize()) {

            val engine = rememberEngine()
            val modelLoader = rememberModelLoader(engine)
            val materialLoader = rememberMaterialLoader(engine)
            val cameraNode = rememberARCameraNode(engine)
            val childNodes = rememberNodes()
            val view = rememberView(engine)
            val collisionSystem = rememberCollisionSystem(view)

            var planeRenderer by remember { mutableStateOf(true) }

            var trackingFailureReason by remember {
                mutableStateOf<TrackingFailureReason?>(null)
            }
            var frame by remember { mutableStateOf<Frame?>(null) }
            var destinationAnchor: Anchor? = null
            // Persistent list to hold all arrow nodes
            val arrowNodes = mutableListOf<AnchorNode>()

            ARScene(
                modifier = Modifier.fillMaxSize(),
                childNodes = childNodes,
                engine = engine,
                view = view,
                modelLoader = modelLoader,
                collisionSystem = collisionSystem,
                sessionConfiguration = { session, config ->
                    config.depthMode =
                        when (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) {
                            true -> Config.DepthMode.AUTOMATIC
                            else -> Config.DepthMode.DISABLED
                        }
                    config.instantPlacementMode = Config.InstantPlacementMode.LOCAL_Y_UP
                    config.lightEstimationMode =
                        Config.LightEstimationMode.ENVIRONMENTAL_HDR
                    config.geospatialMode = Config.GeospatialMode.ENABLED
                },
                cameraNode = cameraNode,
                planeRenderer = planeRenderer,
                onTrackingFailureChanged = {
                    trackingFailureReason = it
                },
              onSessionUpdated = {session: Session, updatedFrame: Frame ->
                frame = updatedFrame
//                  if (childNodes.isEmpty()) {
//                      updatedFrame.getUpdatedPlanes()
//                          .firstOrNull { it.type == Plane.Type.HORIZONTAL_UPWARD_FACING }
//                          ?.let { it.createAnchorOrNull(it.centerPose) }?.let {
//                              anchor ->
//                              childNodes += createAnchorNode(
//                                  engine = engine,
//                                  modelLoader = modelLoader,
//                                  materialLoader = materialLoader,
//                                  anchor = anchor
//                              )
//                          }
//                  }

              },
                onSessionCreated = { session ->
                    val earth = session.earth
                    if (earth?.earthState == Earth.EarthState.ENABLED) {
                        // Ensure we only add anchors once.
//                        Log.d("tag", ": "+arrowNodes.size)
                        if (arrowNodes.isEmpty()) {
                            latlongpointslist.forEach { point ->

                                val latLng = latlongpointslist.first()
                                val anchor = createDestinationAnchor(earth, latLng)
                                anchor?.let {
                                    val anchorNode = createAnchorNode(
                                        engine = engine,
                                        modelLoader = modelLoader,
                                        materialLoader = materialLoader,
                                        anchor = anchor
                                    )
                                    childNodes += anchorNode
                                    arrowNodes.add(anchorNode)
//                                    Log.d("tag", "childNodes: "+childNodes.size)
                                }
                            }
                        }else{
                            Log.d("tag", "ARSceneContent:null "+arrowNodes.size)
                        }
                    } else {
                        Log.e("ARScene", "Earth state is not enabled. Cannot create anchors.")
                    }
                },
               
            )
        }
    }
Editor is loading...
Leave a Comment