TextureTag Manual

About

A TextureTag is used to assign a material (BaseMaterial) to a BaseObject. The class TextureTag is based on BaseTag so the typical workflows of handling tags apply, see BaseTag and VariableTag Manual.

TextureTag objects are an instance of Ttexture.

// This example creates and configures a TextureTag.
// create the texture tag
TextureTag* const textureTag = static_cast<TextureTag*>(object->MakeTag(Ttexture));
if (textureTag == nullptr)
return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
// apply material
textureTag->SetMaterial(material);
// check if there is a polygon selection tag on the given object
// if a selection tag is found, restrict the material to that selection
BaseTag* const polygonSelection = object->GetTag(Tpolygonselection);
if (polygonSelection)
{
const String selectionName = polygonSelection->GetName();
textureTag->SetParameter(ConstDescID(DescLevel(TEXTURETAG_RESTRICTION)), selectionName, DESCFLAGS_SET::NONE);
}
GeData data;
// read "Texture" parameter
material->GetParameter(ConstDescID(DescLevel(MATERIAL_COLOR_SHADER)), data, DESCFLAGS_GET::NONE);
// if the material uses a bitmap shader, use UVW projection
if (data.GetLink(doc, Xbitmap))
{
const DescID projectionParam = ConstDescID(DescLevel(TEXTURETAG_PROJECTION));
const Int32 projectionUVW = TEXTURETAG_PROJECTION_UVW;
textureTag->SetParameter(projectionParam, projectionUVW, DESCFLAGS_SET::NONE);
}
NONE
Definition: asset_browser.h:1
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:69
#define Tpolygonselection
Polygon selection - SelectionTag.
Definition: ge_prepass.h:1431
#define Xbitmap
Bitmap.
Definition: ge_prepass.h:1331
#define Ttexture
Texture - TextureTag.
Definition: ge_prepass.h:1420
#define ConstDescID(...)
Definition: lib_description.h:592
@ MATERIAL_COLOR_SHADER
Definition: mmaterial.h:294
maxon::Int32 Int32
Definition: ge_sys_math.h:51
const char * doc
Definition: pyerrors.h:226
@ TEXTURETAG_RESTRICTION
Definition: ttexture.h:24
@ TEXTURETAG_PROJECTION
Definition: ttexture.h:10
@ TEXTURETAG_PROJECTION_UVW
Definition: ttexture.h:17

Allocation/Deallocation

TextureTag instances are created with the usual tools.

  • TextureTag::Alloc(): Creates a new TextureTag.
  • TextureTag::Free(): Destroys the given TextureTag.
// This example creates a new texture tag and assigns it to the given BaseObject.
BaseMaterial* const mat = doc->GetActiveMaterial();
if (mat == nullptr)
return maxon::IllegalArgumentError(MAXON_SOURCE_LOCATION);
TextureTag* const textureTag = TextureTag::Alloc();
if (textureTag == nullptr)
return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
textureTag->SetMaterial(mat);
const DescID projectionParam = ConstDescID(DescLevel(TEXTURETAG_PROJECTION));
const Int32 projectionUVW = TEXTURETAG_PROJECTION_UVW;
textureTag->SetParameter(projectionParam, projectionUVW, DESCFLAGS_SET::NONE);
object->InsertTag(textureTag);

Properties

The parameters of a TextureTag can be edited with C4DAtom::SetParameter() and C4DAtom::GetParameter(). The parameter IDs of a TextureTag are defined in ttexture.h.

Material

A TextureTag stores a reference to a BaseMaterial based material.

  • TextureTag::GetMaterial(): Returns the referenced material.
  • TextureTag::SetMaterial(): Sets the referenced material.
// This example accesses the texture tag on the given BaseObject.
// The texture tag returns the linked material.
TextureTag* const ttag = static_cast<TextureTag*>(object->GetTag(Ttexture));
if (ttag == nullptr)
return maxon::IllegalArgumentError(MAXON_SOURCE_LOCATION);
BaseMaterial* const material = ttag->GetMaterial();
if (material != nullptr)
{
ApplicationOutput("Used Material: " + material->GetName());
}
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:204

Texture Matrix

A TextureTag also stores information on how the referenced material is applied to the host BaseObject. If the projection type is not UVW mapping the texture matrix is applied:

  • TextureTag::GetPos(): Returns the position of the texture projection.
  • TextureTag::SetPos(): Sets the position of the texture projection.
  • TextureTag::GetScale(): Returns the scale of the texture projection.
  • TextureTag::SetScale(): Sets the scale of the texture projection
  • TextureTag::GetRot(): Returns the rotation of the texture projection.
  • TextureTag::SetRot(): Sets the rotation of the texture projection.
  • TextureTag::GetMl(): Returns the texture projection coordinate system as a matrix.
  • TextureTag::SetMl(): Sets the texture projection's coordinate system matrix.
// This example enables cubic projection and rotates the texture.
const DescID projectionParam = ConstDescID(DescLevel(TEXTURETAG_PROJECTION));
const Int32 projectionCubic = TEXTURETAG_PROJECTION_CUBIC;
textureTag->SetParameter(projectionParam, projectionCubic, DESCFLAGS_SET::NONE);
const Float rotation = DegToRad(45.0);
textureTag->SetRot(Vector { rotation, 0.0, 0.0 });
Float32 DegToRad(Float32 r)
Definition: apibasemath.h:256
maxon::Float Float
Definition: ge_sys_math.h:57
maxon::Vec3< maxon::Float64, 1 > Vector
Definition: ge_math.h:140
@ TEXTURETAG_PROJECTION_CUBIC
Definition: ttexture.h:14

Further Reading