[orx-chataigne] Add Chataigne support (#130)
This commit is contained in:
41
orx-chataigne/README.md
Normal file
41
orx-chataigne/README.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# orx-chataigne
|
||||||
|
|
||||||
|
With `orx-chataigne` you can share [Chataigne](http://benjamin.kuperberg.fr/chataigne/en) variables within a OPENRNDR project.
|
||||||
|
|
||||||
|
The current implementation makes use of the OSC protocol and supports `Double` and `ColorRGBa`.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Defining the variables
|
||||||
|
```kotlin
|
||||||
|
class SceneVariables : ChataigneOSC(OSC(portIn = 9005, portOut = 12001)) {
|
||||||
|
val myRadius: Double by DoubleChannel("/myRadius")
|
||||||
|
val myOpacity: Double by DoubleChannel("/myOpacity")
|
||||||
|
val myColor: ColorRGBa by ColorChannel("/myColor")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Initiate
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
val animation = SceneVariables()
|
||||||
|
```
|
||||||
|
|
||||||
|
Update time
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
animation.update(seconds)
|
||||||
|
```
|
||||||
|
|
||||||
|
Use the variables
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
animation.myRadius
|
||||||
|
animation.myOpacity
|
||||||
|
animation.myColor
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example project
|
||||||
|
|
||||||
|
Find the Chataigne example project in `/resources/timeline_example_chataigne.noisette` which works together with demo project `/src/demo/kotlin/ChataigneOSCDemo.kt`
|
||||||
|
|
||||||
25
orx-chataigne/build.gradle
Normal file
25
orx-chataigne/build.gradle
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
sourceSets {
|
||||||
|
demo {
|
||||||
|
java {
|
||||||
|
srcDirs = ["src/demo/kotlin"]
|
||||||
|
compileClasspath += main.getCompileClasspath()
|
||||||
|
runtimeClasspath += main.getRuntimeClasspath()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
api project(":orx-osc")
|
||||||
|
|
||||||
|
implementation "com.google.code.gson:gson:$gsonVersion"
|
||||||
|
demoImplementation("org.openrndr:openrndr-core:$openrndrVersion")
|
||||||
|
|
||||||
|
demoRuntimeOnly("org.openrndr:openrndr-gl3:$openrndrVersion")
|
||||||
|
demoRuntimeOnly("org.openrndr:openrndr-gl3-natives-$openrndrOS:$openrndrVersion")
|
||||||
|
demoRuntimeOnly("org.openrndr:openrndr-extensions:$openrndrVersion")
|
||||||
|
demoImplementation("org.openrndr:openrndr-ffmpeg:$openrndrVersion")
|
||||||
|
demoRuntimeOnly("org.openrndr:openrndr-ffmpeg-natives-$openrndrOS:$openrndrVersion")
|
||||||
|
demoImplementation(project(":orx-fx"))
|
||||||
|
// demoImplementation(project(":orx-osc"))
|
||||||
|
|
||||||
|
demoImplementation(sourceSets.getByName("main").output)
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
29
orx-chataigne/src/demo/kotlin/ChataigneOSCDemo.kt
Normal file
29
orx-chataigne/src/demo/kotlin/ChataigneOSCDemo.kt
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import org.openrndr.application
|
||||||
|
import org.openrndr.color.ColorRGBa
|
||||||
|
import org.openrndr.extra.osc.OSC
|
||||||
|
|
||||||
|
fun main() = application {
|
||||||
|
|
||||||
|
configure {
|
||||||
|
width = 500
|
||||||
|
height = 500
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the Chataigne example project in /resources */
|
||||||
|
class SceneVariables : ChataigneOSC(OSC(portIn = 9005, portOut = 12001)) {
|
||||||
|
val myRadius: Double by DoubleChannel("/myRadius")
|
||||||
|
val myOpacity: Double by DoubleChannel("/myOpacity")
|
||||||
|
val myColor: ColorRGBa by ColorChannel("/myColor")
|
||||||
|
}
|
||||||
|
|
||||||
|
program {
|
||||||
|
val animation = SceneVariables()
|
||||||
|
|
||||||
|
extend {
|
||||||
|
animation.update(seconds)
|
||||||
|
|
||||||
|
drawer.fill = animation.myColor.opacify(animation.myOpacity)
|
||||||
|
drawer.circle(width/2.0, height/2.0, animation.myRadius * 250)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
53
orx-chataigne/src/main/kotlin/ChataigneOSC.kt
Normal file
53
orx-chataigne/src/main/kotlin/ChataigneOSC.kt
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import org.openrndr.color.ColorRGBa
|
||||||
|
import org.openrndr.extra.osc.OSC
|
||||||
|
import java.awt.Color
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
|
open class ChataigneOSC(
|
||||||
|
val osc: OSC
|
||||||
|
) {
|
||||||
|
inner class DoubleChannel(key:String) {
|
||||||
|
private var currentDouble = 0.0
|
||||||
|
|
||||||
|
init {
|
||||||
|
osc.listen(key) {
|
||||||
|
currentDouble = (it[0] as Float).toDouble()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun getValue(thisRef: Any?, property: KProperty<*>):Double {
|
||||||
|
return currentDouble
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Double) {
|
||||||
|
print("$value")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class ColorChannel(key:String) {
|
||||||
|
private var currentColor = ColorRGBa.BLACK
|
||||||
|
|
||||||
|
init {
|
||||||
|
println(key)
|
||||||
|
osc.listen(key) {
|
||||||
|
val c = it[0] as Color
|
||||||
|
currentColor = ColorRGBa(c.red/255.0, c.green/255.0, c.blue/255.0, c.alpha/255.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun getValue(thisRef: Any?, property: KProperty<*>):ColorRGBa {
|
||||||
|
return currentColor
|
||||||
|
}
|
||||||
|
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Double) {
|
||||||
|
print("$value")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun update(seconds: Double) {
|
||||||
|
osc.send("/setTime", seconds.toFloat())
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
println("setup Chataigne with OSC ${osc.address} in:${osc.portIn} out:${osc.portOut}")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -45,5 +45,6 @@ include 'openrndr-demos',
|
|||||||
'orx-kinect-v1-natives-linux-x64',
|
'orx-kinect-v1-natives-linux-x64',
|
||||||
'orx-kinect-v1-natives-macos',
|
'orx-kinect-v1-natives-macos',
|
||||||
'orx-kinect-v1-natives-windows',
|
'orx-kinect-v1-natives-windows',
|
||||||
'orx-kinect-v1-demo'
|
'orx-kinect-v1-demo',
|
||||||
|
'orx-chataigne'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user