A lot of small fixes
This commit is contained in:
parent
720555a942
commit
78a04728ba
@ -12,8 +12,10 @@ val fxVersion by extra("14")
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
maven("https://repo.kotlin.link")
|
||||||
maven("https://kotlin.bintray.com/kotlin-js-wrappers")
|
maven("https://kotlin.bintray.com/kotlin-js-wrappers")
|
||||||
maven("https://dl.bintray.com/pdvrieze/maven")
|
maven("https://dl.bintray.com/pdvrieze/maven")
|
||||||
maven("http://maven.jzy3d.org/releases")
|
maven("http://maven.jzy3d.org/releases")
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
package hep.dataforge.vision.gdml.demo
|
|
||||||
|
|
||||||
import space.kscience.gdml.*
|
|
||||||
|
|
||||||
|
|
||||||
fun cubes(): Gdml = Gdml {
|
|
||||||
val center = define.position("center")
|
|
||||||
structure {
|
|
||||||
val air = ref<GdmlMaterial>("G4_AIR")
|
|
||||||
val tubeMaterial = ref<GdmlMaterial>("tube")
|
|
||||||
val boxMaterial = ref<GdmlMaterial>("box")
|
|
||||||
val segment = solids.tube("segment", 20, 5.0) {
|
|
||||||
rmin = 17
|
|
||||||
deltaphi = 60
|
|
||||||
aunit = AUnit.DEG.title
|
|
||||||
}
|
|
||||||
val worldBox = solids.box("LargeBox", 200, 200, 200)
|
|
||||||
val smallBox = solids.box("smallBox", 30, 30, 30)
|
|
||||||
val segmentVolume = volume("segment", tubeMaterial, segment.ref()) {}
|
|
||||||
val circle = volume("composite", boxMaterial, smallBox.ref()) {
|
|
||||||
for (i in 0 until 6) {
|
|
||||||
physVolume(segmentVolume) {
|
|
||||||
name = "segment_$i"
|
|
||||||
positionref = center.ref()
|
|
||||||
rotation {
|
|
||||||
z = 60 * i
|
|
||||||
unit = AUnit.DEG.title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
world = volume("world", air, worldBox.ref()) {
|
|
||||||
for (i in 0 until 3) {
|
|
||||||
for (j in 0 until 3) {
|
|
||||||
for (k in 0 until 3) {
|
|
||||||
physVolume(circle) {
|
|
||||||
name = "composite$i$j$k"
|
|
||||||
position {
|
|
||||||
x = (-50 + i * 50)
|
|
||||||
y = (-50 + j * 50)
|
|
||||||
z = (-50 + k * 50)
|
|
||||||
}
|
|
||||||
rotation {
|
|
||||||
x = i * 120
|
|
||||||
y = j * 120
|
|
||||||
z = 120 * k
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,7 +3,7 @@ package hep.dataforge.vision.gdml
|
|||||||
import hep.dataforge.meta.string
|
import hep.dataforge.meta.string
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.values.asValue
|
import hep.dataforge.values.asValue
|
||||||
import hep.dataforge.vision.gdml.demo.cubes
|
import hep.dataforge.vision.gdml.GdmlShowcase.cubes
|
||||||
import hep.dataforge.vision.setProperty
|
import hep.dataforge.vision.setProperty
|
||||||
import hep.dataforge.vision.solid.SolidMaterial
|
import hep.dataforge.vision.solid.SolidMaterial
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
@ -11,7 +11,6 @@ import kotlin.test.assertEquals
|
|||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
class GDMLVisualTest {
|
class GDMLVisualTest {
|
||||||
val gdml = cubes()
|
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
// fun testCubesStyles(){
|
// fun testCubesStyles(){
|
||||||
@ -24,8 +23,8 @@ class GDMLVisualTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testPrototypeProperty() {
|
fun testPrototypeProperty() {
|
||||||
val visual = gdml.toVision()
|
val visual = cubes.toVision()
|
||||||
val child = visual["composite000.segment_0".toName()]
|
val child = visual["composite[0,0,0].segment[0]".toName()]
|
||||||
assertTrue { child!= null }
|
assertTrue { child!= null }
|
||||||
child?.setProperty(SolidMaterial.MATERIAL_COLOR_KEY, "red".asValue())
|
child?.setProperty(SolidMaterial.MATERIAL_COLOR_KEY, "red".asValue())
|
||||||
assertEquals("red", child?.getProperty(SolidMaterial.MATERIAL_COLOR_KEY).string)
|
assertEquals("red", child?.getProperty(SolidMaterial.MATERIAL_COLOR_KEY).string)
|
||||||
|
@ -2,6 +2,7 @@ package hep.dataforge.vision.gdml.demo
|
|||||||
|
|
||||||
import hep.dataforge.context.Global
|
import hep.dataforge.context.Global
|
||||||
import hep.dataforge.vision.Application
|
import hep.dataforge.vision.Application
|
||||||
|
import hep.dataforge.vision.gdml.GdmlShowcase
|
||||||
import hep.dataforge.vision.gdml.toVision
|
import hep.dataforge.vision.gdml.toVision
|
||||||
import hep.dataforge.vision.solid.three.ThreePlugin
|
import hep.dataforge.vision.solid.three.ThreePlugin
|
||||||
import hep.dataforge.vision.startApplication
|
import hep.dataforge.vision.startApplication
|
||||||
@ -20,7 +21,7 @@ private class GDMLDemoApp : Application {
|
|||||||
}
|
}
|
||||||
render(element) {
|
render(element) {
|
||||||
child(GDMLApp) {
|
child(GDMLApp) {
|
||||||
val vision = cubes().toVision()
|
val vision = GdmlShowcase.cubes.toVision()
|
||||||
//println(context.plugins.fetch(VisionManager).encodeToString(vision))
|
//println(context.plugins.fetch(VisionManager).encodeToString(vision))
|
||||||
attrs {
|
attrs {
|
||||||
this.context = context
|
this.context = context
|
||||||
|
@ -5,6 +5,7 @@ import hep.dataforge.vision.VisionManager
|
|||||||
import hep.dataforge.vision.describedProperties
|
import hep.dataforge.vision.describedProperties
|
||||||
import hep.dataforge.vision.editor.VisualObjectEditorFragment
|
import hep.dataforge.vision.editor.VisualObjectEditorFragment
|
||||||
import hep.dataforge.vision.editor.VisualObjectTreeFragment
|
import hep.dataforge.vision.editor.VisualObjectTreeFragment
|
||||||
|
import hep.dataforge.vision.gdml.GdmlShowcase.cubes
|
||||||
import hep.dataforge.vision.gdml.toVision
|
import hep.dataforge.vision.gdml.toVision
|
||||||
import hep.dataforge.vision.solid.FX3DPlugin
|
import hep.dataforge.vision.solid.FX3DPlugin
|
||||||
import hep.dataforge.vision.solid.FXCanvas3D
|
import hep.dataforge.vision.solid.FXCanvas3D
|
||||||
@ -60,7 +61,7 @@ class GDMLView : View() {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
runAsync {
|
runAsync {
|
||||||
cubes().toVision()
|
cubes.toVision()
|
||||||
} ui {
|
} ui {
|
||||||
canvas.render(it)
|
canvas.render(it)
|
||||||
}
|
}
|
||||||
|
@ -12,9 +12,9 @@ import space.kscience.gdml.*
|
|||||||
internal val cubes = Gdml {
|
internal val cubes = Gdml {
|
||||||
val center = define.position("center")
|
val center = define.position("center")
|
||||||
structure {
|
structure {
|
||||||
val air = ref<GdmlMaterial>("G4_AIR")
|
val air = materials.composite("G4_AIR") {}
|
||||||
val tubeMaterial = ref<GdmlMaterial>("tube")
|
val tubeMaterial = materials.composite("tube") {}
|
||||||
val boxMaterial = ref<GdmlMaterial>("box")
|
val boxMaterial = materials.composite("box") {}
|
||||||
|
|
||||||
val segment = solids.tube("segment", 20, 5.0) {
|
val segment = solids.tube("segment", 20, 5.0) {
|
||||||
rmin = 17
|
rmin = 17
|
||||||
@ -23,11 +23,11 @@ internal val cubes = Gdml {
|
|||||||
}
|
}
|
||||||
val worldBox = solids.box("largeBox", 200, 200, 200)
|
val worldBox = solids.box("largeBox", 200, 200, 200)
|
||||||
val smallBox = solids.box("smallBox", 30, 30, 30)
|
val smallBox = solids.box("smallBox", 30, 30, 30)
|
||||||
val segmentVolume = volume("segment", tubeMaterial, segment.ref()) {}
|
val segmentVolume = volume("segment", tubeMaterial, segment) {}
|
||||||
val circle = volume("composite", boxMaterial, smallBox.ref()) {
|
val circle = volume("composite", boxMaterial, smallBox) {
|
||||||
for (i in 0 until 6) {
|
for (i in 0 until 6) {
|
||||||
physVolume(segmentVolume) {
|
physVolume(segmentVolume) {
|
||||||
positionref = center.ref()
|
positionref = center
|
||||||
rotation {
|
rotation {
|
||||||
z = 60 * i
|
z = 60 * i
|
||||||
unit = AUnit.DEG.title
|
unit = AUnit.DEG.title
|
||||||
@ -36,7 +36,7 @@ internal val cubes = Gdml {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
world = volume("world", air, worldBox.ref()) {
|
world = volume("world", air, worldBox) {
|
||||||
for (i in 0 until 3) {
|
for (i in 0 until 3) {
|
||||||
for (j in 0 until 3) {
|
for (j in 0 until 3) {
|
||||||
for (k in 0 until 3) {
|
for (k in 0 until 3) {
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package ru.mipt.npm.sat
|
package ru.mipt.npm.sat
|
||||||
|
|
||||||
import hep.dataforge.meta.set
|
import hep.dataforge.meta.set
|
||||||
|
import hep.dataforge.misc.DFExperimental
|
||||||
import hep.dataforge.vision.solid.*
|
import hep.dataforge.vision.solid.*
|
||||||
import hep.dataforge.vision.style
|
import hep.dataforge.vision.style
|
||||||
import hep.dataforge.vision.useStyle
|
import hep.dataforge.vision.useStyle
|
||||||
import kotlin.math.PI
|
import kotlin.math.PI
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
internal fun visionOfSatellite(
|
internal fun visionOfSatellite(
|
||||||
layers: Int = 10,
|
layers: Int = 10,
|
||||||
layerHeight: Number = 10,
|
layerHeight: Number = 10,
|
||||||
|
@ -9,13 +9,13 @@ import kotlinx.html.*
|
|||||||
import kotlinx.html.stream.createHTML
|
import kotlinx.html.stream.createHTML
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
class HtmlTagTest {
|
class HtmlTagTest {
|
||||||
|
|
||||||
@OptIn(DFExperimental::class)
|
|
||||||
fun VisionOutput.base(block: VisionBase.() -> Unit) =
|
fun VisionOutput.base(block: VisionBase.() -> Unit) =
|
||||||
VisionBase().apply(block)
|
VisionBase().apply(block)
|
||||||
|
|
||||||
val fragment: HtmlVisionFragment = {
|
val fragment: HtmlVisionFragment = {
|
||||||
div {
|
div {
|
||||||
h1 { +"Head" }
|
h1 { +"Head" }
|
||||||
vision("ddd") {
|
vision("ddd") {
|
||||||
|
@ -42,7 +42,7 @@ public class ColorValueChooser : ValueChooserBase<ColorPicker>() {
|
|||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : ValueChooser.Factory {
|
public companion object : ValueChooser.Factory {
|
||||||
override val name: Name = "color".asName()
|
override val name: Name = "color".asName()
|
||||||
|
|
||||||
override fun invoke(meta: Meta): ValueChooser =
|
override fun invoke(meta: Meta): ValueChooser =
|
||||||
|
@ -52,7 +52,7 @@ public class ComboBoxValueChooser(public val values: Collection<Value>? = null)
|
|||||||
node.selectionModel.select(value)
|
node.selectionModel.select(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : ValueChooser.Factory {
|
public companion object : ValueChooser.Factory {
|
||||||
override val name: Name = "combo".asName()
|
override val name: Name = "combo".asName()
|
||||||
|
|
||||||
override fun invoke(meta: Meta): ValueChooser =
|
override fun invoke(meta: Meta): ValueChooser =
|
||||||
|
@ -15,6 +15,7 @@ import hep.dataforge.vision.dfIconView
|
|||||||
import javafx.scene.Node
|
import javafx.scene.Node
|
||||||
import javafx.scene.control.*
|
import javafx.scene.control.*
|
||||||
import javafx.scene.control.cell.TextFieldTreeTableCell
|
import javafx.scene.control.cell.TextFieldTreeTableCell
|
||||||
|
import javafx.scene.layout.BorderPane
|
||||||
import javafx.scene.layout.HBox
|
import javafx.scene.layout.HBox
|
||||||
import javafx.scene.layout.Priority
|
import javafx.scene.layout.Priority
|
||||||
import javafx.scene.paint.Color
|
import javafx.scene.paint.Color
|
||||||
@ -26,17 +27,17 @@ import tornadofx.*
|
|||||||
*
|
*
|
||||||
* @author Alexander Nozik
|
* @author Alexander Nozik
|
||||||
*/
|
*/
|
||||||
class ConfigEditor(
|
public class ConfigEditor(
|
||||||
val rootNode: FXMetaNode<Config>,
|
public val rootNode: FXMetaNode<Config>,
|
||||||
val allowNew: Boolean = true,
|
public val allowNew: Boolean = true,
|
||||||
title: String = "Configuration editor"
|
title: String = "Configuration editor"
|
||||||
) : Fragment(title = title, icon = dfIconView) {
|
) : Fragment(title = title, icon = dfIconView) {
|
||||||
//TODO replace parameters by properties
|
//TODO replace parameters by properties
|
||||||
|
|
||||||
constructor(config: Config, descriptor: NodeDescriptor?, title: String = "Configuration editor") :
|
public constructor(config: Config, descriptor: NodeDescriptor?, title: String = "Configuration editor") :
|
||||||
this(FXMeta.root(config, descriptor = descriptor), title = title)
|
this(FXMeta.root(config, descriptor = descriptor), title = title)
|
||||||
|
|
||||||
override val root = borderpane {
|
override val root: BorderPane = borderpane {
|
||||||
center = treetableview<FXMeta<Config>> {
|
center = treetableview<FXMeta<Config>> {
|
||||||
root = TreeItem(rootNode)
|
root = TreeItem(rootNode)
|
||||||
root.isExpanded = true
|
root.isExpanded = true
|
||||||
|
@ -35,18 +35,18 @@ public interface ValueChooser {
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
val node: Node
|
public val node: Node
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The descriptor property for this value. Could be null
|
* The descriptor property for this value. Could be null
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
val descriptorProperty: ObjectProperty<ValueDescriptor?>
|
public val descriptorProperty: ObjectProperty<ValueDescriptor?>
|
||||||
var descriptor: ValueDescriptor?
|
public var descriptor: ValueDescriptor?
|
||||||
|
|
||||||
val valueProperty: ObjectProperty<Value?>
|
public val valueProperty: ObjectProperty<Value?>
|
||||||
var value: Value?
|
public var value: Value?
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,21 +54,21 @@ public interface ValueChooser {
|
|||||||
*
|
*
|
||||||
* @param value
|
* @param value
|
||||||
*/
|
*/
|
||||||
fun setDisplayValue(value: Value)
|
public fun setDisplayValue(value: Value)
|
||||||
|
|
||||||
|
|
||||||
fun setDisabled(disabled: Boolean) {
|
public fun setDisabled(disabled: Boolean) {
|
||||||
//TODO replace by property
|
//TODO replace by property
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setCallback(callback: ValueCallback)
|
public fun setCallback(callback: ValueCallback)
|
||||||
|
|
||||||
@Type("hep.dataforge.vis.fx.valueChooserFactory")
|
@Type("hep.dataforge.vis.fx.valueChooserFactory")
|
||||||
interface Factory : Named {
|
public interface Factory : Named {
|
||||||
operator fun invoke(meta: Meta = Meta.EMPTY): ValueChooser
|
public operator fun invoke(meta: Meta = Meta.EMPTY): ValueChooser
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
public companion object {
|
||||||
|
|
||||||
private fun findWidgetByType(context: Context, type: String): Factory? {
|
private fun findWidgetByType(context: Context, type: String): Factory? {
|
||||||
return when (type.toName()) {
|
return when (type.toName()) {
|
||||||
|
@ -7,7 +7,7 @@ kotlin {
|
|||||||
val commonMain by getting {
|
val commonMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":visionforge-solid"))
|
api(project(":visionforge-solid"))
|
||||||
api("space.kscience:gdml:0.2.0")
|
api("space.kscience:gdml:0.3.0-dev")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package hep.dataforge.vision.gdml
|
||||||
|
|
||||||
|
import space.kscience.gdml.*
|
||||||
|
|
||||||
|
public object GdmlShowcase {
|
||||||
|
public val cubes = Gdml {
|
||||||
|
val center = define.position("center")
|
||||||
|
structure {
|
||||||
|
val air = materials.composite("G4_AIR") {}
|
||||||
|
val tubeMaterial = materials.composite("tube") {}
|
||||||
|
val boxMaterial = materials.composite("box") {}
|
||||||
|
|
||||||
|
val segment = solids.tube("segment", 20, 5.0) {
|
||||||
|
rmin = 17
|
||||||
|
deltaphi = 60
|
||||||
|
aunit = AUnit.DEG.title
|
||||||
|
}
|
||||||
|
val worldBox = solids.box("largeBox", 200, 200, 200)
|
||||||
|
val smallBox = solids.box("smallBox", 30, 30, 30)
|
||||||
|
val segmentVolume = volume("segment", tubeMaterial, segment) {}
|
||||||
|
val circle = volume("composite", boxMaterial, smallBox) {
|
||||||
|
for (i in 0 until 6) {
|
||||||
|
physVolume(segmentVolume) {
|
||||||
|
name = "segment[$i]"
|
||||||
|
positionref = center
|
||||||
|
rotation {
|
||||||
|
z = 60 * i
|
||||||
|
unit = AUnit.DEG.title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
world = volume("world", air, worldBox) {
|
||||||
|
for (i in 0 until 3) {
|
||||||
|
for (j in 0 until 3) {
|
||||||
|
for (k in 0 until 3) {
|
||||||
|
physVolume(circle) {
|
||||||
|
name = "composite[$i,$j,$k]"
|
||||||
|
position {
|
||||||
|
x = (-50 + i * 50)
|
||||||
|
y = (-50 + j * 50)
|
||||||
|
z = (-50 + k * 50)
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x = i * 120
|
||||||
|
y = j * 120
|
||||||
|
z = 120 * k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -66,7 +66,12 @@ private class GdmlTransformer(val settings: GdmlTransformerSettings) {
|
|||||||
return ref
|
return ref
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun proxyVolume(root: Gdml, group: SolidGroup, physVolume: GdmlPhysVolume, volume: GdmlGroup): SolidReferenceGroup {
|
private fun proxyVolume(
|
||||||
|
root: Gdml,
|
||||||
|
group: SolidGroup,
|
||||||
|
physVolume: GdmlPhysVolume,
|
||||||
|
volume: GdmlGroup,
|
||||||
|
): SolidReferenceGroup {
|
||||||
val templateName = volumesName + volume.name.asName()
|
val templateName = volumesName + volume.name.asName()
|
||||||
if (proto[templateName] == null) {
|
if (proto[templateName] == null) {
|
||||||
proto[templateName] = volume(root, volume)
|
proto[templateName] = volume(root, volume)
|
||||||
|
66
visionforge-gdml/src/commonTest/kotlin/TestCubes.kt
Normal file
66
visionforge-gdml/src/commonTest/kotlin/TestCubes.kt
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package hep.dataforge.vision.gdml
|
||||||
|
|
||||||
|
import hep.dataforge.context.Context
|
||||||
|
import hep.dataforge.names.toName
|
||||||
|
import hep.dataforge.vision.Vision
|
||||||
|
import hep.dataforge.vision.gdml.GdmlShowcase.cubes
|
||||||
|
import hep.dataforge.vision.get
|
||||||
|
import hep.dataforge.vision.solid.*
|
||||||
|
import hep.dataforge.vision.visionManager
|
||||||
|
import space.kscience.gdml.Gdml
|
||||||
|
import space.kscience.gdml.GdmlBox
|
||||||
|
import space.kscience.gdml.decodeFromString
|
||||||
|
import space.kscience.gdml.encodeToString
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertNotNull
|
||||||
|
|
||||||
|
internal val testContext = Context("TEST") {
|
||||||
|
plugin(Solids)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestCubes {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testCubesDirect() {
|
||||||
|
val vision = cubes.toVision()
|
||||||
|
val smallBoxPrototype = vision.getPrototype("solids.smallBox".toName()) as? Box
|
||||||
|
assertNotNull(smallBoxPrototype)
|
||||||
|
assertEquals(30.0, smallBoxPrototype.xSize.toDouble())
|
||||||
|
val smallBoxVision = vision["composite[1,1,1].smallBox"]?.prototype as? Box
|
||||||
|
assertNotNull(smallBoxVision)
|
||||||
|
assertEquals(30.0, smallBoxVision.xSize.toDouble())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGdmlExport() {
|
||||||
|
val xml = cubes.encodeToString()
|
||||||
|
//println(xml)
|
||||||
|
val gdml = Gdml.decodeFromString(xml)
|
||||||
|
val smallBox = gdml.getSolid<GdmlBox>("smallBox")
|
||||||
|
assertNotNull(smallBox)
|
||||||
|
assertEquals(30.0, smallBox.x.toDouble())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testCubesReSerialize() {
|
||||||
|
val vision = cubes.toVision()
|
||||||
|
val serialized = Solids.encodeToString(vision)
|
||||||
|
val deserialized = testContext.visionManager.decodeFromString(serialized) as SolidGroup
|
||||||
|
val smallBox = deserialized.getPrototype("solids.smallBox".toName()) as? Box
|
||||||
|
assertNotNull(smallBox)
|
||||||
|
assertEquals(30.0, smallBox.xSize.toDouble())
|
||||||
|
//println(testContext.visionManager.encodeToString(deserialized))
|
||||||
|
fun Vision.checkPrototypes() {
|
||||||
|
if (this is SolidReference) {
|
||||||
|
assertNotNull(this.prototype)
|
||||||
|
}
|
||||||
|
if (this is SolidGroup) {
|
||||||
|
children.forEach {
|
||||||
|
it.value.checkPrototypes()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deserialized.checkPrototypes()
|
||||||
|
}
|
||||||
|
}
|
@ -1,96 +0,0 @@
|
|||||||
package hep.dataforge.vision.gdml
|
|
||||||
|
|
||||||
import hep.dataforge.context.Context
|
|
||||||
import hep.dataforge.names.toName
|
|
||||||
import hep.dataforge.vision.Vision
|
|
||||||
import hep.dataforge.vision.solid.SolidGroup
|
|
||||||
import hep.dataforge.vision.solid.SolidReference
|
|
||||||
import hep.dataforge.vision.solid.Solids
|
|
||||||
import hep.dataforge.vision.visionManager
|
|
||||||
import org.junit.jupiter.api.Test
|
|
||||||
import org.junit.jupiter.api.assertDoesNotThrow
|
|
||||||
import space.kscience.gdml.*
|
|
||||||
import kotlin.test.assertNotNull
|
|
||||||
|
|
||||||
internal val testContext = Context("TEST"){
|
|
||||||
plugin(Solids)
|
|
||||||
}
|
|
||||||
|
|
||||||
class TestCubes {
|
|
||||||
|
|
||||||
internal val cubes = Gdml {
|
|
||||||
val center = define.position("center")
|
|
||||||
structure {
|
|
||||||
val air = ref<GdmlMaterial>("G4_AIR")
|
|
||||||
val tubeMaterial = ref<GdmlMaterial>("tube")
|
|
||||||
val boxMaterial = ref<GdmlMaterial>("box")
|
|
||||||
|
|
||||||
val segment = solids.tube("segment", 20, 5.0) {
|
|
||||||
rmin = 17
|
|
||||||
deltaphi = 60
|
|
||||||
aunit = AUnit.DEG.title
|
|
||||||
}
|
|
||||||
val worldBox = solids.box("largeBox", 200, 200, 200)
|
|
||||||
val smallBox = solids.box("smallBox", 30, 30, 30)
|
|
||||||
val segmentVolume = volume("segment", tubeMaterial, segment.ref()) {}
|
|
||||||
val circle = volume("composite", boxMaterial, smallBox.ref()) {
|
|
||||||
for (i in 0 until 6) {
|
|
||||||
physVolume(segmentVolume) {
|
|
||||||
positionref = center.ref()
|
|
||||||
rotation {
|
|
||||||
z = 60 * i
|
|
||||||
unit = AUnit.DEG.title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
world = volume("world", air, worldBox.ref()) {
|
|
||||||
for (i in 0 until 3) {
|
|
||||||
for (j in 0 until 3) {
|
|
||||||
for (k in 0 until 3) {
|
|
||||||
physVolume(circle) {
|
|
||||||
position {
|
|
||||||
x = (-50 + i * 50)
|
|
||||||
y = (-50 + j * 50)
|
|
||||||
z = (-50 + k * 50)
|
|
||||||
}
|
|
||||||
rotation {
|
|
||||||
x = i * 120
|
|
||||||
y = j * 120
|
|
||||||
z = 120 * k
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCubesDirect(){
|
|
||||||
val vision = cubes.toVision()
|
|
||||||
assertNotNull(vision.getPrototype("solids.smallBox".toName()))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCubesReSerialize(){
|
|
||||||
val vision = cubes.toVision()
|
|
||||||
val serialized = Solids.encodeToString(vision)
|
|
||||||
val deserialized = testContext.visionManager.decodeFromString(serialized) as SolidGroup
|
|
||||||
assertNotNull(deserialized.getPrototype("solids.smallBox".toName()))
|
|
||||||
//println(testContext.visionManager.encodeToString(deserialized))
|
|
||||||
fun Vision.checkPrototypes(){
|
|
||||||
if(this is SolidReference){
|
|
||||||
assertDoesNotThrow { this.prototype }
|
|
||||||
}
|
|
||||||
if(this is SolidGroup){
|
|
||||||
children.forEach {
|
|
||||||
it.value.checkPrototypes()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deserialized.checkPrototypes()
|
|
||||||
}
|
|
||||||
}
|
|
@ -163,7 +163,7 @@ public class SolidReferenceGroup(
|
|||||||
* Get a vision prototype if it is a [SolidReferenceGroup] or vision itself if it is not
|
* Get a vision prototype if it is a [SolidReferenceGroup] or vision itself if it is not
|
||||||
*/
|
*/
|
||||||
public val Vision.prototype: Vision
|
public val Vision.prototype: Vision
|
||||||
get() = if (this is SolidReference) prototype else this
|
get() = if (this is SolidReference) prototype.prototype else this
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create ref for existing prototype
|
* Create ref for existing prototype
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package hep.dataforge.vision.solid
|
package hep.dataforge.vision.solid
|
||||||
|
|
||||||
|
import hep.dataforge.misc.DFExperimental
|
||||||
import hep.dataforge.vision.get
|
import hep.dataforge.vision.get
|
||||||
import hep.dataforge.vision.style
|
import hep.dataforge.vision.style
|
||||||
import hep.dataforge.vision.useStyle
|
import hep.dataforge.vision.useStyle
|
||||||
@ -7,6 +8,7 @@ import kotlinx.serialization.json.encodeToJsonElement
|
|||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
class SolidReferenceTest {
|
class SolidReferenceTest {
|
||||||
val groupWithReference = SolidGroup {
|
val groupWithReference = SolidGroup {
|
||||||
val theStyle by style {
|
val theStyle by style {
|
||||||
|
@ -2,6 +2,7 @@ package hep.dataforge.vision.solid.three
|
|||||||
|
|
||||||
import hep.dataforge.context.*
|
import hep.dataforge.context.*
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.misc.DFExperimental
|
||||||
import hep.dataforge.names.*
|
import hep.dataforge.names.*
|
||||||
import hep.dataforge.vision.*
|
import hep.dataforge.vision.*
|
||||||
import hep.dataforge.vision.solid.*
|
import hep.dataforge.vision.solid.*
|
||||||
@ -50,7 +51,7 @@ public class ThreePlugin : AbstractPlugin(), ElementVisionRenderer {
|
|||||||
is SolidGroup -> {
|
is SolidGroup -> {
|
||||||
val group = ThreeGroup()
|
val group = ThreeGroup()
|
||||||
obj.children.forEach { (token, child) ->
|
obj.children.forEach { (token, child) ->
|
||||||
if (child is Solid && child.ignore != true) {
|
if (child is Solid && token != SolidGroup.PROTOTYPES_TOKEN && child.ignore != true) {
|
||||||
try {
|
try {
|
||||||
val object3D = buildObject3D(child)
|
val object3D = buildObject3D(child)
|
||||||
group[token] = object3D
|
group[token] = object3D
|
||||||
@ -151,6 +152,7 @@ public class ThreePlugin : AbstractPlugin(), ElementVisionRenderer {
|
|||||||
/**
|
/**
|
||||||
* Ensure that [ThreePlugin] is loaded in the global [VisionForge] context
|
* Ensure that [ThreePlugin] is loaded in the global [VisionForge] context
|
||||||
*/
|
*/
|
||||||
|
@DFExperimental
|
||||||
public fun VisionForge.useThreeJs() {
|
public fun VisionForge.useThreeJs() {
|
||||||
plugins.fetch(ThreePlugin)
|
plugins.fetch(ThreePlugin)
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package hep.dataforge.vision.three.server
|
package hep.dataforge.vision.three.server
|
||||||
|
|
||||||
|
import hep.dataforge.misc.DFExperimental
|
||||||
import hep.dataforge.vision.VisionForge
|
import hep.dataforge.vision.VisionForge
|
||||||
import hep.dataforge.vision.solid.three.useThreeJs
|
import hep.dataforge.vision.solid.three.useThreeJs
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public fun main(): Unit = VisionForge.run {
|
public fun main(): Unit = VisionForge.run {
|
||||||
useThreeJs()
|
useThreeJs()
|
||||||
renderVisionsInWindow()
|
renderVisionsInWindow()
|
||||||
|
Loading…
Reference in New Issue
Block a user