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

    userarea and mouse hoover

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 411 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 08/08/2014 at 08:03, xxxxxxxx wrote:

      In my CommandPlugin I have a mixed dialog with an userarea and normal dialog fields.
      Now I want to know the mouse coordinates, when the mouse is over the userarea.
      I can do that with Message() and read out the mouse coordinates.

      class Area(gui.GeUserArea) :
         
          def DrawMsg(self, x1, y1, x2, y2, msg) : 
              global bmpXY
              self.DrawSetPen(c4d.COLOR_BG)            #Set the Background Color
              self.DrawRectangle(x1, y1, x2, y2)
              
              self.DrawBitmap(bmpXY, 0,0, 300,300, 0,0, 300,300, c4d.BMP_NORMAL)
        
          def Message(self, msg, result) :
              if msg.GetId() :
          
                  self.GetInputState(c4d.BFM_INPUT_MOUSE, c4d.BFM_INPUT_MOUSELEFT, msg)   #Mouse over UA and left button not clicked
                  if msg.GetLong(c4d.BFM_INPUT_VALUE)==0: 
                      mouse_x=msg.GetLong(c4d.BFM_INPUT_X)
                      mouse_y=msg.GetLong(c4d.BFM_INPUT_Y)
                      #print "x+y: ", mouse_x, mouse_y
        
              return self.Message(msg, result)
              #return GeUserArea.Message(self, msg, result)
      

      The manual tells me how to do this, but it is not working for me.
      Both return self.Message(msg, result) and return GeUserArea.Message(self, msg, result)
      are not working for me.

      How should I approach this?

      GeUserArea.Message(self, msg, result)[](file:///D:/Users/pgrooff/Documents/pim/c4d/Python%20Help%20R15/help/modules/c4d.gui/GeUserArea/index.html?highlight=message#GeUserArea.Message)

      Override this function if you want to react to more messages than covered by the other functions. Normally this is not necessary. Be sure to include a call the parent version of this function, Message()[URL-REMOVED]:

      def Message(self, msg, result) :
          if msg.GetId() :
              pass #do something
              return True
      
          return GeUserArea.Message(self, msg, result)
      

      [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

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

        On 10/08/2014 at 05:14, xxxxxxxx wrote:

        Solved.
        Of course it should be return gui.GeUserArea.Message(self, msg, result)

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

          On 10/08/2014 at 06:24, xxxxxxxx wrote:

          Now I'm getting a Runtime error: max recursion depth exceeded while calling a Python object.
          Is the place where I'm calling message() perhaps wrong?

          Or is it that I call gui.GeUserArea.Message from within my UA class Area(gui.GeUserArea)?

          Here my structure:

          - class Area(gui.GeUserArea) :

          def DrawMsg(self, x1, y1, x2, y2, msg) : 
                  global xValue
                  global yValue

          self.DrawSetTextCol(c4d.Vector(1,1,1), c4d.Vector(0,0,0))      
                  self.DrawText("Hello", xValue, yValue, flags=c4d.DRAWTEXT_STD_ALIGN)   
                  return

          def Message(self, msg, result) :
                  global xValue
                  global yValue
               
                  self.GetInputState(c4d.BFM_INPUT_MOUSE, c4d.BFM_INPUT_MOUSELEFT, msg)  
                  if msg.GetLong(c4d.BFM_INPUT_VALUE)==1:

          mouseX=msg.GetLong(c4d.BFM_INPUT_X)                     #Get the global mouse coords.
                      mouseY=msg.GetLong(c4d.BFM_INPUT_Y)
                      localPos = self.Global2Local()                          #Convert the mouse positions from global to local
                      mouseX += localPos['x']                                 #The mouse's local coords.
                      mouseY += localPos['y']
                     
                      xValue = mouseX                                  
                      yValue = mouseY

          self.Redraw()

          return gui.GeUserArea.Message(self, msg, result)

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

            On 10/08/2014 at 08:12, xxxxxxxx wrote:

            Originally posted by xxxxxxxx

            Or is it that I call gui.GeUserArea.Message from within my UA class Area(gui.GeUserArea)?

            This was indeed incorrect.
            Moving message() to the dialog part solved the issue!

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