From 17190a20970c9f720242dd70bb5203c599b7b469 Mon Sep 17 00:00:00 2001
From: Timon Roemer <t.roemer@vis.rwth-aachen.de>
Date: Thu, 18 Jul 2024 17:36:04 +0200
Subject: [PATCH] Adds MagicWand

---
 Content/MagicWandMap.umap             | Bin 43101 -> 43795 bytes
 Source/MetaCastBachelor/MagicWand.cpp | 262 +++++++++++++++++---------
 Source/MetaCastBachelor/MagicWand.h   |   1 +
 3 files changed, 172 insertions(+), 91 deletions(-)

diff --git a/Content/MagicWandMap.umap b/Content/MagicWandMap.umap
index 432e39ca2127b23880bf35d2220201a73ca86de3..1db0e16a514f1f959cebb98ac2a2e703aacb7123 100644
GIT binary patch
literal 43795
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
aHaQOpJrFLtXA#J9YQH9EKP-q3QV#%6&NayZ

literal 43101
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
JHiQXM4**AMl}!Ku

diff --git a/Source/MetaCastBachelor/MagicWand.cpp b/Source/MetaCastBachelor/MagicWand.cpp
index 360602a..8541999 100644
--- a/Source/MetaCastBachelor/MagicWand.cpp
+++ b/Source/MetaCastBachelor/MagicWand.cpp
@@ -39,91 +39,8 @@ void UMagicWand::TickComponent(float DeltaTime, ELevelTick TickType, FActorCompo
 	AccumulatedTime += DeltaTime;
 
 	ProceduralMesh->SetVisibility(Select);
-
-	if (Select)
-	{
-		PerformMagicWandSelection(SelectionObject->GetComponentLocation());
-	}
 }
 
-void UMagicWand::PerformMagicWandSelection(const FVector& InputPosition)
-{
-    if (MyPointCloud->SelectionFlags.Num() != MyPointCloud->PositionVectors.Num())
-    {
-        UE_LOG(LogTemp, Warning, TEXT("PerformMagicWandSelection: Positions and SelectionFlags array sizes do not match."));
-        return;
-    }
-
-    // Find the closest point to the input position as the seed
-    int32 SeedIndex = INDEX_NONE;
-    float MinDistance = FLT_MAX;
-
-    for (int32 i = 0; i < MyPointCloud->PositionVectors.Num(); i++)
-    {
-        FVector CurrentPoint = MyPointCloud->PositionVectors[i];
-        CurrentPoint = MyPointCloud->PointCloudVisualizer->GetComponentTransform().TransformPosition(CurrentPoint);
-
-        const float Distance = FVector::Dist(InputPosition, CurrentPoint);
-        if (Distance < MinDistance)
-        {
-            MinDistance = Distance;
-            SeedIndex = i;
-        }
-    }
-
-    if (SeedIndex != INDEX_NONE)
-    {
-        // Clear previous selection
-        SelectedClusterIndices.Empty();
-        for (bool& Flag : MyPointCloud->SelectionFlags)
-        {
-            Flag = false;
-        }
-
-        // Expand selection from the seed
-        ExpandSelection(SeedIndex);
-
-    	for (int32 i = 0; i < SelectedClusterIndices.Num(); i++)
-        {
-	        const int Index = SelectedClusterIndices[i];
-            MyPointCloud->SelectionFlags[Index] = true;
-        }
-    }
-}
-
-void UMagicWand::ExpandSelection(const int32 SeedIndex)
-{
-    TQueue<int32> ToProcess;
-    ToProcess.Enqueue(SeedIndex);
-    SelectedClusterIndices.Add(SeedIndex);
-    MyPointCloud->SelectionFlags[SeedIndex] = true;
-
-    while (!ToProcess.IsEmpty())
-    {
-        int32 CurrentIndex;
-        ToProcess.Dequeue(CurrentIndex);
-        FVector CurrentPoint = MyPointCloud->PositionVectors[CurrentIndex];
-        CurrentPoint = MyPointCloud->PointCloudVisualizer->GetComponentTransform().TransformPosition(CurrentPoint);
-
-        for (int32 i = 0; i < MyPointCloud->PositionVectors.Num(); i++)
-        {
-            if (!MyPointCloud->SelectionFlags[i])
-            {
-                FVector Point = MyPointCloud->PositionVectors[i];
-                Point = MyPointCloud->PointCloudVisualizer->GetComponentTransform().TransformPosition(Point);
-
-                if (FVector::Dist(CurrentPoint, Point) <= ProximityThreshold)
-                {
-                    ToProcess.Enqueue(i);
-                    SelectedClusterIndices.Add(i);
-                    MyPointCloud->SelectionFlags[i] = true;
-                }
-            }
-        }
-    }
-}
-
-
 void UMagicWand::EraseParticles(const FVector& InputPosition)
 {
 	
@@ -146,19 +63,27 @@ void UMagicWand::HandleMetaSelectReleased(const FInputActionInstance& Instance)
 void UMagicWand::HandleMetaSelectPressed(const FInputActionInstance& Instance)
 {
 	Super::HandleMetaSelectPressed(Instance);
-
-	UE_LOG(LogTemp, Warning, TEXT("PerformMagicWandSelection"));
+	
 	InitMagicWandSelection();
 }
 
+void UMagicWand::HandleMetaEraseReleased(const FInputActionInstance& Instance)
+{
+	Super::HandleMetaEraseReleased(Instance);
+
+	//deselect all particles
+	for (int32 i = 0; i < MyPointCloud->SelectionFlags.Num(); ++i)
+	{
+		MyPointCloud->SelectionFlags[i] = false;
+	}
+}
+
 void UMagicWand::InitMagicWandSelection()
 {	
 	const FVector SelectionWorldPosition = SelectionObject->GetComponentLocation();
 	MyDensityField = MyPointCloud->MyDensityField;
 
 	// Convert the world position of the selection object to the local position relative to the point cloud
-	const FVector SelectionLocalPosition = MyPointCloud->PointCloudVisualizer->GetComponentTransform().InverseTransformPosition(SelectionWorldPosition);
-	
 	ProceduralMesh->ClearAllMeshSections();
 	World = GetWorld();
 	
@@ -171,16 +96,171 @@ void UMagicWand::SelectParticles(const FVector& InputPosition)
 	if (AccumulatedTime >=  1 / EvaluationsPerSecond)
 	{
 		AccumulatedTime = -10000;
-
-		AsyncTask(ENamedThreads::AnyBackgroundThreadNormalTask, [this]()
+		
+		AsyncTask(ENamedThreads::Type::AnyBackgroundHiPriTask, [this]()
 		{
 			const FVector SelectionWorldPosition = SelectionObject->GetComponentLocation();
-			
-			
+			const FVector SelectionLocalPosition = MyPointCloud->PointCloudVisualizer->GetComponentTransform().InverseTransformPosition(SelectionWorldPosition);
+
+			PerformMagicWandSelection(SelectionLocalPosition);
+
+			UE_LOG(LogTemp, Warning, TEXT("Calculations done!"));
 		});
+		
 	}
 }
 
+void UMagicWand::PerformMagicWandSelection(const FVector& InputPosition)
+{
+    if (MyPointCloud->SelectionFlags.Num() != MyPointCloud->PositionVectors.Num())
+    {
+        UE_LOG(LogTemp, Warning, TEXT("PerformMagicWandSelection: Positions and SelectionFlags array sizes do not match."));
+        return;
+    }
+
+	//UE_LOG(LogTemp, Warning, TEXT("Looking for Seed Index:"));
+    // Find the closest point to the input position as the seed
+    const int32 InputVoxelIndex = MyDensityField->WorldPositionToIndex(InputPosition);
+    TArray<int32> Neighbors = MyDensityField->IndexToVoxelNeighbors(InputVoxelIndex);
+	Neighbors.Add(InputVoxelIndex);
+    int32 SeedIndex = INDEX_NONE;
+    float MinDistance = FLT_MAX;
+
+    for (const int CurrentNeighborIndex : Neighbors)
+    {
+	    TArray<int32> PointIndices = MyDensityField->VoxelPointLookupTable->GetPointsInVoxel(CurrentNeighborIndex);
+
+    	for(const int32 CurrentIndex : PointIndices)
+    	{
+    		FVector CurrentPosition = MyDensityField->IndexToVoxelPosition(CurrentIndex);
+    		const float Distance = FVector::Dist(InputPosition, CurrentPosition);
+    		if (Distance < MinDistance)
+    		{
+    			MinDistance = Distance;
+    			SeedIndex = CurrentIndex;
+    		}
+    	}
+    }
+
+    if (SeedIndex != INDEX_NONE)
+    {
+    	//const FVector WorldPos = MyPointCloud->PointCloudVisualizer->GetComponentTransform().TransformPosition(MyPointCloud->PositionVectors[SeedIndex]);
+		//DrawDebugSphere(World, WorldPos, 0.1f, 20, FColor::Green, false, 1, 0, 1.0f);
+    	
+        //Expand selection from the seed
+        ExpandSelection(SeedIndex);
+    }
+
+	
+}
+
+void UMagicWand::ExpandSelection(const int32 SeedIndex)
+{
+    TQueue<int32> ToProcess;
+    ToProcess.Enqueue(SeedIndex);
+	
+    SelectedClusterIndices.Add(SeedIndex);
+    MyPointCloud->SelectionFlags[SeedIndex] = true;
+	
+    while (!ToProcess.IsEmpty())
+    {
+        int32 CurrentQueuePointIndex;
+        ToProcess.Dequeue(CurrentQueuePointIndex);
+
+        FVector CurrentQueuePointPosition = MyPointCloud->PositionVectors[CurrentQueuePointIndex];
+
+    	const int32 CurrentVoxelQueueIndex = MyDensityField->WorldPositionToIndex(CurrentQueuePointPosition);
+
+    	/*
+    	TArray<int32> Neighbors = MyDensityField->IndexToVoxelNeighbors(CurrentVoxelQueueIndex);
+    	Neighbors.Add(CurrentVoxelQueueIndex);
+    	
+    	for (const int CurrentVoxelNeighborIndex : Neighbors)
+    	{    		
+    		TArray<int32> PointIndices = MyDensityField->VoxelPointLookupTable->GetPointsInVoxel(CurrentVoxelNeighborIndex);
+
+    		for(const int32 CurrentPointComparisonIndex : PointIndices)
+    		{
+    			if(MyPointCloud->SelectionFlags[CurrentPointComparisonIndex])
+    			{
+    				continue;
+    			}
+    			FVector CurrentComparisonPosition = MyDensityField->IndexToVoxelPosition(CurrentPointComparisonIndex);
+
+    			if (FVector::Dist(CurrentQueuePointPosition, CurrentComparisonPosition) <= ProximityThreshold)
+    			{
+    				ToProcess.Enqueue(CurrentPointComparisonIndex);
+    				SelectedClusterIndices.Add(CurrentPointComparisonIndex);
+    				MyPointCloud->SelectionFlags[CurrentPointComparisonIndex] = true;
+    			}
+    		}
+    	}*/
+		// -------------------
+
+    	const int32 StartX = FMath::Max(0, FMath::FloorToInt((CurrentQueuePointPosition.X - ProximityThreshold - MyPointCloud->MinBounds.X) / MyDensityField->GetStep().X));
+    	const int32 EndX = FMath::Min(MyDensityField->GetXNum() - 1, FMath::FloorToInt((CurrentQueuePointPosition.X + ProximityThreshold - MyPointCloud->MinBounds.X) / MyDensityField->GetStep().X));
+    	const int32 StartY = FMath::Max(0, FMath::FloorToInt((CurrentQueuePointPosition.Y - ProximityThreshold - MyPointCloud->MinBounds.Y) / MyDensityField->GetStep().Y));
+    	const int32 EndY = FMath::Min(MyDensityField->GetYNum() - 1, FMath::FloorToInt((CurrentQueuePointPosition.Y + ProximityThreshold - MyPointCloud->MinBounds.Y) / MyDensityField->GetStep().Y));
+    	const int32 StartZ = FMath::Max(0, FMath::FloorToInt((CurrentQueuePointPosition.Z - ProximityThreshold - MyPointCloud->MinBounds.Z) / MyDensityField->GetStep().Z));
+    	const int32 EndZ = FMath::Min(MyDensityField->GetZNum() - 1, FMath::FloorToInt((CurrentQueuePointPosition.Z + ProximityThreshold - MyPointCloud->MinBounds.Z) / MyDensityField->GetStep().Z));
+
+
+    	/*
+    	UE_LOG(LogTemp, Warning, TEXT("CurrentQueuePointPosition: %s"), *CurrentQueuePointPosition.ToString());
+    	UE_LOG(LogTemp, Warning, TEXT("StartX: %d"), StartX);
+    	UE_LOG(LogTemp, Warning, TEXT("EndX: %d"), EndX);
+    	UE_LOG(LogTemp, Warning, TEXT("StartY: %d"), StartY);
+    	UE_LOG(LogTemp, Warning, TEXT("EndY: %d"), EndY);
+    	UE_LOG(LogTemp, Warning, TEXT("StartZ: %d"), StartZ);
+    	UE_LOG(LogTemp, Warning, TEXT("EndZ: %d"), EndZ);*/
+
+    	ParallelFor(EndZ - StartZ + 1, [&](const int32 ZOffset) {
+		    const int32 Z = StartZ + ZOffset;
+			
+    		for (int32 Y = StartY; Y <= EndY; ++Y)
+    		{
+				for (int32 X = StartX; X <= EndX; ++X)
+				{
+					const int32 CurrentVoxelComparisonIndex = MyDensityField->GridPositionToIndex(X, Y, Z);
+
+					if(!MyDensityField->IsValidIndex(CurrentVoxelComparisonIndex))
+					{
+						continue;
+					}
+
+					TArray<int32> PointIndices = MyDensityField->VoxelPointLookupTable->GetPointsInVoxel(CurrentVoxelComparisonIndex);
+
+					for(const int32 CurrentPointComparisonIndex : PointIndices)
+					{
+						if(MyPointCloud->SelectionFlags[CurrentPointComparisonIndex])
+						{
+							continue;
+						}
+    					
+						FVector CurrentComparisonPosition = MyPointCloud->PositionVectors[CurrentPointComparisonIndex];
+						const double Distance = FVector::Distance(CurrentQueuePointPosition, CurrentComparisonPosition);
+
+						//UE_LOG(LogTemp, Warning, TEXT("CurrentQueuePointPosition: %s"), *CurrentQueuePointPosition.ToString());
+						//UE_LOG(LogTemp, Warning, TEXT("CurrentComparisonPosition: %s"), *CurrentComparisonPosition.ToString());
+
+						//UE_LOG(LogTemp, Warning, TEXT("Distance: %f"), Distance);
+
+						if (Distance <= ProximityThreshold)
+						{
+							ToProcess.Enqueue(CurrentPointComparisonIndex);
+							SelectedClusterIndices.Add(CurrentPointComparisonIndex);
+							MyPointCloud->SelectionFlags[CurrentPointComparisonIndex] = true;
+						}
+					}
+				}
+			}
+		});
+    	
+    }
+
+	AccumulatedTime = 0;
+}
+
 void UMagicWand::GenerateVoxelMeshWithCubes(const TArray<int32> Voxels) const
 {
 	TArray<FVector> Vertices;
diff --git a/Source/MetaCastBachelor/MagicWand.h b/Source/MetaCastBachelor/MagicWand.h
index f20239e..a59cde4 100644
--- a/Source/MetaCastBachelor/MagicWand.h
+++ b/Source/MetaCastBachelor/MagicWand.h
@@ -46,6 +46,7 @@ public:
 
 	virtual void HandleMetaSelectReleased(const FInputActionInstance& Instance) override;
 	virtual void HandleMetaSelectPressed(const FInputActionInstance& Instance) override;
+	virtual void HandleMetaEraseReleased(const FInputActionInstance& Instance) override;
 	void InitMagicWandSelection();
 
 	void GenerateVoxelMeshWithCubes(const TArray<int32> Voxels) const;
-- 
GitLab