FieldObject Manual

About

A FieldObject represents a field in the Cinema 4D scene. Such a field can be sampled in 3D space to obtain values and colors. Field objects are typically used with MoGraph effectors.

A FieldObject is an instance of Ofield.

FieldObject

A new FieldObjects is created with the usual tools:

// This example creates a new "Random" field object.
// allocate random field object
FieldObject* const fieldObject = FieldObject::Alloc(Frandom);
if (fieldObject == nullptr)
return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
// insert into the document
doc->InsertObject(fieldObject, nullptr, nullptr);
Definition: c4d_fielddata.h:1083
static FieldObject * Alloc(Int32 type)
Definition: c4d_fielddata.h:1095
static const Int32 Frandom
Random/noise field.
Definition: c4d_fielddata.h:56
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
const char * doc
Definition: pyerrors.h:226

Sampling Fields

A FieldObject can be sampled using FieldObject::Sample(). How the field is sampled is defined using the classes FieldInfo, FieldShared, FieldInput and FieldOutput.

// This example samples the given FieldObject.
// prepare arrays for sample points
positions.Resize(sampleCnt) iferr_return;
uvws.Resize(sampleCnt) iferr_return;
directions.Resize(sampleCnt) iferr_return;
// set positions
Float64 xOffset = 0.0;
for (maxon::Vector& pos : positions)
{
pos.x = xOffset;
xOffset += stepSize;
}
// prepare results
FieldOutput results;
FieldOutputBlock block = results.GetBlock();
// define points to sample
FieldInput points(positions.GetFirst(),
directions.GetFirst(),
uvws.GetFirst(),
sampleCnt,
Matrix());
// context
// shared data
FieldShared shared;
// sample the object
fieldObject->InitSampling(info, shared) iferr_return;
fieldObject->Sample(points, block, info) iferr_return;
fieldObject->FreeSampling(info, shared);
maxon::Result< void > Sample(const FieldInput &inputs, FieldOutputBlock &outputs, const FieldInfo &info, const FIELDOBJECTSAMPLE_FLAG &objectSampleFlags=FIELDOBJECTSAMPLE_FLAG::NONE) const
Definition: c4d_fielddata.h:1137
void FreeSampling(const FieldInfo &info, FieldShared &shared)
Definition: c4d_fielddata.h:1125
maxon::Result< void > InitSampling(const FieldInfo &info, FieldShared &shared)
Definition: c4d_fielddata.h:1117
Definition: basearray.h:412
MAXON_ATTRIBUTE_FORCE_INLINE const T * GetFirst() const
Definition: basearray.h:1326
ResultMem Resize(Int newCnt, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::DEFAULT)
Definition: basearray.h:1369
void Py_ssize_t * pos
Definition: dictobject.h:50
maxon::Float64 Float64
Definition: ge_sys_math.h:67
@ VALUE
Sample only the value at the current point (minimum must still sample the value)
_Py_clock_info_t * info
Definition: pytime.h:197
#define iferr_return
Definition: resultbase.h:1465
Thread local information for this field sample invocation.
Definition: c4d_fielddata.h:901
static maxon::Result< FieldInfo > Create(BaseList2D *caller, FIELDSAMPLE_FLAG callingFlags=FIELDSAMPLE_FLAG::VALUE)
Definition: c4d_fielddata.h:534
Definition: c4d_fielddata.h:339
Definition: c4d_fielddata.h:116
FieldOutputBlock GetBlock() const
maxon::Result< void > Resize(Int newSize, FIELDSAMPLE_FLAG sampleFlags=FIELDSAMPLE_FLAG::ALL, maxon::COLLECTION_RESIZE_FLAGS resizeFlags=maxon::COLLECTION_RESIZE_FLAGS::DEFAULT)
Definition: c4d_fielddata.h:475

FieldInfo

A FieldInfo object provides information on the context of the sampling operation.

A FieldInfo object is created with:

Members:

Flags FIELDSAMPLE_FLAG:

FieldShared

FieldShared is the object reponsible to share data between fields.

The public members are:

FieldInput

A FieldInput object defines points in space that should be sampled. Optionally further data like directions or UV-coordinates can be added.

The public members are:

FieldOutput

A FieldOutput object stores the data generated by the sampling process.

A FieldOutput can be created with:

These functions are provided:

The public members are:

FieldCallerStack

The FieldCallerStack defines the list of BaseList2D objects calling the sampling function. If no object is calling the sampling function, an unique ID (UInt) must be provided.

The stack data is accessed with:

Public members are:

Further Reading