Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 29/08/2014 at 05:36, xxxxxxxx wrote:
User Information: Cinema 4D Version: R14 Platform: Windows ; Language(s) : C++ ;
--------- I have an object generator plugin and using the GetDDescription override to insert a BitmapButton into the plugins AM..
This is working when using existing icon IDs ( Osphere and Ocube ) but what id like to do is use my own bitmap images instead. Im aware that one option is to register unique icon ids for these, but i see that BitmapButtonCustomGui has a ->SetImage() method to allocate a BaseBitmap..
s ( Osphere and Ocube ) but what i
m aware that one option is to register unique icon id
The problem is im not instantiating my BitmapButton im just creating the BaseContainer for it inside GetDDescription and adding it to the resource container. How can i then use SetImage() to apply a bitmap to it?
m not instantiating my BitmapButton i
Or do i have to register them as icons and if so where do i do that?
Here`s roughly the code i have:
Bool MyPlugin::GetDDescription(GeListNode *node, Description *description, DESCFLAGS_DESC &flags) { if (!description->LoadDescription(node->GetType())) return FALSE; BaseContainer *props = description->GetParameterI(DescLevel(ID_MYGROUP), NULL); //Get existing Group from my static resource if (props) { BaseContainer bbutn; bbutn= GetCustomDataTypeDefault(DTYPE_BUTTON); bbutn.GetCustomDataType(DTYPE_BUTTON, CUSTOMGUI_BITMAPBUTTON); bbutn.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_BITMAPBUTTON); bbutn.SetLong(BITMAPBUTTON_BORDER, BORDER_NONE); bbutn.SetBool(BITMAPBUTTON_BUTTON, TRUE); bbutn.SetBool(BITMAPBUTTON_TOGGLE, TRUE); bbutn.SetLong(BITMAPBUTTON_ICONID1, Osphere); //Existing icon ID for testing bbutn.SetLong(BITMAPBUTTON_ICONID2, Ocube); //Existing icon ID for testing description->SetParameter(DescLevel(MYPLUGIN_BBUTN, DESC_CUSTOMGUI, 0), bbutn, DescLevel(ID_MYGROUP)); //Shove the new description basecontainer into the resource } flags |= DESCFLAGS_DESC_LOADED; return SUPER::GetDDescription(node, description, flags); } {
On 29/08/2014 at 10:04, xxxxxxxx wrote:
It might be possible to use SetImage() for this. But I don't know how to do that. I do know how to register your icon though.
Generic ObjectData plugin Example:
//This is how to register a custom icon //Then use it in the GetDDescription() method to create a dynamically created bitmapbutton with your icon on it Bool MyObject::GetDDescription(GeListNode *node, Description *description, DESCFLAGS_DESC &flags) { if (!description || !node) return FALSE; //Loads the gui stuff from the .res file in case we want to use them if (!description->LoadDescription(node->GetType())) return FALSE; //We will load the BitmapButton GUI into the first description level(much like loading UD entries into levels) DescID did = DescLevel(1, DTYPE_NONE, 0); BaseContainer settings; settings.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_BITMAPBUTTON); settings.SetString(DESC_NAME,"My Button"); settings.SetBool(BITMAPBUTTON_BUTTON, TRUE); settings.SetLong(DESC_GUIOPEN, TRUE); settings.SetBool(BITMAPBUTTON_BUTTON, TRUE); settings.SetBool(BITMAPBUTTON_TOGGLE, TRUE); settings.SetLong(BITMAPBUTTON_ICONID1, 200000000); //Uses a custom icon we registered in the register() method settings.SetLong(BITMAPBUTTON_ICONID2, Ocube); //Uses the cube icon that C4D already registered for us if(!description->SetParameter(did,settings,DescLevel(ID_OBJECTPROPERTIES))) return FALSE; flags |= DESCFLAGS_DESC_LOADED; return SUPER::GetDDescription(node, description, flags); } Bool RegisterMyObject(void) { Filename fn = GeGetPluginPath()+"res"+"myicon.tif"; AutoAlloc<BaseBitmap> bmp; if(IMAGERESULT_OK != bmp->Init(fn)) return FALSE; //Register our custom icon image with c4d so we can use it like the other icons //NOTE:The ID# 200000000 is for testing purposes only!!...Be sure to get a proper one from c4dcafe.com RegisterIcon(200000000, bmp, 0*32, 0, 32, 32, ICONFLAG_COPY); return RegisterObjectPlugin(PLUGIN_ID, GeLoadString(IDS_MYOBJECT), OBJECT_GENERATOR|OBJECT_ISSPLINE|OBJECT_CALL_ADDEXECUTION, MyObject::Alloc, "MyObject", AutoBitmap("MyIcon.tif"), 0); }
-ScottA
On 29/08/2014 at 15:08, xxxxxxxx wrote:
Thanks much for that Scott, got it.
The docs say that when using the RegisterIcon() function, if the optional x/y/width/height/copy arent specified that it will use the full bitmap. What i found was that it didnt work at all unless i specified the bitmap size - in my case RegisterIcon(2000000000, bmp, 0*128, 0, 128, 64, ICONFLAG_COPY). Maybe it was just the COPY flag that got it working though, not sure.. What is the 0*32 bit about for the x-position btw?
t specified that it will use the full bitmap. What i found was that it didn
On 29/08/2014 at 17:31, xxxxxxxx wrote:
Sorry about that. Just ignore it and use 128 (or whatever size you want) . When I cut and paste from my notes sometimes I miss little things like that. I was probably doing dynamic sizing with the code at one point and forgot to change it.