Compare commits
9 Commits
6a801f9999
...
ba70af3a24
Author | SHA1 | Date | |
---|---|---|---|
ba70af3a24 | |||
20fc81305c | |||
92bfb173d8 | |||
086948492c | |||
25c3a19eed | |||
ea9d37b9a1 | |||
a695e5e7c9 | |||
140c59497e | |||
23cb8765b6 |
@ -1,5 +1,4 @@
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
|
||||||
import space.kscience.gradle.isInDevelopment
|
|
||||||
import space.kscience.gradle.useApache2Licence
|
import space.kscience.gradle.useApache2Licence
|
||||||
import space.kscience.gradle.useSPCTeam
|
import space.kscience.gradle.useSPCTeam
|
||||||
|
|
||||||
@ -45,14 +44,7 @@ ksciencePublish {
|
|||||||
useApache2Licence()
|
useApache2Licence()
|
||||||
useSPCTeam()
|
useSPCTeam()
|
||||||
}
|
}
|
||||||
github(githubProject = "visionforge", githubOrg = "SciProgCentre")
|
repository("spc","https://maven.sciprog.center/kscience")
|
||||||
space(
|
|
||||||
if (isInDevelopment) {
|
|
||||||
"https://maven.pkg.jetbrains.space/spc/p/sci/dev"
|
|
||||||
} else {
|
|
||||||
"https://maven.pkg.jetbrains.space/spc/p/sci/maven"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
sonatype()
|
sonatype()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,12 +5,17 @@ import space.kscience.dataforge.names.Name
|
|||||||
import space.kscience.dataforge.names.parseAsName
|
import space.kscience.dataforge.names.parseAsName
|
||||||
import space.kscience.dataforge.names.plus
|
import space.kscience.dataforge.names.plus
|
||||||
import space.kscience.dataforge.names.withIndex
|
import space.kscience.dataforge.names.withIndex
|
||||||
|
import space.kscience.kmath.complex.Quaternion
|
||||||
|
import space.kscience.kmath.geometry.fromRotationMatrix
|
||||||
|
import space.kscience.kmath.linear.VirtualMatrix
|
||||||
import space.kscience.visionforge.MutableVisionContainer
|
import space.kscience.visionforge.MutableVisionContainer
|
||||||
import space.kscience.visionforge.isEmpty
|
import space.kscience.visionforge.isEmpty
|
||||||
import space.kscience.visionforge.set
|
import space.kscience.visionforge.set
|
||||||
import space.kscience.visionforge.solid.*
|
import space.kscience.visionforge.solid.*
|
||||||
import space.kscience.visionforge.solid.SolidMaterial.Companion.MATERIAL_COLOR_KEY
|
import space.kscience.visionforge.solid.SolidMaterial.Companion.MATERIAL_COLOR_KEY
|
||||||
import kotlin.math.*
|
import kotlin.math.PI
|
||||||
|
import kotlin.math.cos
|
||||||
|
import kotlin.math.sin
|
||||||
|
|
||||||
private val volumesName = Name.EMPTY //"volumes".asName()
|
private val volumesName = Name.EMPTY //"volumes".asName()
|
||||||
|
|
||||||
@ -28,12 +33,10 @@ private data class RootToSolidContext(
|
|||||||
val colorCache: MutableMap<Meta, String> = mutableMapOf(),
|
val colorCache: MutableMap<Meta, String> = mutableMapOf(),
|
||||||
)
|
)
|
||||||
|
|
||||||
// converting to XYZ to Tait–Bryan angles according to https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix
|
// apply rotation from a matrix
|
||||||
private fun Solid.rotate(rot: DoubleArray) {
|
private fun Solid.rotate(rot: DoubleArray) {
|
||||||
val xAngle = atan2(-rot[5], rot[8])
|
val matrix = VirtualMatrix(3, 3) { i, j -> rot[i * 3 + j] }
|
||||||
val yAngle = atan2(rot[2], sqrt(1.0 - rot[2].pow(2)))
|
quaternion = Quaternion.fromRotationMatrix(matrix)
|
||||||
val zAngle = atan2(-rot[1], rot[0])
|
|
||||||
rotation = Float32Vector3D(xAngle, yAngle, zAngle)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Solid.translate(trans: DoubleArray) {
|
private fun Solid.translate(trans: DoubleArray) {
|
||||||
|
@ -2,6 +2,8 @@ plugins {
|
|||||||
id("space.kscience.gradle.mpp")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group = "demo"
|
||||||
|
|
||||||
kscience {
|
kscience {
|
||||||
jvm()
|
jvm()
|
||||||
js {
|
js {
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.js")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
kscience{
|
kscience {
|
||||||
useCoroutines()
|
useCoroutines()
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin{
|
kotlin {
|
||||||
explicitApi = null
|
explicitApi = null
|
||||||
js{
|
js {
|
||||||
useCommonJs()
|
useCommonJs()
|
||||||
browser {
|
browser {
|
||||||
binaries.executable()
|
binaries.executable()
|
||||||
commonWebpackConfig {
|
commonWebpackConfig {
|
||||||
cssSupport{
|
cssSupport {
|
||||||
enabled.set(false)
|
enabled.set(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -21,11 +21,15 @@ kotlin{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kscience {
|
||||||
|
|
||||||
dependencies{
|
dependencies {
|
||||||
implementation(projects.visionforge.visionforgeGdml)
|
implementation(projects.visionforge.visionforgeGdml)
|
||||||
implementation(projects.visionforge.visionforgePlotly)
|
implementation(projects.visionforge.visionforgePlotly)
|
||||||
implementation(projects.visionforge.visionforgeMarkdown)
|
implementation(projects.visionforge.visionforgeMarkdown)
|
||||||
implementation(projects.visionforge.visionforgeThreejs)
|
implementation(projects.visionforge.visionforgeThreejs)
|
||||||
implementation(projects.ui.ring)
|
}
|
||||||
|
jsMain {
|
||||||
|
implementation(projects.ui.ring)
|
||||||
|
}
|
||||||
}
|
}
|
@ -34,8 +34,8 @@ kscience {
|
|||||||
implementation("ch.qos.logback:logback-classic:1.2.11")
|
implementation("ch.qos.logback:logback-classic:1.2.11")
|
||||||
}
|
}
|
||||||
jsMain {
|
jsMain {
|
||||||
implementation(project(":ui:ring"))
|
implementation(projects.ui.ring)
|
||||||
implementation(project(":visionforge-threejs"))
|
implementation(projects.visionforgeThreejs)
|
||||||
//implementation(devNpm("webpack-bundle-analyzer", "4.4.0"))
|
//implementation(devNpm("webpack-bundle-analyzer", "4.4.0"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,13 +15,13 @@ import kotlin.math.sin
|
|||||||
|
|
||||||
fun main() = serve {
|
fun main() = serve {
|
||||||
|
|
||||||
val azimuth = 60.degrees
|
// val azimuth = 60.degrees
|
||||||
val inclination = 15.degrees
|
// val inclination = 15.degrees
|
||||||
|
|
||||||
val direction = with(QuaternionField) {
|
// val direction = with(QuaternionField) {
|
||||||
Quaternion.fromRotation(-azimuth, Euclidean3DSpace.zAxis) *
|
// Quaternion.fromRotation(-azimuth, Euclidean3DSpace.zAxis) *
|
||||||
Quaternion.fromRotation(Angle.piDiv2 - inclination, Euclidean3DSpace.yAxis)
|
// Quaternion.fromRotation(Angle.piDiv2 - inclination, Euclidean3DSpace.yAxis)
|
||||||
}
|
// }
|
||||||
|
|
||||||
//val direction2 = Quaternion.fromEuler(Angle.zero, Angle.piDiv2 - inclination, -azimuth, RotationOrder.ZYX)
|
//val direction2 = Quaternion.fromEuler(Angle.zero, Angle.piDiv2 - inclination, -azimuth, RotationOrder.ZYX)
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ fun main() = serve {
|
|||||||
solidGroup("frame") {
|
solidGroup("frame") {
|
||||||
z = 60
|
z = 60
|
||||||
|
|
||||||
val antenna = solidGroup("antenna") {
|
solidGroup("antenna") {
|
||||||
axes(200)
|
axes(200)
|
||||||
tube(40, 10, 30)
|
tube(40, 10, 30)
|
||||||
sphereLayer(100, 95, theta = PI / 6) {
|
sphereLayer(100, 95, theta = PI / 6) {
|
||||||
|
@ -6,5 +6,8 @@ kotlin.incremental.js.ir=true
|
|||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.jvmargs=-Xmx4G
|
org.gradle.jvmargs=-Xmx4G
|
||||||
|
|
||||||
toolsVersion=0.14.9-kotlin-1.8.20
|
|
||||||
org.jetbrains.compose.experimental.jscanvas.enabled=true
|
org.jetbrains.compose.experimental.jscanvas.enabled=true
|
||||||
|
|
||||||
|
toolsVersion=0.15.0-kotlin-1.9.20-Beta
|
||||||
|
#kotlin.experimental.tryK2=true
|
||||||
|
#kscience.wasm.disabled=true
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@ -1,15 +1,19 @@
|
|||||||
plugins {
|
plugins {
|
||||||
kotlin("js")
|
id("space.kscience.gradle.mpp")
|
||||||
id("space.kscience.gradle.js")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion: String by rootProject.extra
|
val dataforgeVersion: String by rootProject.extra
|
||||||
|
|
||||||
dependencies {
|
kscience{
|
||||||
api(project(":visionforge-solid"))
|
js()
|
||||||
api(project(":ui:react"))
|
jsMain{
|
||||||
implementation(npm("file-saver", "2.0.2"))
|
dependencies {
|
||||||
implementation(npm("bootstrap","4.6.0"))
|
api(project(":visionforge-solid"))
|
||||||
implementation(npm("jquery","3.5.1"))
|
api(project(":ui:react"))
|
||||||
implementation(npm("popper.js","1.16.1"))
|
implementation(npm("file-saver", "2.0.2"))
|
||||||
|
implementation(npm("bootstrap","4.6.0"))
|
||||||
|
implementation(npm("jquery","3.5.1"))
|
||||||
|
implementation(npm("popper.js","1.16.1"))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ import kotlinx.css.padding
|
|||||||
import kotlinx.css.properties.border
|
import kotlinx.css.properties.border
|
||||||
import kotlinx.css.px
|
import kotlinx.css.px
|
||||||
import kotlinx.html.js.onClickFunction
|
import kotlinx.html.js.onClickFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import org.w3c.files.Blob
|
import org.w3c.files.Blob
|
||||||
import org.w3c.files.BlobPropertyBag
|
import org.w3c.files.BlobPropertyBag
|
||||||
import react.FC
|
import react.FC
|
@ -1,11 +1,16 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.js")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies{
|
kscience {
|
||||||
api(project(":visionforge-solid"))
|
js()
|
||||||
api("org.jetbrains.kotlin-wrappers:kotlin-styled")
|
jsMain {
|
||||||
api("org.jetbrains.kotlin-wrappers:kotlin-react-dom")
|
dependencies {
|
||||||
|
api(projects.visionforgeSolid)
|
||||||
|
api("org.jetbrains.kotlin-wrappers:kotlin-styled")
|
||||||
|
api("org.jetbrains.kotlin-wrappers:kotlin-react-dom")
|
||||||
// implementation(npm("react-select","4.3.0"))
|
// implementation(npm("react-select","4.3.0"))
|
||||||
implementation(project(":visionforge-threejs"))
|
api(projects.visionforgeThreejs)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -3,7 +3,7 @@ package space.kscience.visionforge.react
|
|||||||
import kotlinx.css.Align
|
import kotlinx.css.Align
|
||||||
import kotlinx.css.alignItems
|
import kotlinx.css.alignItems
|
||||||
import kotlinx.html.js.onClickFunction
|
import kotlinx.html.js.onClickFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import react.*
|
import react.*
|
||||||
import react.dom.a
|
import react.dom.a
|
||||||
import react.dom.attrs
|
import react.dom.attrs
|
@ -1,10 +1,10 @@
|
|||||||
package space.kscience.visionforge.react
|
package space.kscience.visionforge.react
|
||||||
|
|
||||||
import kotlinx.html.js.onChangeFunction
|
import kotlinx.html.js.onChangeFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
|
||||||
import org.w3c.dom.HTMLOptionElement
|
import org.w3c.dom.HTMLOptionElement
|
||||||
import org.w3c.dom.HTMLSelectElement
|
import org.w3c.dom.HTMLSelectElement
|
||||||
import org.w3c.dom.asList
|
import org.w3c.dom.asList
|
||||||
|
import org.w3c.dom.events.Event
|
||||||
import react.FC
|
import react.FC
|
||||||
import react.dom.attrs
|
import react.dom.attrs
|
||||||
import react.dom.option
|
import react.dom.option
|
@ -10,13 +10,16 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.css.*
|
import kotlinx.css.*
|
||||||
import kotlinx.css.properties.TextDecoration
|
import kotlinx.css.properties.TextDecoration
|
||||||
import kotlinx.html.js.onClickFunction
|
import kotlinx.html.js.onClickFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import react.*
|
import react.*
|
||||||
import react.dom.attrs
|
import react.dom.attrs
|
||||||
import space.kscience.dataforge.meta.*
|
import space.kscience.dataforge.meta.MutableMeta
|
||||||
|
import space.kscience.dataforge.meta.ObservableMutableMeta
|
||||||
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
||||||
import space.kscience.dataforge.meta.descriptors.ValueRequirement
|
import space.kscience.dataforge.meta.descriptors.ValueRequirement
|
||||||
import space.kscience.dataforge.meta.descriptors.get
|
import space.kscience.dataforge.meta.descriptors.get
|
||||||
|
import space.kscience.dataforge.meta.get
|
||||||
|
import space.kscience.dataforge.meta.remove
|
||||||
import space.kscience.dataforge.names.*
|
import space.kscience.dataforge.names.*
|
||||||
import space.kscience.visionforge.hidden
|
import space.kscience.visionforge.hidden
|
||||||
import styled.css
|
import styled.css
|
||||||
@ -148,7 +151,7 @@ private fun RBuilder.propertyEditorItem(props: PropertyEditorProps) {
|
|||||||
css {
|
css {
|
||||||
//+TreeStyles.resizeableInput
|
//+TreeStyles.resizeableInput
|
||||||
width = 160.px
|
width = 160.px
|
||||||
margin(1.px, 5.px)
|
margin = Margin(1.px, 5.px)
|
||||||
}
|
}
|
||||||
ValueChooser {
|
ValueChooser {
|
||||||
attrs {
|
attrs {
|
||||||
@ -167,7 +170,7 @@ private fun RBuilder.propertyEditorItem(props: PropertyEditorProps) {
|
|||||||
css {
|
css {
|
||||||
width = 24.px
|
width = 24.px
|
||||||
alignSelf = Align.stretch
|
alignSelf = Align.stretch
|
||||||
margin(1.px, 5.px)
|
margin = Margin(1.px, 5.px)
|
||||||
backgroundColor = Color.white
|
backgroundColor = Color.white
|
||||||
borderStyle = BorderStyle.solid
|
borderStyle = BorderStyle.solid
|
||||||
borderRadius = 2.px
|
borderRadius = 2.px
|
@ -4,8 +4,9 @@ import kotlinx.css.pct
|
|||||||
import kotlinx.css.width
|
import kotlinx.css.width
|
||||||
import kotlinx.html.InputType
|
import kotlinx.html.InputType
|
||||||
import kotlinx.html.js.onChangeFunction
|
import kotlinx.html.js.onChangeFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
import kotlinx.html.js.onInputFunction
|
||||||
import org.w3c.dom.HTMLInputElement
|
import org.w3c.dom.HTMLInputElement
|
||||||
|
import org.w3c.dom.events.Event
|
||||||
import react.FC
|
import react.FC
|
||||||
import react.dom.attrs
|
import react.dom.attrs
|
||||||
import react.fc
|
import react.fc
|
||||||
@ -58,8 +59,8 @@ public val RangeValueChooser: FC<ValueChooserProps> = fc("RangeValueChooser") {
|
|||||||
attrs {
|
attrs {
|
||||||
disabled = rangeDisabled
|
disabled = rangeDisabled
|
||||||
value = innerValue?.toString() ?: ""
|
value = innerValue?.toString() ?: ""
|
||||||
onChangeFunction = handleChange
|
// onChangeFunction = handleChange
|
||||||
consumer.onTagEvent(this, "input", handleChange)
|
onInputFunction = handleChange
|
||||||
val minValue = props.descriptor?.attributes?.get("min").string
|
val minValue = props.descriptor?.attributes?.get("min").string
|
||||||
minValue?.let {
|
minValue?.let {
|
||||||
min = it
|
min = it
|
@ -52,10 +52,10 @@ public object TreeStyles : StyleSheet("treeStyles", true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public val treeLabel:RuleSet by css {
|
public val treeLabel:RuleSet by css {
|
||||||
border = "none"
|
border = Border.none
|
||||||
padding(left = 4.pt, right = 4.pt, top = 0.pt, bottom = 0.pt)
|
padding = Padding(left = 4.pt, right = 4.pt, top = 0.pt, bottom = 0.pt)
|
||||||
textAlign = TextAlign.left
|
textAlign = TextAlign.left
|
||||||
flex(1.0)
|
flex = Flex(1.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
public val treeLabelInactive: RuleSet by css {
|
public val treeLabelInactive: RuleSet by css {
|
@ -1,13 +1,10 @@
|
|||||||
package space.kscience.visionforge.react
|
package space.kscience.visionforge.react
|
||||||
|
|
||||||
import kotlinx.css.Color
|
import kotlinx.css.*
|
||||||
import kotlinx.css.Cursor
|
import kotlinx.css.properties.TextDecoration
|
||||||
import kotlinx.css.color
|
|
||||||
import kotlinx.css.cursor
|
|
||||||
import kotlinx.css.properties.TextDecorationLine
|
import kotlinx.css.properties.TextDecorationLine
|
||||||
import kotlinx.css.properties.textDecoration
|
|
||||||
import kotlinx.html.js.onClickFunction
|
import kotlinx.html.js.onClickFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import react.*
|
import react.*
|
||||||
import react.dom.attrs
|
import react.dom.attrs
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
@ -37,7 +34,7 @@ private val TreeLabel = fc<ObjectTreeProps> { props ->
|
|||||||
color = Color("#069")
|
color = Color("#069")
|
||||||
cursor = Cursor.pointer
|
cursor = Cursor.pointer
|
||||||
hover {
|
hover {
|
||||||
textDecoration(TextDecorationLine.underline)
|
textDecoration = TextDecoration(setOf(TextDecorationLine.underline))
|
||||||
}
|
}
|
||||||
if (props.name == props.selected) {
|
if (props.name == props.selected) {
|
||||||
+TreeStyles.treeLabelSelected
|
+TreeStyles.treeLabelSelected
|
@ -1,15 +1,12 @@
|
|||||||
package space.kscience.visionforge.react
|
package space.kscience.visionforge.react
|
||||||
|
|
||||||
import kotlinx.css.margin
|
import kotlinx.css.*
|
||||||
import kotlinx.css.pct
|
|
||||||
import kotlinx.css.px
|
|
||||||
import kotlinx.css.width
|
|
||||||
import kotlinx.html.InputType
|
import kotlinx.html.InputType
|
||||||
import kotlinx.html.js.onChangeFunction
|
import kotlinx.html.js.onChangeFunction
|
||||||
import kotlinx.html.js.onKeyDownFunction
|
import kotlinx.html.js.onKeyDownFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
|
||||||
import org.w3c.dom.HTMLInputElement
|
import org.w3c.dom.HTMLInputElement
|
||||||
import org.w3c.dom.HTMLSelectElement
|
import org.w3c.dom.HTMLSelectElement
|
||||||
|
import org.w3c.dom.events.Event
|
||||||
import react.FC
|
import react.FC
|
||||||
import react.Props
|
import react.Props
|
||||||
import react.dom.attrs
|
import react.dom.attrs
|
||||||
@ -145,7 +142,7 @@ public val ColorValueChooser: FC<ValueChooserProps> = fc("ColorValueChooser") {
|
|||||||
styledInput(type = InputType.color) {
|
styledInput(type = InputType.color) {
|
||||||
css {
|
css {
|
||||||
width = 100.pct
|
width = 100.pct
|
||||||
margin(0.px)
|
margin = Margin(0.px)
|
||||||
}
|
}
|
||||||
attrs {
|
attrs {
|
||||||
this.value = props.value?.let { value ->
|
this.value = props.value?.let { value ->
|
@ -1,11 +1,11 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.js")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion: String by rootProject.extra
|
val dataforgeVersion: String by rootProject.extra
|
||||||
|
|
||||||
kotlin{
|
kscience{
|
||||||
js(IR){
|
js{
|
||||||
useCommonJs()
|
useCommonJs()
|
||||||
browser {
|
browser {
|
||||||
commonWebpackConfig {
|
commonWebpackConfig {
|
||||||
@ -15,12 +15,11 @@ kotlin{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
jsMain{
|
||||||
|
api(projects.ui.react)
|
||||||
|
api("org.jetbrains.kotlin-wrappers:kotlin-ring-ui")
|
||||||
|
|
||||||
dependencies{
|
implementation(npm("core-js","3.12.1"))
|
||||||
api(project(":ui:react"))
|
implementation(npm("file-saver", "2.0.2"))
|
||||||
api("org.jetbrains.kotlin-wrappers:kotlin-ring-ui")
|
}
|
||||||
|
|
||||||
implementation(npm("core-js","3.12.1"))
|
|
||||||
implementation(npm("file-saver", "2.0.2"))
|
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ import kotlinx.css.padding
|
|||||||
import kotlinx.css.properties.border
|
import kotlinx.css.properties.border
|
||||||
import kotlinx.css.px
|
import kotlinx.css.px
|
||||||
import kotlinx.html.js.onClickFunction
|
import kotlinx.html.js.onClickFunction
|
||||||
import kotlinx.html.org.w3c.dom.events.Event
|
import org.w3c.dom.events.Event
|
||||||
import org.w3c.files.Blob
|
import org.w3c.files.Blob
|
||||||
import org.w3c.files.BlobPropertyBag
|
import org.w3c.files.BlobPropertyBag
|
||||||
import react.FC
|
import react.FC
|
@ -9,7 +9,7 @@ kscience {
|
|||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
api(projects.visionforgeSolid)
|
api(projects.visionforgeSolid)
|
||||||
api("space.kscience:gdml:0.4.0")
|
api("space.kscience:gdml:0.5.0")
|
||||||
}
|
}
|
||||||
dependencies(jvmTest) {
|
dependencies(jvmTest) {
|
||||||
implementation(spclibs.logback.classic)
|
implementation(spclibs.logback.classic)
|
||||||
|
@ -206,7 +206,7 @@ public var Solid.rotationZ: Number by float(Z_ROTATION_KEY, 0f)
|
|||||||
/**
|
/**
|
||||||
* Raw quaternion value defined in properties
|
* Raw quaternion value defined in properties
|
||||||
*/
|
*/
|
||||||
public var Solid.quaternionValue: Quaternion?
|
public var Solid.quaternionOrNull: Quaternion?
|
||||||
get() = properties.getValue(ROTATION_KEY)?.list?.let {
|
get() = properties.getValue(ROTATION_KEY)?.list?.let {
|
||||||
require(it.size == 4) { "Quaternion must be a number array of 4 elements" }
|
require(it.size == 4) { "Quaternion must be a number array of 4 elements" }
|
||||||
Quaternion(it[0].float, it[1].float, it[2].float, it[3].float)
|
Quaternion(it[0].float, it[1].float, it[2].float, it[3].float)
|
||||||
@ -229,14 +229,14 @@ public var Solid.quaternionValue: Quaternion?
|
|||||||
* Quaternion value including information from euler angles
|
* Quaternion value including information from euler angles
|
||||||
*/
|
*/
|
||||||
public var Solid.quaternion: Quaternion
|
public var Solid.quaternion: Quaternion
|
||||||
get() = quaternionValue ?: Quaternion.fromEuler(
|
get() = quaternionOrNull ?: Quaternion.fromEuler(
|
||||||
rotationX.radians,
|
rotationX.radians,
|
||||||
rotationY.radians,
|
rotationY.radians,
|
||||||
rotationZ.radians,
|
rotationZ.radians,
|
||||||
rotationOrder
|
rotationOrder
|
||||||
)
|
)
|
||||||
set(value) {
|
set(value) {
|
||||||
quaternionValue = value
|
quaternionOrNull = value
|
||||||
}
|
}
|
||||||
|
|
||||||
public var Solid.scaleX: Number by float(X_SCALE_KEY, 1f)
|
public var Solid.scaleX: Number by float(X_SCALE_KEY, 1f)
|
||||||
|
@ -25,8 +25,8 @@ public class TableVisionJsPlugin : AbstractPlugin(), ElementVisionRenderer {
|
|||||||
|
|
||||||
override fun attach(context: Context) {
|
override fun attach(context: Context) {
|
||||||
super.attach(context)
|
super.attach(context)
|
||||||
kotlinext.js.require("tabulator-tables/dist/css/tabulator.min.css")
|
kotlinext.js.require<Any>("tabulator-tables/dist/css/tabulator.min.css")
|
||||||
kotlinext.js.require("tabulator-tables/src/js/modules/ResizeColumns/ResizeColumns.js")
|
kotlinext.js.require<Any>("tabulator-tables/src/js/modules/ResizeColumns/ResizeColumns.js")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun rateVision(vision: Vision): Int = when (vision) {
|
override fun rateVision(vision: Vision): Int = when (vision) {
|
||||||
|
@ -1,17 +1,23 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.js")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin{
|
kotlin{
|
||||||
explicitApi = org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode.Disabled
|
explicitApi = org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode.Disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
kscience{
|
||||||
js{
|
js{
|
||||||
binaries.library()
|
binaries.library()
|
||||||
}
|
}
|
||||||
|
jsMain{
|
||||||
|
dependencies {
|
||||||
|
api(projects.visionforgeSolid)
|
||||||
|
implementation(npm("three", "0.143.0"))
|
||||||
|
implementation(npm("three-csg-ts", "3.1.10"))
|
||||||
|
implementation(npm("three.meshline","1.4.0"))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
api(projects.visionforgeSolid)
|
|
||||||
implementation(npm("three", "0.143.0"))
|
|
||||||
implementation(npm("three-csg-ts", "3.1.10"))
|
|
||||||
implementation(npm("three.meshline","1.4.0"))
|
|
||||||
}
|
|
||||||
|
@ -41,7 +41,7 @@ public fun Object3D.updatePosition(vision: Vision) {
|
|||||||
if (vision is Solid) {
|
if (vision is Solid) {
|
||||||
position.set(vision.x, vision.y, vision.z)
|
position.set(vision.x, vision.y, vision.z)
|
||||||
|
|
||||||
val quaternion = vision.quaternionValue
|
val quaternion = vision.quaternionOrNull
|
||||||
|
|
||||||
if (quaternion != null) {
|
if (quaternion != null) {
|
||||||
setRotationFromQuaternion(
|
setRotationFromQuaternion(
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user