Bodypaint Bitmap Dirty status

On 13/12/2014 at 09:42, xxxxxxxx wrote:

Hello,

has anyone made experiences with Bodypaint Bitmaps.
If I check the dirty state of a bitmap like:

  
  Tex = bodypaint.PaintTexture.GetSelectedTexture()  
  actlay= Tex.GetActive()  
  if actlay.IsInstanceOf(c4d.OBJECT_PAINTLAYERBMP) == True:  
        
      bmp = actlay.ToPaintLayerBmp()  
      bmp.GetDirty()  

I´ll get this error message:

SystemError: /perforce_buildsystem_osx/c4d_mx_buildsystem_osx/release/16.0/modules/python/source/i_getargs.cpp:1616: bad argument to internal function

I´m not allowed to set a zero flag as it is suggested in the docs:
PaintBitmap.GetDirty( flags )

Thanks in advance
Martin

On 13/12/2014 at 11:19, xxxxxxxx wrote:

You've created  a paint layer bitmap. Which doesn't have a GetDirty() method.
You'll need to convert it to a BaseBitmap() type using GetPixelCnt() to loop through it and copy the color values to a new BaseBitmap with SetPixelCnt().

Then you should be able to use GetDirty() on it.

-ScottA

On 13/12/2014 at 12:34, xxxxxxxx wrote:

Hello Scott,

yes thanks! I see.
But it doesn´t make sense to me as im able to use the other members of the class with
bmp = actlay.ToPaintLayerBmp()

I want to avoid recalculating the Bitmaps on every event message in my plugin.
I copied the  BP layer structure to a treeviewcustomgui and an userarea in my dialogplugin.
That´s why I was searching for a fast indicator that the user changed something at the PaintBitmap
and I thought GetDirty should be good enough.
Do you have an idea to solve this in fast manner.

Thanks in advance
Martin

On 13/12/2014 at 13:19, xxxxxxxx wrote:

No idea.
I've never tried using the layer images in other GUI's.

Sorry.

-ScottA

On 13/12/2014 at 15:23, xxxxxxxx wrote:

ok.
By the way the treeviewcustom gui on your website was a good resource to begin with.Thanks
Martin

On 15/12/2014 at 07:03, xxxxxxxx wrote:

Hello,

if I try to follow along with Scotts suggestion.

Originally posted by xxxxxxxx

You'll need to convert it to a BaseBitmap() type using GetPixelCnt() to loop through it and copy the color values to a new BaseBitmap with SetPixelCnt().

Then you should be able to use GetDirty() on it.

my dirty status is always 1, as expected.
Because I have to initialise the bitmap in the first place or load it from a path to use GetPixelCnt()/SetPixelCnt()

So is my assuption right that the dirty status of a bitmap only reflects the count of how often a bitmap was saved with c4d and therefore it is not possible to detect if a bitmap has changed without saving it to disc?

Could someone please throw light on this issue?
Thanks in advance
Martin

On 15/12/2014 at 10:45, xxxxxxxx wrote:

Hello,

the dirty count is increased every time a part of the bitmap is changed. Unfortunately there is a bug in PaintBitmap.GetDirty(). A bug report was filed.

Best wishes,
Sebastian

On 15/12/2014 at 13:46, xxxxxxxx wrote:

Hello Sebastian,

thanks for the bug report,
I hope we can use it soon.

Best wishes
Martin