132 lines
3.4 KiB
C++
132 lines
3.4 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Toolkits/AssetEditorToolkit.h"
|
|
#include "EditorUndoClient.h"
|
|
#include "BooleanCutTool.h"
|
|
#include "AnatomicalLayerSystem.h"
|
|
|
|
class USkeletalMesh;
|
|
class SDockTab;
|
|
class IDetailsView;
|
|
class SBorder;
|
|
|
|
/**
|
|
* Dismemberment System Editor
|
|
* Provides real-time boolean cutting and multi-layer system editing functionality
|
|
* Allows users to create and edit anatomical layer structures for skeletal meshes
|
|
* Supports physics settings and effect previews
|
|
*/
|
|
class FDismembermentEditor : public FAssetEditorToolkit, public FEditorUndoClient
|
|
{
|
|
public:
|
|
/** Constructor */
|
|
FDismembermentEditor();
|
|
|
|
/** Destructor */
|
|
virtual ~FDismembermentEditor();
|
|
|
|
/**
|
|
* Initialize the dismemberment editor
|
|
* @param Mode - Toolkit mode
|
|
* @param InitToolkitHost - Toolkit host
|
|
* @param InSkeletalMesh - Skeletal mesh to edit
|
|
*/
|
|
void InitDismembermentEditor(const EToolkitMode::Type Mode, const TSharedPtr<IToolkitHost>& InitToolkitHost, USkeletalMesh* InSkeletalMesh);
|
|
|
|
/** Get toolkit name */
|
|
virtual FName GetToolkitFName() const override;
|
|
|
|
/** Get base toolkit name */
|
|
virtual FText GetBaseToolkitName() const override;
|
|
|
|
/** Get world centric tab prefix */
|
|
virtual FString GetWorldCentricTabPrefix() const override;
|
|
|
|
/** Get world centric tab color scale */
|
|
virtual FLinearColor GetWorldCentricTabColorScale() const override;
|
|
|
|
/** Post undo handler */
|
|
virtual void PostUndo(bool bSuccess) override;
|
|
|
|
/** Post redo handler */
|
|
virtual void PostRedo(bool bSuccess) override;
|
|
|
|
/** Get current skeletal mesh being edited */
|
|
USkeletalMesh* GetSkeletalMesh() const { return SkeletalMesh; }
|
|
|
|
private:
|
|
/** Create editor layout */
|
|
void CreateEditorLayout();
|
|
|
|
/** Create editor toolbar */
|
|
void CreateEditorToolbar();
|
|
|
|
/** Register tab spawners */
|
|
virtual void RegisterTabSpawners(const TSharedRef<FTabManager>& InTabManager) override;
|
|
|
|
/** Unregister tab spawners */
|
|
virtual void UnregisterTabSpawners(const TSharedRef<FTabManager>& InTabManager) override;
|
|
|
|
/** Spawn viewport tab */
|
|
TSharedRef<SDockTab> SpawnTab_Viewport(const FSpawnTabArgs& Args);
|
|
|
|
/** Spawn details tab */
|
|
TSharedRef<SDockTab> SpawnTab_Details(const FSpawnTabArgs& Args);
|
|
|
|
/** Spawn layer system tab */
|
|
TSharedRef<SDockTab> SpawnTab_LayerSystem(const FSpawnTabArgs& Args);
|
|
|
|
/** Spawn physics settings tab */
|
|
TSharedRef<SDockTab> SpawnTab_PhysicsSettings(const FSpawnTabArgs& Args);
|
|
|
|
/** Perform boolean cut operation */
|
|
void PerformBooleanCut();
|
|
|
|
/** Add new anatomical layer */
|
|
void AddNewLayer();
|
|
|
|
/** Save edits */
|
|
void SaveEdits();
|
|
|
|
/** Preview effects */
|
|
void PreviewEffects();
|
|
|
|
private:
|
|
/** Current skeletal mesh being edited */
|
|
USkeletalMesh* SkeletalMesh;
|
|
|
|
/** Viewport widget */
|
|
TSharedPtr<SBorder> ViewportWidget;
|
|
|
|
/** Details widget */
|
|
TSharedPtr<IDetailsView> DetailsWidget;
|
|
|
|
/** Layer system widget */
|
|
TSharedPtr<SBorder> LayerSystemWidget;
|
|
|
|
/** Physics settings widget */
|
|
TSharedPtr<SBorder> PhysicsSettingsWidget;
|
|
|
|
/** Boolean cut tool */
|
|
UBooleanCutTool* BooleanCutTool;
|
|
|
|
/** Anatomical layer system */
|
|
UAnatomicalLayerSystem* LayerSystem;
|
|
|
|
/** Current cut plane */
|
|
FCutPlane CurrentCutPlane;
|
|
|
|
/** Selected bone name for cutting */
|
|
FName SelectedBoneName;
|
|
|
|
/** Flag to create cap mesh */
|
|
bool bCreateCapMesh;
|
|
|
|
/** Tab ID constants */
|
|
static const FName ViewportTabId;
|
|
static const FName DetailsTabId;
|
|
static const FName LayerSystemTabId;
|
|
static const FName PhysicsSettingsTabId;
|
|
};
|