Is GetParameter(c4d.MPBTYPE_DPI) broken?

On 13/02/2018 at 16:24, xxxxxxxx wrote:

I've been using a script in R18 for sometime now and went to use it today in R19 and ran into an error. When I get to this command, GetParameter(c4d.MPBTYPE_DPI), it returns 0.0 which then throws up an error i my script as that measurement can't be zero.

I tried it again in R18 and it works fine. Went back to 19 and it fails to return the dpi.

Is this a known issue?


Texture = c4d.bitmaps.BaseBitmap()
width, height = Texture.GetSize()
mbp = c4d.bitmaps.MultipassBitmap.AllocWrapper(Texture)
dpi = mbp.GetParameter(c4d.MPBTYPE_DPI)
width = width/float(dpi)
height = height/float(dpi)

On 15/02/2018 at 02:51, xxxxxxxx wrote:

Hi del, thanks for writing us.

Given that MPBTYPE_DPI is marked as private and accessing the data pointed by this ID is not granted to be valid nor officially allowed, in R19 the default value of 72dpi (which I presume was returned in your execution on R18) is no longer returned. It's instead returned 0.0 or the dpi value set by MultipassBitmap::SetParameter(MPBTYPE_DPI).

Best, Riccardo

On 15/02/2018 at 07:45, xxxxxxxx wrote:

What do you mean that it's marked as private? I'm looking at the SDK and I don't see anything that says not to use it. How do we know if we can or can't use things listed in the SDK?


Uses a description ID as a key into the container, and retrieves the stored data.
Parameters:| id  (int) – 
Parameter ID:

MPBTYPE_SHOW bool Determines if the layer will be shown in the external render window. (The Cinema 4D renderer modifies this value itself.)
MPBTYPE_SAVE bool Determines if the layer is saved with the image or not if SAVEBIT_USESELECTEDLAYERS is used.
MPBTYPE_PERCENT float The blend parameter, between 0.0 and 1.0.
MPBTYPE_BLENDMODE int The blend mode. (LAYER_NORMAL, LAYER_DISSOLVE etc. from from bplayer.h.)
MPBTYPE_BITMAPTYPE int The bitmap type. Cannot be set with MultipassBitmap.SetParameter().
MPBTYPE_NAME str The layer name. Only a PaintLayerBmp or PaintLayerFolder can have a name.
MPBTYPE_DPI int The resolution in DPI.
MPBTYPE_USERID int The user ID for the layer. In the renderer this is VPBUFFER_xxx.
MPBTYPE_USERSUBID int The user sub-ID for the layer. In the renderer this is used for blend channels for instance.
MPBTYPE_FORCEBLEND int The special mode used to force blend layers.


On 15/02/2018 at 09:09, xxxxxxxx wrote:

Hi del, looks like the you've hit an inconsistency in our Python documentation which will be fixed in the future.

I apologize for any inconvenience cause so far,  but if you check in the C++ doc (as pointed out in my previous post) you see that it's actually marked as private.

Best, Riccardo