Node Pointer & Node Picking
Node picking system is one of the convenience features provided by Joint to help you to specify nodes in your graph visually and intuitively.
Node Pointer
Joint's node picking system is built around the concept of Node Pointer.
Node Pointer (FJointNodePointer) is a struct that holds a reference to a specific node in a Joint graph.
Working With Node Pointer Property On Graph
You can use this type to represent a node reference in your custom nodes, fragments, or other systems that interact with Joint graphs.
Once you added a Node Pointer property to your class, you can specify the classes of nodes that can be picked by setting the Allowed Type and Disallowed Type properties in the details panel.

If you place the node on the graph and see the property in the details panel, you can see a little border around the property - this indicates that this property is a Node Pointer property.
In this image, we displayed the property on the graph node widget itself via "Simple Property Display" feature of Joint Nodes. Please refer to [Utilizing Simple Property Display Tab] (../Advanced/Making-A-Fragment-Like-A-Pro/Making-New-Editor-Node/Utilizing-Simple-Property-Display-Tab) document to learn more about this feature.

And if you hover your mouse over the property, you will see those buttons are emerging from the bottom. Each button has a specific function:
- Pick Node: This button allows you to pick a node from the graph visually. When you click this button, The graph enters the node picking mode, and you can click on a node in the graph to set the Node Pointer to that node.

- Goto Node: This button takes you to the node that is currently referenced by the Node Pointer property in the graph.
- Copy Node: This button copies the current node reference in the Node Pointer property to the clipboard.
- Paste Node: This button pastes the node reference from the clipboard to the Node Pointer property.
- Clear Node: This button clears the current node reference in the Node Pointer property.
Using Node Pointer On BP & C++ Logic
Now it's time to see how you can work with Node Pointer properties in your BP or C++ logic.
In BP, you can use Cast and Resolve Joint Node Pointer function to resolve the Node Pointer to the specific node instance type.

In C++, you can use RESOLVE_JOINT_POINTER macro to resolve the Node Pointer to the specific node instance type.
These are just helpers to resolve Node Pointers, and you can also resolve them by accessing the properties (TSoftObjectPtr\<UJointNodeBase\> Node of FJointNodePointer) directly and loading the node instance from it, and casting it to the specific node type.
After that, you can use the resolved node instance as you like. (just like, Executing it, accessing its properties, or calling its functions)
Joint Native provides very good boilerplate fragments that demonstrates how to use Node Pointer properties in your custom fragments. You can check out those fragments in Joint Native to learn more about how to use Node Pointer properties effectively.
(Additional) Utilizing Node Pointer Widget Itself
Joint provides the widget of the Node Pointer property as a standalone widget that you can use in your custom editor tools or custom node widgets.
For example, Some of our built-in nodes on Joint Native creates Node Pointer widgets as it needs to display its properties. (e.g., Speaker And Listener node)

And our Joint Movie Track Editor for Level Sequencer also uses Node Pointer widgets to allow users to pick nodes to play on the Level Sequencer.

We hope this feature will help you to extend Joint's editor functionalities and create your own custom tools more easily.
If you want to learn more about how to create custom editor widgets using Joint's editor API, please refer to the Making-A-Fragment-Like-A-Pro - Making-New-Editor-Node - Existing Convenience Slates document.