Moving\Deleting nodes with Python



  • Hello,

    I've got a GvNode that I can rename and control, but I'm not sure how I can delete or move it's position in Xpresso.

    Thanks in advance,
    Sheilan.



  • Hi @sheilan,
    Moving Xpresso node have been discussed here, same warning as Andreas did, ID may change in the future and break your stuff since there is no symbols for theses data.

    Regarding how to delete a GvNode, as you may have seen, GvNode inherit from BaseList2D which inherit from GeListNode, so you can use the GeListNode.Remove method.

    Here an example:

    import c4d
    
    
    def main():
        # Checks if selected object is valid
        if op is None:
            raise ValueError("op is none, please select one object.")
    
        # Retrieves the xpresso Tag
        xpressoTag = op.GetTag(c4d.Texpresso)
        if xpressoTag is None:
            raise ValueError("Make sure the selected object get an Xpresso Tag.")
    
        # Retrieves the node master
        gvNodeMaster = xpressoTag.GetNodeMaster()
        if gvNodeMaster is None:
            raise RuntimeError("Failed to retrieves the Node Master.")
    
        # Retrieves the Root node (the Main XGroup) that holds all others nodes
        gvRoot = gvNodeMaster.GetRoot()
        if gvRoot is None:
            raise RuntimeError("Failed to retrieves the Root Node.")
    
        # Iterates overs all nodes of this root node.
        firstNode = gvRoot.GetDown()
        if firstNode is None:
            raise RuntimeError("Failed to retrieves the First Node.")
    
        # Defines Y size
        firstNode.GetDataInstance().GetContainerInstance(1001).GetContainerInstance(1000)[109] = 50
    
        # Defines X size
        firstNode.GetDataInstance().GetContainerInstance(1001).GetContainerInstance(1000)[108] = 100
    
        # Defines the Y position
        firstNode.GetDataInstance().GetContainerInstance(1001).GetContainerInstance(1000)[101] = -200
    
        # Defines the X position
        firstNode.GetDataInstance().GetContainerInstance(1001).GetContainerInstance(1000)[100] = -200
    
        # GvNode is a GeListNode so you can simply use Remove
        firstNode.Remove()
    
        # Updates Cinema 4D
        c4d.EventAdd()
    
    
    if __name__ == '__main__':
        main()
    

    If you have any questions, let me know.
    Cheers,
    Maxime.



  • Works perfectly. Thanks!


Log in to reply