Skip to content

Commit

Permalink
implemented euler angle order switching for trafos & version bump
Browse files Browse the repository at this point in the history
  • Loading branch information
haraldsteinlechner committed May 7, 2024
1 parent 4df6dec commit 429ea17
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 5 deletions.
3 changes: 3 additions & 0 deletions TEST_RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## 4.25.0-prerelease2
- option for switching euler angle order

## 4.25.0-prerelease1
- fixed pivot transformation

Expand Down
1 change: 1 addition & 0 deletions src/PRo3D.Core/ScaleBars-Model.fs
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ module InitScaleBarsParams =
trafoChanged = false
usePivot = false
pivotSize = Transformations.Initial.initPivotSize 0.4
eulerMode = EulerMode.defaultMode
}

let thickness = {
Expand Down
1 change: 1 addition & 0 deletions src/PRo3D.Core/SceneObjects-Model.fs
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ module InitSceneObjectParams =
trafoChanged = false
usePivot = false
pivotSize = Transformations.Initial.initPivotSize 0.4
eulerMode = EulerMode.defaultMode
}

let initNoffset = {
Expand Down
1 change: 1 addition & 0 deletions src/PRo3D.Core/Surface-Model.fs
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,7 @@ module Init =
trafoChanged = false
usePivot = false
pivotSize = Transformations.Initial.initPivotSize 0.4
eulerMode = EulerMode.defaultMode
}


Expand Down
12 changes: 12 additions & 0 deletions src/PRo3D.Core/Transformation-Model.fs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ open PRo3D.Core

open Adaptify

type EulerMode = XYZ | XZY | YXZ | YZX | ZXY | ZYX

module EulerMode =
let defaultMode = EulerMode.XYZ

[<ModelType>]
type Transformations = {
Expand All @@ -41,6 +45,7 @@ type Transformations = {
trafoChanged : bool
usePivot : bool
pivotSize : NumericInput
eulerMode : EulerMode
}


Expand Down Expand Up @@ -132,6 +137,7 @@ module Transformations =
trafoChanged = false
usePivot = false
pivotSize = Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down Expand Up @@ -163,6 +169,7 @@ module Transformations =
trafoChanged = false
usePivot = false
pivotSize = Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down Expand Up @@ -195,6 +202,7 @@ module Transformations =
trafoChanged = false
usePivot = false
pivotSize = Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down Expand Up @@ -230,6 +238,7 @@ module Transformations =
trafoChanged = false
usePivot = false
pivotSize = Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down Expand Up @@ -266,6 +275,7 @@ module Transformations =
trafoChanged = false
usePivot = false
pivotSize = Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down Expand Up @@ -301,6 +311,7 @@ module Transformations =
trafoChanged = false
usePivot = false
pivotSize = Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down Expand Up @@ -339,6 +350,7 @@ module Transformations =
trafoChanged = false
usePivot = usePivot
pivotSize = match pivotSize with |Some p -> Initial.initPivotSize p | None -> Initial.initPivotSize 4.0
eulerMode = EulerMode.defaultMode
}
}

Expand Down
38 changes: 33 additions & 5 deletions src/PRo3D.Core/TransformationApp.fs
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,24 @@ open PRo3D.Base
open PRo3D.Core
open PRo3D.Base.Gis

open Aardvark.Base.MultimethodTest
open Aardvark.UI.Primitives

module TransformationApp =

//open Aardvark.UI.ChoiceModule

module EulerMode =
let getTrafo (m : EulerMode) (x : float) (y : float) (z : float)=
let x = Trafo3d.RotationXInDegrees x
let y = Trafo3d.RotationYInDegrees y
let z = Trafo3d.RotationZInDegrees z
match m with
| EulerMode.XYZ -> x * y * z
| EulerMode.XZY -> x * z * y
| EulerMode.YXZ -> y * x * z
| EulerMode.YZX -> y * z * x
| EulerMode.ZXY -> z * x * y
| EulerMode.ZYX -> z * y * x

type Action =
| SetTranslation of Vector3d.Action
Expand All @@ -40,6 +53,7 @@ module TransformationApp =
| SetScaling of Numeric.Action
| ToggleUsePivot
| SetPivotSize of Numeric.Action
| SetEulerMode of EulerMode

let calcFullTrafo
(translation : V3d)
Expand All @@ -50,7 +64,8 @@ module TransformationApp =
(refSystem : ReferenceSystem)
(observedSystem : Option<SpiceReferenceSystem>)
(observerSystem : Option<ObserverSystem>)
(scale:float) =
(scale:float)
(eulerMode : EulerMode) =

let northCorrection = Trafo3d.RotationZInDegrees(refSystem.noffset.value)
let refSysBasis =
Expand All @@ -74,7 +89,8 @@ module TransformationApp =
let fullTrafo =
originTrafo.Inverse *
refSysBasis.Inverse *
Trafo3d.RotationEulerInDegrees(roll, pitch, yaw)
EulerMode.getTrafo eulerMode roll pitch yaw *
Trafo3d.Scale(scale)
* refSysBasis
* originTrafo
* Trafo3d.Translation(refSysBasis.Forward.TransformPos(translation))
Expand Down Expand Up @@ -139,14 +155,15 @@ module TransformationApp =
let! transf = transform.Current
let! observedSystem = observedSystem
let! observerSystem = observerSystem
let! mode = transform.eulerMode

//let northN, upN, eastN =
// if usePivot then
// getNorthAndUpFromPivot transf refSys
// else
// north, up, north.Cross(up)

let newTrafo = calcFullTrafo translation yaw pitch roll (if usePivot then pivot else V3d.Zero) refSys observedSystem observerSystem scale
let newTrafo = calcFullTrafo translation yaw pitch roll (if usePivot then pivot else V3d.Zero) refSys observedSystem observerSystem scale mode
return newTrafo
}

Expand All @@ -173,6 +190,7 @@ module TransformationApp =
observedSystem
observerSystem
transform.scaling.value
transform.eulerMode

let resetRotation (model : Transformations) =
let yaw = { model.yaw with value = 0.0}
Expand Down Expand Up @@ -263,6 +281,8 @@ module TransformationApp =
| SetPivotSize s ->
let ps = Numeric.update model.pivotSize s
{ model with pivotSize = ps }
| SetEulerMode m ->
{ model with eulerMode = m }

module UI =

Expand All @@ -281,7 +301,14 @@ module TransformationApp =
]

let view (model:AdaptiveTransformations) =

let mode : aval<EulerMode> = AVal.constant EulerMode.XYZ
let modeDropDown =
let values =
[ EulerMode.XYZ, "XYZ"; EulerMode.XZY, "XZY"; EulerMode.YXZ, "YXZ"; EulerMode.YZX, "YZX"; EulerMode.ZXY, "ZXY"; EulerMode.ZYX, "ZYX"]
|> List.map (fun (m, v) -> m, text v)
|> AMap.ofList
SimplePrimitives.dropdownUnclearable AttributeMap.empty values mode SetEulerMode

require GuiEx.semui (
Html.table [
//Html.row "Visible:" [GuiEx.iconCheckBox model.useTranslationArrows ToggleVisible ]
Expand All @@ -296,6 +323,7 @@ module TransformationApp =
Html.row "show PivotPoint:" [GuiEx.iconCheckBox model.showPivot TogglePivotVisible ]
Html.row "Pivot Point (m):" [viewPivotPointInput model.pivot |> UI.map SetPivotPoint ]
Html.row "Pivot Size:" [Numeric.view' [InputBox] model.pivotSize |> UI.map SetPivotSize]
Html.row "Mode" [modeDropDown]
//Html.row "Reset Trafos:" [button [clazz "ui button tiny"; onClick (fun _ -> ResetTrafos )] []]
//Html.row "Pivot Point:" [Incremental.text (model.pivot |> AVal.map (fun x -> x.ToString ()))]
]
Expand Down

0 comments on commit 429ea17

Please sign in to comment.