50 lines
1.6 KiB
Kotlin
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)
|
|
}
|
|
}
|
|
}
|