Table of Contents


NodeData based classic plugin classes can implement NodeData::Read() and NodeData::Write(). This allows to store internal data that is not stored in the BaseContainer when the scene is saved to a *.c4d file.

If NodeData::Read() and NodeData::Write() are implemented typically also NodeData::CopyTo() should be implemented.

NodeData::Read() corresponds to C4DAtom::Read(), NodeData::Write() corresponds to C4DAtom::Write().

See also BaseDocument Disc I/O.


NodeData::Read() is called when a *.c4d file is loaded, NodeData::Write() is called when the element is saved to a *.c4d file. The given HyperFile object represents this *.c4d file.

// This example stores an internal list and an integer value with the actual object.
Bool Read(GeListNode* node, HyperFile* hf, Int32 level)
if (level >= 0) // checks the plugin level
// read a GeListHead
_branchHead->ReadObject(hf, true);
// read an integer value
return true;
Bool Write(GeListNode* node, HyperFile* hf)
// store a GeListHead
// store an integer value
return true;

The arguments of the functions are:

The order of operations needs to be the same in both function implementations.
When NodeData::Read() is called the element is not yet part of a BaseDocument.

Further Reading