diff --git a/android/build.gradle.kts b/android/build.gradle.kts index cca9fe47..2b625c84 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -61,6 +61,9 @@ dependencies { implementation(project(":orx-palette")) { exclude(group = "org.openrndr", module = "openrndr-draw") } + implementation(project(":orx-shapes")) { + exclude(group = "org.openrndr", module = "openrndr-draw") + } testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) diff --git a/android/src/main/java/com/icegps/orx/ContoursManager.kt b/android/src/main/java/com/icegps/orx/ContoursManager.kt index 99d61312..31bf2dd4 100644 --- a/android/src/main/java/com/icegps/orx/ContoursManager.kt +++ b/android/src/main/java/com/icegps/orx/ContoursManager.kt @@ -9,6 +9,8 @@ import com.icegps.orx.ktx.area import com.icegps.orx.ktx.toColorInt import com.icegps.orx.ktx.toMapboxPoint import com.icegps.orx.ktx.toast +import com.icegps.orx.triangulation.DelaunayTriangulation3D +import com.icegps.orx.triangulation.Triangle3D import com.icegps.shared.ktx.TAG import com.mapbox.geojson.Feature import com.mapbox.geojson.FeatureCollection @@ -30,8 +32,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import com.icegps.orx.triangulation.DelaunayTriangulation3D -import com.icegps.orx.triangulation.Triangle3D +import org.openrndr.extra.shapes.splines.CatmullRomChain2 import org.openrndr.math.Vector2 import org.openrndr.math.Vector3 import org.openrndr.shape.Rectangle @@ -294,10 +295,21 @@ class ContoursManager( style.addLayer(layer) } + private var useCatmullRom: Boolean = true + + fun setCatmullRom(enabled: Boolean) { + useCatmullRom = enabled + } + fun contoursToLineFeatures(contours: List, color: Int): List> { return contours.drop(1).map { contour -> contour.segments.map { segment -> - LineString.fromLngLats(listOf(segment.start.toMapboxPoint(), segment.end.toMapboxPoint())) + LineString.fromLngLats( + listOf( + segment.start.toMapboxPoint(), + segment.end.toMapboxPoint() + ) + ) }.map { lineString -> Feature.fromGeometry(lineString).apply { // 将颜色Int转换为十六进制字符串 @@ -311,6 +323,12 @@ class ContoursManager( val lists = contours.drop(0).filter { it.segments.isNotEmpty() }.map { contour -> val start = contour.segments[0].start listOf(start) + contour.segments.map { it.end } + }.map { + if (!useCatmullRom) return@map it + val cmr = CatmullRomChain2(it, 1.0, loop = true) + val contour = ShapeContour.fromPoints(cmr.positions(200), true) + val start = contour.segments[0].start + listOf(start) + contour.segments.map { it.end } }.map { points -> points.map { it.toMapboxPoint() } } if (lists.isEmpty()) { diff --git a/android/src/main/res/layout-port/activity_main.xml b/android/src/main/res/layout-port/activity_main.xml new file mode 100644 index 00000000..c2990eef --- /dev/null +++ b/android/src/main/res/layout-port/activity_main.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +