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.


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
    #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__':

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:

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.

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

Thanks Phil! That did the trick! I appreciate the help. :slightly_smiling_face: