This commit is contained in:
2025-04-18 11:04:41 +08:00
parent e04b6ab0ca
commit 0469c98285
3 changed files with 13 additions and 62 deletions

View File

@@ -19,12 +19,6 @@
"Name": "FLESH",
"Type": "Runtime",
"LoadingPhase": "Default"
},
{
"Name": "FLESHEditor",
"Type": "Editor",
"LoadingPhase": "PostEngineInit",
"Enabled": false
}
],
"Plugins": [
@@ -34,11 +28,11 @@
},
{
"Name": "GeometryProcessing",
"Enabled": true
"Enabled": false
},
{
"Name": "GeometryScripting",
"Enabled": true
"Enabled": false
},
{
"Name": "ChaosCloth",

View File

@@ -11,7 +11,8 @@ public class FLESH : ModuleRules
PublicIncludePaths.AddRange(
new string[] {
// ... add public include paths required here ...
"$(EngineDir)/Plugins/Experimental/GeometryScripting/Source/GeometryScriptingCore/Public"
"$(EngineDir)/Plugins/Experimental/GeometryScripting/Source/GeometryScriptingCore/Public",
"$(EngineDir)/Plugins/Experimental/GeometryScripting/Source/GeometryScriptingEditor/Public"
}
);

View File

@@ -3,11 +3,13 @@
#include "Engine/SkeletalMesh.h"
#include "ProceduralMeshComponent.h"
#include "Materials/MaterialInterface.h"
#include "GeometryScriptingCore.h"
#include "GeometryScript/MeshBooleanFunctions.h"
#include "GeometryScript/MeshPrimitiveFunctions.h"
#include "DynamicMesh/DynamicMesh3.h"
#include "GeometryScript/MeshTransformFunctions.h"
// 暂时注释掉 GeometryScripting 相关头文件
// 当我们解决了基础模块的编译问题后再恢复
//#include "GeometryScriptingCore.h"
//#include "GeometryScript/MeshBooleanFunctions.h"
//#include "GeometryScript/MeshPrimitiveFunctions.h"
//#include "DynamicMesh/DynamicMesh3.h"
//#include "GeometryScript/MeshTransformFunctions.h"
// Constructor
UBooleanCutTool::UBooleanCutTool()
@@ -210,56 +212,10 @@ UMaterialInterface* UBooleanCutTool::GetCutMaterial() const
// Calculate intersection points between cut plane and mesh
TArray<FVector> UBooleanCutTool::CalculateIntersectionPoints(const TArray<FVector>& Vertices, const TArray<int32>& Indices, const FCutPlane& CutPlane)
{
// 暂时简化该方法的实现,以解决编译问题
TArray<FVector> IntersectionPoints;
// Check if index array is for triangles
if (Indices.Num() % 3 != 0)
{
return IntersectionPoints;
}
// Iterate through all triangles
for (int32 i = 0; i < Indices.Num(); i += 3)
{
// Get three vertices of the triangle
FVector V0 = Vertices[Indices[i]];
FVector V1 = Vertices[Indices[i + 1]];
FVector V2 = Vertices[Indices[i + 2]];
// Calculate signed distance from each vertex to the cut plane
float D0 = FVector::DotProduct(V0 - CutPlane.Location, CutPlane.Normal);
float D1 = FVector::DotProduct(V1 - CutPlane.Location, CutPlane.Normal);
float D2 = FVector::DotProduct(V2 - CutPlane.Location, CutPlane.Normal);
// Check if triangle intersects with cut plane
if ((D0 * D1 <= 0.0f) || (D0 * D2 <= 0.0f) || (D1 * D2 <= 0.0f))
{
// Calculate intersection points of edges with cut plane
if (D0 * D1 <= 0.0f)
{
// Edge V0-V1 intersects with cut plane
float T = D0 / (D0 - D1);
FVector IntersectionPoint = V0 + T * (V1 - V0);
IntersectionPoints.Add(IntersectionPoint);
}
if (D0 * D2 <= 0.0f)
{
// Edge V0-V2 intersects with cut plane
float T = D0 / (D0 - D2);
FVector IntersectionPoint = V0 + T * (V2 - V0);
IntersectionPoints.Add(IntersectionPoint);
}
if (D1 * D2 <= 0.0f)
{
// Edge V1-V2 intersects with cut plane
float T = D1 / (D1 - D2);
FVector IntersectionPoint = V1 + T * (V2 - V1);
IntersectionPoints.Add(IntersectionPoint);
}
}
}
// TODO: 当我们解决了 GeometryScripting 相关的问题后再恢复完整实现
return IntersectionPoints;
}