Hi !
In an attempt to circumvent a bug in the DrawHUDText and DrawMultipleHUDText (link below), I'm trying to use the DrawTexture function, but now we have two issues.
(https://developers.maxon.net/forum/topic/15394/drawhudtext-issue-with-viewport-camera-navigation)
1 - The first issue is the mouse cursor doesn't orbit to the object in the viewport, it's like the text is being drawn in the whole screen and the camera is orbiting around the text... I tested several Zdepth settings. no luck.
2 - The second issue is the lag, notice the difference in C4D 2023 and 2025 in the video below (problem is also present in 2024).
So far I noticed the lag (and the camera orbit issue) on the DrawHUDText, DrawMultipleHUDText and DrawTexture functions. Other simple functions like DrawPoint2D, DrawLine2D and DrawLine does't have issues.
The code I'm using on a tag is:
import c4d
from c4d import plugins, bitmaps, documents
def main() -> None:
pass
def draw(bd) -> bool:
bh = c4d.plugins.BaseDrawHelp(bd, doc)
bd.LineZOffset(2)
bd.SetMatrix_Screen()
text = "My Tex asssssssssssssssssssdasdasdt"
cm = c4d.bitmaps.GeClipMap()
cm.Init(0, 0, 32)
cm.BeginDraw()
width = cm.TextWidth(text)
height = cm.TextHeight()
cm.EndDraw()
cm.Destroy()
cm.Init(width, height, 32)
cm.BeginDraw()
cm.SetColor(255, 255, 255, 255)
cm.TextAt(0,0,text)
cm.EndDraw()
bd.SetMatrix_Screen()
bd.SetLightList(c4d.BDRAW_SETLIGHTLIST_NOLIGHTS)
xpos=255
ypos=255
padr = [(c4d.Vector(xpos,ypos,0)), (c4d.Vector(xpos+width,ypos,0)), (c4d.Vector(xpos+width,ypos+height,0)), (c4d.Vector(xpos,ypos+height,0))]
cadr = [(c4d.Vector(1,1,1)), (c4d.Vector(1,1,1)), (c4d.Vector(1,1,1)), (c4d.Vector(1,1,1))]
vnadr = [(c4d.Vector(0,0,1)), (c4d.Vector(0,0,1)), (c4d.Vector(0,0,1)), (c4d.Vector(0,0,1))]
uvadr = [(c4d.Vector(0,0,0)), (c4d.Vector(1,0,0)), (c4d.Vector(1,1,0)),(c4d.Vector(0,1,0))]
cmbmp = bitmaps.BaseBitmap()
cmbmp = cm.GetBitmap()
bmp = bitmaps.BaseBitmap()
bmp = cm.GetBitmap()
alpha = bmp.GetInternalChannel() #Get at the RGBA channels of the bitmap copy
alpha = bmp.AddChannel(True, False)
bd.SetDepth(False)
bd.DrawTexture(bmp,padr,cadr,vnadr,uvadr,4,c4d.DRAW_ALPHA_NORMAL,c4d.DRAW_TEXTUREFLAGS_0)
return True
There's nothing special on the code, we can also see the issue with a simpler code:
import c4d
def main() -> None:
pass
def draw(bd: c4d.BaseDraw) -> bool:
bd = doc.GetActiveBaseDraw()
bd.DrawHUDText(200,200,"TESTING TEXT")
return c4d.DRAWRESULT_OK
I'm also attaching my C4D file:
draw_hud_text_issue2.c4d
That said, is there any working way to write text to the viewport with Python ?
Thanks in advance !
Flavio Diniz