Files
UnrealEngine/Engine/Source/Editor/UnrealEd/Public/SnappingUtils.h
2025-05-18 13:04:45 +08:00

132 lines
4.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
class FEditorViewportSnapping;
class FLevelEditorViewportClient;
class FPrimitiveDrawInterface;
class FSceneView;
class FSnappingUtils
{
public:
/**
* @return true if snapping (translation) to the grid is enabled
*/
static UNREALED_API bool IsSnapToGridEnabled();
/**
* @return true if orientation snapping is enabled
*/
static UNREALED_API bool IsRotationSnapEnabled();
/**
* @return true if orientation snapping is enabled
*/
static UNREALED_API bool IsScaleSnapEnabled();
/**
* @return true if snapping actors to other actors is enabled
*/
static UNREALED_API bool IsSnapToActorEnabled();
/** Set user setting for actor snap. */
static UNREALED_API void EnableActorSnap(bool bEnable);
/** Access user setting for distance. Fractional 0.0->100.0 */
static UNREALED_API float GetActorSnapDistance(bool bScalar = false);
/** Set user setting for distance. Fractional 0.0->100.0 */
static UNREALED_API void SetActorSnapDistance(float Distance);
/**
* Attempts to snap the selected actors to the nearest other actor
*
* @param DragDelta The current world space drag amount
* @param ViewportClient The viewport client the user is dragging in
*/
static UNREALED_API bool SnapActorsToNearestActor( FVector& DragDelta, FLevelEditorViewportClient* ViewportClient );
/**
* Snaps actors to the nearest vertex on another actor
*
* @param DragDelta The current world space drag amount that will be modified to account for snapping to a vertex
* @param ViewportClient The viewport client the user is dragging in
* @return true if anything was snapped
*/
static UNREALED_API bool SnapDraggedActorsToNearestVertex( FVector& DragDelta, FLevelEditorViewportClient* ViewportClient );
/**
* Snaps a delta drag movement to the nearest vertex
*
* @param BaseLocation Location that should be snapped before any drag is applied
* @param DragDelta Delta drag movement that should be snapped. This value will be updated such that BaseLocation+DragDelta is the nearest snapped verted
* @param ViewportClient The viewport client being dragged in.
* @return true if anything was snapped
*/
static UNREALED_API bool SnapDragLocationToNearestVertex( const FVector& BaseLocation, FVector& DragDelta, FLevelEditorViewportClient* ViewportClient, bool bIsPivot = false );
/**
* Snaps a location to the nearest vertex
*
* @param Location The location to snap
* @param MouseLocation The current 2d mouse location. Vertices closer to the mouse are favored
* @param ViewportClient The viewport client being used
* @param OutVertexNormal The normal at the closest vertex
* @return true if anything was snapped
*/
static UNREALED_API bool SnapLocationToNearestVertex( FVector& Location, const FVector2D& MouseLocation, FLevelEditorViewportClient* ViewportClient, FVector& OutVertexNormal, bool bDrawVertHelpers );
/**
* Snaps a scale value to the scale grid
*
* @param Point The point to snap. This value will be modified to account for snapping
* @param GridBase Base grid offset
*/
static UNREALED_API void SnapScale( FVector& Point, const FVector& GridBase );
/**
* Snaps a point value to the positional grid
*
* @param Point The point to snap. This value will be modified to account for snapping
* @param GridBase Base grid offset
*/
static UNREALED_API void SnapPointToGrid( FVector& Point, const FVector& GridBase );
/**
* Snaps a rotator to the rotational grid
*
* @param Rotation The rotator to snap. This value will be modified to account for snapping
*/
static UNREALED_API void SnapRotatorToGrid( FRotator& Rotation );
static UNREALED_API bool SnapToBSPVertex( FVector& Location, FVector GridBase, FRotator& Rotation );
/**
* Clears all vertices being drawn to help a user snap
*
* @param bClearImmediatley true to clear helpers without fading them out
*/
static UNREALED_API void ClearSnappingHelpers( bool bClearImmediately = false);
/**
* Draws snapping helpers
*
* @param View The current view of the scene
* @param PDI Drawing interface
*/
static UNREALED_API void DrawSnappingHelpers(const FSceneView* View,FPrimitiveDrawInterface* PDI);
/**
* Initialize the snapping system
*/
static UNREALED_API void InitEditorSnappingTools();
private:
/** Built-in editor snap implementation */
static TSharedPtr<class FEditorViewportSnapping> EditorViewportSnapper;
};