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

    BitmapButton in Desc causes Message AttributeError

    Scheduled Pinned Locked Moved PYTHON Development
    9 Posts 0 Posters 820 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

      On 26/08/2013 at 16:34, xxxxxxxx wrote:

      I want to include a BitmapButton in my Object plugin description. Because DescriptionGetBitmap is not implemented in Python, I've used the RegisterIcon method as described in other posts here.

      But I still get errors in the console like "AttributeError: Parameter value not accessible (object unknown in Python)" whenever I override NodeData:Message - even if I just override it and immediately return True.

      Is there any way to get around this, or do I have to choose between eliminating the BitmapButton or writing a bunch of junk into the console?

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

        On 27/08/2013 at 00:12, xxxxxxxx wrote:

        I am not sure if this is related, but BaseContainers return that exception when you do try
        to access a DTYPE_BUTTON or DTPYE_FILENAME DescLevel. I did stumble over that while 
        trying to iterating over BaseShader containers. I cannot offer a solution except for stepping 
        over these problematic ids, but my point is - the problem could be quite fundamental.

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

          On 27/08/2013 at 10:15, xxxxxxxx wrote:

          I'll make you a deal Rick.
          I'll show you how to add a registered image to your bitmap button. If you show me how to check when that button is pressed.
          OK?

          .pyp

          #This is an example of how to add an image to a bitmap button for an object plugin using a custom registered icon  
          #The image should be located in the plugin's res folder  
            
          import c4d,os  
          import c4d.plugins as plugins  
          from c4d import plugins, utils, bitmaps, gui,documents  
            
          class CubeGenerator(plugins.ObjectData) :  
            cache = None  
              
            def Init(self, op) :   
                return True      
            
            def GetVirtualObjects(self, op, hh) :   
            
                if not self.cache:  
                    self.cache = c4d.BaseObject(c4d.Ocube)  
                return self.cache  
                  
                  
            def Message(self, node, type, data) :   
                  
                #How the frack do you check if the Bitmap Button was pressed!? >:-<  
                   
                return True  
                  
            
            @ classmethod  
            def Register(cls) :  
                BITMAP_ID = 100000                                                #Be sure to get a unique ID from PluginCafe.com!      
                buttonimage = bitmaps.BaseBitmap()                                #We need an instance of BaseBitmap class to use an image   
                path, fn = os.path.split(__file__)  
                buttonimage.InitWith(os.path.join(path, "res", "buttonimage.jpg"))#The location where the button image exists  
                gui.RegisterIcon(BITMAP_ID, buttonimage)                          #We need to register custom images & icons      
                  
                plugins.RegisterObjectPlugin( **{  
                    'id':           1000009,                                      #TESTING ID ONLY!!!!!  
                    'str':          'Generator example',  
                    'description':  'Ocubegen',  
                    'info':         c4d.OBJECT_GENERATOR,  
                    'icon':         buttonimage,                                  #Puts the image in the menu entry  
                    'g':            cls,  
                } )  
            
          CubeGenerator.Register()
          

          .res

          CONTAINER Ocubegen   
          {      
            NAME Ocubegen;  
            INCLUDE Obase;      
            
            GROUP ID_OBJECTPROPERTIES  
            {          
                BITMAPBUTTON MY_BITMAP { BORDER; ICONID1 100000; }  
                BOOL MY_CHECKBOX{}          
            }      
          }
          

          .h

          #ifndef _OCUBEGEN_H_  
          #define _OCUBEGEN_H_  
            
          enum {  
            Ocubegen = 10000,  
            MY_BITMAP,  
            MY_CHECKBOX  
          };  
          #endif
          

          .str

          STRINGTABLE Ocubegen  
          {  
            Ocubegen         "Cube Generator";  
            MY_BITMAP       "Bitmap Button";  
            MY_CHECKBOX     "Enabled";  
          }
          

          -ScottA

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

            On 27/08/2013 at 11:40, xxxxxxxx wrote:

            Thanks Scott - I got that far - but do you not get an AttributeError each time the overridden Message method is called?

            That's my problem - presumably because DescGetBitmap isn't implemented. Wondering if there's a way around that.

            I hadn't even got so far as detecting clicks.

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

              On 27/08/2013 at 11:53, xxxxxxxx wrote:

              No. I get no errors with the code I posted.
              I'm using R13 BTW. Not sure if that makes any difference or not.

              -ScottA

              Edit- I noticed that if I add the GetDEnabling() method to my plugin I get that error Rick.
              Not sure why. But that method seems to clash with using a bitmap button for some reason.

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

                On 27/08/2013 at 15:59, xxxxxxxx wrote:

                Ah - thanks. For some reason it wasn't happening when I removed Message but it also isn't happening if I leave Message and remove GetDEnabling. Hmm.

                So here's my part of the deal:

                  
                    def Init(self, op) :   
                        self.InitAttr(host=op, type=bool, id=[c4d.MY_BITMAP])   
                        return True       
                  
                    def Message(self, node, type, data) :   
                       
                        if type == c4d.MSG_DESCRIPTION_COMMAND:   
                            if data['id'][0].id == c4d.MY_BITMAP:   
                               print "BUTTON PRESSED"   
                          
                        return True   
                
                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  On 27/08/2013 at 16:39, xxxxxxxx wrote:

                  Hmmm. Strange.
                  Are you really getting a return from that Message() code?
                  I found the same code snippet in the python docs. But it does not work in my plugin.
                  That code only works for a standard button for me...Not on a bitmap button.

                  If it's working for you. I'm wondering if it's because I'm using R13?

                  -ScottA

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

                    On 28/08/2013 at 14:28, xxxxxxxx wrote:

                    Just checked - it's not working in R13, but it does work in R14 and up.

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

                      On 28/08/2013 at 15:20, xxxxxxxx wrote:

                      OK.
                      Thanks for checking on it Rick.

                      -ScottA

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