Open Search
    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