Files
Andron666 9c38e93fa4 part7
2022-12-05 20:31:35 +05:00

260 lines
6.9 KiB
C++

/*
* Copyright (c) <2021> Side Effects Software Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. The name of Side Effects Software may not be used to endorse or
* promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY SIDE EFFECTS SOFTWARE "AS IS" AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL SIDE EFFECTS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "HoudiniParameter.h"
#include "Engine/Engine.h"
UHoudiniParameter::UHoudiniParameter(const FObjectInitializer & ObjectInitializer)
: Super(ObjectInitializer)
, ParmType(EHoudiniParameterType::Invalid)
, TupleSize(0)
, NodeId(-1)
, ParmId(-1)
, ParentParmId(-1)
, ChildIndex(-1)
, bIsVisible(true)
, bIsDisabled(false)
, bHasChanged(false)
, bNeedsToTriggerUpdate(true)
, bIsDefault(false)
, bIsSpare(false)
, bJoinNext(false)
, bIsChildOfMultiParm(false)
, bIsDirectChildOfMultiParm(false)
, TagCount(0)
, ValueIndex(-1)
, bHasExpression(false)
, bShowExpression(false)
{
Name = TEXT("");
Label = TEXT("");
Help = TEXT("");
}
UHoudiniParameter *
UHoudiniParameter::Create( UObject* InOuter, const FString& InParamName)
{
FString ParamNameStr = "HoudiniParameter_" + InParamName;
FName ParamName = MakeUniqueObjectName(InOuter, UHoudiniParameter::StaticClass(), *ParamNameStr);
// We need to create a new parameter
UHoudiniParameter * HoudiniAssetParameter = NewObject< UHoudiniParameter >(
InOuter, UHoudiniParameter::StaticClass(), ParamName, RF_Public | RF_Transactional);
return HoudiniAssetParameter;
}
bool
UHoudiniParameter::IsChildParameter() const
{
return ParentParmId >= 0;
}
void
UHoudiniParameter::RevertToDefault()
{
bPendingRevertToDefault = true;
TuplePendingRevertToDefault.Empty();
TuplePendingRevertToDefault.Add(-1);
MarkChanged(true);
}
void
UHoudiniParameter::RevertToDefault(const int32& InAtTupleIndex)
{
bPendingRevertToDefault = true;
TuplePendingRevertToDefault.AddUnique(InAtTupleIndex);
MarkChanged(true);
}
void
UHoudiniParameter::MarkDefault(const bool& bInDefault)
{
bIsDefault = bInDefault;
if (bInDefault)
{
// No need to revert default parameter
bPendingRevertToDefault = false;
TuplePendingRevertToDefault.Empty();
}
}
EHoudiniRampInterpolationType UHoudiniParameter::GetHoudiniInterpMethodFromInt(int32 InInt)
{
EHoudiniRampInterpolationType Result = EHoudiniRampInterpolationType::InValid;
switch (InInt)
{
case 0:
Result = EHoudiniRampInterpolationType::CONSTANT;
break;
case 1:
Result = EHoudiniRampInterpolationType::LINEAR;
break;
case 2:
Result = EHoudiniRampInterpolationType::CATMULL_ROM;
break;
case 3:
Result = EHoudiniRampInterpolationType::MONOTONE_CUBIC;
break;
case 4:
Result = EHoudiniRampInterpolationType::BEZIER;
break;
case 5:
Result = EHoudiniRampInterpolationType::BSPLINE;
break;
case 6:
Result = EHoudiniRampInterpolationType::HERMITE;
break;
}
return Result;
}
FString
UHoudiniParameter::GetStringFromHoudiniInterpMethod(EHoudiniRampInterpolationType InType)
{
FString Result = FString("InValid");
switch (InType)
{
case EHoudiniRampInterpolationType::CONSTANT:
Result = FString("Constant");
break;
case EHoudiniRampInterpolationType::LINEAR:
Result = FString("Linear");
break;
case EHoudiniRampInterpolationType::BEZIER:
Result = FString("Bezier");
break;
case EHoudiniRampInterpolationType::BSPLINE:
Result = FString("B-Spline");
break;
case EHoudiniRampInterpolationType::MONOTONE_CUBIC:
Result = FString("Monotone Cubic");
break;
case EHoudiniRampInterpolationType::CATMULL_ROM:
Result = FString("Catmull Rom");
break;
case EHoudiniRampInterpolationType::HERMITE:
Result = FString("Hermite");
break;
}
return Result;
}
EHoudiniRampInterpolationType
UHoudiniParameter::GetHoudiniInterpMethodFromString(const FString& InString)
{
if (InString.StartsWith(TEXT("Constant")))
return EHoudiniRampInterpolationType::CONSTANT;
else if (InString.StartsWith("Linear"))
return EHoudiniRampInterpolationType::LINEAR;
else if (InString.StartsWith("Bezier"))
return EHoudiniRampInterpolationType::BEZIER;
else if (InString.StartsWith("B-Spline"))
return EHoudiniRampInterpolationType::BSPLINE;
else if (InString.StartsWith("Monotone Cubic"))
return EHoudiniRampInterpolationType::MONOTONE_CUBIC;
else if (InString.StartsWith("Catmull Rom"))
return EHoudiniRampInterpolationType::CATMULL_ROM;
else if (InString.StartsWith("Hermite"))
return EHoudiniRampInterpolationType::HERMITE;
return EHoudiniRampInterpolationType::InValid;
}
ERichCurveInterpMode
UHoudiniParameter::EHoudiniRampInterpolationTypeToERichCurveInterpMode(EHoudiniRampInterpolationType InType)
{
switch (InType)
{
case EHoudiniRampInterpolationType::CONSTANT:
return ERichCurveInterpMode::RCIM_Constant;
case EHoudiniRampInterpolationType::LINEAR:
return ERichCurveInterpMode::RCIM_Linear;
default:
break;
}
return ERichCurveInterpMode::RCIM_Cubic;
}
UHoudiniParameter*
UHoudiniParameter::DuplicateAndCopyState(UObject* DestOuter, EObjectFlags ClearFlags, EObjectFlags SetFlags)
{
UHoudiniParameter* NewParameter = Cast<UHoudiniParameter>(StaticDuplicateObject(this, DestOuter));
NewParameter->CopyStateFrom(this, false);
return NewParameter;
}
void
UHoudiniParameter::CopyStateFrom(UHoudiniParameter * InParameter, bool bCopyAllProperties, EObjectFlags InClearFlags, EObjectFlags InSetFlags)
{
if (bCopyAllProperties)
{
UEngine::FCopyPropertiesForUnrelatedObjectsParams Params;
Params.bDoDelta = false; // Perform a deep copy
Params.bClearReferences = false; // References will be replaced afterwards.
UEngine::CopyPropertiesForUnrelatedObjects(InParameter, this, Params);
}
if (InSetFlags != RF_NoFlags)
SetFlags(InSetFlags);
if (InClearFlags != RF_NoFlags)
ClearFlags( InClearFlags );
NodeId = InParameter->NodeId;
ParmId = InParameter->ParmId;
ParentParmId = InParameter->ParentParmId;
bIsDefault = InParameter->bIsDefault;
bPendingRevertToDefault = InParameter->bPendingRevertToDefault;
TuplePendingRevertToDefault = InParameter->TuplePendingRevertToDefault;
bShowExpression = InParameter->bShowExpression;
}
void
UHoudiniParameter::InvalidateData()
{
}