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;