diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index cd185c0..3f24f98 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,6 @@ +### 1.0.7 +* fixed `Aardvark.Dom.Utilites` package name typo + ### 1.0.6 * added simple utility for starting a server * added `Aardvark.Dom.Utilites` providing a simple OrbitController diff --git a/src/Aardvark.Dom.Utilities/OrbitController/RenderControlExtensions.fs b/src/Aardvark.Dom.Utilities/OrbitController/RenderControlExtensions.fs index 5499c8e..e1892d6 100644 --- a/src/Aardvark.Dom.Utilities/OrbitController/RenderControlExtensions.fs +++ b/src/Aardvark.Dom.Utilities/OrbitController/RenderControlExtensions.fs @@ -20,55 +20,63 @@ type SimpleOrbitController = SimpleOrbitController of SimpleOrbitControllerConfi [] module RenderControlOrbitExtensions = - type RenderControlBuilder with - member x.Yield(SimpleOrbitController config) = + let private orbit (SimpleOrbitController config) : NodeBuilderHelpers.RenderControlBuilder> = + + let mutable state = + let dist = config.Location - config.Center + let r = Vec.length dist + let dir = dist / r + + let theta = asin dir.Z + let phi = atan2 dir.Y dir.X - let mutable state = - let dist = config.Location - config.Center - let r = Vec.length dist - let dir = dist / r - - let theta = asin dir.Z - let phi = atan2 dir.Y dir.X - - OrbitState.create config.Center phi theta r config.RotateButton config.PanButton - let astate = AdaptiveOrbitState state + OrbitState.create config.Center phi theta r config.RotateButton config.PanButton + let astate = AdaptiveOrbitState state - let coll = AsyncBlockingCollection<_>() + let coll = AsyncBlockingCollection<_>() - let env = - { new Env with - member this.Emit(messages: OrbitMessage seq): unit = - coll.Add messages - member this.Run(js: string, arg1: (System.Text.Json.JsonElement -> unit) option): unit = - raise (System.NotImplementedException()) - member this.RunModal(modal: System.IDisposable -> DomNode): System.IDisposable = - raise (System.NotImplementedException()) - member this.Runtime: IRuntime = - failwith "" - member this.StartWorker(): System.Threading.Tasks.Task> = - raise (System.NotImplementedException()) - } - let runner = - task { - while true do - let! msgs = coll.Take() - for msg in msgs do - state <- OrbitController.update state msg - transact (fun () -> astate.Update state) + let env = + { new Env with + member this.Emit(messages: OrbitMessage seq): unit = + coll.Add messages + member this.Run(js: string, arg1: (System.Text.Json.JsonElement -> unit) option): unit = + raise (System.NotImplementedException()) + member this.RunModal(modal: System.IDisposable -> DomNode): System.IDisposable = + raise (System.NotImplementedException()) + member this.Runtime: IRuntime = + failwith "" + member this.StartWorker(): System.Threading.Tasks.Task> = + raise (System.NotImplementedException()) + } + let runner = + task { + while true do + let! msgs = coll.Take() + for msg in msgs do + state <- OrbitController.update state msg + transact (fun () -> astate.Update state) - - } - - x.Yield ( - renderControlExt { - RenderControl.OnRendered (fun _ -> env.Emit [OrbitMessage.Rendered]) - OrbitController.getAttributes env - Sg.View (astate.view |> AVal.map CameraView.viewTrafo) - Sg.OnDoubleTap(fun e -> env.Emit [OrbitMessage.SetTargetCenter(true, AnimationKind.Tanh, e.WorldPosition)]; false) - } - ) + + } + let view = astate.view |> AVal.map CameraView.viewTrafo + let run = + renderControlExt { + RenderControl.OnRendered (fun _ -> env.Emit [OrbitMessage.Rendered]) + OrbitController.getAttributes env + Sg.View view + Sg.OnDoubleTap(fun e -> env.Emit [OrbitMessage.SetTargetCenter(true, AnimationKind.Tanh, e.WorldPosition)]; false) + } + fun a -> run a; view + + type RenderControlBuilder with + + + member x.Yield(config : SimpleOrbitController) = + x.Yield (orbit config >> ignore) + + member x.Bind(config : SimpleOrbitController, cont : aval -> _) = + x.Bind(orbit config, cont) diff --git a/src/Aardvark.Dom.Utilities/paket.template b/src/Aardvark.Dom.Utilities/paket.template index aaa1500..c26c204 100644 --- a/src/Aardvark.Dom.Utilities/paket.template +++ b/src/Aardvark.Dom.Utilities/paket.template @@ -1,5 +1,5 @@ type project -id Aardvark.Dom.Utilites +id Aardvark.Dom.Utilities authors Aardvark Platform Team owners Aardvark Platform Team projectUrl http://github.com/aardvark-community