Untitled
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