Add selection in GraphView via code

Hi.
First, please forgive my English.
I made an editor with GraphView, which is in UI Builder.
I also made a copy and pasting of nodes and I tried making the copied nodes selected, but I don’t know how to do.
It’s like shader graph. When you copy and paste nodes with Ctrl+C and Crtl+V, the copied nodes are selected.
I tried AddToSelection() and Select() of GraphElement, but it didn’t work.
How can I make it?
It’s the whole code about copy and pasting.

        public BehaviorTreeView() //is constructer
        {
            //others like AddManipulator, get stylesheet...
                        
            Undo.undoRedoPerformed += OnUndoRedo;
            this.serializeGraphElements += CopyOperation;
            this.unserializeAndPaste += PasteOperation;
        }

        List<NodeBase> nodesToCopy = new List<NodeBase>();
        public string CopyOperation(IEnumerable<GraphElement> elements)
        {
            nodesToCopy.Clear();
            foreach (GraphElement n in elements)
            {
                //NodeView is a class that drived from UnityEditor.Experimental.GraphView.Node
                //It has intput/output ports and which node to show as field
                NodeView nodeView = n as NodeView;
                if(nodeView != null)
                {
                    nodesToCopy.Add(nodeView.node);
                }
            }
            return "Copy Nodes";
        }
        public void PasteOperation(string operationName, string data)
        {
            //NodeBase is a class that drived from ScriptableObject
            //It has information of node, like guid and position of node
            foreach (NodeBase originalNode in nodesToCopy)
            {
                //CreateNode(System.Type type, UnityEngine.Vector2 position)
                //It makes node of which type is type(parameter) in position(parameter)
                NodeView n = this.CreateNode(originalNode.GetType(), originalNode.position - new Vector2(2, 2));
            }
            PopulateView(tree); //== Refresh the editor window
        }

Use the AddSelection() method of the GraphView, you can just do AddSelection(n); in the loop.

You can also call ClearSelection() at the top of the Paste method so that you create a new selection of only copied elements :slight_smile: