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.
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()