Port Creation



  • On 03/10/2013 at 08:59, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   14.038 
    Platform:   Windows  ;   
    Language(s) :       PYTHON  ;

    ---------
    I'm working on a script that creates nodes in XPresso and ran into a snag. I cant seam to get the GV_OBJECT_OPERATOR_OBJECT_OUT to work. So far all the other nodes create just fine.

    What I want is the object node Object Out port to connect to a point node Object In port.

    Ive tried using the .SetPortType to change a port that will create into the object port. However I'm not sure im setting it up correctly.

    node_obj1.SetPortType(c4d.GV_PORT_OUTPUT, c4d.GV_OBJECT_OPERATOR_OBJECT_OUT)

    Any help would be great!

    Let me know if I'm not explaining myself well enough.



  • On 07/10/2013 at 08:53, xxxxxxxx wrote:

    Ok so here is an example I am able to show. using a null as a selection run this script:

    import c4d
    from c4d import gui
    #Welcome to the world of Python
      
      
    def main() :
        
        # Create Tag
        tag = c4d.BaseTag(c4d.Texpresso)
        # Add Tag
        op.InsertTag(tag)
        #Get the node master of selected xpresso tag
        nm = op.GetFirstTag().GetNodeMaster()
        #Create the object's node
        node1 = nm.CreateNode(nm.GetRoot(),c4d.ID_OPERATOR_OBJECT,insert=None, x=20, y=20)
        node2 = nm.CreateNode(nm.GetRoot(),c4d.ID_OPERATOR_POINT,insert=None, x=20, y=70)
        # Create Ports
        pObjOut = node1.AddPort(c4d.GV_PORT_OUTPUT, c4d.GV_OBJECT_OPERATOR_OBJECT_OUT)
        pNorOut = node2.AddPort(c4d.GV_PORT_OUTPUT, c4d.GV_POINT_OUTPUT_NORMAL)
        
        # Test Ports
        print pObjOut
        print pNorOut
        return None
        
        
    if __name__=='__main__':
        main()
    

    You will see that It will print none for the object port but for the output of the point node normal a port is created.

    How can I get this Object Out port to work?



  • On 08/10/2013 at 07:24, xxxxxxxx wrote:

    So I found a way to bypass the Object Out port not working by adding a userdata Link. THis is what it looks like after the script is run:

    _<_img src="http://shawnfrueh.com/references/c4d/nodebroken.png" height="371" width="509" border="0" /_>_

    As you can see something is not right. So I did a little R&D and found that creating the port itself through python breaks the object node. I can drag and drop the Spline object into XPresso and add the user data manually like this:

    <_<_img src="http://shawnfrueh.com/references/c4d/nodeworking.png" height="371" width="509" border="0" /_>_" />

    Everything works fine then.

    This is the code I used to create the port that then breaks the node:

    objPort = node_obj1.AddPort(c4d.GV_PORT_OUTPUT,(c4d.ID_USERDATA,1),message=True)
    

    Am I setting up the .AddPort wrong?



  • On 08/10/2013 at 14:06, xxxxxxxx wrote:

    Hi.
    I had this problem recently and found something on the web that should do the trick:

    objPort = node_obj1.AddPort(c4d.GV_PORT_OUTPUT, c4d.DescID(c4d.DescLevel(c4d.ID_USERDATA, c4d.DTYPE_SUBCONTAINER, 0), c4d.DescLevel(1)), message=True)
    

    Where the id of the userdata is described with "c4d.DescLevel(1)" for the first userdata. As I said I found it on the web and I don't quite get it myself, but it seems to work.
    Cheers
    Phil



  • On 08/10/2013 at 14:44, xxxxxxxx wrote:

    Thanks Phil! That did the trick! I appreciate the help. 🙂


Log in to reply