THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 04/08/2003 at 05:07, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 8.100
Platform:
Language(s) : C++ ;
---------
How does Display Control work ??
I tried using this code
class TestToolData : public ToolData
{
public:
virtual Bool InitTool(BaseDocument* doc, BaseContainer& data, BaseThread* bt);
virtual void FreeTool(void);
virtual Bool MouseInput(BaseDocument *doc, BaseContainer &data, BaseDraw *bd, EditorWindow *win, const BaseContainer &msg);
virtual LONG GetState(BaseDocument *doc);
virtual Bool GetCursorInfo(BaseDocument *doc, BaseContainer &data, BaseDraw *bd, Real x, Real y, BaseContainer &bc);
virtual LONG Draw(BaseDocument *doc, BaseContainer &data, BaseDraw *bd, BaseDrawHelp *bh, BaseThread *bt,LONG flags);
virtual Bool InitDisplayControl(BaseDocument* doc, BaseContainer& data, BaseDraw* bd, AtomArray* active);
virtual void FreeDisplayControl(void);
virtual Bool DisplayControl(BaseDocument* doc, BaseObject* op, BaseObject* chainstart, BaseDraw* bd, BaseDrawHelp* bh, ControlDisplayStruct& cds);
virtual SubDialog* AllocSubDialog(BaseContainer* bc);
private:
Vector *color;
};
Bool TestToolData::InitTool(BaseDocument* doc, BaseContainer& data, BaseThread* bt)
{
GePrint("InitTool");
return TRUE;
}
void TestToolData::FreeTool(void)
{
GePrint("FreeTool");
}
LONG TestToolData::GetState(BaseDocument *doc)
{
GePrint("Get State");
if (doc->GetMode()==Mpaint || !doc->GetActiveObject() || !doc->GetActiveObject()->IsInstanceOf(Opolygon)) return 0;
return CMD_ENABLED;
}
Bool TestToolData::InitDisplayControl(BaseDocument* doc, BaseContainer& data, BaseDraw* bd, AtomArray* active)
{
GePrint("Init Display Control");
color = NULL;
BaseObject *op = doc->GetActiveObject();
if(!op) return TRUE;
if(!op->IsInstanceOf(Opolygon)) return TRUE;
Polygon *poly = ToPoly(op)->GetPolygon();
LONG pcnt = ToPoly(op)->GetPolygonCount();
Vector *vert = ToPoly(op)->GetPoint();
LONG vcnt = ToPoly(op)->GetPointCount();
color = (Vector* )GeAlloc(sizeof(Vector)*vcnt);
// now i calculate the colors
return TRUE;
}
void TestToolData::FreeDisplayControl(void)
{
GePrint("Free Display Control");
GeFree(color);
}
Bool TestToolData::DisplayControl(BaseDocument* doc, BaseObject* op, BaseObject* chainstart, BaseDraw* bd, BaseDrawHelp* bh, ControlDisplayStruct& cds)
{
GePrint("DisplayControl");
if(!(op && op==doc->GetActiveObject() && op->IsInstanceOf(Opolygon)) return TRUE;
cds.vertex_color = color;
cds.backface_culling = FALSE;
return TRUE;
}
This crashes all the time. To be more precise, it crashes when i want to modify the points of the mesh using any other tool.