Commit Graph

32 Commits

Author SHA1 Message Date
daren cheng
99592a0721 Widget Tool Palette Prototype.
Add Marquee & create widget tools.
Add framework for widget-based tools.

#preflight 62202c37123d7a7f69141278
#jira UETOOL-4564 UETOOL-4565
#rb Vincent.Gauthier

[CL 19248542 by daren cheng in ue5-main branch]
2022-03-03 14:01:42 -05:00
michael balzer
c823f8af63 InteractiveToolsFramework: Add tooltips to EToolContextCoordinateSystem values
#preflight none
#rb trivial

#ROBOMERGE-AUTHOR: michael.balzer
#ROBOMERGE-SOURCE: CL 18729346 in //UE5/Release-5.0/... via CL 18729356 via CL 18729458
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)

[CL 18729476 by michael balzer in ue5-main branch]
2022-01-25 17:46:47 -05:00
nathan mitchell
abbbcc2387 ModelingTools: Fix issue with PolyExt Tool failing to register correct initial point placement when snapping modes are disabled. Increased clarity around snapping parameter comments.
#rb Ryan.Schmidt
#rnx
#jira UE-138989
#preflight 61e71dc2b56c33b8ecf48ef3

#ROBOMERGE-AUTHOR: nathan.mitchell
#ROBOMERGE-SOURCE: CL 18726302 in //UE5/Release-5.0/... via CL 18726316 via CL 18726495
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)

[CL 18726503 by nathan mitchell in ue5-main branch]
2022-01-25 14:29:18 -05:00
nathan mitchell
d817f21d71 Modeling Tools: Provide support for the IMeshDescriptionProvider to provide "empty" MeshDescriptions, for cases where such instances are desired such as changing topology. This change creates extendable infrastructure parallel to the existing MeshDescription provider implementations so clients of the empty MeshDescription instances do not need localized specialization based on ToolTarget subclasses.
This change addresses the errors found with applying certain modeling tools to skeletal meshes due to the old code not using the appropriately setup MeshDescription for skeletal meshes.

#rb Ryan.Schmidt
#rnx
#jira UE-138420
#preflight 61d8dbc4430de36baa5fd904

#ROBOMERGE-AUTHOR: nathan.mitchell
#ROBOMERGE-SOURCE: CL 18588220 in //UE5/Release-5.0/... via CL 18588227 via CL 18588243
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Test -> Main) (v899-18417669)

[CL 18588249 by nathan mitchell in ue5-main branch]
2022-01-12 14:53:07 -05:00
ryan schmidt
27ba71e214 ModelingTools: Add support for reading and writing to a specific LOD via IMeshDescriptionProvider/Committer. Refactor various other aspects of MeshDescription access. Update MeshTransferTool to be able to transfer from and to specific LODs.
Add new MeshTargetInterfaceTypes.h file, move EStaticMeshEditingLOD there and rename to EMeshLODIdentifier. Add FGetMeshParameters and FCommitMeshParameters types.

IMeshDescriptionProvider::GetMeshDescription() now takes FGetMeshParameters to optionally specify LOD.
Added IMeshDescriptionProvider::GetMeshDescriptionCopy() function, to handle copy-case.
removed IMeshDescriptionProvider::CalculateAutoGeneratedAttributes(). This was only being used to force Tangents computation, which can now be done via GetMeshDescriptionCopy() and FGetMeshParameters.bWantMeshTangents option

IMeshDescriptionCommitter commit functions now take a FCommitMeshParameters to optionally specify target LOD.

StaticMeshComponentToolTarget::GetMeshDescriptionCopy() added, optionally computes auto-generated MeshDescription attributes on the copy

StaticMesh(Component)ToolTarget updated to support FCommitMeshParameters target-LOD.

SkeletalMesh, Volume, and DynamicMesh ToolTargets updated for new APIs but do not currently support any of the new LOD parameters. These should never be called w/ LOD parameters in the current codebase, ensures added to catch any errors (they would be non-fatal).

UE::ToolTarget::GetMeshDescription() and GetMeshDescriptionCopy() in now take FGetMeshParameters argument.
Removed bWantMeshTangents param to GetMeshDescriptionCopy(), now done via FGetMeshParameters. Updated call sites.

TransferMeshesTool now supports specifying read and write LOD (numbered or HiRes) for StaticMeshComponent source/target, via above functions.
TransferMeshesTool can now also target a new LOD in a StaticMeshComponent, index is 1 larger than current maximum source LOD.

#rb lonnie.li, rinat.abdrashitov
#rnx
#jira none
#preflight 61b8d56b2e65a1df046aa5e1

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 18461686 in //UE5/Release-5.0/... via CL 18461725
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669)

[CL 18461778 by ryan schmidt in ue5-release-engine-test branch]
2021-12-14 18:40:01 -05:00
brooke hubert
f149e45233 Fixing a bug where creating temporary actors via typed elements would not be able to delete them again in single place tool
#preflight 61b22ba9c674eb9fc9d8ea9a
#Jira None
#rb julien.stjean ryan.schmidt

#ROBOMERGE-AUTHOR: brooke.hubert
#ROBOMERGE-SOURCE: CL 18420733 in //UE5/Release-5.0/... via CL 18422600
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v897-18405271)

[CL 18422868 by brooke hubert in ue5-release-engine-test branch]
2021-12-09 14:51:37 -05:00
ryan schmidt
22c851a546 ModelingTools: add alpha mask visualization to brush stamp indicator in VertexSculptTool
#rb none
#rnx
#preflight 61ae4b412b3384289ad2048b

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

[CL 18387286 by ryan schmidt in ue5-release-engine-test branch]
2021-12-06 15:44:16 -05:00
ryan schmidt
17cefb1dd1 ModelingTools:
Reduce surface area of MeshDescriptionProvider/Committer, replace with UE::ToolTarget:: calls where possible.

Add new UE::ToolTarget::CommitMeshDescriptionUpdateViaDynamicMesh() function. This is being used for now to avoid potential regressions as UE::ToolTarget::CommitDynamicMeshUpdate will preferentially use DynamicMeshCommitter, and I am not certain it is functionally equivalent in all cases.
Add new UE::ToolTarget::CommitDynamicMeshNormalsUpdate(), similar to existing UV version
Add new Move-variant of UE::ToolTarget::CommitMeshDescriptionUpdate(), uses new Move-variant of IMeshDescriptionCommitter::CommitMeshDescription.
Make existing IMeshDescriptionCommitter::CommitMeshDescription callback interface protected, to prevent usage of this function at public API level (will be removed in future).

Tool updates should not change, just using cleaner APIs.
EditNormalsTool now uses CommitDynamicMeshNormalsUpdate(), which does go via DynamicMeshCommitter preferentially, where it previously went via MeshDescriptionCommitter. In light testing the results appear equivalent.
AttributeEditorTool now operates on MeshDescription copies in various update functions. These are not performance-critical.

#rb rinat.abdrashitov
#rnx
#preflight 61ae45998358693a22c28d1b

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

[CL 18384373 by ryan schmidt in ue5-release-engine-test branch]
2021-12-06 12:42:19 -05:00
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
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
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
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