Assign Vertex Color Map to shader [SOLVED]



  • On 21/05/2018 at 08:08, xxxxxxxx wrote:

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

    ---------
    Hi,

    I want to assign a vertex color tag to a vertex map shader.

    Here is the code I am using:

      
    		// allocate the Vertex Map shader
    		AutoAlloc<BaseShader> vertexMapShader(Xvertexmap);
    		if (!vertexMapShader)
    			return false;
      
    		// retrieve the BaseContainer of the Vertex Map shader
    		BaseContainer* vertexMapShaderBC = vertexMapShader->GetDataInstance();
    		if (!vertexMapShaderBC)
    			return false;
      
    		// The Vertex Color tag is vctag
    		GeData gd;
    		vertexMapShaderBC->GetParameter(GV_VERTEXCOLORMAP_INPUT_TAG, gd); // ---->this is where the crash happens
    		
    		BaseLink *myLink = gd.GetBaseLink();
    		myLink->SetLink(vctag);
      
      
    
    

    Any idea why it does not work?



  • On 22/05/2018 at 05:32, xxxxxxxx wrote:

    Hi Salozo,

    First of all, I'm not sure to understand, from where you get the ID GV_VERTEXCOLORMAP_INPUT_TAG, to know an ID you can simply drag and drop the parameter in the console.
    Another thing is actually you should use Set/GetParameter in the C4DAtom(the shader in your case) itself and not on the BaseCcontainer.
    In other hands here an example how to set up a link.

    		// allocate the Vertex Map shader
    		AutoAlloc<BaseShader> vertexMapShader(Xvertexmap);
    		if (!vertexMapShader)
    			return false;
      
    		// allocate the Vertex Map
    		AutoAlloc<BaseTag> vertexMap(Tvertexcolor);
    		if (!vertexMap)
    			return false;
      
    		// allocate the Vertex Map
    		AutoAlloc<BaseLink> link;
    		if (!link)
    			return false;
      
    		link->SetLink(vertexMap.Release()); // I use release, since vertexMap is an AutoAlloc object, so you need to release it in order to let the ownership of the vertexMap I created to c4d.
    		vertexMapShader->SetParameter(SLA_DIRTY_VMAP_OBJECT, GeData(link), DESCFLAGS_SET_0);
    

    Hope it helps, if you have any question please do not hesitate! :)

    Cheers,
    Maxime



  • On 22/05/2018 at 07:59, xxxxxxxx wrote:

    Thank you for your help Maxime. It works as it should now.


Log in to reply