Colorize OM icons?

  • On 16/05/2014 at 13:09, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R13+ 
    Platform:   Windows  ; Mac  ;  Mac OSX  ; 
    Language(s) :     C++  ;


    Is it possible to colorize the object icons in the Object Manager, like the native joints in R13+?

    I did a search for "colorize icon" but came up with nothing. 

    Cactus Dan

  • On 18/05/2014 at 01:49, xxxxxxxx wrote:

    Hi Dan,

    It is possible, we did this in our original release of X-Particles. The user could choose a colour from a description element and colorize an object's icon with that. It worked fine, but we dropped it in later versions - I can't remember why now!

    What we did was have a monochrome image for the object icon. Then the user colour was multiplied into that to recolour the icon. The code from Message() in the ObjectData plugin looked like this:

    Bool XSystem::Message(GeListNode *node, LONG type, void *data)   
         BaseDocument *doc;   
         BaseContainer *nodebc;   
         BaseObject *op = (BaseObject* )node;   
         LONG x, y;   
         GetCustomIconData *cid;   
         UWORD r, g, b;   
         Real pixr, pixg, pixb;   
         Filename sysic;   
         Vector colicn;   
         nodebc = op->GetDataInstance();   
         doc = node->GetDocument();   
         case MSG_GETCUSTOMICON:   
              cid = (GetCustomIconData* )data;   
                   colicn = nodebc->GetVector(XOVM_ICONCOLOR); // description COLOR element   
                   GetIcon(OXPSystemIcon, cid->dat);           // OXPSystemIcon registered in main.cpp   
                   sysic = GeGetPluginPath() + Filename("res") + Filename("sysicon.tif");            // monochrome icon for this object   
                // sysbm is a BaseBitmap class-level variable AutoAlloc'ed in the class definition   
                   if(sysbm && sysbm->Init(sysic) == IMAGERESULT_OK)   
                        for(y = 0; y < 32; y++)   
                             for(x = 0; x < 32; x++)   
                                  sysbm->GetPixel(x, y, &r;, &g;, &b;);   
                                  pixr = Real(r) /255 * colicn.x;   
                                  pixg = Real(g) / 255 * colicn.y;   
                                  pixb = Real(b) / 255 * colicn.z;   
                                  r = (pixr * 255);   
                                  g = (pixg * 255);   
                                  b = (pixb * 255);   
                                  sysbm->SetPixel(x, y, (LONG)r, (LONG)g, (LONG)b);   
                        cid->dat->bmp = sysbm;   
                        cid->filled = TRUE;   
    //.... etc.....   

    The crucial things are the monochrome icon to start with and that you must be able to get its bitmap. I registered the icon in main.cpp to make that easy.


  • On 19/05/2014 at 06:03, xxxxxxxx wrote:


    Thanks. 😉

    Cactus Dan

Log in to reply