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

    Interaction tag as plugin

    Scheduled Pinned Locked Moved PYTHON Development
    14 Posts 0 Posters 1.2k 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 21/10/2015 at 06:53, xxxxxxxx wrote:

      I see. I was planning for some added functionality with selected/unselected states etc but i can use a python tag for now. Seemed convenient with the Interaction tag.
      Thanks for the help.

      -b

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

        On 22/10/2015 at 01:46, xxxxxxxx wrote:

        Hi Bonsak,

        I have a solution to this but it's not perfect. I've been using a python tag for the majority of my code, then throwing all of the data I need to draw into a global BaseContainer (or a stored object variable), then in the interaction tag, I use c4d.CallFunction to access it through a predefined function in the python tag. So essentially I'm only using the Interaction tag to draw stuff.

        It does have limited uses but it's a workflow that can be useful.

        Hope that helps,

        Adam

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

          On 22/10/2015 at 01:51, xxxxxxxx wrote:

          Thanks Adam. I'll definitely try that.

          -b

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

            On 27/10/2015 at 09:01, xxxxxxxx wrote:

            Originally posted by xxxxxxxx

            Hi Bonsak,

            I have a solution to this but it's not perfect. I've been using a python tag for the majority of my code, then throwing all of the data I need to draw into a global BaseContainer (or a stored object variable), then in the interaction tag, I use c4d.CallFunction to access it through a predefined function in the python tag. So essentially I'm only using the Interaction tag to draw stuff.

            Could you please post an example how you use the CallFunction.

            -Pim

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

              On 27/10/2015 at 10:12, xxxxxxxx wrote:

              Hi Pim,

              This is an example of how I would move the data from a python tag to an interaction tag:

              First the python tag:

                
              # Set up the function that is going to be called from the other python object
              def GetMatrix() :
                  
                  if not matrix: return None
                  
                  bc = c4d.BaseContainer()
                  
                  bc.SetMatrix(0, matrix)
                  
                  return bc
                
              matrix = None
                
              def main() :
                  obj = op.GetObject()
                  
                  global matrix
                  #Assign the global variable with some data
                  matrix = obj.GetMg()
                
              

              And then the Interaction tag:

                
              def draw(bd) :
                
                  # The python object you want to call the function from
                  py_op = op[c4d.ID_USERDATA,1] 
                  
                  # Call the function from the python tag to get the BaseContainer
                  bc = c4d.CallFunction(py_op, "GetMatrix")
                  
                  #Get the matrix
                  matrix =  bc.GetMatrix(0)   
                  
                  #Do stuff!
                  print matrix
                
              
              

              Hope that's useful.

              Thanks,

              Adam

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

                On 28/10/2015 at 05:56, xxxxxxxx wrote:

                Thanks, very useful.
                It seems like a very easy way to communicate between plugins!

                I am only confused about py_op.
                How / why does it point to the python object?

                The manual is not very clear to me:
                Parameters:|

                • op  (BaseList2D[URL-REMOVED]) – The object to search the function within its script.

                ---|---
                _<_t_>_
                -Pim


                [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 28/10/2015 at 06:15, xxxxxxxx wrote:

                  The 'op' variable by default in the interaction tag refers to the object the tag is on and not the tag itself.

                  The interaction tag I was using was on a Null object. I set a UserData link box onto the Null and put the PythonTag into it as an easy way of referencing it.

                  Hence :

                  py_op = op[c4d.ID_USERDATA,1]
                  #op is the Null object
                  #ID_USERDATA,1 being the LinkBox with the PythonTag referenced to it.
                  

                  I guess I could have just used op.GetFirstTag() too, as the PythonTag was first on the Null object.

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

                    On 28/10/2015 at 09:04, xxxxxxxx wrote:

                    Ok, clear now.
                    If I want to communicate with another plugin, the op will be that plugin.

                    -Pim

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

                      On 28/10/2015 at 09:08, xxxxxxxx wrote:

                      I think that he CallFunction command might unfortunately be limited to certain objects, it looks like plugins are not included.

                      From the documentation:

                      "This works for both Python and C.O.F.F.E.E. scripting tags, effectors, XPresso nodes, Interaction tags and also for Python generators."

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

                        On 28/10/2015 at 09:21, xxxxxxxx wrote:

                        I agree,it is not very clear.
                        As I read it, it should also be possible for plugins.
                        A plugin is also an (scripting) object.

                        Perhaps Maxon can clarify?

                        -Pim

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

                          On 29/10/2015 at 10:35, xxxxxxxx wrote:

                          Hello everyone,

                          I'm sorry, but a Python plugin is not a scripting object. CallFunction() can not be used to communicate with a Python plugin.
                          CallFunction() only works for NodeData derived things, which already provide a scripting option (like Python tag, Interaction tag, Python Generator,...).

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

                            On 29/10/2015 at 12:33, xxxxxxxx wrote:

                            Thanks,that clarifies it for me.

                            -Pim

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