commonMain.earth.worldwind.render.AbstractSurfaceRenderable.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of worldwind-jvm Show documentation
Show all versions of worldwind-jvm Show documentation
The WorldWind Kotlin SDK (WWK) includes the library, examples and tutorials for building multiplatform 3D virtual globe applications for Android, Web and Java.
The newest version!
package earth.worldwind.render
import earth.worldwind.geom.BoundingBox
import earth.worldwind.geom.Sector
import earth.worldwind.globe.Globe
abstract class AbstractSurfaceRenderable(sector: Sector, displayName: String? = null) : AbstractRenderable(displayName) {
val sector = Sector(sector)
protected val extent by lazy { BoundingBox() }
protected val heightLimits by lazy { FloatArray(2) }
protected var heightLimitsTimestamp = 0L
protected var extentExaggeration = 0.0f
protected var extentGlobeState: Globe.State? = null
protected var extentGlobeOffset: Globe.Offset? = null
protected val extentSector = Sector()
protected open fun getExtent(rc: RenderContext): BoundingBox {
val globe = rc.globe
val timestamp = rc.elevationModelTimestamp
if (timestamp != heightLimitsTimestamp) {
if (globe.is2D) heightLimits.fill(0f) else calcHeightLimits(globe)
}
val ve = rc.verticalExaggeration.toFloat()
val state = rc.globeState
val offset = rc.globe.offset
if (timestamp != heightLimitsTimestamp || ve != extentExaggeration
|| state != extentGlobeState || offset != extentGlobeOffset || extentSector != sector) {
val minHeight = heightLimits[0] * ve
val maxHeight = heightLimits[1] * ve
extent.setToSector(sector, globe, minHeight, maxHeight)
heightLimitsTimestamp = timestamp
extentExaggeration = ve
extentGlobeState = state
extentGlobeOffset = offset
extentSector.copy(sector)
}
return extent
}
protected open fun calcHeightLimits(globe: Globe) {
// initialize the heights for elevation model scan
heightLimits[0] = Float.MAX_VALUE
heightLimits[1] = -Float.MAX_VALUE
globe.elevationModel.getHeightLimits(sector, heightLimits)
// check for valid height limits
if (heightLimits[0] > heightLimits[1]) heightLimits.fill(0f)
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy