There are many ways to do this, modifying, improving my method or doing a completely different thing. My goal here is to show a very basic idea that should give you a start. `LocatorPane`

and `Manipulate`

give means of interactive addition/deletion and dragging of points in 2D plane. The problem is how to add an edge -- there has to be interaction between 2 points. The idea used here is the following:

- Assume empty initial list of edges
- Trigger for making an edge is when 2 points become close enough
- Accumulate such edges and build a graph
- Jump through various hoops for proper sorting, duplicate deletion, etc.

Let's start from importing image:

```
i=Import["https://i.stack.imgur.com/f5PX3.png"];
```

defining a function:

```
makeEDGEs[r_][pts_]:=
UndirectedEdge@@@Cases[Union[Sort/@Nearest[pts->"Index",pts,{2,r}]],{_,_}]
```

Note "Index" property usage, which important, because you need to build edges from indexes of points - not from point coordinates. Read docs on all these functions to understand how it works. `r`

defines distance threshold between the points -- if you go under it an edge will be created. Here is an easy interactive app that uses above function to accumulate edges:

```
Clear[edges]
edges={};
Manipulate[
edges=Union[edges~Join~makeEDGEs[10][pts]];
g=Graph[Range[Length[pts]],edges,
VertexCoordinates->pts,
VertexSize->5{1,1},VertexStyle->Red,
EdgeStyle->Directive[Thickness[.01],Black]];
Show[i,g],
{{pts,{{100,100},{100,150},{150,100}}},
Appearance->None,Locator,LocatorAutoCreate->True}]
```

You are adding a point with CMD+CLICK action. Note there are many possible improvements. For instance, optimization for speed. Or "undo" action -- you cal also remove a point with CMD+CLICK action, but this will destroy the graph due to ordering and numbering issues, - so there is no undo for now -- up to you to make it. Cool thing about it is - the graph object is easy to get separately and compute with:

```
{g, MatrixPlot[AdjacencyMatrix[g]]}
```

## Related Resources

**Constructing and Manipulating Graphs**

https://demonstrations.wolfram.com/ConstructingAndManipulatingGraphs

Also take a look at this legacy tool:

```
Needs["GraphUtilities`"]
GraphEdit[]
```

Have a look at

`LocatorPane`

. – Carl Lange – 2020-02-10T21:27:14.137