Commit Graph

55 Commits

Author SHA1 Message Date
ryan schmidt
48e1cabf77 Added support for world-space hit-testing and snapping to Volume and DynamicMeshComponent mesh vertices/edges/faces, by having Modeling Mode maintain a persistent set of spatial data structures for these scene meshes. With this change, new ToolSceneQueriesUtil functions can be used to provide more general scene mesh-element hit-testing/snapping via ModelingSceneSnappingManager. Updates to existing Tools/Mechanics to use these new query functions will be done in later CLs.
ToolsFramework:
- added new USceneSnappingManager::ExecuteSceneHitQuery API function, as well as accompanying FSceneHitQueryRequest/FSceneHitQueryResult structs
- added FSceneQueryVisibilityFilter struct which contains ComponentsToIgnore/InvisibleComponentsToInclude lists for snapping queries and provides shared IsVisible() implementation

ModelingComponents:
- add FLevelObjectsObserver, tracks Actors added/removed to a Level via various editor events
- add FSceneGeometrySpatialCache, maintains spatial data structures for known types of mesh-backed PrimitiveComponents, an octree based on their world-space bounding-boxes, and provides various spatial-query functions
- ModelingSceneSnappingManager now maintains a FSceneGeometrySpatialCache for a set of Actors/Components it is notified about, and updates the spatial cache if those components are modified or translated. Currently supports Volumes and DynamicMeshComponents.
- add ModelingSceneSnappingManager::ExecuteSceneHitQuery implementation, does raycasts into the world (for static mesh components) and FSceneGeometrySpatialCache for Volumes/DMCs
- modified ModelingSceneSnappingManager::ExecuteSceneSnapQuery to also do combined query against StaticMeshComponents via world-linetrace, and FSceneGeometrySpatialCache for Volumes/DMCs
- add ToolSceneQueriesUtil::FindNearestVisibleObjectHit variants that take a USceneSnappingManager or UInteractiveTool, and do queries via the SceneSnappingManger, instead of directly linetracing into a UWorld

ModleingToolsEditorMode:
- add FLevelObjectsObserver instance and use it to drive updates to active ModelingSceneSnappingManager

#rnx
#jira none
#preflight 61a664a09a226d9e823ad4c1

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 18339853 in //UE5/Release-5.0/... via CL 18339869
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18339891 by ryan schmidt in ue5-release-engine-test branch]
2021-12-01 11:15:01 -05:00
tyson brochu
f0753ca380 Don't snap the transform gizmo on mouse-down, wait for the drag event.
#jira UE-131786
#rnx
#rb ryan.schmidt semion.piskarev
#preflight 61a510e3ee100b68faa0517d

#ROBOMERGE-AUTHOR: tyson.brochu
#ROBOMERGE-SOURCE: CL 18312385 in //UE5/Release-5.0/... via CL 18312447
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18312473 by tyson brochu in ue5-release-engine-test branch]
2021-11-29 13:01:50 -05:00
ryan schmidt
f0828c943b Expose component/asset physics data via a ToolTarget interface
ToolsFramework:
- add PhysicsDataSource ToolTarget Interface, that exposes UBodySetup and CollisionDataProvider interfaces
ModelingComponents:
- Add tooltarget accessor/utility functions in UE::ToolTarget namespace.
- Implement PhysicsDataSource for StaticMeshComponentToolTarget and DynamicMeshCompnentToolTarget.
- Update FPhysicsDataCollection::InitializeFromComponent() to support DynamicMeshComponent and BrushComponent.
ModelingTools:
- update ExtractCollisionGeometryTool and PhysicsInspectorTool

#rb lonnie.li
#rnx
#jira none
#preflight 61a150004803629015d5a09b

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 18302043 in //UE5/Release-5.0/... via CL 18302049
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18302051 by ryan schmidt in ue5-release-engine-test branch]
2021-11-26 16:37:25 -05:00
lonnie li
2c15e236a7 InteractiveToolsFramework: Add UPrimitiveComponentToolTargetFactory.
#rb ryan.schmidt
#rnx
#jira none
#preflight 619e5291405273b2c37a20da

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 18283958 in //UE5/Release-5.0/... via CL 18283976
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18283991 by lonnie li in ue5-release-engine-test branch]
2021-11-24 10:32:04 -05:00
lonnie li
d1920e5a1f InteractiveToolsFramework: Consolidate InteractiveToolWithToolTargetsBuilder into InteractiveToolBuilder.h
#rb trivial
#rnx
#jira none
#preflight 619d57fd47752856c96fbe27

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 18275726 in //UE5/Release-5.0/... via CL 18275788
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18275806 by lonnie li in ue5-release-engine-test branch]
2021-11-23 16:50:40 -05:00
lonnie li
d1a488c78b InteractiveToolsFramework: Add UInteractiveToolWithToolTargetsBuilder intermediary class to define the common GetTargetRequirements() interface used across tools that use tool targets.
UVEditor: Remove unused GetTargetRequirements interface on UVEditor tools.

#rb michael.balzer
#rnx
#jira none
#preflight 619d09e93a721992674b369b

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 18271201 in //UE5/Release-5.0/... via CL 18271210
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18271215 by lonnie li in ue5-release-engine-test branch]
2021-11-23 11:49:25 -05:00
lonnie li
6584198283 InteractiveToolsFramework: Remove unnecessary target interface functions from MultiSelectionTool.
ModelingTools: Add UMultiSelectionMeshEditingTool to hold common interface requirements and functions that pertain to modeling mode MultiSelectionTools.

#rb semion.piskarev
#rnx
#jira none
#preflight 619c66d5c3287aab27e12c73

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 18269697 in //UE5/Release-5.0/... via CL 18269713
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18269717 by lonnie li in ue5-release-engine-test branch]
2021-11-23 09:42:40 -05:00
lonnie li
e08222e97a InteractiveToolFramework: Remove unnecessary tool target interface requirements for MeshSurfacePointTool.
ModelingTools: Add MeshSurfacePointMeshEditingToolBuilder with common mesh editing requirements.
Update MeshSurfacePointTool modeling tools to use MeshSurfacePointMeshEditingToolBuilder

#rb semion.piskarev
#rnx
#jira none
#preflight 6196d1bbb22f9e02b57b7438

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 18269233 in //UE5/Release-5.0/... via CL 18269267
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18269272 by lonnie li in ue5-release-engine-test branch]
2021-11-23 08:55:40 -05:00
jimmy andrews
ce576573e3 Check if ToolManager is null before accessing it to close all tools, to avoid crash if cleanup functions are called at the wrong time
#rb rinat.abdrashitov
#rnx
#preflight 6196c4d87c5a3437f360b1cc

#ROBOMERGE-AUTHOR: jimmy.andrews
#ROBOMERGE-SOURCE: CL 18244813 in //UE5/Release-5.0/... via CL 18244865
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18244903 by jimmy andrews in ue5-release-engine-test branch]
2021-11-18 17:07:17 -05:00
lonnie li
8af971ee51 InteractiveToolsFramework: Remove GetTargetRequirements from UInteractiveToolBuilder.
#rb rinat.abdrashitov
#rnx
#jira none
#preflight 619683b2c6791caccf5f1f8e

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 18240428 in //UE5/Release-5.0/... via CL 18240485
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18242887 by lonnie li in ue5-release-engine-test branch]
2021-11-18 15:21:56 -05:00
Marc Audy
0c3be2b6ad Merge Release-Engine-Staging to Test @ CL# 18240298
[CL 18241953 by Marc Audy in ue5-release-engine-test branch]
2021-11-18 14:37:34 -05:00
semion piskarev
d11d07621e MeshModelingTools: Make rotation not try to (incorrectly) snap in local mode.
#rb Jimmy.Andrews
#rnx
#jira UE-121825
#preflight 61795f285794a5000101deec

#ROBOMERGE-AUTHOR: semion.piskarev
#ROBOMERGE-SOURCE: CL 17946899 in //UE5/Release-5.0/... via CL 17946915
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v885-17909292)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17946930 by semion piskarev in ue5-release-engine-test branch]
2021-10-27 12:46:26 -04:00
lonnie li
36650db452 ModelingTools: Add support for "exclusive" tools that require accept/cancel by disabling other tools in the tool palette while exclusive tools are active.
#rb jimmy.andrews
#rnx
#jira none
#preflight 6171f109c7ff68000126d251

#ROBOMERGE-AUTHOR: lonnie.li
#ROBOMERGE-SOURCE: CL 17906165 in //UE5/Release-5.0/... via CL 17906177
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v883-17842818)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17906185 by lonnie li in ue5-release-engine-test branch]
2021-10-25 10:22:41 -04:00
ryan schmidt
35cb7ccf8f ToolsFramework: move support for scene location/angle snapping from ToolContextInterfaces/IContextQueriesAPI to USceneSnappingManager, a context store object that different modes may wish to implement.
USceneSnappingManager currently only provides the current snapping interface and a no-op implementation.
Move existing EdModeInteractiveToolsContext snapping implementation to ModelingSceneSnappingManager in ModelingComponents module.
Add IContextQueriesAPI::GetCurrentSnappingSettings to allow ITF Host to specify snapping settings, implement in EdModeInteractiveToolsContext.
Update affected Tools/Gizmos, register ModelingSceneSnappingManager instance in Modeling EdMode.

#rb semion.piskarev
#rnx
#jira none
#preflight 6171b7654d6efa00017a0450

#ROBOMERGE-OWNER: ryan.schmidt
#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17890511 in //UE5/Release-5.0/... via CL 17890705
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v883-17842818)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17890711 by ryan schmidt in ue5-release-engine-test branch]
2021-10-21 16:57:00 -04:00
ryan schmidt
44afe16b7d ToolsFramework: delete InteractiveToolStorableSelection/Subsystem
#rb none
#rnx
#preflight 616f9e71d48c460001af7038

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17872227 in //UE5/Release-5.0/... via CL 17872239
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v883-17842818)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17874121 by ryan schmidt in ue5-release-engine-test branch]
2021-10-20 11:50:53 -04:00
semion piskarev
9e335dbeee MeshModelingTools: Added ULocalInputBehaviorSource to allow tools to give different behaviors to separate input routers, and removed direct RegisterBehavior function from UInputRouter to force use of behavior sources. Added ULocalMouseHoverBehavior.
#rb Ryan.Schmidt, Rinat.Abdrashitov
#rnx
#jira none
#preflight 6168539c5b9a0b0001b013cd

#ROBOMERGE-AUTHOR: semion.piskarev
#ROBOMERGE-SOURCE: CL 17820738 in //UE5/Release-5.0/... via CL 17820748
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v881-17767770)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17820757 by semion piskarev in ue5-release-engine-test branch]
2021-10-14 15:32:28 -04:00
ryan schmidt
e2eabb50e4 ToolsFramework: Rename TransformGizmo.h to CombinedTransformGizmo.h
#rb none
#rnx
#jira none
#preflight 61552d2d549cbf0001b4dbab

#ushell-cherrypick of 17670370 by Ryan.Schmidt

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17676622 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v875-17642767)

[CL 17676632 by ryan schmidt in ue5-release-engine-test branch]
2021-09-30 08:27:39 -04:00
ryan schmidt
7fbc0f5361 ToolsFramework: rename modeling-mode UTransformGizmo to UCombinedTransformGizmo so that Editor can use this class name, update all usage
#rb none
#rnx
#jira none
#preflight 6154a3e0475173000105df9b

#ushell-cherrypick of 17666089 by Ryan.Schmidt

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17672826 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v875-17642767)

[CL 17672850 by ryan schmidt in ue5-release-engine-test branch]
2021-09-29 23:20:44 -04:00
andrew davidson
57beb335f2 Merging //UE5/Dev-LargeWorldCoordinates [at] 17581892 to //UE5/Main
#ROBOMERGE-AUTHOR: andrew.davidson
#ROBOMERGE-SOURCE: CL 17595295 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v871-17566257)

[CL 17595306 by andrew davidson in ue5-release-engine-test branch]
2021-09-22 10:01:48 -04:00
christina tempelaarl
8a958adec3 Move gizmo primitive objects and related classes to Experimental/EditorInteractiveToolsFramework directory for 5.0. They are currently only used by UEditorTransformGizmo and are still in active development.
#jira UE-126648
#rb ryan.schmidt
#preflight 61437544568b3a00012173e0

#ROBOMERGE-AUTHOR: christina.tempelaarl
#ROBOMERGE-SOURCE: CL 17541920 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)

[CL 17541963 by christina tempelaarl in ue5-release-engine-test branch]
2021-09-16 13:55:36 -04:00
semion piskarev
b6e050a125 MeshModelingTools: Added a CubeGrid tool, which allows for blocky boolean operations on an orientable power-of-two grid.
#rb Jimmy.Andrews, Matija Kecman
#rnx
#jira none
#preflight 6142002f8169560001cf8b91

#ROBOMERGE-AUTHOR: semion.piskarev
#ROBOMERGE-SOURCE: CL 17520534 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)

[CL 17520546 by semion piskarev in ue5-release-engine-test branch]
2021-09-15 11:24:36 -04:00
ryan schmidt
d3e9dcbc26 ModelingTools: replace StorableSelection mechanism with new UPersistentMeshSelection and UPersistentMeshSelectionManager context object.
- UPersistentMeshSelection is largely a port of UGroupTopologyStorableSelection, with the actual selection data moved to FGenericMeshSelection
- UPersistentMeshSelectionManager is meant to be used as a ContextObject in a ToolsContext, also contains utility functions to register/unregister/find context object
- Selection is no longer passed as part of FToolBuilderState. Instead Tools access the selection via ContextObject
- UPersistentMeshSelectionManager currently supports a single active selection. Selection changes are transacted via an FChange.
- When not inside a Tool, Selection is visualized with a pink border outline. Currently vertex selection is not visualized.
- Usage model is that on Tool Accept/Complete, prior to Tool Shutdown, any existing selection is cleared, and Tool may set a new Output selection which becomes the active selection
- StoredMeshSelectionUtil.h has utility functions to get current selection, set output selection, and clear it
- SingleSelectionMeshEditingTool already made input selection available to subclasses, port that capability to new architecture
- convert EditMeshPolygonsTool to be a SingleSelectionMeshEditingTool, use provided Input selection and set Output selection as appropriate

- ModelingToolsEditorMode clears active selection where appropriate, eg if selected object changes. However the behavior here will need further improvement, currently relies on questionable event handling from the TypedElement system

#rb semion.piskarev
#rnx
#jira none
#preflight 6136cbbfd9c85a0001fc3b56

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17441056 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)

[CL 17441061 by ryan schmidt in ue5-release-engine-test branch]
2021-09-06 23:05:07 -04:00
ryan schmidt
6ec31395ad ToolsFramework: add SingleClickOrDragBehavior, switches from click-behavior to drag-behavior if the mouse moves beyond a threshold distance
#rb semion.piskarev
#rnx
#jira none
#preflight 612e4f819db30900017e2fb9

#ROBOMERGE-SOURCE: CL 17372477 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17372502 by ryan schmidt in ue5-release-engine-test branch]
2021-08-31 13:22:13 -04:00
jimmy andrews
d72400a246 fix crash in case where transform gizmo somehow doesn't have an associated gizmo actor
#rnx
#rb lonnie.li
#preflight 612d1e3679d62b000163e6a8

#ROBOMERGE-SOURCE: CL 17358083 via CL 17358106
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17358129 by jimmy andrews in ue5-release-engine-test branch]
2021-08-30 16:21:43 -04:00
andrew davidson
ffa1d5ca26 LWC support for FQuat and FTransform
Merge Dev-LargeWorldCoordinates [at] 17289670

#preflight 6125fb6925057900014f2cd6

#ROBOMERGE-SOURCE: CL 17300515 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v861-17282326)

[CL 17300523 by andrew davidson in ue5-release-engine-test branch]
2021-08-25 06:26:44 -04:00