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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Using Python to create ports on Object nodes

    Scheduled Pinned Locked Moved PYTHON Development
    9 Posts 0 Posters 926 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 07/09/2012 at 09:54, xxxxxxxx wrote:

      C4D R13
      Python

      ------

      I've finished browsing an old PluginCafe post that discusses this concept, but can't seem to figure it out.

      What I CAN do: create an object node in XPresso, and 'fill' it with an object. 
      What I CANNOT do: Create an object port on said node.

      The previously mentioned post says that you can use the IDs used in gvobject.res, in a fashion such as this:

       OBJ_IN = OBJ.AddPort(c4d.GV_PORT_INPUT, c4d.GV_OBJECT_OPERATOR_OBJECT_IN, flag = c4d.GV_PORT_FLAG_IS_VISIBLE)
      

      However, while this doesn't cause an error to come up in my script, a port is not created - If I try to run a print command on OBJ_IN, I get 'None'. I've tried to create several other ports listed on gvobject.res, but no dice.

      The only port I was able to create was a c4d.ID_BASEOBJECT_POSITION port, but it's an ID not listed in gvobject.res.

      Does anyone know where I might find the correct id for an object port?

      Thanks,
      Luke

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

        On 02/01/2013 at 11:42, xxxxxxxx wrote:

        I'm having the exact same problem on that object operator. I even tried setting custom ID's in the gvobject.h file, but nothing. Have you found a solution?

        import c4d
        #Welcome to the world of Python

        def main() :
            
            # create a cube
            cube = c4d.BaseObject(c4d.Ocube)
            # insert cube into scene
            doc.InsertObject(cube)

        # create xpresso tag
            xpressoTag = c4d.BaseTag(c4d.Texpresso)
            # insert xpresso tag to the cube
            cube.InsertTag(xpressoTag)
            
            # get node master
            nodeMaster = xpressoTag.GetNodeMaster()

        # create object node for cube in xpresso
            node1 = nodeMaster.CreateNode(nodeMaster.GetRoot(), c4d.ID_OPERATOR_OBJECT, None, 0, 0)
            node1[c4d.GV_OBJECT_OBJECT_ID] = cube

        # add object out port to node
            port1 = node1.AddPort(c4d.GV_PORT_OUTPUT, c4d.GV_OBJECT_OPERATOR_OBJECT_OUT)
            
            c4d.modules.graphview.RedrawMaster(nodeMaster)
            c4d.EventAdd()
            
            return

        No object out port is created???

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

          On 02/01/2013 at 12:21, xxxxxxxx wrote:

          Unfortunately, I'm still in the dark on this one.  😞

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

            On 02/01/2013 at 17:39, xxxxxxxx wrote:

            Hmmm, I tried to work around it and create a userdata link -> put the object in the link -> and then pull up the userdata port in the node. Which can be done, see script below. But now the node is highlighting yellow, which still prevents the xpresso set up from working.

            import c4d
            #Welcome to the world of Python

            def main() :
                 
                # create a cube
                cube = c4d.BaseObject(c4d.Ocube)
                # insert cube into scene
                doc.InsertObject(cube)
                
                # create a link userdata
                bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_BASELISTLINK)
                bc[c4d.DESC_NAME] = "obj"
                linkDataType = cube.AddUserData(bc)
                # set the link userdata
                cube.__setitem__((c4d.ID_USERDATA,1), cube)

            # create xpresso tag
                xpressoTag = c4d.BaseTag(c4d.Texpresso)
                # insert xpresso tag to the cube
                cube.InsertTag(xpressoTag)
                 
                # get node master
                nodeMaster = xpressoTag.GetNodeMaster()

            # create object node for cube in xpresso
                node1 = nodeMaster.CreateNode(nodeMaster.GetRoot(), c4d.ID_OPERATOR_OBJECT, None, 0, 0)
                node1[c4d.GV_OBJECT_OBJECT_ID] = cube

            # add userdata out port to node
                port1 = node1.AddPort(c4d.GV_PORT_OUTPUT, (c4d.ID_USERDATA,1))
                 
                c4d.modules.graphview.RedrawMaster(nodeMaster)
                c4d.EventAdd()
                 
                return

            How can I prevent the node from highlighting yellow? There are no problems creating the nodes and ports manually. Is something wrong with my code?

            thanks

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

              On 03/01/2013 at 07:58, xxxxxxxx wrote:

              hey,

              i do not really have a solution for you but nevertheless :

              1. please use code tags ([kode][/kode] - kode written with c of course)

              2. on topic. your code looks fine. i think there is something going wrong in the port creation. i 
              have changed the port type to a less complicated one (suspected first the UserData ID tuple as 
              the culprit) and then used the AddPortIsOk method. It always returns False for me, which i 
              understand as 'something is going really wrong here, but you cannot do anything about it'.

              pid = (c4d.PRIM_CUBE_LEN)
              print node1.AddPortIsOK(c4d.GV_PORT_OUTPUT, pid) # always false
              port1 = node1.AddPort(c4d.GV_PORT_OUTPUT,pid, c4d.GV_PORT_FLAG_IS_VISIBLE, True ) 
              
              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                On 25/03/2013 at 04:25, xxxxxxxx wrote:

                Hey everyone. I'm having the exact same problem with AddPort and yellow node. Can please someone say what's wrong?

                import c4d
                  
                def main() :
                    #new Extrude NURBS
                    c4d.CallCommand(5116)
                    Nrbs = doc.GetActiveObject()    
                    Nrbs[c4d.CAP_START] = Nrbs[c4d.CAP_END] = 3;
                    tag = Nrbs.MakeTag(c4d.Texpresso)
                    master = tag.GetNodeMaster() 
                       
                    #new node
                    nodeOut = master.CreateNode(master.GetRoot(),c4d.ID_OPERATOR_OBJECT,None,100,100)
                    
                    #new userdata
                    UD = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL);
                    UD[c4d.DESC_NAME] = 'fillet';
                    add2 = Nrbs.AddUserData(UD);
                    Nrbs[add2] = 5;
                    
                    #outpot port
                    nodeOut.AddPort(c4d.GV_PORT_OUTPUT, (c4d.ID_USERDATA, 1));
                    
                    c4d.EventAdd();
                  
                if __name__=='__main__':
                    main()
                

                littledevil, I've tried

                nodeOut.AddPort(c4d.GV_PORT_OUTPUT, [c4d.ID_USERDATA,1], c4d.GV_PORT_FLAG_IS_VISIBLE, True )
                

                but hte result is the same

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

                  On 08/10/2013 at 23:16, xxxxxxxx wrote:

                  I haven't revisited this project recently but I found another post that looks promising in regards to the yellow nodes.

                  https://developers.maxon.net/forum/topic/7475/9303_port-creation

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

                    On 24/05/2015 at 16:31, xxxxxxxx wrote:

                    Any news on this yet? Surely we can add an object link port to an xpresso node without creating custom userdata!?

                    😲

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

                      On 26/05/2015 at 07:53, xxxxxxxx wrote:

                      Hello,

                      as discussed earlier there is currently a bug with the object ports. See also this thread:

                      • OBJECT_OPERATOR_OBJECT_OUT
                        best wishes,
                        Sebastian
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post