Hello @Filip,
Thank you for reaching out to us. It is unfortunately extremely hard to answer your question concretely as the information provided by you is very general.
I assume you are implementing your own nodes UI from scratch; you are neither using the GraphView
(i.e., Xpresso), nor Nodes API? But the entities in your graph are instances of BaseList2D
, right?
ActiveObjectManager_RegisterMode
allows you to register your own mode for the Attribute Manager (Fig. 1) which in turn allows you to shield yourself from a displayed node from being replaced when you do not want to.

Fig 1: The Attribute Manager separates its displayed entities into bins called Modes.
So, when you set a BaseObject
in your code with ActiveObjectManager_SetObject
as the entity to be displayed in the ACTIVEOBJECTMODE::OBJECT
mode, the user then changing for example the Object Manager selection will overwrite that "set object". When you register your own mode, you can prevent that, because it is only you who sets the displayed entities there.
Registering your own mode also allows you to pass a MessageData
hook which streamlines
setting the displayed object via ActiveObjectManager_SetObject
, but in the end you still must call this method every time you want to change the displayed entity. Because how should Cinema 4D otherwise know what you are doing in your dialog?
In case this is all old news for you, and you are only struggling with objects not updating correctly their parameter GUIs and/or values when you have changed a value, the instruction SpecialEventAdd(COREMSG_CINEMA_FORCE_AM_UPDATE)
will be the solution. In some cases the Attribute Manager needs a little nudge to get over the finish line.
Cheers,
Ferdinand