Minor FX fixes

This commit is contained in:
Alexander Nozik 2021-07-15 18:56:29 +03:00
parent 493c527743
commit c1627b4504
6 changed files with 34 additions and 17 deletions

View File

@ -65,6 +65,7 @@ class FX3DPlugin : AbstractPlugin() {
}
is SolidLabel -> Text(obj.text).apply {
font = Font.font(obj.fontFamily, obj.fontSize)
x = -layoutBounds.width / 2
y = layoutBounds.height / 2
}
@ -129,10 +130,10 @@ class FX3DPlugin : AbstractPlugin() {
}
}
companion object : PluginFactory<FX3DPlugin> {
override val tag = PluginTag("vision.fx3D", PluginTag.DATAFORGE_GROUP)
override val type = FX3DPlugin::class
override fun invoke(meta: Meta, context: Context) = FX3DPlugin()
public companion object : PluginFactory<FX3DPlugin> {
override val tag: PluginTag = PluginTag("vision.fx3D", PluginTag.DATAFORGE_GROUP)
override val type: KClass<FX3DPlugin> = FX3DPlugin::class
override fun invoke(meta: Meta, context: Context): FX3DPlugin = FX3DPlugin()
}
}
@ -140,14 +141,14 @@ class FX3DPlugin : AbstractPlugin() {
* Builder and updater for three.js object
*/
@Type(TYPE)
interface FX3DFactory<in T : Solid> {
public interface FX3DFactory<in T : Solid> {
val type: KClass<in T>
public val type: KClass<in T>
operator fun invoke(obj: T, binding: VisualObjectFXBinding): Node
public operator fun invoke(obj: T, binding: VisualObjectFXBinding): Node
companion object {
const val TYPE = "fx3DFactory"
public companion object {
public const val TYPE = "fx3DFactory"
}
}

View File

@ -38,7 +38,7 @@ private fun MeshView.toCSG(): CSG {
return CSG.fromPolygons(polygons)
}
class FXCompositeFactory(val plugin: FX3DPlugin) : FX3DFactory<Composite> {
public class FXCompositeFactory(public val plugin: FX3DPlugin) : FX3DFactory<Composite> {
override val type: KClass<in Composite>
get() = Composite::class

View File

@ -7,7 +7,7 @@ import javafx.scene.Node
import kotlin.reflect.KClass
object FXConvexFactory : FX3DFactory<Convex> {
public object FXConvexFactory : FX3DFactory<Convex> {
override val type: KClass<in Convex> get() = Convex::class
override fun invoke(obj: Convex, binding: VisualObjectFXBinding): Node {

View File

@ -8,7 +8,7 @@ import org.fxyz3d.geometry.Face3
import space.kscience.dataforge.meta.Meta
import kotlin.reflect.KClass
object FXShapeFactory : FX3DFactory<GeometrySolid> {
public object FXShapeFactory : FX3DFactory<GeometrySolid> {
override val type: KClass<in GeometrySolid> get() = GeometrySolid::class
override fun invoke(obj: GeometrySolid, binding: VisualObjectFXBinding): MeshView {

View File

@ -21,10 +21,25 @@ import space.kscience.visionforge.solid.specifications.Camera as CameraSpec
public class OrbitControls internal constructor(camera: Camera, canvas: SubScene, spec: CameraSpec) {
public val azimuthProperty: SimpleDoubleProperty = SimpleDoubleProperty(spec.azimuth)
/**
* Azimuth angle in radians
*/
public val azimuthProperty: SimpleDoubleProperty = SimpleDoubleProperty().apply {
spec.useProperty(CameraSpec::azimuth){
set(spec.azimuth)
}
}
public var azimuth: Double by azimuthProperty
public val zenithProperty: SimpleDoubleProperty = SimpleDoubleProperty(PI / 2 - spec.latitude)
/**
* Zenith angle in radians
*/
public val zenithProperty: SimpleDoubleProperty = SimpleDoubleProperty().apply {
spec.useProperty(CameraSpec::latitude){
set(PI / 2 - spec.latitude)
}
}
public var zenith: Double by zenithProperty
@ -123,7 +138,7 @@ public class OrbitControls internal constructor(camera: Camera, canvas: SubScene
if (me.isPrimaryButtonDown) {
azimuth = (azimuth - mouseDeltaX * MOUSE_SPEED * modifier * ROTATION_SPEED)
zenith = (zenith - mouseDeltaY * MOUSE_SPEED * modifier * ROTATION_SPEED).coerceIn(-PI, PI)
zenith = (zenith - mouseDeltaY * MOUSE_SPEED * modifier * ROTATION_SPEED).coerceIn(-PI/2, PI/2)
} else if (me.isSecondaryButtonDown) {
x += MOUSE_SPEED * modifier * TRACK_SPEED * (mouseDeltaX * cos(azimuth) - mouseDeltaY * sin(azimuth))
z += MOUSE_SPEED * modifier * TRACK_SPEED * ( mouseDeltaX * sin(azimuth) + mouseDeltaY * cos(azimuth))

View File

@ -18,7 +18,6 @@ public class Camera : Scheme() {
public var distance: Double by double(INITIAL_DISTANCE)
public var azimuth: Double by double(INITIAL_AZIMUTH)
public var latitude: Double by double(INITIAL_LATITUDE)
public val zenith: Double get() = PI / 2 - latitude
public companion object : SchemeSpec<Camera>(::Camera) {
public const val INITIAL_DISTANCE: Double = 300.0
@ -51,4 +50,6 @@ public class Camera : Scheme() {
}
}
}
}
}
public val Camera.zenith: Double get() = PI / 2 - latitude