Upgrade to JDK 17. Add @JvmRecord annotations

This commit is contained in:
Edwin Jakobs
2024-06-01 07:31:44 +02:00
parent 06f593053b
commit 78fbff54c5
38 changed files with 94 additions and 33 deletions

View File

@@ -2,7 +2,7 @@
kotlinApi = "2.0" kotlinApi = "2.0"
kotlinLanguage = "2.0" kotlinLanguage = "2.0"
kotlin = "2.0.0" kotlin = "2.0.0"
jvmTarget = "11" jvmTarget = "17"
openrndr = { require = "[0.4.2, 0.5.0)" } openrndr = { require = "[0.4.2, 0.5.0)" }
kotlinxCoroutines = "1.8.1" kotlinxCoroutines = "1.8.1"
kotlinLogging = "6.0.9" kotlinLogging = "6.0.9"

View File

@@ -4,8 +4,10 @@ import kotlinx.serialization.Serializable
import org.openrndr.color.* import org.openrndr.color.*
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import org.openrndr.math.mixAngle import org.openrndr.math.mixAngle
import kotlin.jvm.JvmRecord
@Serializable @Serializable
@JvmRecord
data class ColorHPLUVa(val h: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) : data class ColorHPLUVa(val h: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) :
ColorModel<ColorHPLUVa>, ColorModel<ColorHPLUVa>,
HueShiftableColor<ColorHPLUVa>, HueShiftableColor<ColorHPLUVa>,

View File

@@ -5,6 +5,7 @@ import org.openrndr.color.*
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import org.openrndr.math.map import org.openrndr.math.map
import org.openrndr.math.mixAngle import org.openrndr.math.mixAngle
import kotlin.jvm.JvmRecord
import kotlin.math.* import kotlin.math.*
private val m = arrayOf( private val m = arrayOf(
@@ -81,6 +82,7 @@ private fun maxChromaForLH(L100: Double, H: Double): Double {
* HSLUV color space * HSLUV color space
*/ */
@Serializable @Serializable
@JvmRecord
data class ColorHSLUVa(val h: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) : data class ColorHSLUVa(val h: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) :
ColorModel<ColorHSLUVa>, ColorModel<ColorHSLUVa>,
HueShiftableColor<ColorHSLUVa>, HueShiftableColor<ColorHSLUVa>,
@@ -89,8 +91,6 @@ data class ColorHSLUVa(val h: Double, val s: Double, val l: Double, override val
LuminosityColor<ColorHSLUVa>, LuminosityColor<ColorHSLUVa>,
AlgebraicColor<ColorHSLUVa> { AlgebraicColor<ColorHSLUVa> {
@Deprecated("Legacy alpha parameter name", ReplaceWith("alpha"))
val a = alpha
fun toLCHUVa(): ColorLCHUVa { fun toLCHUVa(): ColorLCHUVa {

View File

@@ -4,10 +4,12 @@ import kotlinx.serialization.Serializable
import org.openrndr.color.* import org.openrndr.color.*
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import org.openrndr.math.mixAngle import org.openrndr.math.mixAngle
import kotlin.jvm.JvmRecord
import kotlin.math.* import kotlin.math.*
@Suppress("LocalVariableName") @Suppress("LocalVariableName")
@Serializable @Serializable
@JvmRecord
data class ColorOKHSLa(val h: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) : data class ColorOKHSLa(val h: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) :
ColorModel<ColorOKHSLa>, ColorModel<ColorOKHSLa>,
HueShiftableColor<ColorOKHSLa>, HueShiftableColor<ColorOKHSLa>,
@@ -52,8 +54,6 @@ data class ColorOKHSLa(val h: Double, val s: Double, val l: Double, override val
} }
} }
@Deprecated("Legacy alpha parameter name", ReplaceWith("alpha"))
val a = alpha
override fun toRGBa(): ColorRGBa { override fun toRGBa(): ColorRGBa {
if (l == 0.0 || l == 1.0) { if (l == 0.0 || l == 1.0) {

View File

@@ -4,10 +4,12 @@ import kotlinx.serialization.Serializable
import org.openrndr.color.* import org.openrndr.color.*
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import org.openrndr.math.mixAngle import org.openrndr.math.mixAngle
import kotlin.jvm.JvmRecord
import kotlin.math.* import kotlin.math.*
@Suppress("LocalVariableName") @Suppress("LocalVariableName")
@Serializable @Serializable
@JvmRecord
data class ColorOKHSVa(val h: Double, val s: Double, val v: Double, override val alpha: Double = 1.0) : data class ColorOKHSVa(val h: Double, val s: Double, val v: Double, override val alpha: Double = 1.0) :
ColorModel<ColorOKHSVa>, ColorModel<ColorOKHSVa>,
HueShiftableColor<ColorOKHSVa>, HueShiftableColor<ColorOKHSVa>,
@@ -54,9 +56,6 @@ data class ColorOKHSVa(val h: Double, val s: Double, val v: Double, override val
} }
} }
@Deprecated("Legacy alpha parameter name", ReplaceWith("alpha"))
val a = alpha
override fun toRGBa(): ColorRGBa { override fun toRGBa(): ColorRGBa {
val a_ = cos(2 * PI * h / 360.0) val a_ = cos(2 * PI * h / 360.0)
val b_ = sin(2 * PI * h / 360.0) val b_ = sin(2 * PI * h / 360.0)

View File

@@ -3,6 +3,7 @@ package org.openrndr.extra.color.spaces
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import org.openrndr.color.* import org.openrndr.color.*
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import kotlin.jvm.JvmRecord
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.pow import kotlin.math.pow
import kotlin.math.sign import kotlin.math.sign
@@ -15,6 +16,7 @@ import kotlin.math.sign
*/ */
@Suppress("LocalVariableName") @Suppress("LocalVariableName")
@Serializable @Serializable
@JvmRecord
data class ColorOKLABa(val l: Double, val a: Double, val b: Double, override val alpha: Double = 1.0) : data class ColorOKLABa(val l: Double, val a: Double, val b: Double, override val alpha: Double = 1.0) :
ColorModel<ColorOKLABa>, ColorModel<ColorOKLABa>,
ShadableColor<ColorOKLABa>, ShadableColor<ColorOKLABa>,

View File

@@ -3,12 +3,14 @@ package org.openrndr.extra.color.spaces
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import org.openrndr.color.* import org.openrndr.color.*
import org.openrndr.math.* import org.openrndr.math.*
import kotlin.jvm.JvmRecord
import kotlin.math.* import kotlin.math.*
/** /**
* Color in cylindrical OKLab space * Color in cylindrical OKLab space
*/ */
@Serializable @Serializable
@JvmRecord
data class ColorOKLCHa(val l: Double, val c: Double, val h: Double, override val alpha: Double = 1.0) : data class ColorOKLCHa(val l: Double, val c: Double, val h: Double, override val alpha: Double = 1.0) :
ColorModel<ColorOKLCHa>, ColorModel<ColorOKLCHa>,
ShadableColor<ColorOKLCHa>, ShadableColor<ColorOKLCHa>,
@@ -31,9 +33,6 @@ data class ColorOKLCHa(val l: Double, val c: Double, val h: Double, override val
} }
} }
@Deprecated("Legacy alpha parameter name", ReplaceWith("alpha"))
val a = alpha
override fun opacify(factor: Double) = copy(alpha = alpha * factor) override fun opacify(factor: Double) = copy(alpha = alpha * factor)
override fun shade(factor: Double) = copy(l = l * factor) override fun shade(factor: Double) = copy(l = l * factor)

View File

@@ -5,8 +5,10 @@ import org.openrndr.color.*
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import org.openrndr.math.map import org.openrndr.math.map
import org.openrndr.math.mixAngle import org.openrndr.math.mixAngle
import kotlin.jvm.JvmRecord
@Serializable @Serializable
@JvmRecord
data class ColorXSLUVa(val x: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) : data class ColorXSLUVa(val x: Double, val s: Double, val l: Double, override val alpha: Double = 1.0) :
ColorModel<ColorXSLUVa>, ColorModel<ColorXSLUVa>,
HueShiftableColor<ColorXSLUVa>, HueShiftableColor<ColorXSLUVa>,
@@ -14,8 +16,6 @@ data class ColorXSLUVa(val x: Double, val s: Double, val l: Double, override val
ShadableColor<ColorXSLUVa>, ShadableColor<ColorXSLUVa>,
AlgebraicColor<ColorXSLUVa> { AlgebraicColor<ColorXSLUVa> {
@Deprecated("Legacy alpha parameter name", ReplaceWith("alpha"))
val a = alpha
override val hue: Double override val hue: Double
get() = x get() = x
override fun withHue(hue: Double): ColorXSLUVa = copy(x = hue) override fun withHue(hue: Double): ColorXSLUVa = copy(x = hue)

View File

@@ -12,6 +12,7 @@ import org.openrndr.math.Vector3
import org.openrndr.math.YPolarity import org.openrndr.math.YPolarity
import org.openrndr.math.transforms.* import org.openrndr.math.transforms.*
import org.openrndr.shape.* import org.openrndr.shape.*
import kotlin.jvm.JvmRecord
/** /**
* Used internally to define [ClipMode]s. * Used internally to define [ClipMode]s.
@@ -71,12 +72,14 @@ private data class CompositionDrawStyle(
/** /**
* Data structure containing intersection information. * Data structure containing intersection information.
*/ */
@JvmRecord
data class ShapeNodeIntersection(val node: ShapeNode, val intersection: ContourIntersection) data class ShapeNodeIntersection(val node: ShapeNode, val intersection: ContourIntersection)
/** /**
* Data structure containing information about a point * Data structure containing information about a point
* in a [ShapeContour] closest to some other 2D point. * in a [ShapeContour] closest to some other 2D point.
*/ */
@JvmRecord
data class ShapeNodeNearestContour(val node: ShapeNode, val point: ContourPoint, val distanceDirection: Vector2, val distance: Double) data class ShapeNodeNearestContour(val node: ShapeNode, val point: ContourPoint, val distanceDirection: Vector2, val distance: Double)
/** /**

View File

@@ -7,6 +7,7 @@ import org.openrndr.extra.composition.AttributeOrPropertyKey.*
import org.openrndr.extra.composition.Inheritance.* import org.openrndr.extra.composition.Inheritance.*
import org.openrndr.math.* import org.openrndr.math.*
import org.openrndr.shape.Rectangle import org.openrndr.shape.Rectangle
import kotlin.jvm.JvmRecord
import kotlin.reflect.* import kotlin.reflect.*
enum class Inheritance { enum class Inheritance {
@@ -216,8 +217,10 @@ enum class MeetOrSlice {
SLICE SLICE
} }
@JvmRecord
data class AspectRatio(val align: Align, val meetOrSlice: MeetOrSlice) : AttributeOrPropertyValue { data class AspectRatio(val align: Align, val meetOrSlice: MeetOrSlice) : AttributeOrPropertyValue {
override val value = this override val value: AspectRatio
get() = this
companion object { companion object {
val DEFAULT = AspectRatio(Align.X_MID_Y_MID, MeetOrSlice.MEET) val DEFAULT = AspectRatio(Align.X_MID_Y_MID, MeetOrSlice.MEET)
@@ -267,6 +270,7 @@ sealed interface ViewBox : AttributeOrPropertyValue {
} }
} }
@JvmRecord
private data class PropertyBehavior(val inherit: Inheritance, val initial: AttributeOrPropertyValue) private data class PropertyBehavior(val inherit: Inheritance, val initial: AttributeOrPropertyValue)
private object PropertyBehaviors { private object PropertyBehaviors {

View File

@@ -8,6 +8,7 @@ import org.openrndr.extra.fx.blend.SourceIn
import org.openrndr.extra.fx.blend.SourceOut import org.openrndr.extra.fx.blend.SourceOut
import org.openrndr.extra.parameters.BooleanParameter import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.Description import org.openrndr.extra.parameters.Description
import kotlin.jvm.JvmRecord
fun RenderTarget.deepDestroy() { fun RenderTarget.deepDestroy() {
val cbcopy = colorAttachments.map { it } val cbcopy = colorAttachments.map { it }
@@ -320,6 +321,7 @@ fun <F : Filter2to1> Layer.blend(filter: F, configure: F.() -> Unit = {}): F {
return filter return filter
} }
@JvmRecord
data class ColorBufferCacheKey( data class ColorBufferCacheKey(
val colorType: ColorType, val colorType: ColorType,
val contentScale: Double val contentScale: Double

View File

@@ -13,6 +13,7 @@ import java.io.File
val logger = KotlinLogging.logger { } val logger = KotlinLogging.logger { }
@JvmRecord
private data class RenderTargetDescription(val width: Int, val height: Int, val contentScale: Double) private data class RenderTargetDescription(val width: Int, val height: Int, val contentScale: Double)
private fun RenderTarget.description() = RenderTargetDescription(width, height, contentScale) private fun RenderTarget.description() = RenderTargetDescription(width, height, contentScale)

View File

@@ -6,10 +6,12 @@ import org.openrndr.events.Event
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
import kotlin.jvm.JvmRecord
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
private val logger = KotlinLogging.logger { } private val logger = KotlinLogging.logger { }
@JvmRecord
data class ComputeEvent(val source: ComputeNode) data class ComputeEvent(val source: ComputeNode)
open class ComputeNode(val graph: ComputeGraph, var computeFunction: suspend () -> Unit = {}) { open class ComputeNode(val graph: ComputeGraph, var computeFunction: suspend () -> Unit = {}) {

View File

@@ -1,6 +1,7 @@
package org.openrndr.extra.envelopes package org.openrndr.extra.envelopes
import org.openrndr.math.mix import org.openrndr.math.mix
import kotlin.jvm.JvmRecord
import kotlin.math.min import kotlin.math.min
data class ADSR( data class ADSR(

View File

@@ -6,6 +6,7 @@ import org.openrndr.math.transforms.buildTransform
import org.openrndr.shape.Segment2D import org.openrndr.shape.Segment2D
import org.openrndr.shape.ShapeContour import org.openrndr.shape.ShapeContour
import org.openrndr.shape.bounds import org.openrndr.shape.bounds
import kotlin.jvm.JvmRecord
import kotlin.math.abs import kotlin.math.abs
/** /**

View File

@@ -1,7 +1,9 @@
package org.openrndr.extra.hashgrid package org.openrndr.extra.hashgrid
import org.openrndr.math.Vector3 import org.openrndr.math.Vector3
import kotlin.jvm.JvmRecord
@JvmRecord
data class Box3D(val corner: Vector3, val width: Double, val height: Double, val depth: Double) { data class Box3D(val corner: Vector3, val width: Double, val height: Double, val depth: Double) {
companion object { companion object {
val EMPTY = Box3D(Vector3.ZERO, 0.0, 0.0, 0.0) val EMPTY = Box3D(Vector3.ZERO, 0.0, 0.0, 0.0)

View File

@@ -2,6 +2,7 @@ package org.openrndr.extra.hashgrid
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import org.openrndr.shape.Rectangle import org.openrndr.shape.Rectangle
import kotlin.jvm.JvmRecord
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.max import kotlin.math.max
import kotlin.math.min import kotlin.math.min
@@ -12,6 +13,7 @@ private fun Double.fastFloor(): Int {
return if (this >= 0) this.toInt() else this.toInt() - 1 return if (this >= 0) this.toInt() else this.toInt() - 1
} }
@JvmRecord
private data class GridCoords(val x: Int, val y: Int) { private data class GridCoords(val x: Int, val y: Int) {
fun offset(i: Int, j: Int): GridCoords = copy(x = x + i, y = y + j) fun offset(i: Int, j: Int): GridCoords = copy(x = x + i, y = y + j)
} }

View File

@@ -1,5 +1,6 @@
package org.openrndr.extra.hashgrid package org.openrndr.extra.hashgrid
import org.openrndr.math.Vector3 import org.openrndr.math.Vector3
import kotlin.jvm.JvmRecord
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.max import kotlin.math.max
import kotlin.math.min import kotlin.math.min
@@ -10,6 +11,7 @@ private fun Double.fastFloor(): Int {
return if (this >= 0) this.toInt() else this.toInt() - 1 return if (this >= 0) this.toInt() else this.toInt() - 1
} }
@JvmRecord
private data class GridCoords3D(val x: Int, val y: Int, val z: Int) { private data class GridCoords3D(val x: Int, val y: Int, val z: Int) {
fun offset(i: Int, j: Int, k : Int): GridCoords3D = copy(x = x + i, y = y + j, z = z + k) fun offset(i: Int, j: Int, k : Int): GridCoords3D = copy(x = x + i, y = y + j, z = z + k)
} }

View File

@@ -8,6 +8,7 @@ import org.openrndr.math.Vector3
import org.openrndr.math.transforms.ortho import org.openrndr.math.transforms.ortho
import org.openrndr.math.transforms.perspective import org.openrndr.math.transforms.perspective
@JvmRecord
data class LightContext(val lights: List<NodeContent<Light>>, data class LightContext(val lights: List<NodeContent<Light>>,
val shadowMaps: Map<ShadowLight, RenderTarget>) val shadowMaps: Map<ShadowLight, RenderTarget>)

View File

@@ -52,8 +52,8 @@ data class MaterialContext(val pass: RenderPass,
@JvmRecord
data class PrimitiveContext(val hasNormalAttribute: Boolean, val hasSkinning: Boolean) data class PrimitiveContext(val hasNormalAttribute: Boolean, val hasSkinning: Boolean)
@JvmRecord
data class ContextKey(val materialContext: MaterialContext, val primitiveContext: PrimitiveContext) data class ContextKey(val materialContext: MaterialContext, val primitiveContext: PrimitiveContext)

View File

@@ -3,6 +3,7 @@ package org.openrndr.extra.dnk3
import org.openrndr.draw.* import org.openrndr.draw.*
import org.openrndr.math.Matrix44 import org.openrndr.math.Matrix44
@JvmRecord
data class PostContext(val lightContext: LightContext, val inverseViewMatrix: Matrix44) data class PostContext(val lightContext: LightContext, val inverseViewMatrix: Matrix44)
interface PostStep { interface PostStep {

View File

@@ -5,6 +5,7 @@ import org.openrndr.draw.DepthFormat
import org.openrndr.draw.RenderTarget import org.openrndr.draw.RenderTarget
import org.openrndr.draw.renderTarget import org.openrndr.draw.renderTarget
@JvmRecord
data class RenderPass(val combiners: List<FacetCombiner>, data class RenderPass(val combiners: List<FacetCombiner>,
val renderOpaque: Boolean = true, val renderOpaque: Boolean = true,
val renderTransparent: Boolean = false, val renderTransparent: Boolean = false,

View File

@@ -26,8 +26,10 @@ const val GLTF_ELEMENT_ARRAY_BUFFER = 34963
data class GltfAsset(val generator: String?, val version: String?) data class GltfAsset(val generator: String?, val version: String?)
@JvmRecord
data class GltfScene(val nodes: IntArray) data class GltfScene(val nodes: IntArray)
@JvmRecord
data class GltfNode(val name: String?, data class GltfNode(val name: String?,
val children: IntArray?, val children: IntArray?,
val matrix: DoubleArray?, val matrix: DoubleArray?,
@@ -39,8 +41,10 @@ data class GltfNode(val name: String?,
val camera: Int?, val camera: Int?,
val extensions: GltfNodeExtensions?) val extensions: GltfNodeExtensions?)
@JvmRecord
data class KHRLightsPunctualIndex(val light: Int) data class KHRLightsPunctualIndex(val light: Int)
@JvmRecord
data class GltfNodeExtensions(val KHR_lights_punctual: KHRLightsPunctualIndex?) { data class GltfNodeExtensions(val KHR_lights_punctual: KHRLightsPunctualIndex?) {
} }

View File

@@ -7,6 +7,7 @@ import javax.sound.midi.*
private val logger = KotlinLogging.logger { } private val logger = KotlinLogging.logger { }
@JvmRecord
data class MidiDeviceName(val name: String, val vendor: String) data class MidiDeviceName(val name: String, val vendor: String)
class MidiDeviceCapabilities { class MidiDeviceCapabilities {
@@ -18,6 +19,7 @@ class MidiDeviceCapabilities {
} }
} }
@JvmRecord
data class MidiDeviceDescription( data class MidiDeviceDescription(
val name: String, val name: String,
val vendor: String, val vendor: String,

View File

@@ -16,7 +16,7 @@ fun main() {
} }
oliveProgram { oliveProgram {
extend { extend {
drawer.clear(ColorRGBa.GRAY) drawer.clear(ColorRGBa.PINK)
drawer.fill = ColorRGBa.WHITE drawer.fill = ColorRGBa.WHITE
for (i in 0 until 100) { for (i in 0 until 100) {
drawer.circle( drawer.circle(

View File

@@ -33,6 +33,7 @@ enum class OliveScriptHost {
KOTLIN_SCRIPT KOTLIN_SCRIPT
} }
@JvmRecord
data class ScriptLoadedEvent(val scriptFile: String) data class ScriptLoadedEvent(val scriptFile: String)
enum class ScriptMode { enum class ScriptMode {

View File

@@ -15,6 +15,7 @@ tasks.test {
dependencies { dependencies {
implementation(project(":orx-expression-evaluator")) implementation(project(":orx-expression-evaluator"))
implementation(project(":orx-color"))
implementation(project(":orx-text-writer")) implementation(project(":orx-text-writer"))
implementation(libs.openrndr.application) implementation(libs.openrndr.application)
implementation(libs.openrndr.math) implementation(libs.openrndr.math)

View File

@@ -14,8 +14,11 @@ import org.openrndr.shape.Rectangle
import java.util.* import java.util.*
@JvmRecord
data class ElementClass(val name: String) data class ElementClass(val name: String)
@JvmRecord
data class ElementPseudoClass(val name: String) data class ElementPseudoClass(val name: String)
@JvmRecord
data class ElementType(val name: String) data class ElementType(val name: String)
val disabled = ElementPseudoClass("disabled") val disabled = ElementPseudoClass("disabled")

View File

@@ -21,6 +21,7 @@ import kotlin.reflect.KMutableProperty0
private val logger = KotlinLogging.logger {} private val logger = KotlinLogging.logger {}
@JvmRecord
data class Range(val min: Double, val max: Double) { data class Range(val min: Double, val max: Double) {
val span: Double get() = max - min val span: Double get() = max - min
} }

View File

@@ -11,6 +11,7 @@ enum class PropertyInheritance {
RESET RESET
} }
@JvmRecord
data class Property(val name: String, data class Property(val name: String,
val value: Any?) val value: Any?)
@@ -41,7 +42,7 @@ sealed class LinearDimension(inherit: Boolean = false) : PropertyValue(inherit)
object Inherit : LinearDimension(inherit = true) object Inherit : LinearDimension(inherit = true)
} }
@JvmRecord
data class PropertyBehaviour(val inheritance: PropertyInheritance, val intitial: Any) data class PropertyBehaviour(val inheritance: PropertyInheritance, val intitial: Any)
object PropertyBehaviours { object PropertyBehaviours {

View File

@@ -28,7 +28,7 @@ fun ShapeProvider.uniform(distanceToEdge: Double = 0.0, random: Random = Random.
/** /**
* Generate [sampleCount] uniformly distributed points inside the area of [ShapeProvider] * Generate [sampleCount] uniformly distributed points inside the area of [ShapeProvider]
*/ */
fun ShapeProvider.uniform(sampleCount: Int) : List<Vector2> = shape.triangulation.uniform(sampleCount) fun ShapeProvider.uniform(sampleCount: Int, random: Random = Random.Default) : List<Vector2> = shape.triangulation.uniform(sampleCount, random)
/** /**

View File

@@ -2,14 +2,15 @@ package org.openrndr.extra.noise
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import org.openrndr.shape.Triangle import org.openrndr.shape.Triangle
import kotlin.random.Random
/** /**
* Generate [count] uniform samples from a list of [Triangle]s * Generate [count] uniform samples from a list of [Triangle]s
*/ */
fun List<Triangle>.uniform(count: Int): List<Vector2> { fun List<Triangle>.uniform(count: Int, random: Random = Random.Default): List<Vector2> {
val totalArea = this.sumOf { it.area } val totalArea = this.sumOf { it.area }
val randoms = (0 until count).map { val randoms = (0 until count).map {
Double.uniform(0.0, totalArea) Double.uniform(0.0, totalArea, random = random)
}.sorted() }.sorted()
val result = mutableListOf<Vector2>() val result = mutableListOf<Vector2>()
var idx = 0 var idx = 0
@@ -17,7 +18,7 @@ fun List<Triangle>.uniform(count: Int): List<Vector2> {
for (t in this) { for (t in this) {
sum += t.area sum += t.area
while (idx < randoms.lastIndex && sum > randoms[idx]) { while (idx < randoms.lastIndex && sum > randoms[idx]) {
result.add(t.randomPoint()) result.add(t.randomPoint(random))
idx++ idx++
} }
} }

View File

@@ -5,7 +5,9 @@ import org.openrndr.draw.RectangleBatchBuilder
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import org.openrndr.shape.Rectangle import org.openrndr.shape.Rectangle
import org.openrndr.shape.intersects import org.openrndr.shape.intersects
import kotlin.jvm.JvmRecord
@JvmRecord
data class QuadtreeQuery<T>(val nearest: T, val neighbours: List<T>, val quads: List<Quadtree<T>>) data class QuadtreeQuery<T>(val nearest: T, val neighbours: List<T>, val quads: List<Quadtree<T>>)
/** /**

View File

@@ -4,12 +4,11 @@ package org.openrndr.extra.shadestyles
import org.openrndr.color.* import org.openrndr.color.*
import org.openrndr.draw.ShadeStyle import org.openrndr.draw.ShadeStyle
import org.openrndr.extra.parameters.ColorParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.DoubleParameter
import org.openrndr.extra.shaderphrases.preprocess import org.openrndr.extra.shaderphrases.preprocess
import org.openrndr.extra.color.phrases.ColorPhraseBook import org.openrndr.extra.color.phrases.ColorPhraseBook
import org.openrndr.extra.color.spaces.ColorOKLABa import org.openrndr.extra.color.spaces.ColorOKLABa
import org.openrndr.extra.color.spaces.toOKLABa
import org.openrndr.extra.parameters.*
import org.openrndr.math.CastableToVector4 import org.openrndr.math.CastableToVector4
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import kotlin.reflect.KClass import kotlin.reflect.KClass
@@ -20,7 +19,8 @@ open class LinearGradientBase<C>(
color1: C, color1: C,
offset: Vector2 = Vector2.ZERO, offset: Vector2 = Vector2.ZERO,
rotation: Double = 0.0, rotation: Double = 0.0,
exponent: Double = 1.0 exponent: Double = 1.0,
quantize: Int = 0,
) : ShadeStyle() ) : ShadeStyle()
where C : ConvertibleToColorRGBa, C : AlgebraicColor<C>, C: CastableToVector4 { where C : ConvertibleToColorRGBa, C : AlgebraicColor<C>, C: CastableToVector4 {
@@ -29,6 +29,8 @@ open class LinearGradientBase<C>(
@ColorParameter("end color", order = 1) @ColorParameter("end color", order = 1)
var color1: C by Parameter() var color1: C by Parameter()
@Vector2Parameter("offset")
var offset: Vector2 by Parameter() var offset: Vector2 by Parameter()
@DoubleParameter("rotation", -180.0, 180.0, order = 2) @DoubleParameter("rotation", -180.0, 180.0, order = 2)
@@ -37,6 +39,9 @@ open class LinearGradientBase<C>(
@DoubleParameter("exponent", 0.01, 10.0, order = 3) @DoubleParameter("exponent", 0.01, 10.0, order = 3)
var exponent: Double by Parameter() var exponent: Double by Parameter()
@IntParameter("quantize", 0, 256)
var quantize: Int by Parameter()
init { init {
ColorPhraseBook.register() ColorPhraseBook.register()
this.color0 = color0 this.color0 = color0
@@ -44,6 +49,7 @@ open class LinearGradientBase<C>(
this.offset = offset this.offset = offset
this.rotation = rotation this.rotation = rotation
this.exponent = exponent this.exponent = exponent
this.quantize = quantize
fragmentPreamble = """ fragmentPreamble = """
|#pragma import color.oklab_to_linear_rgb |#pragma import color.oklab_to_linear_rgb
@@ -60,7 +66,12 @@ open class LinearGradientBase<C>(
vec4 color0 = p_color0; vec4 color0 = p_color0;
vec4 color1 = p_color1; vec4 color1 = p_color1;
vec4 gradient = mix(color0, color1, pow(f, p_exponent)); float t = pow(f, p_exponent);
if (p_quantize > 0) {
t = floor(t * float(p_quantize)) / float(p_quantize);
}
vec4 gradient = mix(color0, color1, t);
${generateColorTransform(color0::class)} ${generateColorTransform(color0::class)}
x_fill *= gradient; x_fill *= gradient;
""" """
@@ -68,8 +79,8 @@ open class LinearGradientBase<C>(
} }
class LinearGradient( class LinearGradient(
color0: ColorRGBa, color0: ColorRGBa = ColorRGBa.BLACK,
color1: ColorRGBa, color1: ColorRGBa = ColorRGBa.WHITE,
offset: Vector2 = Vector2.ZERO, offset: Vector2 = Vector2.ZERO,
rotation: Double = 0.0, rotation: Double = 0.0,
exponent: Double = 1.0 exponent: Double = 1.0
@@ -85,8 +96,8 @@ class LinearGradientOKLab(
fun linearGradient( fun linearGradient(
color0: ColorRGBa, color0: ColorRGBa = ColorRGBa.BLACK,
color1: ColorRGBa, color1: ColorRGBa = ColorRGBa.WHITE,
offset: Vector2 = Vector2.ZERO, offset: Vector2 = Vector2.ZERO,
rotation: Double = 0.0, rotation: Double = 0.0,
exponent: Double = 1.0 exponent: Double = 1.0
@@ -95,8 +106,8 @@ fun linearGradient(
} }
fun linearGradient( fun linearGradient(
color0: ColorOKLABa, color0: ColorOKLABa = ColorRGBa.BLACK.toOKLABa(),
color1: ColorOKLABa, color1: ColorOKLABa = ColorRGBa.WHITE.toOKLABa(),
offset: Vector2 = Vector2.ZERO, offset: Vector2 = Vector2.ZERO,
rotation: Double = 0.0, rotation: Double = 0.0,
exponent: Double = 1.0 exponent: Double = 1.0

View File

@@ -2,7 +2,9 @@ package org.openrndr.extra.shapes.adjust
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import org.openrndr.shape.ShapeContour import org.openrndr.shape.ShapeContour
import kotlin.jvm.JvmRecord
@JvmRecord
data class ContourAdjusterEdge(val contourAdjuster: ContourAdjuster, val segmentIndex: () -> Int) { data class ContourAdjusterEdge(val contourAdjuster: ContourAdjuster, val segmentIndex: () -> Int) {
val startPosition val startPosition

View File

@@ -9,6 +9,7 @@ import org.openrndr.math.transforms.buildTransform
import org.openrndr.shape.Segment2D import org.openrndr.shape.Segment2D
import org.openrndr.shape.SegmentType import org.openrndr.shape.SegmentType
import org.openrndr.shape.ShapeContour import org.openrndr.shape.ShapeContour
import kotlin.jvm.JvmRecord
import kotlin.math.abs import kotlin.math.abs
internal fun Vector2.transformedBy(t: Matrix44, mask: Int = 0x0f, maskRef: Int = 0x0f) = internal fun Vector2.transformedBy(t: Matrix44, mask: Int = 0x0f, maskRef: Int = 0x0f) =
@@ -38,6 +39,7 @@ fun <E> List<E>.update(vararg updates: Pair<Int, E>): List<E> {
* of changes in the contour topology. * of changes in the contour topology.
* @since 0.4.4 * @since 0.4.4
*/ */
@JvmRecord
data class ContourEdge( data class ContourEdge(
val contour: ShapeContour, val contour: ShapeContour,
val segmentIndex: Int, val segmentIndex: Int,

View File

@@ -5,7 +5,9 @@ import org.openrndr.math.Matrix44
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import org.openrndr.math.transforms.buildTransform import org.openrndr.math.transforms.buildTransform
import org.openrndr.shape.ShapeContour import org.openrndr.shape.ShapeContour
import kotlin.jvm.JvmRecord
@JvmRecord
data class ContourVertex( data class ContourVertex(
val contour: ShapeContour, val contour: ShapeContour,
val segmentIndex: Int, val segmentIndex: Int,

View File

@@ -1,9 +1,12 @@
package org.openrndr.extra.shapes.adjust package org.openrndr.extra.shapes.adjust
import org.openrndr.shape.Segment2D import org.openrndr.shape.Segment2D
import kotlin.jvm.JvmRecord
sealed interface SegmentOperation { sealed interface SegmentOperation {
@JvmRecord
data class Remove(val index: Int, val amount: Int) : SegmentOperation data class Remove(val index: Int, val amount: Int) : SegmentOperation
@JvmRecord
data class Insert(val index: Int, val amount: Int) : SegmentOperation data class Insert(val index: Int, val amount: Int) : SegmentOperation
} }