4 #include "DatasmithMaterialElements.h"
5 #include "DatasmithSceneElementsImpl.h"
8 #include "Containers/Array.h"
10 template<
typename InterfaceType >
17 virtual const TCHAR* GetInputName()
const override {
return *InputName; }
23 virtual int32 GetOutputIndex()
const override {
return OutputIndex; }
24 virtual void SetOutputIndex( int32 InOutputIndex )
override { OutputIndex = InOutputIndex; }
36 : OutputName( InOutputName )
40 virtual const TCHAR* GetOutputName()
const override {
return *OutputName; }
41 virtual void SetOutputName(
const TCHAR* InOutputName )
override { OutputName = InOutputName; }
47 template<
typename InterfaceType >
52 : DefaultOutputIndex( 0 )
58 virtual const TCHAR* GetName()
const override {
return *Name; }
59 virtual void SetName(
const TCHAR* InName )
override { Name = InName; }
63 ConnectExpression( ExpressionInput, GetDefaultOutputIndex() );
68 virtual int32 GetInputCount()
const override {
return 0; }
72 virtual int32 GetDefaultOutputIndex()
const override {
return DefaultOutputIndex; }
73 virtual void SetDefaultOutputIndex( int32 InDefaultOutputIndex )
override { DefaultOutputIndex = InDefaultOutputIndex; }
76 TArray< FDatasmithExpressionOutputImpl > Outputs;
79 int32 DefaultOutputIndex;
82 template<
typename InterfaceType >
86 virtual const TCHAR* GetGroupName()
const override {
return *GroupName; }
87 virtual void SetGroupName(
const TCHAR* InGroupName )
override { GroupName = InGroupName; }
98 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::ConstantBool; }
100 virtual bool& GetBool()
override {
return bValue; }
101 virtual const bool& GetBool()
const override {
return bValue; }
112 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::ConstantColor; }
114 virtual FLinearColor& GetColor()
override {
return LinearColor; }
115 virtual const FLinearColor& GetColor()
const override {
return LinearColor; }
118 FLinearColor LinearColor;
126 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::ConstantScalar; }
128 virtual float& GetScalar()
override {
return Scalar; }
129 virtual const float& GetScalar()
const override {
return Scalar; }
140 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::Texture; }
142 virtual const TCHAR* GetTexturePathName()
const override {
return *TexturePathName; }
143 virtual void SetTexturePathName(
const TCHAR* InTexturePathName ) { TexturePathName = InTexturePathName; }
151 virtual int32 GetInputCount()
const override {
return 1; }
156 FString TexturePathName;
175 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::TextureCoordinate; }
177 virtual int32 GetCoordinateIndex()
const override {
return CoordinateIndex; }
178 virtual void SetCoordinateIndex( int32 InCoordinateIndex )
override { CoordinateIndex = InCoordinateIndex; }
180 virtual float GetUTiling()
const override {
return UTiling; }
181 virtual void SetUTiling(
float InUTiling )
override { UTiling = InUTiling; }
183 virtual float GetVTiling()
const override {
return VTiling;}
184 virtual void SetVTiling(
float InVTiling )
override { VTiling = InVTiling; }
187 int32 CoordinateIndex;
197 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::FlattenNormal; }
205 virtual int32 GetInputCount()
const override {
return 2; }
207 virtual const IDatasmithExpressionInput* GetInput( int32 Index )
const override {
return Index == 0 ? &Normal : &Flatness; }
217 static TSharedPtr< IDatasmithKeyValueProperty > NullPropertyPtr;
219 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::Generic; }
221 virtual void SetExpressionName(
const TCHAR* InExpressionName )
override { ExpressionName = InExpressionName; }
222 virtual const TCHAR* GetExpressionName()
const override {
return *ExpressionName; }
226 const TSharedPtr< IDatasmithKeyValueProperty >&
GetProperty( int32 InIndex )
const override;
227 TSharedPtr< IDatasmithKeyValueProperty >&
GetProperty( int32 InIndex )
override;
229 const TSharedPtr< IDatasmithKeyValueProperty >&
GetPropertyByName(
const TCHAR* InName )
const override;
230 TSharedPtr< IDatasmithKeyValueProperty >&
GetPropertyByName(
const TCHAR* InName )
override;
232 void AddProperty(
const TSharedPtr< IDatasmithKeyValueProperty >& InProperty )
override;
234 virtual int32 GetInputCount()
const override {
return Inputs.Num(); }
237 while ( !Inputs.IsValidIndex( Index ) )
239 Inputs.Emplace( *FString::FromInt( Inputs.Num() ) );
242 return &Inputs[ Index ];
245 virtual const IDatasmithExpressionInput* GetInput( int32 Index )
const override {
return Inputs.IsValidIndex( Index ) ? &Inputs[ Index ] :
nullptr; }
248 TArray< FDatasmithExpressionInputImpl< IDatasmithExpressionInput > > Inputs;
249 FString ExpressionName;
251 TArray< TSharedPtr< IDatasmithKeyValueProperty > > Properties;
252 TMap< FString, int > PropertyIndexMap;
258 virtual EDatasmithMaterialExpressionType GetType()
const override {
return EDatasmithMaterialExpressionType::FunctionCall; }
260 virtual void SetFunctionPathName(
const TCHAR* InFunctionPathName )
override { FunctionPathName = InFunctionPathName; }
261 virtual const TCHAR* GetFunctionPathName()
const override {
return *FunctionPathName; }
263 virtual int32 GetInputCount()
const override {
return Inputs.Num(); }
266 while ( !Inputs.IsValidIndex( Index ) )
268 Inputs.Emplace( *FString::FromInt( Inputs.Num() ) );
271 return &Inputs[ Index ];
274 virtual const IDatasmithExpressionInput* GetInput( int32 Index )
const override {
return Inputs.IsValidIndex( Index ) ? &Inputs[ Index ] :
nullptr; }
277 TArray< FDatasmithExpressionInputImpl< IDatasmithExpressionInput > > Inputs;
278 FString FunctionPathName;
300 virtual int GetBlendMode()
const override {
return BlendMode; }
301 virtual void SetBlendMode(
int InBlendMode )
override { BlendMode = InBlendMode; }
303 virtual bool GetTwoSided()
const override {
return bTwoSided; }
304 virtual void SetTwoSided(
bool bInTwoSided )
override { bTwoSided = bInTwoSided; }
306 virtual bool GetUseMaterialAttributes()
const override{
return bUseMaterialAttributes; }
307 virtual void SetUseMaterialAttributes(
bool bInUseMaterialAttributes )
override { bUseMaterialAttributes = bInUseMaterialAttributes; }
310 virtual void SetMaterialFunctionOnly(
bool bInMaterialFunctionOnly)
override { bMaterialFunctionOnly = bInMaterialFunctionOnly; };
312 virtual int32 GetExpressionsCount()
const override {
return Expressions.Num(); }
318 virtual void SetParentLabel(
const TCHAR* InParentLabel )
override { ParentLabel = InParentLabel; }
319 virtual const TCHAR* GetParentLabel()
const override;
334 TArray< IDatasmithMaterialExpression* > Expressions;
338 bool bUseMaterialAttributes;
339 bool bMaterialFunctionOnly;
344 template<
typename InterfaceType >
346 : InputName( InInputName )
347 , Expression( nullptr )
352 template<
typename InterfaceType >
355 while ( !Outputs.IsValidIndex( InOutputIndex ) )
357 Outputs.Emplace( TEXT(
"Ouput") );
360 int32 OutputIndex = Outputs.IsValidIndex( InOutputIndex ) ? InOutputIndex : INDEX_NONE;
362 if ( OutputIndex != INDEX_NONE )
364 ExpressionInput.SetExpression(
this );
365 ExpressionInput.SetOutputIndex( OutputIndex );