[orx-composition, orx-svg] Move Composition and SVG code from OPENRNDR to ORX
This commit is contained in:
94
orx-composition/src/commonMain/kotlin/DrawerExtensions.kt
Normal file
94
orx-composition/src/commonMain/kotlin/DrawerExtensions.kt
Normal file
@@ -0,0 +1,94 @@
|
||||
package org.openrndr.extra.composition
|
||||
|
||||
import org.openrndr.draw.Drawer
|
||||
import org.openrndr.shape.*
|
||||
|
||||
/**
|
||||
* Draws a [Composition]
|
||||
* @param composition The composition to draw
|
||||
* @see contour
|
||||
* @see contours
|
||||
* @see shape
|
||||
* @see shapes
|
||||
*/
|
||||
fun Drawer.composition(composition: Composition) {
|
||||
pushModel()
|
||||
pushStyle()
|
||||
|
||||
// viewBox transformation
|
||||
model *= composition.calculateViewportTransform()
|
||||
|
||||
fun node(compositionNode: CompositionNode) {
|
||||
pushModel()
|
||||
pushStyle()
|
||||
model *= compositionNode.style.transform.value
|
||||
|
||||
shadeStyle = (compositionNode.style.shadeStyle as Shade.Value).value
|
||||
|
||||
when (compositionNode) {
|
||||
is ShapeNode -> {
|
||||
|
||||
compositionNode.style.stroke.let {
|
||||
stroke = when (it) {
|
||||
is Paint.RGB -> it.value.copy(alpha = 1.0)
|
||||
Paint.None -> null
|
||||
Paint.CurrentColor -> null
|
||||
}
|
||||
}
|
||||
compositionNode.style.strokeOpacity.let {
|
||||
stroke = when (it) {
|
||||
is Numeric.Rational -> stroke?.opacify(it.value)
|
||||
}
|
||||
}
|
||||
compositionNode.style.strokeWeight.let {
|
||||
strokeWeight = when (it) {
|
||||
is Length.Pixels -> it.value
|
||||
is Length.Percent -> composition.normalizedDiagonalLength() * it.value / 100.0
|
||||
}
|
||||
}
|
||||
compositionNode.style.miterLimit.let {
|
||||
miterLimit = when (it) {
|
||||
is Numeric.Rational -> it.value
|
||||
}
|
||||
}
|
||||
compositionNode.style.lineCap.let {
|
||||
lineCap = it.value
|
||||
}
|
||||
compositionNode.style.lineJoin.let {
|
||||
lineJoin = it.value
|
||||
}
|
||||
compositionNode.style.fill.let {
|
||||
fill = when (it) {
|
||||
is Paint.RGB -> it.value.copy(alpha = 1.0)
|
||||
is Paint.None -> null
|
||||
is Paint.CurrentColor -> null
|
||||
}
|
||||
}
|
||||
compositionNode.style.fillOpacity.let {
|
||||
fill = when (it) {
|
||||
is Numeric.Rational -> fill?.opacify(it.value)
|
||||
}
|
||||
}
|
||||
compositionNode.style.opacity.let {
|
||||
when (it) {
|
||||
is Numeric.Rational -> {
|
||||
stroke = stroke?.opacify(it.value)
|
||||
fill = fill?.opacify(it.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
shape(compositionNode.shape)
|
||||
}
|
||||
is ImageNode -> {
|
||||
image(compositionNode.image)
|
||||
}
|
||||
is TextNode -> TODO()
|
||||
is GroupNode -> compositionNode.children.forEach { node(it) }
|
||||
}
|
||||
popModel()
|
||||
popStyle()
|
||||
}
|
||||
node(composition.root)
|
||||
popModel()
|
||||
popStyle()
|
||||
}
|
||||
Reference in New Issue
Block a user