Accessing V-Ray Material Parameters [SOLVED]

On 04/01/2017 at 02:22, xxxxxxxx wrote:

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

Hi there,

I simply cannot get this to work. Please help!
I try to set the color and to exchange Texture links within an Advanced VRay material and its Advanced Bitmap Shader.
This is what I have so far (getting the link to a V-Ray Advanced Material from a Texture-Tag and trying to read out the shader loaded to the Diffuse Layer 1 -> Diffuse Color Texture slot) :

BaseTag* TexTag = MyObjekt->GetTag(Ttexture);
if (TexTag)
     BaseMaterial* Material = ((TextureTag* )TexTag)->GetMaterial(true);
     if (Material)
          if (Material->GetType() == 5703)
               // Material is of Type V-Ray Advanced Material
               GeData Vray_data;
                        Material->GetParameter(DescID(4100), Vray_data, DESCFLAGS_GET_0); // VRAYMATERIAL_COLOR1_SHADER -> Texture link field in the material
                        BaseShader *shader = static_cast<BaseShader*>(Vray_data.GetLink(doc, 0));


On 05/01/2017 at 01:42, xxxxxxxx wrote:

Hi Arndt, thanks for writing us.

With reference to your code I'd say it looks fine at a least from a Cinema 4D SDK point of view. So I guess, there must be something happening on the V-Ray implementation side. Unfortunately the MAXON SDK Support team has no information about it, hence I suggest you to directly ask the VRAYforC4D guys (LAUBlab) or somebody in our community can help out.

As side note please I also invite you to make use of the

tag to include your code snippets in order to improve code readability.

Best, Riccardo

On 05/01/2017 at 06:11, xxxxxxxx wrote:

Hi Riccardo,

thanks for your reply. I will try to contact LaubLab directly then.

On 06/01/2017 at 05:46, xxxxxxxx wrote:

Hi Arndt,

may be try this code instate.

BaseTag* TexTag = Mein Objekt->GetTag(Ttexture);  
if (TexTag) {  
  BaseMaterial* Material = static_cast<TextureTag*>(TexTag)->GetMaterial(true);  
  if (Material) {  
      if (Material->GetType() == 1020295) {  
          // Material ist ein V-Ray Advanced Material  
          BaseContainer *bc = Material->GetDataInstance();  
          BaseShader *shader = static_cast<BaseShader*>(bc->GetLink(VRAYMATERIAL_COLOR1_SHADER, doc));