On 03/10/2013 at 08:59, xxxxxxxx wrote:
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 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:
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.