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
// if the material uses a bitmap shader, use UVW projection
if (data.GetLink(doc, Xbitmap))
{
const DescID projectionParam = DescID(TEXTURETAG_PROJECTION);
const Int32 projectionUVW = TEXTURETAG_PROJECTION_UVW;
textureTag->SetParameter(projectionParam, projectionUVW, DESCFLAGS_SET::NONE);
}

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::OK;
TextureTag* const textureTag = TextureTag::Alloc();
if (textureTag == nullptr)
return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
textureTag->SetMaterial(mat);
const DescID projectionParam = DescID(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.

// 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::OK;
BaseMaterial* const material = ttag->GetMaterial();
if (material != nullptr)
{
ApplicationOutput("Used Material: " + material->GetName());
}

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 = DescID(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));

Further Reading