Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to use GeoviewCompose - SceneView #191

Merged
merged 9 commits into from
Apr 1, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion add-scene-layer-with-elevation/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ Run the sample to display a scene service with an `ArcGISSceneLayer`. Pan and zo

The scene launches with a northward view of the city of Brest, France ([SceneServer](https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer)). A 3D scene layer representing buildings (some textured) is used as an example.

## Additional information

This sample uses the GeoViewCompose Toolkit module to be able to implement a Composable MapView.

## Tags

3D, layer, scene
3D, geoviewcompose, layer, scene
2 changes: 1 addition & 1 deletion add-scene-layer-with-elevation/README.metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
],
"keywords": [
"3D",
"geoviewcompose",
"layer",
"scene",
"ArcGISScene",
Expand All @@ -23,7 +24,6 @@
],
"snippets": [
"src/main/java/com/esri/arcgismaps/sample/addscenelayerwithelevation/MainActivity.kt",
"src/main/java/com/esri/arcgismaps/sample/addscenelayerwithelevation/components/ComposeSceneView.kt",
"src/main/java/com/esri/arcgismaps/sample/addscenelayerwithelevation/components/SceneViewModel.kt",
"src/main/java/com/esri/arcgismaps/sample/addscenelayerwithelevation/screens/MainScreen.kt"
],
Expand Down
3 changes: 3 additions & 0 deletions add-scene-layer-with-elevation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,7 @@ dependencies {
implementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(project(":samples-lib"))
// Toolkit dependencies
implementation(platform(libs.arcgis.maps.kotlin.toolkit.bom))
implementation(libs.arcgis.maps.kotlin.toolkit.geoview.compose)
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,41 @@ package com.esri.arcgismaps.sample.addscenelayerwithelevation.components

import android.app.Application
import androidx.lifecycle.AndroidViewModel
import com.arcgismaps.geometry.Point
import com.arcgismaps.mapping.ArcGISScene
import com.arcgismaps.mapping.BasemapStyle
import com.arcgismaps.mapping.Viewpoint
import com.arcgismaps.mapping.layers.ArcGISSceneLayer
import com.arcgismaps.mapping.view.Camera
import com.esri.arcgismaps.sample.addscenelayerwithelevation.R

class SceneViewModel(application: Application) : AndroidViewModel(application) {
// set the SceneView state
val sceneViewState = SceneViewState()

private val initLocation = Point(
x = 48.378,
y = -4.494
)

// create a camera position for the scene
private val camera: Camera = Camera(
latitude = 48.378,
longitude = -4.494,
altitude = 200.0,
heading = 345.0,
pitch = 65.0,
roll = 0.0
)
// the scene used to display on the SceneView
val scene: ArcGISScene = ArcGISScene(BasemapStyle.ArcGISTopographic).apply {
initialViewpoint = Viewpoint(initLocation,camera)
}

// add a scene layer to the ArcGISScene
init {
// create a scene layer from a scene service for viewing buildings
val sceneLayer = ArcGISSceneLayer(application.getString(R.string.brest_buildings))
// add the scene layer to the scene's operational layer
sceneViewState.arcGISScene.operationalLayers.add(sceneLayer)
scene.operationalLayers.add(sceneLayer)
}
}

/**
* Data class that represents the SceneView state
*/
class SceneViewState(
val arcGISScene: ArcGISScene = ArcGISScene(BasemapStyle.ArcGISTopographic),
val camera: Camera = Camera(48.378, -4.494, 200.0, 345.0, 65.0, 0.0)
)
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.esri.arcgismaps.sample.addscenelayerwithelevation.components.ComposeSceneView
import com.arcgismaps.toolkit.geoviewcompose.SceneView
import com.esri.arcgismaps.sample.addscenelayerwithelevation.components.SceneViewModel
import com.esri.arcgismaps.sample.sampleslib.components.SampleTopAppBar

Expand All @@ -44,10 +44,9 @@ fun MainScreen(sampleName: String, application: Application) {
.padding(it)
shubham7109 marked this conversation as resolved.
Show resolved Hide resolved
) {
// composable function that wraps the SceneView
ComposeSceneView(
modifier = Modifier
.fillMaxSize(),
sceneViewModel = sceneViewModel
SceneView(
modifier = Modifier.fillMaxSize(),
arcGISScene = sceneViewModel.scene
)
}
}
Expand Down
6 changes: 5 additions & 1 deletion display-scene-from-mobile-scene-package/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ This sample takes a mobile scene package that was created in ArcGIS Pro, and dis
* MobileScenePackage
* SceneView

## Additional information

This sample uses the GeoViewCompose Toolkit module to be able to implement a Composable MapView.

## Tags

3d, mobile scene package, mspk, offline, scene
3d, geoviewcompose, mobile scene package, mspk, offline, scene
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
],
"keywords": [
"3d",
"geoviewcompose",
"mobile scene package",
"mspk",
"offline",
Expand All @@ -26,7 +27,6 @@
"snippets": [
"src/main/java/com/esri/arcgismaps/sample/displayscenefrommobilescenepackage/DownloadActivity.kt",
"src/main/java/com/esri/arcgismaps/sample/displayscenefrommobilescenepackage/MainActivity.kt",
"src/main/java/com/esri/arcgismaps/sample/displayscenefrommobilescenepackage/components/ComposeSceneView.kt",
"src/main/java/com/esri/arcgismaps/sample/displayscenefrommobilescenepackage/components/SceneViewModel.kt",
"src/main/java/com/esri/arcgismaps/sample/displayscenefrommobilescenepackage/screens/MainScreen.kt"
],
Expand Down
3 changes: 3 additions & 0 deletions display-scene-from-mobile-scene-package/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,7 @@ dependencies {
implementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(project(":samples-lib"))
// Toolkit dependencies
implementation(platform(libs.arcgis.maps.kotlin.toolkit.bom))
implementation(libs.arcgis.maps.kotlin.toolkit.geoview.compose)
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@
package com.esri.arcgismaps.sample.displayscenefrommobilescenepackage.components

import android.app.Application
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.AndroidViewModel
import com.arcgismaps.mapping.ArcGISScene
import com.arcgismaps.mapping.BasemapStyle
shubham7109 marked this conversation as resolved.
Show resolved Hide resolved
import com.arcgismaps.mapping.MobileScenePackage
import com.esri.arcgismaps.sample.displayscenefrommobilescenepackage.R
import com.esri.arcgismaps.sample.sampleslib.components.MessageDialogViewModel
Expand All @@ -34,11 +38,8 @@ class SceneViewModel(
private val sampleCoroutineScope: CoroutineScope
) : AndroidViewModel(application) {

// create a mutable state holder for the first scene
private val _firstScene = MutableStateFlow<ArcGISScene?>(null)

// expose a read-only state flow for observing changes to the first scene
val firstScene: StateFlow<ArcGISScene?> = _firstScene.asStateFlow()
// create a base scene to be used to load the mobile scene package
var scene by mutableStateOf(ArcGISScene(BasemapStyle.ArcGISStreets))

// create a ViewModel to handle dialog interactions
val messageDialogVM: MessageDialogViewModel = MessageDialogViewModel()
Expand All @@ -64,7 +65,7 @@ class SceneViewModel(
// load the mobile scene package
mobileScenePackage.load().onSuccess {
// update the mutable state holder with the first scene from the MobileScenePackage
_firstScene.value = mobileScenePackage.scenes.first()
scene = mobileScenePackage.scenes.first()
}.onFailure { error ->
// show the message dialog and pass the error message to be displayed in the dialog
messageDialogVM.showMessageDialog(error.message.toString(), error.cause.toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import com.esri.arcgismaps.sample.displayscenefrommobilescenepackage.components.ComposeSceneView
import com.arcgismaps.toolkit.geoviewcompose.SceneView
import com.esri.arcgismaps.sample.displayscenefrommobilescenepackage.components.SceneViewModel
import com.esri.arcgismaps.sample.sampleslib.components.MessageDialog
import com.esri.arcgismaps.sample.sampleslib.components.SampleTopAppBar
Expand All @@ -48,9 +48,9 @@ fun MainScreen(sampleName: String, application: Application) {
.padding(it)
) {
shubham7109 marked this conversation as resolved.
Show resolved Hide resolved
// composable function that wraps the SceneView
ComposeSceneView(
SceneView(
modifier = Modifier.fillMaxSize(),
sceneViewModel = sceneViewModel
arcGISScene = sceneViewModel.scene
)
// display a dialog if the sample encounters an error
sceneViewModel.messageDialogVM.apply {
Expand Down
6 changes: 5 additions & 1 deletion show-viewshed-from-point-in-scene/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ Use the sliders to change the properties (heading, pitch, etc.), of the viewshed

The scene shows a [buildings layer in Brest, France](https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0) hosted on ArcGIS Online.

## Additional information

This sample uses the GeoViewCompose Toolkit module to be able to implement a Composable MapView.

## Tags

3D, frustum, scene, viewshed, visibility analysis
3D, frustum, geoviewcompose, scene, viewshed, visibility analysis
2 changes: 1 addition & 1 deletion show-viewshed-from-point-in-scene/README.metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"keywords": [
"3D",
"frustum",
"geoviewcompose",
"scene",
"viewshed",
"visibility analysis",
Expand All @@ -29,7 +30,6 @@
],
"snippets": [
"src/main/java/com/esri/arcgismaps/sample/showviewshedfrompointinscene/MainActivity.kt",
"src/main/java/com/esri/arcgismaps/sample/showviewshedfrompointinscene/components/ComposeSceneView.kt",
"src/main/java/com/esri/arcgismaps/sample/showviewshedfrompointinscene/components/SceneViewModel.kt",
"src/main/java/com/esri/arcgismaps/sample/showviewshedfrompointinscene/screens/MainScreen.kt",
"src/main/java/com/esri/arcgismaps/sample/showviewshedfrompointinscene/screens/ViewshedOptionsScreen.kt",
Expand Down
3 changes: 3 additions & 0 deletions show-viewshed-from-point-in-scene/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,7 @@ dependencies {
implementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(project(":samples-lib"))
// Toolkit dependencies
implementation(platform(libs.arcgis.maps.kotlin.toolkit.bom))
implementation(libs.arcgis.maps.kotlin.toolkit.geoview.compose)
}
Loading
Loading