On 27/08/2014 at 13:25, xxxxxxxx wrote:
someone please! i can't really make the Execute() method work.. i don't know how to make cinema call it. the picture viewer don't see any changes to the data in the base container and i have another problem.. when i disable the object and then re-enable it cinema crash. it might be because i have some array as member variable? here some code:
HEADER:
class sea : public ObjectData
{
INSTANCEOF(Sea, ObjectData);
public:
Vector* grid;
waveD* wave;
String* debug = NewObj(String);
PolygonObject* obj;
BaseContainer* data;
void Updatesea();
void Buildwavedata();
void Buildgeo();
Bool Init(GeListNode* node);
virtual void Free(GeListNode* node);
virtual BaseObject* GetVirtualObjects(BaseObject* op, HierarchyHelp *hh);
static NodeData* Alloc(void) { return NewObjClear(sea); }
};
INIT method
Bool sea::Init(GeListNode* node)
{
BaseObject* op = (BaseObject* )node;
data = op->GetDataInstance();
if (!data)
return false;
data->SetInt32(RES, 150);
data->SetInt32(ANGLE, 89);
data->SetFloat(FREQ_MIN, 0.02);
data->SetFloat(FREQ_MAX, 20);
data->SetFloat(DIRECTION, 0);
data->SetFloat(DIR_TOLLERANCE, 90);
data->SetFloat(STATE, 1);
data->SetFloat(Q, 4);
data->SetInt32(WAVE_NUM, 100);
obj = PolygonObject::Alloc(pcount(), polycount());
grid = NewMem(Vector, pcount());
Buildwavedata();
Buildgeo();
Updatesea();
return true;
}
GVO method
BaseObject* sea::GetVirtualObjects(BaseObject* op, HierarchyHelp *hh)
{
BaseDocument* doc = GetActiveDocument();
Int32 oldFrame = data->GetInt32(FRAME);
Int32 fps = doc->GetFps();
Int32 curFrame = doc->GetTime().GetFrame(fps);
if (oldFrame != curFrame)
{
clock_t startTime = clock();
Updatesea();
Float elaps = Float(clock() - startTime) / (Float)CLOCKS_PER_SEC;
GePrint(debug->FloatToString(elaps));
data->SetInt32(FRAME, curFrame);
}
return obj;
}