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. :slightly_smiling_face: