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();
}
GeData data;
// read "Texture" parameter
material->GetParameter(DescID(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 { TEXTURETAG_PROJECTION };
const Int32 projectionUVW = TEXTURETAG_PROJECTION_UVW;
textureTag->SetParameter(projectionParam, projectionUVW, DESCFLAGS_SET::NONE);
}
String GetName() const
Definition: c4d_baselist.h:2348
Definition: c4d_basetag.h:47
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
Definition: lib_description.h:328
Definition: c4d_gedata.h:83
BaseList2D * GetLink(const BaseDocument *doc, Int32 instanceof=0) const
Definition: c4d_string.h:39
Definition: c4d_basetag.h:647
void SetMaterial(BaseMaterial *mat)
maxon::Int32 Int32
Definition: ge_sys_math.h:60
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:66
#define Tpolygonselection
Polygon selection - SelectionTag.
Definition: ge_prepass.h:1253
#define Xbitmap
Bitmap.
Definition: ge_prepass.h:1170
#define Ttexture
Texture - TextureTag.
Definition: ge_prepass.h:1242
@ MATERIAL_COLOR_SHADER
Definition: mmaterial.h:272
@ 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.

// 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 { TEXTURETAG_PROJECTION };
const Int32 projectionUVW = TEXTURETAG_PROJECTION_UVW;
textureTag->SetParameter(projectionParam, projectionUVW, DESCFLAGS_SET::NONE);
object->InsertTag(textureTag);
Definition: c4d_basematerial.h:28
static TextureTag * Alloc()

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.

// 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());
}
BaseMaterial * GetMaterial(Bool ignoredoc=false)
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:207

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:

// This example enables cubic projection and rotates the texture.
const DescID projectionParam { 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 });
void SetRot(const Vector &v)
maxon::Float Float
Definition: ge_sys_math.h:66
Float32 DegToRad(Float32 r)
Definition: apibasemath.h:247
@ TEXTURETAG_PROJECTION_CUBIC
Definition: ttexture.h:14

Further Reading