Hi Roger,
when an ObjectData is generating a spline, ObjectData::GetDimension() is correctly not called because internally Cinema 4D handles this differently and checks only for the implementation existence.
Actually - as you've already experienced - the ObjectData::GetContour() is called first to create the cache of the spline and, after that, Cinema takes care of checking all the points used to represent the shape are to compute the bounding.
I apologize due to the example being misleading and, to avoid future doubts, I'll correct the HeartShape class declaration as:
class HeartShape : public ObjectData
{
INSTANCEOF(HeartShape, ObjectData)
public:
static NodeData* Alloc(){ return NewObj(HeartShape) iferr_ignore("HeartShape plugin not instanced"); }
virtual Bool Init(GeListNode* node);
void GetDimension(BaseObject* op, Vector* mp, Vector* rad){ return; }
virtual SplineObject* GetContour(BaseObject* op, BaseDocument* doc, Float lod, BaseThread* bt);
};
Cheers, R