- fixed axis manipulation for both direct & indirect manipulation
- indirect manipulation using CTRL+LMB/RMB is now handled by the gizmo
- added UMultiButtonClickDragBehavior to support click & drag with several buttons in one single behavior
#jira UE-152999
#rb semion.piskarev, brooke.hubert
[CL 28277038 by benoit gadreau in ue5-main branch]
- support for current FEditorModeTools::WidgetScale
- reset default indirect target when re-entering the same transform mode
- added FEditorTransformGizmoDataBinder to easily interface between transform gizmos and the mode manager
TODO
- FEditorModeTools::WidgetScale (currently acting as a uniform matrix scale as designed in 14299282) should be replaced by gizmo scale, line with and handle size settings once the design done.
#rb brooke.hubert
#rnx
[CL 27952239 by benoit gadreau in ue5-main branch]
- arcball rotation: the rotation is computed using a spherical+hyperbolic projection (see code for more explanation)
- indirect manipulation via MMB: hit parts are stored per mode then are used to drive the proper drag function
- defered drag function: in order to avoid notifications storm, the drag functions can be applied on tick instead using a pending function
- a single default TRS gizmo is now created when needed (instead of creating several thru selection changed or when the gizmo manager was ticking) and its visibility is set based on rules
TODO
- UEditorInteractiveGizmoManager is now closer to UInteractiveGizmoManager so I don't think we need ActiveEditorGizmos, CachedGizmoMap, etc. that are not used anymore. This should be cleaned in another CL
- UEditorTransformGizmo::OnGizmoTransformBegin should set the current axis (needed for some modes, including IKRig) but this is disabled for now has there are some side effects with dragging (this will be treated in another CL)
#jira UE-152973
#jira UE-161236
#rb brooke.hubert zach.rammell
[CL 27751789 by benoit gadreau in ue5-main branch]
ViewportClient's NearPlane value is assumed to be positive, which makes things janky if your camera has negative z value. This change uses the camera's absolute Z coordinate for computing the temporary clip planes, and also testing if the XY-plane is on the wrong size of our near clipping plane.
#rb semion.piskarev
#preflight 645be1df2f4eab186357ab22
[CL 25412342 by tyson brochu in ue5-main branch]
- added support for material and size customization
#jira UE-183453
#rb kiaran.ritchie
#preflight 6442a83b0171aae0b1b48571
[CL 25177125 by benoit gadreau in ue5-main branch]
- multiselection: bones can be multi-selected (using shift/ctrl) so that they can be bulk edited
- bones can be transformed individually (unlike in the level editor where the last selected element's transform is used as pivot)
- added USkeletalMeshGizmoContextObject to manage gizmo wrappers for skeletal mesh tools
- gizmo: re-used the transform gizmo work done with several fixes/improvements so that they can be used in other contexts
- UTransformGizmo can be used without TransformGizmoSource, most of the infos can be retrieved from the IToolsContextQueriesAPI
- UTransformGizmo can be passed an external StateTarget to handle transaction externally
- UTransformGizmo fixed rotations going in the wrong direction when dragging
#jira UE-183454
#jira UE-183453
#rb kiaran.ritchie
#preflight 643d63df8e01968448cf53db
[CL 25085825 by benoit gadreau in ue5-main branch]
- moved most functions defined in ParameterToTransformAdapters.h header into a new cpp to simplify debugging/etc
- UGizmoAxisTranslationParameterSource and UGizmoPlaneTranslationParameterSource now support optional constraints on the translation Delta
- CombinedTransformGizmo now has PositionAxisDeltaSnapFunction that, when in 'relative' mode, snaps the translation Deltas to increments via those constraints
- Added CombinedTransformGizmo::RelativeTranslationSnapping which controls relative vs absolute translation snapping, and can fetch value from ToolsContext
- Also added rotation-angle-delta constraint support UGizmoAxisRotationParameterSource and switched the gizmo to explicitly snap angle-deltas instead of trying to snap to "world rotation grid"
- Moved SnapToIncrement function to UE::Geometry namespace (in VectorUtil.h) and cleaned up a bit of duplicate code in UModelingSceneSnappingManager left over from pre-GeometryCore times
- Added FToolContextSnappingConfiguration::bEnableAbsoluteWorldSnapping, EdModeInteractiveToolsContext:: bEnableAbsoluteWorldSnapping and bits to hook this up
- Added UModelingToolsEditorModeSettings::bEnableAbsoluteWorldSnapping which stores this setting globally, but currently it is not serialized to config file, resets to default (Relative) on Editor restart
- Toolkit exposes toggle in the Selection toolbar menus
#rb none
#preflight 639b4036680483bcb1c33869
[CL 23532642 by ryan schmidt in ue5-main branch]
Add UEditorInteractiveToolsContext::SetForceCombinedGizmoMode() and GetForceCombinedGizmoModeEnabled() so that an ITC can have a toggle for whether or not to respect the Editor gizmo mode.
Add implementation of new ::GetCurrentTransformGizmoMode() in FEdModeToolsContextQueriesImpl, that uses this new flag.
Add support in UCombinedTransformGizmo for specifying which sub-gizmo set is visible based on EToolContextTransformGizmoMode member, or alternately querying EToolContextTransformGizmoMode via IToolsContextQueriesAPI.
ModelingMode: add new UModelingToolsEditorModeSettings::bRespectLevelEditorGizmoMode to configure combined-vs-leveleditor gizmo mode behavior of Modeling Mode. Currently applying this setting to ModelingMode ITC in ::Begin(), so mode exit/enter is needed to apply the setting.
#rb none
#preflight 636bf5bf63037c1026d09aed
[CL 23081762 by ryan schmidt in ue5-main branch]
# Although there aren't references left to the object, iterating over all the things will return the thing. Flagging as garbage seems a lot testier of a change for fixing the 5.1 crash with varied lifettime of the mode and mode manager contexts, so merely tracking it and reporting the correct world here.
#rnx
#Jira UE-168159
#rb lauren.barnes, zach.rammell
#preflight 6356f2ff3d41a4455a628b31
#lockdown jeanmichel.dignard
[CL 22787075 by brooke hubert in ue5-main branch]