About
NodeData based classic plugin classes can implement NodeData::Message() to receive various messages that are sent for several reasons. This page shows how to handle the most important messages.
Note Messages sent to C4DAtom::Message() and received by NodeData::Message() are synchronous messages.
NodeData::Message() corresponds to C4DAtom::Message() and C4DAtom::MultiMessage() .
Usage
Basics
NodeData::Message() is called by Cinema 4D to inform the plugin class about an event or to request some information from it. Additional data is handed over in form of a void pointer that has to be cast into the correct type depending on the message.
{
switch (type)
{
{
break ;
}
Note If the plugin class hosts a subshader, HandleShaderMessage() must be used to relay certain messages to this subshader. Especially MSG_GETALLASSETS , MSG_RENAMETEXTURES and MSG_MULTI_CLEARSUGGESTEDFOLDER should be handled.
Filter
With C4DAtom::MultiMessage() it is possible to send messages to the complete object hierarchy or branches (see also Heads and Branches ). In this case it is possible to filter certain messages so they are not sent to the child elements of the given element.
Return true
to let the message pass and false
to block it.
The data of this message is MessageFilter :
Data
Messages can be used to retrieve data from an entity. For generic purposes this message exists:
The data of this message is RetrievePrivateData :
{
if (data.
data !=
nullptr )
{
Int32 *
const value = static_cast<Int32*>(data.
data );
}
}
{
if (pdata)
{
pdata->
data = &(this->_value);
return true ;
}
break ;
}
Assets
Plugins use external assets typically by referencing the asset file in a Filename parameter. When the document is saved with "Save Project with Assets" or is rendered via Team Render these assets have to be collected. To collect these assets Cinema 4D sends these messages to all scene elements:
Warning MSG_GETALLASSETS is not sent to MaterialData plugins.
{
AssetData *
const assetData = static_cast<AssetData*>(data);
if (assetData == nullptr )
return true ;
return true ;
BaseList2D *
const baseList2D = static_cast<BaseList2D*>(node);
if (baseList2D)
{
{
assetData->
Add (path,
nullptr );
}
}
break ;
}
{
BaseContainer & bc = (static_cast<BaseList2D*>(node))->GetDataInstanceRef();
{
}
break ;
}
Further asset related messages are:
MSG_MULTI_MARKMATERIALS : When the given data is nullptr
this is sent to scene elements to let them mark the materials they use (with BIT_MATMARK ). Otherwise the message is sent to get material links translated, for example when a material is replaced. In this case the corresponding data is MarkMaterials . This is needed for example when an object that is using a material is copied.
MSG_RENAMETEXTURES : This message is sent to all scene elements when a bitmap image was renamed (e.g. by "Save Project" or by BodyPaint 3D) and all shaders etc. need to adjust the name. The message data is RenameTextureMessage .
See also BaseDocument Convert and Export and Disc I/O .
Icon
Cinema 4D sends a message to ObjectData and TagData based plugins so they can change their icon dynamically.
The data of this message is GetCustomIconData :
{
if (iconData == nullptr )
return true ;
}
An object or tag can include the ID_BASELIST_ICON_SETTINGS_GROUP parameter group. It is possible to add a custom color mode to that group and to define that custom color when reacting to MSG_GETCUSTOMICON .
BaseObject *
const op = static_cast<BaseObject*>(node);
iconSpecialModes.
SetString (0,
"Custom Color Mode" _s);
{
if (cid == nullptr )
return false ;
BaseObject *
const baseObject = static_cast<BaseObject*>(node);
{
if (id > 0)
};
break ;
}
Interaction
It is possible to drag and drop something onto objects and tags in the Object Manager. These elements are informed about this event with this message:
MSG_DRAGANDDROP : Received by an element in the Object Manager when something is dropped on it. The corresponding data is DragAndDrop .
{
DragAndDrop *
const dnd = static_cast<DragAndDrop*>(data);
if (dnd == nullptr )
return false ;
return true ;
const Bool dataNotSet = dnd->
data ==
nullptr ;
if (typeIsNotFilename || dataNotSet)
return false ;
{
}
return true ;
}
When the user double clicks on an icon in the Object Manger this message is sent to the corresponding element.
Attribute Manager Interaction
Users edit scene elements and their parameters with the Attribute Manager. The Attribute Manager sends multiple messages to the edited object to inform about the interaction.
{
if (dc == nullptr )
return false ;
if (dc->
_descId [0].id == EXAMPLE_GENERATOR_BUTTON)
{
}
break ;
}
Further messages are:
{
if (dp->
_descId [0] == EXAMPLE_GENERATOR_POPUP)
{
{
}
else
{
}
}
break ;
}
{
if (dcgn)
{
{
if (dcgn->
_subId == MSG_DESCRIPTION_COLORSTRING_COLORCHANGE)
{
if (messageData)
{
const Vector color = messageData->
GetVector (MSG_DESCRIPTION_COLORSTRING_COLOR);
}
}
}
}
break ;
}
See also Description Notifications .
These messages are related to the Take system:
Creation
MSG_MENUPREPARE : Allows tags, objects, shaders etc. to do some setup work when called from the menu. The corresponding data is the current BaseDocument . Is called before the object is added to the document.
{
BaseObject *
const op = static_cast<BaseObject*>(node);
if (annotationTag)
{
const String annotation {
"This is a new object." };
}
break ;
}
Document Related
Certain events trigger a broadcast message that is sent to all elements of a BaseDocument .
Some messages are just send to SceneHookData plugins. See also BaseDocument::SendInfo() .
{
if (msg == nullptr )
return false ;
{
{
BaseObject *
const op = static_cast<BaseObject*>(node);
if (!op)
return false ;
break ;
}
}
break ;
}
Also these messages are sent to all elements:
A special message is sent when the element is animated:
MSG_ANIMATE : Sent to elements after they have been animated. Only sent to objects with keyframes.
Further Reading
#define DRAGANDDROP_FLAG_SOURCE
Drag and drop message is send to the source objects (objects that were dragged).
Definition: c4d_baselist.h:849
Message struct for the MSG_DOCUMENTINFO message.
Definition: c4d_baselist.h:942
BaseContainer GetData()
Definition: c4d_baselist.h:2207
Filename GetFilename(Int32 id, const Filename &preset=Filename()) const
Definition: c4d_basecontainer.h:399
Vector GetVector(Int32 id, const Vector &preset=Vector()) const
Definition: c4d_basecontainer.h:367
Definition: c4d_baselist.h:2100
void MessageDialog(const maxon::String &str)
#define DRAGANDDROP_FLAG_DROP
Drop.
Definition: c4d_baselist.h:844
void SetFilename(Int32 id, const Filename &f)
Definition: c4d_basecontainer.h:579
void * data
The pointer to the dragged elements. Depends on the drag type.
Definition: c4d_baselist.h:877
const Filename GetFile(void) const
Definition: c4d_baselist.h:1193
Only return texture assets.
const BaseContainer * GetDataInstance() const
Definition: c4d_baselist.h:2224
Definition: c4d_baseobject.h:220
void SetInt32(Int32 id, Int32 l)
Definition: c4d_basecontainer.h:501
void SetString(Int32 id, const maxon::String &s)
Definition: c4d_basecontainer.h:565
Int32 type
The drag type: DRAGTYPE.
Definition: c4d_baselist.h:876
#define MSG_DRAGANDDROP
Received by an element in the Object manager when something is dropped on it. The corresponding data ...
Definition: c4d_baselist.h:436
#define Tannotation
Annotation.
Definition: ge_prepass.h:1235
Definition: c4d_basetag.h:40
Manages file and path names.
Definition: c4d_file.h:81
#define MSG_DOCUMENTINFO
Sent as broadcast message by the document when it is loaded, saved , merged etc. The corresponding da...
Definition: c4d_baselist.h:440
#define MSG_RETRIEVEPRIVATEDATA
A generic private message to retrieve data from an object. Specific for every type of object so no pu...
Definition: c4d_baselist.h:380
#define MSG_GETALLASSETS
Definition: c4d_shader.h:983
#define Ocube
Cube.
Definition: ge_prepass.h:1035
Float64 Float
Definition: apibase.h:197
void SetBool(Int32 id, Bool b)
Definition: c4d_basecontainer.h:494
Other filename.
Definition: gui.h:752
#define MSG_MULTI_CLEARSUGGESTEDFOLDER
Definition: c4d_baselist.h:500
#define MSG_DESCRIPTION_COMMAND
Sent by for example BUTTON description element. The corresponding data is DescriptionCommand.
Definition: c4d_baselist.h:370
UInt32 flags
Definition: c4d_baselist.h:874
#define RESOURCEIMAGE_OK
Definition: ge_prepass.h:3328
Definition: customgui_iconchooser.h:34
BaseTag * MakeTag(Int32 type, BaseTag *pred=nullptr)
Bool filled
Set this to true if the icon data dat was changed or set.
Definition: c4d_baselist.h:1066
Bool GetCustomIcon(GetCustomIconData &cid, const CustomIconSettings &settings, Bool drawBeforeColoring=false, CustomIconGetIdDelegate *getIdCallback=nullptr, CustomIconDrawDelegate *drawCallback=nullptr)
#define MSG_EDIT
Allows elements to do some action if the user edits the element (double-click e.g....
Definition: c4d_baselist.h:378
Represents a C4DAtom that resides in a 4D list.
Definition: c4d_baselist.h:1723
IconData * dat
Definition: c4d_baselist.h:1064
#define Osphere
Sphere.
Definition: ge_prepass.h:1036
#define MSG_UPDATE
Must be sent if the bounding box has to be recalculated. (Otherwise use MSG_CHANGE....
Definition: c4d_baselist.h:335
Definition: c4d_string.h:36
static String IntToString(Int32 v)
Definition: c4d_string.h:493
#define MSG_DESCRIPTION_POPUP
Allows popup menu handling in the Attribute Manager. The corresponding data is DescriptionPopup.
Definition: c4d_baselist.h:371
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
#define iferr_ignore(...)
Definition: resultbase.h:1384
Message struct for MSG_DESCRIPTION_COMMAND.
Definition: lib_description.h:839
Bool Add(const Filename &fn, BaseList2D *bl, Int32 parameterId=-1, Bool netRequestOnDemand=false, Int32 channelIndex=-1, const maxon::CString &nodePath=maxon::GetZeroRef< maxon::CString >(), const maxon::Id &nodeSpace=maxon::GetZeroRef< maxon::Id >())
Int32 GetInt32(void) const
Definition: c4d_gedata.h:411
const BaseContainer & GetDataInstanceRef() const
Definition: c4d_baselist.h:2240
maxon::BaseArray< maxon::Color > _specialColors
Special colors (e.g. Light Color for light object)
Definition: c4d_baselist.h:1198
#define MSG_MENUPREPARE
Allows tags, objects, shaders etc. to do some setup work when called from the menu....
Definition: c4d_baselist.h:379
const Filename GetDirectory(void) const
Definition: tannotation.h:21
Int32 _subId
The message type sub-ID. Depending on the custom GUI implementation a different sub-ID can be passed ...
Definition: lib_description.h:902
Definition: c4d_gedata.h:77
DescID _descId
Description ID of the parameter that triggered the command.
Definition: lib_description.h:832
maxon::Int32 Int32
Definition: ge_sys_math.h:45
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:209
Bool Message(Int32 type, void *data=nullptr)
Definition: c4d_baselist.h:1350
ASSETDATA_FLAG _flags
The asset data flags: ASSETDATA_FLAG.
Definition: c4d_baselist.h:1001
const BaseContainer * _data
The data of the message, can be nullptr.
Definition: lib_description.h:903
void FillCustomIconSettingsFromBaseList2D(CustomIconSettings &settings, const BaseContainer &data, Int32 defaultIconId, Bool fillDefault)
Private.
Definition: lib_description.h:899
#define MSG_DESCRIPTION_CUSTOMGUI_NOTIFICATION
Sent by a custom GUI to the parent. The corresponding data is DescriptionCustomGuiNotification.
Definition: c4d_baselist.h:398
GeData * InsData(Int32 id, const GeData &n)
Definition: c4d_basecontainer.h:234
Message struct for the MSG_GETCUSTOMICON message.
Definition: c4d_baselist.h:1057
void SetContainer(Int32 id, const BaseContainer &s)
Definition: c4d_basecontainer.h:593
Int32 _customGuiId
The custom GUI plugin ID.
Definition: lib_description.h:901
Definition: obaselist.h:12
Definition: delegate.h:235
#define MSG_GETCUSTOMICON
Every atom can return a custom icon with this message. The corresponding data is GetCustomIconData.
Definition: c4d_baselist.h:432
#define DRAGANDDROP_FLAG_ACCEPT
Accept.
Definition: c4d_baselist.h:845
maxon::Bool Bool
Definition: ge_sys_math.h:40
#define MSG_DOCUMENTINFO_TYPE_LOAD
Document was loaded.
Definition: c4d_baselist.h:452
Message struct for the MSG_DRAGANDDROP message.
Definition: c4d_baselist.h:865
Definition: customgui_iconchooser.h:35
MAXON_ATTRIBUTE_FORCE_INLINE COLORTYPE HsvToRgb(const COLORTYPE &hsv)
Definition: gfx_image_functions_color_conversions.h:51
#define ID_ICONCHOOSER_SETTINGS
Id to store icon settings data into BaseList2D basecontainer.
Definition: customgui_iconchooser.h:30
Int32 flags
The flags for the retrieval.
Definition: c4d_baselist.h:785
static String VectorToString(const Vector32 &v, Int32 nnk=-1)
Definition: c4d_string.h:569
Int32 GetType() const
Definition: c4d_baselist.h:1304
Definition: obaselist.h:10
Definition: c4d_baselist.h:778
Int32 GetInt32(Int32 id, Int32 preset=0) const
Definition: c4d_basecontainer.h:299
Bool GetIcon(Int32 lIconID, IconData *pData)
Bool GetParameter(const DescID &id, GeData &t_data, DESCFLAGS_GET flags)
void * data
The address returned.
Definition: c4d_baselist.h:786
Int32 type
The message type: MSG_DOCUMENTINFO_TYPE.
Definition: c4d_baselist.h:949
Definition: c4d_basecontainer.h:42
Definition: c4d_baselist.h:989
Float GetFloat(void) const
Definition: c4d_gedata.h:423