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();
    }
    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:2363
    Definition: c4d_basetag.h:48
    Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
    Definition: lib_description.h:330
    Definition: c4d_gedata.h:83
    BaseList2D * GetLink(const BaseDocument *doc, Int32 instanceof=0) const
    Definition: c4d_string.h:39
    Definition: c4d_basetag.h:654
    void SetMaterial(BaseMaterial *mat)
    maxon::Int32 Int32
    Definition: ge_sys_math.h:60
    #define MAXON_SOURCE_LOCATION
    Definition: memoryallocationbase.h:67
    #define Tpolygonselection
    Polygon selection - SelectionTag.
    Definition: ge_prepass.h:1395
    #define Xbitmap
    Bitmap.
    Definition: ge_prepass.h:1296
    #define Ttexture
    Texture - TextureTag.
    Definition: ge_prepass.h:1384
    @ MATERIAL_COLOR_SHADER
    Definition: mmaterial.h:272
    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.

    // 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:210

    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