About
Core messages are sent around Cinema 4D to inform various parts of the application about events and changes. This is happens so different parts of the interface can update their status (e.g. Attribute Manager, Viewport, etc.).
- Note
- Other important message types are messages sent to C4DAtom based elements (see C4DAtom Manual and NodeData::Message() Manual) and GUI messages (GUI and Interaction Messages Manual).
EventAdd
When the active document is changed by some operation one must inform Cinema 4D about this, so Cinema 4D can update the GUI.
Valid flags are:
- Note
- This is only needed when the active document is changed. It is not needed when a virtual or internal document is edited or when objects are handled that are not part of a document.
-
Events are not sent if no GUI exists (if CINEMAINFO::FORBID_GUI is true).
- Warning
- Do not use EventAdd() in a threaded context.
if (document == nullptr)
if (cubeObject == nullptr)
cubeObject->
SetName(
"This is a new object"_s);
BaseDocument * GetActiveDocument()
void EventAdd(EVENT eventflag=EVENT::NONE)
Definition: c4d_basedocument.h:497
void InsertObject(BaseObject *op, BaseObject *parent, BaseObject *pred, Bool checkNames=false, Bool sendNotification=true)
void SetName(const maxon::String &name, Bool setDirty=true)
Definition: c4d_baselist.h:2549
Definition: c4d_baseobject.h:248
static BaseObject * Alloc(Int32 type)
#define Ocube
Cube.
Definition: ge_prepass.h:1119
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
Catching Messages
Core messages are sent to update the GUI so it is possible to catch core messages in custom GUI elements:
When EVMSG_CHANGE is received, GeDialog based custom panels typically re-initialize their values by calling GeDialog::InitValues().
It is also possible to catch core messages with a MessageData plugin:
{
{
if (g_printMessage)
}
return true;
}
Definition: c4d_basecontainer.h:48
maxon::Bool Bool
Definition: ge_sys_math.h:51
maxon::Int32 Int32
Definition: ge_sys_math.h:56
#define EVMSG_CHANGE
Sent by EventAdd().
Definition: ge_prepass.h:2743
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:204
A core message can contain a BaseContainer argument. This container may store these values:
Message Types
These are Cinema 4D's core messages:
{
if (CheckCoreMessage(bc))
{
switch (movement)
{
}
}
break;
}
void * GetVoid(Int32 id, void *preset=nullptr) const
Definition: c4d_basecontainer.h:388
maxon::Int Int
Definition: ge_sys_math.h:60
@ BFM_CORE_PAR1
ANY Parameter 1.
Definition: gui.h:901
#define MOVE_END
Move ended. par2 == ESC.
Definition: ge_prepass.h:2782
#define EVMSG_ASYNCEDITORMOVE
The user moved something in the editor window. Managers should update things like position fields.
Definition: ge_prepass.h:2776
#define MOVE_CONTINUE
Move continued.
Definition: ge_prepass.h:2781
#define MOVE_START
Move started.
Definition: ge_prepass.h:2780
{
if (CheckCoreMessage(bc))
{
switch (scheme)
{
}
}
break;
}
#define EVMSG_UPDATESCHEME
Scheme has been updated.
Definition: ge_prepass.h:2786
#define SCHEME_DARK
Dark.
Definition: ge_prepass.h:2788
#define SCHEME_OTHER
Other.
Definition: ge_prepass.h:2789
Custom Messages
It is possible to send custom, asynchronous core messages. This can be used to send a message from a custom thread into the main thread.
void SpecialEventAdd(Int32 messageid, UInt p1=0, UInt p2=0)
case ID_CUSTOMEVENT:
{
break;
}
Definition: c4d_string.h:41
static String IntToString(Int32 v)
Definition: c4d_string.h:497
@ BFM_CORE_PAR2
ANY Parameter 2.
Definition: gui.h:902
Other Functions
Other functions to send core messages are:
GeData SendCoreMessage(Int32 coreid, const BaseContainer &msg, Int32 eventid=0)
#define COREMSG_CINEMA
Requests to Cinema 4D core.
Definition: c4d_general.h:1565
#define COREMSG_CINEMA_FORCE_AM_UPDATE
Forces an Attribute Manager update.
Definition: c4d_gui.h:95
Further Reading