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 toggle id

    Scheduled Pinned Locked Moved PYTHON Development
    7 Posts 0 Posters 615 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/05/2013 at 07:06, xxxxxxxx wrote:

      Hi,

      can anyone point me to the correct BFM_MESSAGE id to call a toggle BitmapButton click in a 
      GeDialog / toggle its state ? I have that code which does work in general (it does disable 
      the button, but i want to toggle it as described).

      def Execute(self, doc) :
          fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN
          tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
          if isinstance(tool, plugins.BasePlugin) :
              data = tool.GetNodeData()
              if isinstance(data, fhBaseSelectToolData.fhBaseSelectToolData) :
                  if isinstance(data.Dialog, gui.GeDialog) :
                      print data.Dialog.SendMessage(id   = fhPolyTools.IDC_BASE_FREEZE_BTN, 
                                                    msg  = c4d.BaseContainer(c4d.BFM_DISABLE))
          return True
      

      Thank you for your help and happy rendering,

      Ferdinand

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

        On 26/05/2013 at 07:37, xxxxxxxx wrote:

        hm,

        that is how i thonk it should work, but it does not 🤢.

        def Execute(self, doc) :
            fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN
            tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
            if isinstance(tool, plugins.BasePlugin) :
                data = tool.GetNodeData()
                if isinstance(data, fhBaseSelectToolData.fhBaseSelectToolData) :
                    if isinstance(data.Dialog, gui.GeDialog) :
                        msg, bc = c4d.BaseContainer(c4d.BFM_VALUECHNG), c4d.BaseContainer(c4d.BFM_ACTION)
                        bc.SetLong(c4d.BFM_ACTION_ID, fhPolyTools.IDC_BASE_FREEZE_BTN)
                        bc.SetBool(c4d.BFM_ACTION_VALUE, fhPolyTools.ID_ISFROZEN)
                        msg.SetContainer(c4d.BFM_ACTION, bc)
                        data.Dialog.SendMessage(id = fhPolyTools.IDC_BASE_FREEZE_BTN, msg = msg)
            return True
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 26/05/2013 at 07:48, xxxxxxxx wrote:

          Never tried it with Python.
          My C++ notes say to use it like this:

          BaseContainer msg(BFM_ACTION);  
          msg.SetLong(BFM_ACTION_ID, YOUR_ID);  
          msg.SetLong(BFM_ACTION_VALUE, TRUE);
          

          -ScottA

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

            On 26/05/2013 at 07:56, xxxxxxxx wrote:

            Hi scott,

            thanks for your answer. I tried that too, using SetLong for BFM_ACTION_VALUE and sending the BMF_ACTION container directly, but that did not work either for me.

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

              On 26/05/2013 at 08:27, xxxxxxxx wrote:

              You're asking about GeDialog. Yet the code you posted is for a Tool Data plugin?
              Are you trying to send a message from a tool plugin to a GeDialog plugin?

              Also.
              BitmapButtons have their own settings to do things like TOGGLE: _  customgui_bitmapbutton.h_
              Enable() is sort of a generic way to grey things out in dialogs.

              -ScottA

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

                On 26/05/2013 at 08:59, xxxxxxxx wrote:

                ToolData plugins have in contrast to ToolDescriptionData plugins a GeDialog attached to it. 
                I am accessing the dialog attached to the tool. Check the example code. The code itself is 
                from a CommandData plugin.

                I am aware about the nature of bfm_disable. I have posted it just as a demonstration 
                that the general approach works and that i can alter the gadget attached to id that way.
                I am only missing the correct id(s).

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

                  On 26/05/2013 at 11:58, xxxxxxxx wrote:

                  hey,

                  for the record and others who might search on this, i made it just to complicated. I thought
                  BitmapButton is not wrapped for python but it actually is. So you can keep it pretty straight 
                  forward.

                      # --- Toggle the freeze state and toggle the freeze button of the active fhBaseToolData
                      # -----------------------------------------------------------------------------------------------
                      def Execute(self, doc) :
                          tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
                          if (isinstance(tool, plugins.BasePlugin) and
                              isinstance(tool.GetNodeData(), fhBaseToolData.fhBaseToolData) and
                              isinstance(tool.GetNodeData().Dialog, fhBaseToolDialog.fhBaseToolDialog) and
                              tool.GetNodeData().Dialog.CanFreeze) :
                              btn = tool.GetNodeData().Dialog.FindCustomGui(id       = fhPolyTools.IDC_BASE_FREEZE_BTN, 
                                                                            pluginid = c4d.CUSTOMGUI_BITMAPBUTTON)
                              if isinstance(btn, c4d.gui.BitmapButtonCustomGui) :
                                  fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN
                                  btn.SetToggleState(fhPolyTools.ID_ISFROZEN)
                          c4d.SpecialEventAdd(messageid = fhPolyTools.PID_FHFREEZETOOL)
                          return True
                  
                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post