From ef1975eb9ec08b81570ec014d9a8b1f795d3fd06 Mon Sep 17 00:00:00 2001 From: Warren Wang Date: Tue, 9 Apr 2024 12:03:15 +0800 Subject: [PATCH 1/2] Add support for setting, int, string color, file parameter on Houdini Asset Component in blueprint - Consider renaming SetToggleValueAt to SetToggleParameter to match existing naming convention as SetFloatParameter also uses indexes but is not verbose in the function name --- .../HoudiniAssetBlueprintComponent.cpp | 32 +++++++++++++++++++ .../Private/HoudiniAssetBlueprintComponent.h | 12 +++++++ 2 files changed, 44 insertions(+) diff --git a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp index 6034c81898..4269bc4913 100755 --- a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp +++ b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp @@ -36,8 +36,12 @@ #include "UObject/Object.h" #include "Logging/LogMacros.h" +#include "HoudiniParameterInt.h" #include "HoudiniParameterFloat.h" +#include "HoudiniParameterString.h" +#include "HoudiniParameterColor.h" #include "HoudiniParameterToggle.h" +#include "HoudiniParameterFile.h" #include "HoudiniInput.h" #if WITH_EDITOR @@ -1940,12 +1944,34 @@ UHoudiniAssetBlueprintComponent::HasParameter(FString Name) return FindParameterByName(Name) != nullptr; } +void +UHoudiniAssetBlueprintComponent::SetIntParameter(FString Name, int Value, int Index) +{ + SetTypedValueAt(Name, Value, Index); +} + void UHoudiniAssetBlueprintComponent::SetFloatParameter(FString Name, float Value, int Index) { SetTypedValueAt(Name, Value, Index); } +void +UHoudiniAssetBlueprintComponent::SetStringParameter(FString Name, FString Value, int Index) +{ + SetTypedValueAt(Name, Value, Index); +} + +void +UHoudiniAssetBlueprintComponent::SetColorParameter(FString Name, FLinearColor Value) +{ + UHoudiniParameterColor* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + return; + + Parameter->SetColorValue(Value); +} + void UHoudiniAssetBlueprintComponent::SetToggleValueAt(FString Name, bool Value, int Index) { @@ -1956,6 +1982,12 @@ UHoudiniAssetBlueprintComponent::SetToggleValueAt(FString Name, bool Value, int Parameter->SetValueAt(Value, Index); } +void +UHoudiniAssetBlueprintComponent::SetFileParameter(FString Name, FString Value, int Index) +{ + SetTypedValueAt(Name, Value, Index); +} + //void UHoudiniAssetBlueprintComponent::OnPostCookHandler(UHoudiniAssetComponent* InComponent) //{ // diff --git a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h index 3c23886e50..1b2cd93a18 100755 --- a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h +++ b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h @@ -160,12 +160,24 @@ class HOUDINIENGINERUNTIME_API UHoudiniAssetBlueprintComponent : public UHoudini UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") bool HasParameter(FString Name); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + void SetIntParameter(FString Name, int Value, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetFloatParameter(FString Name, float Value, int Index=0); + + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + void SetStringParameter(FString Name, FString Value, int Index=0); + + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + void SetColorParameter(FString Name, FLinearColor Value); UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetToggleValueAt(FString Name, bool Value, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + void SetFileParameter(FString Name, FString Value, int Index=0); + void AddInputObjectMapping(const FGuid& InputGuid, const FGuid& SCSVariableGuid) { CachedInputNodes.Add(InputGuid, SCSVariableGuid); } bool GetInputObjectSCSVariableGuid(const FGuid& InputGuid, FGuid& OutSCSGuid); void RemoveInputObjectSCSVariableGuid(const FGuid& InputGuid) { CachedInputNodes.Remove(InputGuid); }; From 1232e0f2449750049fe98a1a73e87c5dac60a598 Mon Sep 17 00:00:00 2001 From: Warren Wang Date: Tue, 9 Apr 2024 14:07:42 +0800 Subject: [PATCH 2/2] Added getter functions for int, float, string, color, toggle, file parameter with warning messages for existance checking - Getting for ToggleParameter is using function name GetToggleParameter instead of GetToggleValueAt - Consider adding a generic template for GetTypedValueAt. This would require consolidating more parameter types to use this function name though. Some do not have indexes as well so may want to add GetTypedValue function in the future for Parameters without index. --- .../HoudiniAssetBlueprintComponent.cpp | 92 +++++++++++++++++++ .../Private/HoudiniAssetBlueprintComponent.h | 18 ++++ 2 files changed, 110 insertions(+) diff --git a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp index 4269bc4913..dd23df4d28 100755 --- a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp +++ b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.cpp @@ -1944,23 +1944,85 @@ UHoudiniAssetBlueprintComponent::HasParameter(FString Name) return FindParameterByName(Name) != nullptr; } +int +UHoudiniAssetBlueprintComponent::GetIntParameter(FString Name, int Index) +{ + UHoudiniParameterInt* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + { + UE_LOG(LogTemp, Warning, TEXT("Int parameter %s doesn't exist at index %s"), *Name, *FString::FromInt(Index)); + return 0; + } + + int Value; + Parameter->GetValueAt(Index, Value); + + return Value; +} + void UHoudiniAssetBlueprintComponent::SetIntParameter(FString Name, int Value, int Index) { SetTypedValueAt(Name, Value, Index); } +float +UHoudiniAssetBlueprintComponent::GetFloatParameter(FString Name, int Index) +{ + UHoudiniParameterFloat* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + { + UE_LOG(LogTemp, Warning, TEXT("Float parameter %s doesn't exist at index %s"), *Name, *FString::FromInt(Index)); + return 0.f; + } + + float Value; + Parameter->GetValueAt(Index, Value); + + return Value; +} + void UHoudiniAssetBlueprintComponent::SetFloatParameter(FString Name, float Value, int Index) { SetTypedValueAt(Name, Value, Index); } +FString +UHoudiniAssetBlueprintComponent::GetStringParameter(FString Name, int Index) +{ + UHoudiniParameterString* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + { + UE_LOG(LogTemp, Warning, TEXT("String parameter %s doesn't exist at index %s"), *Name, *FString::FromInt(Index)); + return TEXT(""); + } + + FString Value = Parameter->GetValueAt(Index); + + return Value; +} + void UHoudiniAssetBlueprintComponent::SetStringParameter(FString Name, FString Value, int Index) { SetTypedValueAt(Name, Value, Index); } +// +FLinearColor +UHoudiniAssetBlueprintComponent::GetColorParameter(FString Name) +{ + UHoudiniParameterColor* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + { + UE_LOG(LogTemp, Warning, TEXT("Color parameter %s doesn't exist."), *Name); + return FLinearColor::Black; + } + + FLinearColor Value = Parameter->GetColorValue(); + + return Value; +} void UHoudiniAssetBlueprintComponent::SetColorParameter(FString Name, FLinearColor Value) @@ -1972,6 +2034,21 @@ UHoudiniAssetBlueprintComponent::SetColorParameter(FString Name, FLinearColor Va Parameter->SetColorValue(Value); } +bool +UHoudiniAssetBlueprintComponent::GetToggleParameter(FString Name, int Index) +{ + UHoudiniParameterToggle* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + { + UE_LOG(LogTemp, Warning, TEXT("Toggle parameter %s doesn't exist at index %s"), *Name, *FString::FromInt(Index)); + return false; + } + + bool Value = Parameter->GetValueAt(Index); + + return Value; +} + void UHoudiniAssetBlueprintComponent::SetToggleValueAt(FString Name, bool Value, int Index) { @@ -1982,6 +2059,21 @@ UHoudiniAssetBlueprintComponent::SetToggleValueAt(FString Name, bool Value, int Parameter->SetValueAt(Value, Index); } +FString +UHoudiniAssetBlueprintComponent::GetFileParameter(FString Name, int Index) +{ + UHoudiniParameterFile* Parameter = Cast(FindParameterByName(Name)); + if (!Parameter) + { + UE_LOG(LogTemp, Warning, TEXT("File parameter %s doesn't exist at index %s"), *Name, *FString::FromInt(Index)); + return ""; + } + + FString Value = Parameter->GetValueAt(Index); + + return Value; +} + void UHoudiniAssetBlueprintComponent::SetFileParameter(FString Name, FString Value, int Index) { diff --git a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h index 1b2cd93a18..56a548568e 100755 --- a/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h +++ b/Source/HoudiniEngineRuntime/Private/HoudiniAssetBlueprintComponent.h @@ -160,21 +160,39 @@ class HOUDINIENGINERUNTIME_API UHoudiniAssetBlueprintComponent : public UHoudini UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") bool HasParameter(FString Name); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + int GetIntParameter(FString Name, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetIntParameter(FString Name, int Value, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + float GetFloatParameter(FString Name, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetFloatParameter(FString Name, float Value, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + FString GetStringParameter(FString Name, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetStringParameter(FString Name, FString Value, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + FLinearColor GetColorParameter(FString Name); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetColorParameter(FString Name, FLinearColor Value); + + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + bool GetToggleParameter(FString Name, int Index=0); UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetToggleValueAt(FString Name, bool Value, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") + FString GetFileParameter(FString Name, int Index=0); + UFUNCTION(BlueprintCallable, Category="Houdini Asset Component") void SetFileParameter(FString Name, FString Value, int Index=0);