[orx-gui] Fix color randomization (#266)

This commit is contained in:
Abe Pazos
2022-08-22 15:24:08 +00:00
committed by GitHub
parent 9db3c487b8
commit 39ef11ee19
2 changed files with 19 additions and 20 deletions

View File

@@ -18,6 +18,7 @@ val demoRuntimeOnly by configurations.getting {}
dependencies { dependencies {
api(project(":orx-parameters")) api(project(":orx-parameters"))
api(project(":orx-jvm:orx-panel")) api(project(":orx-jvm:orx-panel"))
api(project(":orx-noise"))
implementation(libs.openrndr.filter) implementation(libs.openrndr.filter)
implementation(libs.openrndr.dialogs) implementation(libs.openrndr.dialogs)
implementation(libs.gson) implementation(libs.gson)

View File

@@ -10,11 +10,12 @@ import org.openrndr.dialogs.openFileDialog
import org.openrndr.dialogs.saveFileDialog import org.openrndr.dialogs.saveFileDialog
import org.openrndr.dialogs.setDefaultPathForContext import org.openrndr.dialogs.setDefaultPathForContext
import org.openrndr.draw.Drawer import org.openrndr.draw.Drawer
import org.openrndr.extra.noise.Random
import org.openrndr.extra.noise.random
import org.openrndr.extra.noise.uniform
import org.openrndr.extra.parameters.* import org.openrndr.extra.parameters.*
import org.openrndr.internal.Driver import org.openrndr.internal.Driver
import org.openrndr.math.Vector2 import org.openrndr.math.*
import org.openrndr.math.Vector3
import org.openrndr.math.Vector4
import org.openrndr.panel.ControlManager import org.openrndr.panel.ControlManager
import org.openrndr.panel.controlManager import org.openrndr.panel.controlManager
import org.openrndr.panel.elements.* import org.openrndr.panel.elements.*
@@ -863,16 +864,16 @@ class GUI(val baseColor:ColorRGBa = ColorRGBa.GRAY, val defaultStyles: List<Styl
val min = parameter.doubleRange!!.start val min = parameter.doubleRange!!.start
val max = parameter.doubleRange!!.endInclusive val max = parameter.doubleRange!!.endInclusive
val currentValue = (parameter.property as KMutableProperty1<Any, Double>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, Double>).get(labeledObject.obj)
val randomValue = Math.random() * (max - min) + min val randomValue = random(min, max)
val newValue = (1.0 - strength) * currentValue + randomValue * strength val newValue = mix(currentValue, randomValue, strength)
(parameter.property as KMutableProperty1<Any, Double>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, Double>).set(labeledObject.obj, newValue)
} }
ParameterType.Int -> { ParameterType.Int -> {
val min = parameter.intRange!!.first val min = parameter.intRange!!.first
val max = parameter.intRange!!.last val max = parameter.intRange!!.last
val currentValue = (parameter.property as KMutableProperty1<Any, Int>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, Int>).get(labeledObject.obj)
val randomValue = Math.random() * (max - min) + min val randomValue = random(min.toDouble(), max.toDouble())
val newValue = ((1.0 - strength) * currentValue + randomValue * strength).roundToInt() val newValue = mix(currentValue.toDouble(), randomValue, strength).roundToInt()
(parameter.property as KMutableProperty1<Any, Int>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, Int>).set(labeledObject.obj, newValue)
} }
ParameterType.Boolean -> { ParameterType.Boolean -> {
@@ -881,43 +882,40 @@ class GUI(val baseColor:ColorRGBa = ColorRGBa.GRAY, val defaultStyles: List<Styl
} }
ParameterType.Color -> { ParameterType.Color -> {
val currentValue = (parameter.property as KMutableProperty1<Any, ColorRGBa>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, ColorRGBa>).get(labeledObject.obj)
val randomValue = ColorRGBa(Math.random(), Math.random(), Math.random(), currentValue.alpha) val randomValue = ColorRGBa.fromVector(Random.vector3(0.0, 1.0), currentValue.alpha, currentValue.linearity)
val newValue = ColorRGBa((1.0 - strength) * currentValue.r + randomValue.r * strength, val newValue = currentValue.mix(randomValue, strength)
(1.0 - strength) * currentValue.g + randomValue.g * strength,
(1.0 - strength) * currentValue.b + randomValue.b * strength)
(parameter.property as KMutableProperty1<Any, ColorRGBa>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, ColorRGBa>).set(labeledObject.obj, newValue)
} }
ParameterType.Vector2 -> { ParameterType.Vector2 -> {
val min = parameter.doubleRange!!.start val min = parameter.doubleRange!!.start
val max = parameter.doubleRange!!.endInclusive val max = parameter.doubleRange!!.endInclusive
val currentValue = (parameter.property as KMutableProperty1<Any, Vector2>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, Vector2>).get(labeledObject.obj)
val randomValue = Vector2(Math.random(), Math.random()) * (max - min) + min val randomValue = Random.vector2(min, max)
val newValue = currentValue * (1.0 - strength) + randomValue * strength val newValue = currentValue.mix(randomValue, strength)
(parameter.property as KMutableProperty1<Any, Vector2>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, Vector2>).set(labeledObject.obj, newValue)
} }
ParameterType.XY -> { ParameterType.XY -> {
val min = parameter.vectorRange!!.first val min = parameter.vectorRange!!.first
val max = parameter.vectorRange!!.second val max = parameter.vectorRange!!.second
val currentValue = (parameter.property as KMutableProperty1<Any, Vector2>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, Vector2>).get(labeledObject.obj)
val randomValue = Vector2(Math.random() * (max.x - min.x) + min.x, Math.random() * (max.y - min.y) + min.y) val randomValue = Vector2.uniform(min, max)
val newValue = currentValue * (1.0 - strength) + randomValue * strength val newValue = currentValue.mix(randomValue, strength)
(parameter.property as KMutableProperty1<Any, Vector2>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, Vector2>).set(labeledObject.obj, newValue)
} }
ParameterType.Vector3 -> { ParameterType.Vector3 -> {
val min = parameter.doubleRange!!.start val min = parameter.doubleRange!!.start
val max = parameter.doubleRange!!.endInclusive val max = parameter.doubleRange!!.endInclusive
val currentValue = (parameter.property as KMutableProperty1<Any, Vector3>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, Vector3>).get(labeledObject.obj)
val randomValue = Vector3(Math.random(), Math.random(), Math.random()) * (max - min) + min val randomValue = Random.vector3(min, max)
val newValue = currentValue * (1.0 - strength) + randomValue * strength val newValue = currentValue.mix(randomValue, strength)
(parameter.property as KMutableProperty1<Any, Vector3>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, Vector3>).set(labeledObject.obj, newValue)
} }
ParameterType.Vector4 -> { ParameterType.Vector4 -> {
val min = parameter.doubleRange!!.start val min = parameter.doubleRange!!.start
val max = parameter.doubleRange!!.endInclusive val max = parameter.doubleRange!!.endInclusive
val currentValue = (parameter.property as KMutableProperty1<Any, Vector4>).get(labeledObject.obj) val currentValue = (parameter.property as KMutableProperty1<Any, Vector4>).get(labeledObject.obj)
val randomValue = Vector4(Math.random(), Math.random(), Math.random(), Math.random()) * (max - min) + min val randomValue = Random.vector4(min, max)
val newValue = currentValue * (1.0 - strength) + randomValue * strength val newValue = currentValue.mix(randomValue, strength)
(parameter.property as KMutableProperty1<Any, Vector4>).set(labeledObject.obj, newValue) (parameter.property as KMutableProperty1<Any, Vector4>).set(labeledObject.obj, newValue)
} }
else -> { else -> {