Files
orx/orx-shapes/src/jvmDemo/kotlin/adjust/DemoAdjustContour07.kt

50 lines
1.6 KiB
Kotlin

package adjust
import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.shapes.adjust.adjustContour
import org.openrndr.math.Vector2
import org.openrndr.shape.contour
import kotlin.math.cos
/**
* Demonstrates how to create and manipulate a contour dynamically using the `adjustContour` function.
*
* The program initializes a simple linear contour and applies transformations to it on each animation frame:
* - The only edge of the contour is split into many equal parts.
* - A value between 0 and 1 is calculated based on the cosine of the current time in seconds.
* - That value is used to calculate an anchor point and to select all vertices to its right
* - The selected vertices are rotated around an anchor, as if rolling a straight line into a spiral.
*/
fun main() = application {
configure {
width = 800
height = 800
}
program {
extend {
var contour = contour {
moveTo(drawer.bounds.center - Vector2(300.0, 0.0))
lineTo(drawer.bounds.center + Vector2(300.0, 0.0))
}
contour = adjustContour(contour) {
selectEdge(0)
edge.splitIn(128)
val tr = cos(seconds + 2.0) * 0.5 + 0.5
selectVertices { i, v -> v.t >= tr }
val anchor = contour.position(tr)
for (v in vertices) {
v.rotate((v.t - tr) * 2000.0, anchor)
v.scale(0.05, anchor)
}
}
drawer.stroke = ColorRGBa.RED
drawer.contour(contour)
}
}
}