tichy
(tichy)
December 6, 2024, 3:39pm
1
How can I delete a draw_handler on unregister?
I add one on register
handler = bpy.types.SpaceView3D.draw_handler_add(draw_something, (), 'WINDOW', 'POST_VIEW')
but where is this stored? How can I list this in any way… ?
because unregister this like this, doesn’t work.
bpy.types.SpaceView3D.draw_handler_remove(draw_something,'WINDOW')
I know how it works with app handlers, I can list them and check if they are existing… but with draw_handlers it seems to be different.
tichy
(tichy)
December 6, 2024, 3:43pm
3
it doesnt worj, because unregister doesnt know the handler var…
tichy
(tichy)
December 6, 2024, 3:47pm
4
I found a workaround
on Register:
dns = bpy.app.driver_namespace
dns["draw_something"] = bpy.types.SpaceView3D.draw_handler_add(draw_something, (), 'WINDOW', 'POST_VIEW')
On Unregister:
dns = bpy.app.driver_namespace
bpy.types.SpaceView3D.draw_handler_remove(dns["draw_something"],'WINDOW')
I will see if this is a longterm solution
tichy
(tichy)
December 6, 2024, 3:51pm
5
No, it is not… on reregistering this makes problems… somehow…
tichy
(tichy)
December 6, 2024, 3:58pm
6
No wait, it IS working…
I just needed to add del(dns[“draw_something”]) … hooray
Andrej
(Andrej)
December 6, 2024, 4:30pm
7
Probably better way would be to store it as a module global variable that both register
and unregister
can access instead of using driver namespace for it.