Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    RegisterIcon() in a Dialog plugin?

    Scheduled Pinned Locked Moved SDK Help
    7 Posts 0 Posters 506 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 21/10/2011 at 09:07, xxxxxxxx wrote:

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

      ---------
      Is it possible to register an icon through a dialog plugin?

      I've seen this code example floating around:

          GetCustomIconData *icon =((GetCustomIconData* )data);   
        GetIcon(200000000,icon->dat);  
        icon->filled=TRUE;
      

      But that is for object and tag type of plugins.
      Dialog type plugins don't have a *data parameter to overload. And when I do something like this:

          void *data;  
        GetCustomIconData *icon =((GetCustomIconData* )data); //Crashes!!  
        GetIcon(200000000,icon->dat);  
        icon->filled=TRUE;
      

      C4D crashes😠

      Anyone know what I'm doing wrong?
      Is this even possible?

      -ScottA

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 21/10/2011 at 11:20, xxxxxxxx wrote:

        Originally posted by xxxxxxxx

         
        void *data;  
        GetCustomIconData *icon =((GetCustomIconData* )data); //Crashes!!  
        GetIcon(200000000,icon->dat);  
        icon->filled=TRUE;  
        

        Ouch, you are working with a undefined pointer.

        You can allocate the IconData on the stack. Something like this:

          
        IconData data;  
        GetIcon(200000000,&data);  
        data.filled = TRUE;  
        

        Please read up on memory allocation, pointers and the stack, it's basic C/C++ knowledge, otherwise you will always run into these kind of problems/crashes.

        cheers,
        Matthias

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 21/10/2011 at 12:07, xxxxxxxx wrote:

          Thanks,

          I'm using your code example in the myDialog::InitValues(void). And I'm getting an error:

          data.filled = TRUE; // ERROR. IconData has no member "filled"
          

          Here is my registration code just in case that's important:

          Bool RegistermyResDialog(void)  
          {           
            Filename fn = GeGetPluginPath()+"res"+"myimage.jpg";  //The file path where the icon image is located   
            AutoAlloc<BaseBitmap> bmp;  
            if (IMAGERESULT_OK != bmp->Init(fn)) return FALSE;  //Don't register the plugin if the image is not present  
            GePrint("image loaded");   // <-----------This does show up in the console when C4D is launced  
            RegisterIcon(200000000,bmp,0*32,0,32,32, ICONFLAG_COPY);  
              
              
            String sName, sHelp;  
            sName = GeLoadString(IDS_RESDIALOG); // load the plugin name from the global string table - this will appear in the Plugins menu  
            sHelp = "Example CommandData plugin with a dialog box"; // this string appears in the status bar when the user hovers over the plugin name in the menu (could be loaded from the string table, of course)  
          return RegisterCommandPlugin(IDS_RESDIALOG, sName, 0, AutoBitmap("icon.tif"),sHelp, gNew myResDialog);  
          }
          

          I'm sure I'm missing something really simple.

          -ScottA

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 21/10/2011 at 12:29, xxxxxxxx wrote:

            Originally posted by xxxxxxxx

            Thanks,

            I'm using your code example in the myDialog::InitValues(void). And I'm getting an error:

            data.filled = TRUE; // ERROR. IconData has no member "filled"
            

            Sorry about that. I was just copy/pasting form the forum 🙂

            What is your final goal, e.g. what do you want to do with the icon? The retrieved IconData structure gives you access to the icon bitmap and its dimensions.

            cheers,
            Matthias

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 21/10/2011 at 12:43, xxxxxxxx wrote:

              I'm trying to apply my own registered icon image to a button(both standard & customGUI type buttons).

              Here's a snippet of code from my CreateLayout(void) method:

                  BaseContainer bbc; // Create the containers for Custom GUI's      
                GroupBegin(0,BFH_SCALEFIT|BFV_SCALEFIT,0,1,String(),0);  
                bbc.SetLong(BITMAPBUTTON_BORDER, BORDER_OUT);  
                bbc.SetBool(BITMAPBUTTON_BUTTON, TRUE);      
                myButton = (BitmapButtonCustomGui* )AddCustomGui(10001,CUSTOMGUI_BITMAPBUTTON,"MY BUTTON", 0L,150,150,bbc); //Adds the BitmapButton GUI to the dialog      
                //myButton->SetImage(Osphere, FALSE); //Adds the sphere icon to the button if desired  
                myButton->SetImage(200000135, FALSE); //Adds the gradient icon to the button if desired  
                GroupEnd();
              

              I'd like to use my own registered icon image in place of Osphere, or 200000135(the gradient's id#).
              Keeping in mind that this is a dialog plugin.

              I came up with this little diddy:

                  IconData data;  
                GetIcon(200000000,&data);  
                GetCustomIconData *icon =((GetCustomIconData* )&data);  
                if (!GetIcon(200000000,&data)) GePrint("geticon error!"); //<--This does print..So I'm not loading my icon properly  
                icon->filled=TRUE;
              

              What happens is the plugin runs fine. But the icon doesn't show up on my button.
              I'm also not sure where the best place is to put this code(under which method?).

              -ScottA

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 21/10/2011 at 18:00, xxxxxxxx wrote:

                Never mind Matthias. I found the problem.
                It wasn't a code problem. The image I was using was way too big.

                I had thought that I could use a largish image and then target certain pixel areas like how the noises.tif has multiple image tiles in it. But apparently if you go too big. It doesn't show up at all.

                Sorry for the wild goose chase.

                -ScottA

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 22/10/2011 at 17:23, xxxxxxxx wrote:

                  I'm glad you figured it out on your own.

                  cheers,
                  Matthias

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post