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)   
    {   
        BaseMaterial::Free(mat);   
        return NULL;   
    }   
    mat->InsertShader(tex);   
    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)   
        {   
            layerSet->SetMode(LAYERSETMODE_LAYERALPHA);   
        }   
    }   
    

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



  • 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)   
    {   
        layerSet->SetMode(LAYERSETMODE_ALPHAS);   
        layerSet->AddLayer("Alpha");   
        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?

    -ScottA



  • 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;

    -ScottA


Log in to reply