Querying exisiting nodes inside XPresso Editor

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 03/12/2012 at 14:44, xxxxxxxx wrote:

Pretty self explanatory I think. The reason I am wanting to do this is to work around the object port object operator bug.

Basically, I want to just add the port myself, then query the already made node so I can access it's port info. I tried all the selection methods I can think of, but it seems C4D doesn't treat nodes as objects. Thanks for the help.

Rick

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 04/12/2012 at 01:39, xxxxxxxx wrote:

Hi Rick,

You have to first get the XPResso node master from the XPresso tag calling XPressoTag.GetNodeMaster().
Then to get the root node use GvNodeMaster.GetRoot() returning a GvNode, which is a subclass of GeListNode (so you can navigate the node tree with node.GetNext(), node.GetChildren() etc.).

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 04/12/2012 at 06:14, xxxxxxxx wrote:

So I tried to use the .GetChildren() and the other GeListNode stuff, but instead of getting the one node that is in there, I get an empty list or just a None. Figured i would post my code so maybe it will make it easier. I am currently testing it with just a cube at the top of the Object Manager with the said xpresso tag with the object operator inside already set up, along with a couple of spheres below to test the list function. Thanks for the help.

import c4d
from c4d import gui
_
_
_
_
def main() :
_    _
_    op = doc.GetFirstObject()_
_    tag = op.GetFirstTag()_
_    nodeMaster = tag.GetNodeMaster()_
_    selected = doc.GetActiveObjects(0)_
_    bc = c4d.BaseContainer_
_    for sel in selected:_
_        _
_        l=100 * selected.index(sel)_
_        _
_        controllerNode = nodeMaster.GetChildren()_
_        pointNode = nodeMaster.CreateNode(nodeMaster.GetRoot(), c4d.ID_OPERATOR_POINT, insert=None, x=300, y=l)_
_        objNode = nodeMaster.CreateNode(nodeMaster.GetRoot(), c4d.ID_OPERATOR_OBJECT, insert=None, x=500, y=l)_
_        objNode[c4d.GV_OBJECT_OBJECT_ID] = sel_
_        objNode.AddPort(c4d.GV_PORT_INPUT, c4d.ID_BASEOBJECT_GLOBAL_POSITION)_
_        _
_        _
_        CPport = controllerNode[0].GetOutPort(0)_
_        OPport = pointNode.GetInPort(0)_
_        PPport = pointNode.GetOutPort(1)_
_        GPport = objNode.GetInPort(0)_
_        _
_        CPport.Connect(OPport)_
_        PPport.Connect(GPport)_
_    _
_    nodeMaster.Message(c4d.MSG_UPDATE)_
_    c4d.EventAdd()_
_if _name__=='_main__':
_    main()

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 04/12/2012 at 06:33, xxxxxxxx wrote:

  
    op = doc.GetFirstObject()
    tag = op.GetFirstTag()
    **nodeMaster = tag.GetNodeMaster()**

does this actually work ? because GetNodeMaster() is a c4d.modules.graphview.GvNode member 
and not a GeListNode member, you have to call it from an actual GraphView node. edit : and please
use a monospace font to post your code or the code, /code tags.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 04/12/2012 at 10:36, xxxxxxxx wrote:

THANK YOU! I just realized it was Gv NodeMaster, and not Get NodeMaster that I needed to use to get the root node. I need to pay better attention to these things. Anyway here is the final code snippet if anyone is interested. Thanks for the help everyone.:smile:

import c4d
from c4d import gui
_
_
_
_
def main() :
_    _
_    op = doc.GetFirstObject()_
_    tag = op.GetFirstTag()_
_    nodeMaster = tag.GetNodeMaster()_
_    selected = doc.GetActiveObjects(0)_
_    bc = c4d.BaseContainer_
_    for sel in selected:_
_        _
_        l = 100 * selected.index(sel)_
_        _
_        rootNode = nodeMaster.GetRoot()_
_        controllerNode = rootNode.GetChildren()_
_        pointNode = nodeMaster.CreateNode(nodeMaster.GetRoot(), c4d.ID_OPERATOR_POINT, insert=None, x=300, y=l)_
_        objNode = nodeMaster.CreateNode(nodeMaster.GetRoot(), c4d.ID_OPERATOR_OBJECT, insert=None, x=500, y=l)_
_        objNode[c4d.GV_OBJECT_OBJECT_ID] = sel_
_        objNode.AddPort(c4d.GV_PORT_INPUT, c4d.ID_BASEOBJECT_GLOBAL_POSITION)_
_        _
_        _
_        CPport = controllerNode[0].GetOutPort(0)_
_        OPport = pointNode.GetInPort(0)_
_        PPport = pointNode.GetOutPort(1)_
_        GPport = objNode.GetInPort(0)_
_        _
_        CPport.Connect(OPport)_
_        PPport.Connect(GPport)_
_    _
_    nodeMaster.Message(c4d.MSG_UPDATE)_
_    c4d.EventAdd()_
_if _name__=='_main__':
_    main()