- 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]
- Warn about artifacts on meshes with open boundaries
- Fix some settings not being saved/restored
- Fix transaction name on undo/redo not matching the tool name
Also: Make the asset warning for base interactive tool only clear the tool's display message if it set a display message when it was last called, so that it is less likely to clear unrelated display messages when called with no warning to display.
#jira UE-180838
#jira UE-180758
#jira UE-180838
#rb rinat.abdrashitov
#preflight 641be32f25389270b7300ae4
[CL 24783364 by jimmy andrews in ue5-main branch]
- Added FTransformGizmoDataBinder which allows for gizmos to be bound to vectors such that the vectors are updated when the gizmo changes, and the gizmo is updated from vectors when asked. This should make it easy-ish to create displays of gizmos.
- Used the data binder in STransformGizmoNumericalUIOverlay, an overlay containing a draggable numerical UI panel for gizmos. Note that currently all changes, including typing, intentionally go down a gizmo drag path, meaning that they trigger the begin/end transform edit sequence calls, to make the tools treat them as a gizmo drag (in part because some tools might otherwise assume that a gizmo update is from an undo transaction or some other path that is special-cased).
- Added some slate things to ModelingEditorUI to support the numerical UI, in particular a viewport draggable box, and a widget that emits a tick delegate.
- Added some delegates to gizmo context object and combined transform gizmos to allow things to bind/unbind to/from them appropriately.
#rb Ryan.Schmidt
#preflight 63ce97ebf2318350a2f3a6c4
[CL 23815889 by semion piskarev 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]
remove unnecessary EToolShutdownType predeclaration from BaseToolkit.h, this was added a long time to ago when the type was referenced in this header, but that code was moved w/o removing the predecl
#rb none
#preflight 638e0c36c0652bbec2ea161b
[CL 23394677 by ryan schmidt in ue5-main branch]
UModelingSelectionInteraction now supports concept of a "drag mode" that allows for drawing a marquee, brush-style interaction, etc. Added support for Marquee drawing but actual selection based on the marquee is not implemented yet.
ModelingToolsEditorMode now registers selector factories for Volumes and Static Meshes. Creating selectors for these types is dynamically configurable via new UProperties.
Added mesh-selection-specific UPathSelectionInteraction which provides a simple continuous-select-while-dragging interaction
Added a viewport overlay toolbar for mesh selection, supports changing selection mode, drag mode, selectable object types.
Viewport overlay toolbar also exposes a "quick settings" flyout for changing various modeling mode settings
Added URectangleMarqueeInteraction which is a simplified variant of URectangleMarqueeMechanic that does not require a Tool and doesn't create it's own InputBehavior
USingleClickOrDragInputBehavior now supports changing Drag target
Added a few placeholder icons
#rb none
#preflight 6389351bb36822f1c3540259
[CL 23372864 by ryan schmidt in ue5-main branch]
Refactor most of FDynamicMeshSelector into FDynamicMeshSelectorBase, FDynamicMeshSelector is now a subclass.
Move the DynamicMeshTransformer from cpp to FBasicDynamicMeshSelectionTransformer in header.
Add FVolumeSelector and FStaticMeshSelector which are derived from FBaseDynamicMeshSelector.
Add ability to filter selection queries/edits by TopologyID in FGeometrySelectionEditor. This is necesary for polygroup and polygroup-edge selections as their encoding includes an arbitrary TriangleID paired w/ the TopologyID.
UGeometrySelectionManager now manages this TopologyID filtering on selection editors it creates/updates
Add concept of "Tracked" selection changes to UGeometrySelectionManager, allows a single selection FChange to be constructed incrementally, eg like with a brush. Add a variant of raycast-selection-update that can be run inside a tracked change.
#rb none
#preflight 6388f0cf4b2f03a7d761ccef
[CL 23361634 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]