From 3efe185f32907636cad77ceb968b6debd07cea8f Mon Sep 17 00:00:00 2001 From: Andy Styles Date: Thu, 23 Mar 2023 17:44:42 -0400 Subject: [PATCH] "Replace Previous Bake" will now remove all instances when the Foliage Type is specified for an instancer. --- .../Private/HoudiniFoliageTools.cpp | 18 ++++++++++++++++++ .../Private/HoudiniFoliageTools.h | 3 +++ .../Private/HoudiniEngineBakeUtils.cpp | 4 ++++ 3 files changed, 25 insertions(+) diff --git a/Source/HoudiniEngine/Private/HoudiniFoliageTools.cpp b/Source/HoudiniEngine/Private/HoudiniFoliageTools.cpp index a7eef25395..1ad77a758b 100644 --- a/Source/HoudiniEngine/Private/HoudiniFoliageTools.cpp +++ b/Source/HoudiniEngine/Private/HoudiniFoliageTools.cpp @@ -226,3 +226,21 @@ FHoudiniFoliageTools::RemoveFoliageTypeFromWorld(UWorld* World, UFoliageType* Fo } +void FHoudiniFoliageTools::RemoveInstancesFromWorld(UWorld* World, UFoliageType* FoliageType) +{ + TArray FoliageInfos = FHoudiniFoliageTools::GetAllFoliageInfo(World, FoliageType); + for (auto& FoliageInfo : FoliageInfos) + { + if (FoliageInfo != nullptr) + { + TArray InstancesToRemove; + InstancesToRemove.SetNum(FoliageInfo->Instances.Num()); + for(int Index = 0; Index < FoliageInfo->Instances.Num(); Index++) + { + InstancesToRemove[Index] = Index; + } + FoliageInfo->RemoveInstances(InstancesToRemove, true); + } + } +} + diff --git a/Source/HoudiniEngine/Private/HoudiniFoliageTools.h b/Source/HoudiniEngine/Private/HoudiniFoliageTools.h index ec5ea72e70..3f2538e806 100644 --- a/Source/HoudiniEngine/Private/HoudiniFoliageTools.h +++ b/Source/HoudiniEngine/Private/HoudiniFoliageTools.h @@ -69,5 +69,8 @@ class HOUDINIENGINE_API FHoudiniFoliageTools // Removed Foliage Type from world static void RemoveFoliageTypeFromWorld(UWorld * World, UFoliageType * FoliageType); + // Remove all instances using this Foliage Type from the world + static void RemoveInstancesFromWorld(UWorld* World, UFoliageType* FoliageType); + }; diff --git a/Source/HoudiniEngineEditor/Private/HoudiniEngineBakeUtils.cpp b/Source/HoudiniEngineEditor/Private/HoudiniEngineBakeUtils.cpp index 88569e9919..24f87dcb1f 100755 --- a/Source/HoudiniEngineEditor/Private/HoudiniEngineBakeUtils.cpp +++ b/Source/HoudiniEngineEditor/Private/HoudiniEngineBakeUtils.cpp @@ -697,6 +697,10 @@ FHoudiniEngineBakeUtils::BakeFoliageTypes( Instance.BaseComponent = nullptr; } + if (HoudiniAssetComponent->bReplacePreviousBake) + { + FHoudiniFoliageTools::RemoveInstancesFromWorld(DesiredWorld, TargetFoliageType); + } FHoudiniFoliageTools::SpawnFoliageInstance(DesiredWorld, TargetFoliageType, Instances, true); }