THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 17/12/2012 at 06:09, xxxxxxxx wrote:
Can you post some code for both .res BITMAPBUTTON declarations and dynamic declarations? Neither are working in R14. I'm using code which sets the state using something like the included code (showing just examples). Note that this is terse process is what was relayed to me here in order to control the toggle state of two-image bitmap buttons. If there is now an easier way with those BITMAPBUTTON_ICONID1/2 options, I'd love to see code (there are no examples in the sdk docs or cinema4dsdk)
BITMAPBUTTON GREEBLER_BITMAP_ARRAY { ANIM OFF; BUTTON; }
// BaseContainers for Dynamic Descriptions of Custom Greeble Shapes, Nurnies
bmbBC = GetCustomDataTypeDefault(DTYPE_BUTTON);
bmbBC.SetLong(DESC_ANIMATE, DESC_ANIMATE_OFF);
bmbBC.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_BITMAPBUTTON);
bmbBC.SetLong(BITMAPBUTTON_BORDER, BORDER_NONE);
bmbBC.SetBool(BITMAPBUTTON_BUTTON, TRUE);
bmbBC.SetBool(BITMAPBUTTON_TOGGLE, TRUE);
// NodeData.GetDParameter
//*---------------------------------------------------------------------------*
Bool GreeblerObj::GetDParameter(GeListNode* node, const DescID& id, GeData& t_data, DESCFLAGS_GET& flags)
//*---------------------------------------------------------------------------*
{
if (!node) return FALSE;
LONG did = id[0].id;
// Custom Greebles
if ((did >= GREEBLER_GREEC_BITMAP) && (did <= GREEBLER_GREEC_BITMAP_END))
{
BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, cg_bm_dirty);
t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs);
flags |= DESCFLAGS_GET_PARAM_GET;
--cg_bm_dirty;
}
// Nurnies
else if ((did >= GREEBLER_NURN_BITMAP) && (did <= GREEBLER_NURN_BITMAP_END))
{
BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, nu_bm_dirty);
t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs);
flags |= DESCFLAGS_GET_PARAM_GET;
--nu_bm_dirty;
}
else
{
switch (did)
{
// BitmapButtons
case GREEBLER_BITMAP_ARRAY:
{
BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, sg_bm_dirty);
t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs);
flags |= DESCFLAGS_GET_PARAM_GET;
--sg_bm_dirty;
break;
}
}
}
return SUPER::GetDParameter(node, id, t_data, flags);
}
// NodeData.SetDParameter
//*---------------------------------------------------------------------------*
Bool GreeblerObj::SetDParameter(GeListNode* node, const DescID& id, const GeData& t_data, DESCFLAGS_SET& flags)
//*---------------------------------------------------------------------------*
{
if (!node) return FALSE;
LONG did = id[0].id;
// Array BitmapButton
else if (did == GREEBLER_BITMAP_ARRAY)
{
if (flags & DESCFLAGS_SET_USERINTERACTION)
{
BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance();
// user clicked on button - toggle state
bc->SetBool(GREEBLER_SHAPE_ARRAY, !bc->GetBool(GREEBLER_SHAPE_ARRAY));
}
flags |= DESCFLAGS_SET_PARAM_SET;
}
return SUPER::SetDParameter(node, id, t_data, flags);
}
// NodeData.Message
//*---------------------------------------------------------------------------*
Bool GreeblerObj::Message(GeListNode* node, LONG type, void* data)
//*---------------------------------------------------------------------------*
{
//GePrint(MsgToString(type));
if (!node) return FALSE;
if (type == MSG_DESCRIPTION_GETBITMAP)
return MsgGetBitmap(static_cast<DescriptionGetBitmap*>(data), static_cast<BaseObject*>(node));
else if (type == MSG_DESCRIPTION_COMMAND)
return MsgCommand(static_cast<DescriptionCommand*>(data), static_cast<BaseObject*>(node));
else if (type == MSG_DESCRIPTION_POSTSETPARAMETER)
return MsgPostSetParameter(static_cast<DescriptionPostSetValue*>(data), static_cast<BaseObject*>(node));
else if (type == MSG_DESCRIPTION_CHECKUPDATE)
return MsgCheckUpdate(static_cast<DescriptionCheckUpdate*>(data), static_cast<BaseObject*>(node));
/*
else if (type == MSG_DESCRIPTION_CHECKDRAGANDDROP)
return MsgCheckDragAndDrop(static_cast<BaseTag*>(node), static_cast<DescriptionCheckDragAndDrop*>(data));
*/
return SUPER::Message(node,type,data);
}
// GreeblerObj.GetSSBitMap
//*---------------------------------------------------------------------------*
void GreeblerObj::GetSSBitMap(DescriptionGetBitmap* dgb, const Bool& enabled, const String& sfn)
//*---------------------------------------------------------------------------*
{
Filename bg;
if (enabled) bg = stocksfn+Filename(sfn+"_T.tif");
else bg = stocksfn+Filename(sfn+"_F.tif");
if (!GeFExist(bg)) return;
AutoAlloc<BaseBitmap> bm;
if (!bm) return;
bm->Init(bg);
dgb->bmp = bm.Release();
}
// GreeblerObj.MsgGetBitmap
//*---------------------------------------------------------------------------*
Bool GreeblerObj::MsgGetBitmap(DescriptionGetBitmap* dgb, BaseObject* op)
//*---------------------------------------------------------------------------*
{
if (!(dgb && op)) return TRUE;
BaseContainer* bc = op->GetDataInstance();
LONG id = dgb->id[0].id;
// Stock Greebles
else if (id == GREEBLER_BITMAP_ARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_ARRAY), "array");
else if ((id >= GREEBLER_GREEC_BITMAP) && (id <= GREEBLER_GREEC_BITMAP_END))
{
// Get associated GCBInfo bitmap
BaseBitmap* ibm = GetGCBInfoBitmap_Greebles(op, bc, id);
if (!ibm) return TRUE;
AutoAlloc<BaseBitmap> bm;
if (!bm) return TRUE;
ibm->CopyTo(bm);
dgb->bmp = bm.Release();
}
// Nurnies
else if (id == GREEBLER_BITMAP_NBARS) GetSSBitMap(dgb, bc->GetBool(GREEBLER_OBJECT_NBARS), "bars");
else if (id == GREEBLER_BITMAP_NARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_OBJECT_NARRAY), "array");
else if (id == GREEBLER_BITMAP_NRARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_OBJECT_NRARRAY), "rarray");
else if ((id >= GREEBLER_NURN_BITMAP) && (id <= GREEBLER_NURN_BITMAP_END))
{
// Get associated GCBInfo bitmap
BaseBitmap* ibm = GetGCBInfoBitmap_Nurnies(op, bc, id);
if (!ibm) return TRUE;
AutoAlloc<BaseBitmap> bm;
if (!bm) return TRUE;
ibm->CopyTo(bm);
dgb->bmp = bm.Release();
}
return TRUE;
}