Unable to retrieve LayerSet from Shader

  • On 26/03/2013 at 02:29, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R14 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    Hi folks,
    I'm trying to modify the LayerSet of a BitmapShader. But I always get a NULL pointer with the following code:

    BaseShader *tex = BaseShader::Alloc(Xbitmap);   
    if (!tex)   
        return NULL;   
    tex->SetParameter(BITMAPSHADER_FILENAME, GeData(Filename("...")), DESCFLAGS_SET_0);   
    GeData dLayerSet;   
    if (tex->GetParameter(BITMAPSHADER_LAYERSET, dLayerSet, DESCFLAGS_GET_0))   
        LayerSet *layerSet = static_cast<LayerSet*>(dLayerSet.GetCustomDataType(CUSTOMDATATYPE_LAYERSET));   
        if (layerSet)   

    Does anyone know what's wrong here?
    Thanks in advance!

  • On 26/03/2013 at 04:03, xxxxxxxx wrote:

    Ok seems that I have to allocate it by myself.
    This works fine:

    LayerSet *layerSet = static_cast<LayerSet*>(dLayerSet.GetCustomDataType(CUSTOMDATATYPE_LAYERSET));   
    if (!layerSet) layerSet = LayerSet::Alloc();   
    if (layerSet)   
        dLayerSet.SetCustomDataType(CUSTOMDATATYPE_LAYERSET, *layerSet);   
        tex->SetParameter(BITMAPSHADER_LAYERSET, dLayerSet, DESCFLAGS_SET_0);   

  • On 26/03/2013 at 08:14, xxxxxxxx wrote:

    Hi Satara,

    Thanks for posting the code. But I'm having a hard time getting your code to work.
    And I can't find much information about the LayerSet type.

    This code produces an "unexpected type" compile error:

    LayerSet *layerSet = static_cast<LayerSet*>(dLayerSet.GetCustomDataType(CUSTOMDATATYPE_LAYERSET));

    Are you including this header file?: customgui_layerset.h
    Or some other header file?


  • On 26/03/2013 at 09:04, xxxxxxxx wrote:

    Never mind. I figured it out.
    This is the missing piece of code that makes the rest of your code work:GeData dLayerSet;


Log in to reply