Commit Graph

6 Commits

Author SHA1 Message Date
ryan schmidt
5a61c6b75c GeometryProcessing: add MakeSelectAllSelection(), MakeSelectAllConnectedSelection(), MakeBoundaryConnectedSelection(), CombineSelectionInPlace() utility functions. Some of this is ported from geometry script selection code, which should be replaced with calls to these util functions (after testing). Minor necessarily additions to FGeometrySelection and FGeometrySelectionEditor.
#rb none
#preflight 63c02b711e5ee71dc373f692

[CL 23665656 by ryan schmidt in ue5-main branch]
2023-01-12 12:50:34 -05:00
ryan schmidt
74b3c229b3 ModelingMode: Mesh Element Selection system evolution.
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]
2022-12-01 16:11:52 -05:00
ryan schmidt
ffc51ff78c ModelingMode: new selection system improvements.
Introduced FGeometrySelectionHitQueryConfig (GeometrySelection.h), this provides information about the active selection mode. FGeometrySelectionEditor now tracks active FGeometrySelectionHitQueryConfig.
IGeometrySelector hit-testing/processing functions now take a struct FWorldRayQueryInfo that combines a FRay3d with FViewCameraState, to allow for (eg) snapping wrt the active camera/etc
Added FGeometrySelectionPreview, this is a utility subclass of FGeometrySelectionEditor that is used for selection-preview highlighting, relative to a base FGeometrySelectionEditor
Added IGeometrySelector::GetSelectionPreviewForRaycast() which is used to accumulate a preview of what might be selected in a FGeometrySelectionPreview. AccumulateSelectionElements() can also now accumulate 'preview' geometry, and FDynamicMeshSelector uses this to provide the edge-loop of a facegroup for it's preview (as providing all triangles is too expensive for hover highlighting on hires meshes).
Added support for hover-highlighting mechanic in UGeometrySelectionManager and UModelingSelectionInteraction
FDynamicMeshSelector now creates a GroupEdgeSegmentTree for polygroup edges. This allows for better selection interaction, eg no dependency on the edge-adjacent triangles.
Added AreSelectionsIdentical() function in GeometrySelectionUtil.h
#rb none
#preflight 638145b318176c67c2785280

[CL 23300258 by ryan schmidt in ue5-main branch]
2022-11-28 19:15:40 -05:00
Ryan Schmidt
5390a93054 GeometryScript: add types and functions for creating mesh "Selections", ie subsets defined by a list of element IDs
GeometryScriptSelectionTypes.h:
New type FGeometryScriptMeshSelection stores Vertex, Triangle, and Polygroup selections. Currently internally represented as a TSharedPtr<FGeometrySelection>, however this is not exposed to BP at all. FGeometryScriptMeshSelection is an opaque object w/ no exposed properties, and it's contents cannot be serialized, ie it is only usable as temporary data during active GeometryScript computations.

MeshSelectionFunctions.h: library of functions for creating/manipulating mesh selections
CreateSelectAllMeshSelection - create a Mesh Selection for all elements of Mesh
ConvertMeshSelection - convert a Mesh Selection to a different type
CombineMeshSelections - combine two Mesh Selections using set operations (union, difference, intersection)
ConvertIndexArrayToMeshSelection / ConvertIndexSetToMeshSelection - convert TArray<int> / TSet<int> to a Mesh Selection
ConvertIndexSetToMeshSelection - convert a Mesh Selection to TArray<int>
ConvertIndexListToMeshSelection / ConvertMeshSelectionToIndexList - convert between an Index List and a Mesh Selection
SelectMeshElementsInBox, SelectMeshElementsInSphere, SelectMeshElementsWithPlane - create a Mesh Selection of all elements "inside" a geometric element
SelectMeshElementsByNormalAngle  - create a Mesh Selection of all elements based on normal vector direction
SelectMeshElementsInsideMesh - create a Mesh Selection of all elements inside another mesh (with optional extra shell thickness)
ExpandMeshSelectionToConnected - expand a Mesh Selection to Connected regions (various connectivity criteria)
GetMeshSelectionInfo - get the type and size of a Mesh Selection
DebugPrintMeshSelection - print a Mesh Selection to the output log

MeshSelectionQueryFunctions.h: library of functions for doing mesh queries based on a selection
GetMeshSelectionBoundingBox - get the bounding box of a Mesh Selection
GetMeshSelectionBoundaryLoops - get the boundary loops (indices and 3D polylines) of a Mesh Selection

#rb none
#preflight 62d9b3f33122bf80ae0f9950

[CL 21210151 by Ryan Schmidt in ue5-main branch]
2022-07-21 17:16:52 -04:00
Ryan Schmidt
b0490ac3d4 remove export on enum types
#rb none
#preflight 62d24e992e3e5993c36f1c5d

[CL 21121626 by Ryan Schmidt in ue5-main branch]
2022-07-16 01:46:08 -04:00
Ryan Schmidt
986547914e Move GeometrySelection.h and GeometrySelectionUtil.h to GeometryProcessing plugin. Move types in GeometrySelection.h into UE::Geometry:: namespace. Fix up usage sites.
#rb none
#preflight 62d1c7222e3e5993c351a126

[CL 21117964 by Ryan Schmidt in ue5-main branch]
2022-07-15 17:53:52 -04:00