New properties #34
@ -52,7 +52,6 @@ class Model {
|
|||||||
detector(it)
|
detector(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks = group("tracks")
|
tracks = group("tracks")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,8 +147,7 @@ fun Page<Solid>.showcaseCSG() {
|
|||||||
detail = 32
|
detail = 32
|
||||||
}
|
}
|
||||||
material {
|
material {
|
||||||
color(Colors.red)
|
color(Colors.pink)
|
||||||
wireframe = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
composite(CompositeType.UNION) {
|
composite(CompositeType.UNION) {
|
||||||
@ -158,8 +157,8 @@ fun Page<Solid>.showcaseCSG() {
|
|||||||
sphere(50){
|
sphere(50){
|
||||||
detail = 32
|
detail = 32
|
||||||
}
|
}
|
||||||
color(Colors.lightgreen)
|
color("lightgreen")
|
||||||
opacity = 0.5
|
opacity = 0.7
|
||||||
}
|
}
|
||||||
composite(CompositeType.SUBTRACT) {
|
composite(CompositeType.SUBTRACT) {
|
||||||
y = -300
|
y = -300
|
||||||
@ -169,7 +168,7 @@ fun Page<Solid>.showcaseCSG() {
|
|||||||
sphere(50){
|
sphere(50){
|
||||||
detail = 32
|
detail = 32
|
||||||
}
|
}
|
||||||
color(Colors.teal)
|
color("teal")
|
||||||
opacity = 0.7
|
opacity = 0.7
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow
|
|||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.css.th
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.Transient
|
import kotlinx.serialization.Transient
|
||||||
@ -27,18 +28,28 @@ internal data class PropertyListener(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A full base implementation for a [Vision]
|
||||||
|
* @param properties Object own properties excluding styles and inheritance
|
||||||
|
*/
|
||||||
@Serializable
|
@Serializable
|
||||||
@SerialName("vision")
|
@SerialName("vision")
|
||||||
public open class VisionBase : Vision {
|
public open class VisionBase(internal var properties: Config? = null) : Vision {
|
||||||
|
|
||||||
|
init {
|
||||||
|
//used during deserialization only
|
||||||
|
properties?.onChange(this) { name, oldItem, newItem ->
|
||||||
|
if (oldItem != newItem) {
|
||||||
|
scope.launch {
|
||||||
|
notifyPropertyChanged(name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
override var parent: VisionGroup? = null
|
override var parent: VisionGroup? = null
|
||||||
|
|
||||||
/**
|
|
||||||
* Object own properties excluding styles and inheritance
|
|
||||||
*/
|
|
||||||
internal var properties: Config? = null
|
|
||||||
|
|
||||||
override val meta: Meta get() = properties ?: Meta.EMPTY
|
override val meta: Meta get() = properties ?: Meta.EMPTY
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -46,6 +46,6 @@ public operator fun ColorAccessor?.invoke(r: UByte, g: UByte, b: UByte) {
|
|||||||
this?.value = Colors.rgbToString(r, g, b).asValue()
|
this?.value = Colors.rgbToString(r, g, b).asValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun ColorAccessor?.clear(){
|
public fun ColorAccessor?.clear() {
|
||||||
this?.value = null
|
this?.value = null
|
||||||
}
|
}
|
@ -101,6 +101,7 @@ internal class Prototypes(
|
|||||||
) : VisionGroupBase(children as? MutableMap<NameToken, Vision> ?: children.toMutableMap()), PrototypeHolder {
|
) : VisionGroupBase(children as? MutableMap<NameToken, Vision> ?: children.toMutableMap()), PrototypeHolder {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
//used during deserialization only
|
||||||
children.values.forEach {
|
children.values.forEach {
|
||||||
it.parent = parent
|
it.parent = parent
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,12 @@ public class SolidMaterial : Scheme() {
|
|||||||
/**
|
/**
|
||||||
* Primary web-color for the material
|
* Primary web-color for the material
|
||||||
*/
|
*/
|
||||||
public var color: ColorAccessor = ColorAccessor(items, COLOR_KEY)
|
public var color: ColorAccessor = ColorAccessor(this, COLOR_KEY)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specular color for phong material
|
* Specular color for phong material
|
||||||
*/
|
*/
|
||||||
public var specularColor: ColorAccessor = ColorAccessor(items, SPECULAR_COLOR_KEY)
|
public var specularColor: ColorAccessor = ColorAccessor(this, SPECULAR_COLOR_KEY)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opacity
|
* Opacity
|
||||||
@ -104,13 +104,7 @@ public var Solid.material: SolidMaterial?
|
|||||||
|
|
||||||
@VisionBuilder
|
@VisionBuilder
|
||||||
public fun Solid.material(builder: SolidMaterial.() -> Unit) {
|
public fun Solid.material(builder: SolidMaterial.() -> Unit) {
|
||||||
setProperty(MATERIAL_KEY, SolidMaterial(builder))
|
ownProperties.getChild(MATERIAL_KEY).update(SolidMaterial, builder)
|
||||||
// val node = getOwnProperty(MATERIAL_KEY).node
|
|
||||||
// if (node != null) {
|
|
||||||
// configure(SolidMaterial(builder).config)
|
|
||||||
// } else {
|
|
||||||
// setProperty(MATERIAL_KEY, SolidMaterial(builder))
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public var Solid.opacity: Number?
|
public var Solid.opacity: Number?
|
||||||
|
@ -4,9 +4,9 @@ import hep.dataforge.meta.*
|
|||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
|
|
||||||
public class Canvas3DOptions : Scheme() {
|
public class Canvas3DOptions : Scheme() {
|
||||||
public var axes: Axes by spec(Axes, Axes.empty())
|
public var axes: Axes by spec(Axes)
|
||||||
public var camera: Camera by spec(Camera, Camera.empty())
|
public var camera: Camera by spec(Camera)
|
||||||
public var controls: Controls by spec(Controls, Controls.empty())
|
public var controls: Controls by spec(Controls)
|
||||||
|
|
||||||
public var minSize: Int by int(400)
|
public var minSize: Int by int(400)
|
||||||
public var minWith: Number by number { minSize }
|
public var minWith: Number by number { minSize }
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package hep.dataforge.vision.solid
|
||||||
|
|
||||||
|
import hep.dataforge.vision.Colors
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class CompositeTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testCompositeBuilder(){
|
||||||
|
lateinit var composite: Composite
|
||||||
|
SolidGroup {
|
||||||
|
composite = composite(CompositeType.INTERSECT) {
|
||||||
|
y = 300
|
||||||
|
box(100, 100, 100) {
|
||||||
|
z = 50
|
||||||
|
}
|
||||||
|
sphere(50) {
|
||||||
|
detail = 32
|
||||||
|
}
|
||||||
|
material {
|
||||||
|
color("pink")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("pink", composite.color.string)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user