Access BodyPaint Layer (BPLayer) Opacity

On 11/05/2017 at 23:20, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   R17, R18 
Platform:   Windows  ;   Mac OSX  ; 
Language(s) :     C++  ;

---------
Is there any way to access the opacity of a BodyPaint layer? I have tried reading the ID_PAINTLAYER_OPACITY value from the BaseContainer as well as GetParameter but it doesn't seem to work.

For reference here is where the ID_PAINTLAYER_OPACITY is defined.

http://www.gamelogicdesign.com/Description/Node?containerName=BPlayer

And although I haven't tried it yet, since opacity didn't work, I would also like to access ID_PAINTLAYER_BLEND as well.

Ideally I would like to be able to both read and write these values.

Cheers,
Kent

On 15/05/2017 at 03:02, xxxxxxxx wrote:

Hello,

at least in R18, setting ID_PAINTLAYER_OPACITY seems to work fine:

  
// get texture  
PaintTexture* texture = PaintTexture::GetSelectedTexture();  
if (!texture)  
 return false;  
  
// get layer  
PaintLayer* layer = texture->GetFirstLayer();  
if (!layer)  
 return false;  
  
// change opacity  
  
GeData data;  
layer->GetParameter(ID_PAINTLAYER_OPACITY, data, DESCFLAGS_GET_0);  
  
Float opacity = data.GetFloat();  
opacity = opacity* 2.0;  
  
layer->SetParameter(ID_PAINTLAYER_OPACITY, opacity, DESCFLAGS_SET_0);  
  
// set blend mode  
layer->SetParameter(ID_PAINTLAYER_BLEND, LAYER_MULTIPLY, DESCFLAGS_SET_0);  
  
  
EventAdd();  

best wishes,
Sebastian

On 15/05/2017 at 14:23, xxxxxxxx wrote:

I have only been testing with R17 so far. Great to know that its working in R18. My code was doing the exact same thing as what you have there. I will double check this all again, but its good to know that its working for you in R18.

Cheers.

On 26/05/2017 at 18:14, xxxxxxxx wrote:

Just a follow up on this. Totally my own fault. I was missing an EventAdd();

Silly mistake on my part. Thanks for testing.