Fix a bug with composite children. Composite is no longer a group.

This commit is contained in:
Alexander Nozik 2021-05-11 11:33:12 +03:00
parent 1f8700efde
commit 8652b03fa5
10 changed files with 50 additions and 33 deletions

View File

@ -5,6 +5,8 @@ import space.kscience.gdml.*
import space.kscience.visionforge.gdml.toVision
import space.kscience.visionforge.html.ResourceLocation
import space.kscience.visionforge.solid.Solids
import space.kscience.visionforge.solid.color
import space.kscience.visionforge.solid.invoke
import space.kscience.visionforge.visible
import java.nio.file.Path
@ -229,6 +231,9 @@ fun main() {
if(solid.name == "world"){
visible = false
}
if(solid.name.startsWith("gas")){
color("green")
} else {
//make all solids semi-transparent
transparent()
}
@ -236,3 +241,4 @@ fun main() {
}
}
}
}

View File

@ -16,7 +16,7 @@ import space.kscience.visionforge.solid.three.ThreePlugin
import kotlin.reflect.KClass
public class ThreeWithControls : AbstractPlugin(), ElementVisionRenderer {
public val three by require(ThreePlugin)
public val three: ThreePlugin by require(ThreePlugin)
override val tag: PluginTag get() = Companion.tag

View File

@ -32,12 +32,10 @@ internal data class PropertyListener(
@SerialName("vision")
public open class VisionBase(
internal var properties: Config? = null,
@Transient override var parent: VisionGroup? = null,
@Transient public val coroutineScope: CoroutineScope = GlobalScope,
) : Vision {
@Transient
override var parent: VisionGroup? = null
@Synchronized
protected fun getOrCreateConfig(): Config {
if (properties == null) {

View File

@ -160,20 +160,20 @@ private class GdmlTransformerEnv(val settings: GdmlTransformer) {
): T = apply {
newPos?.let {
val point = Point3D(it.x(settings.lUnit), it.y(settings.lUnit), it.z(settings.lUnit))
if (position != null || point != Point3D.ZERO) {
if (point != Point3D.ZERO) {
position = point
}
}
newRotation?.let {
val point = Point3D(it.x(settings.aUnit), it.y(settings.aUnit), it.z(settings.aUnit))
if (rotation != null || point != Point3D.ZERO) {
if (point != Point3D.ZERO) {
rotation = point
}
//this@withPosition.rotationOrder = RotationOrder.ZXY
}
newScale?.let {
val point = Point3D(it.x, it.y, it.z)
if (scale != null || point != Point3D.ONE) {
if (point != Point3D.ONE) {
scale = point
}
}

View File

@ -3,7 +3,6 @@ package space.kscience.visionforge.solid
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import space.kscience.dataforge.meta.update
import space.kscience.dataforge.names.NameToken
import space.kscience.visionforge.*
public enum class CompositeType {
@ -18,15 +17,15 @@ public class Composite(
public val compositeType: CompositeType,
public val first: Solid,
public val second: Solid,
) : SolidBase(), Solid, VisionGroup {
init {
first.parent = this
second.parent = this
}
override val children: Map<NameToken, Vision>
get() = mapOf(NameToken("first") to first, NameToken("second") to second)
) : SolidBase(), Solid {
//
// init {
// first.parent = this
// second.parent = this
// }
//
// override val children: Map<NameToken, Vision>
// get() = mapOf(NameToken("first") to first, NameToken("second") to second)
}
@VisionBuilder

View File

@ -12,15 +12,13 @@ import space.kscience.visionforge.VisionChange
@Serializable
@SerialName("solid")
public open class SolidBase : VisionBase(), Solid {
public open class SolidBase(
override var position: Point3D? = null,
override var rotation: Point3D? = null,
override var scale: Point3D? = null,
) : VisionBase(), Solid {
override val descriptor: NodeDescriptor get() = Solid.descriptor
override var position: Point3D? = null
override var rotation: Point3D? = null
override var scale: Point3D? = null
override fun update(change: VisionChange) {
updatePosition(change.properties)
super.update(change)

View File

@ -29,6 +29,9 @@ public interface PrototypeHolder {
@SerialName("group.solid")
public class SolidGroup(
@Serializable(PrototypeSerializer::class) internal var prototypes: MutableVisionGroup? = null,
override var position: Point3D? = null,
override var rotation: Point3D? = null,
override var scale: Point3D? = null,
) : VisionGroupBase(), Solid, PrototypeHolder {
init {
@ -53,12 +56,6 @@ public class SolidGroup(
}).run(builder)
}
override var position: Point3D? = null
override var rotation: Point3D? = null
override var scale: Point3D? = null
// /**
// * TODO add special static group to hold statics without propagation
// */

View File

@ -54,6 +54,7 @@ public class Solids(meta: Meta) : VisionPlugin(meta) {
}
internal val jsonForSolids: Json = Json(VisionManager.defaultJson) {
encodeDefaults = false
serializersModule = serializersModuleForSolids
}

View File

@ -9,6 +9,15 @@ import space.kscience.visionforge.scheme
import space.kscience.visionforge.value
import space.kscience.visionforge.widgetType
public class ClippingPlane: Scheme(){
public var x: Double by double(0.0)
public var y: Double by double(0.0)
public var z: Double by double(0.0)
public companion object: SchemeSpec<ClippingPlane>(::ClippingPlane)
}
public class Canvas3DOptions : Scheme() {
public var axes: Axes by spec(Axes)
public var light: Light by spec(Light)
@ -25,6 +34,8 @@ public class Canvas3DOptions : Scheme() {
public var layers: List<Number> by numberList(0)
//public var clippingPlanes: List<ClippingPlane> by list
public var onSelect: ((Name?) -> Unit)? = null

View File

@ -11,6 +11,7 @@ import info.laht.threekt.geometries.EdgesGeometry
import info.laht.threekt.helpers.AxesHelper
import info.laht.threekt.lights.AmbientLight
import info.laht.threekt.materials.LineBasicMaterial
import info.laht.threekt.math.Box3
import info.laht.threekt.math.Vector2
import info.laht.threekt.objects.LineSegments
import info.laht.threekt.objects.Mesh
@ -43,7 +44,13 @@ public class ThreeCanvas(
public val three: ThreePlugin,
public val options: Canvas3DOptions,
) {
private var boundingBox: Box3? = null
private var root: Object3D? = null
set(value) {
field = value
if (value != null) boundingBox = Box3().setFromObject(value)
}
private val raycaster = Raycaster()
private val mousePosition: Vector2 = Vector2()