Edit Polygon

using Makie

 points = node(:poly, Point2f0[(0, 0), (0.5, 0.5), (1.0, 0.0)])
 scene = Scene(resolution = (500, 500))
 poly!(scene, points, strokewidth = 2, strokecolor = :black, color = :skyblue2, show_axis = false, scale_plot = false)
 scatter!(points, color = :white, strokewidth = 10, markersize = 0.05, strokecolor = :black, raw = true)
 pplot = scene[end]
 push!(points[], Point2f0(0.6, -0.3))
 points[] = points[]
 function add_move!(scene, points, pplot)
     idx = Ref(0); dragstart = Ref(false); startpos = Base.RefValue(Point2f0(0))
     on(events(scene).mousedrag) do drag
         if ispressed(scene, Mouse.left)
             if drag == Mouse.down
                 plot, _idx = mouse_selection(scene)
                 if plot == pplot
                     idx[] = _idx; dragstart[] = true
                     startpos[] = to_world(scene, Point2f0(scene.events.mouseposition[]))
                 end
             elseif drag == Mouse.pressed && dragstart[] && checkbounds(Bool, points[], idx[])
                 pos = to_world(scene, Point2f0(scene.events.mouseposition[]))
                 points[][idx[]] = pos
                 points[] = points[]
             end
         else
             dragstart[] = false
         end
         return
     end
 end

 function add_remove_add!(scene, points, pplot)
     on(events(scene).mousebuttons) do but
         if ispressed(but, Mouse.left) && ispressed(scene, Keyboard.left_control)
             pos = to_world(scene, Point2f0(events(scene).mouseposition[]))
             push!(points[], pos)
             points[] = points[]
         elseif ispressed(but, Mouse.right)
             plot, idx = mouse_selection(scene)
             if plot == pplot && checkbounds(Bool, points[], idx)
                 deleteat!(points[], idx)
                 points[] = points[]
             end
         end
         return
     end
 end
 add_move!(scene, points, pplot)
 add_remove_add!(scene, points, pplot)
 center!(scene)
 RecordEvents(scene, "output")