I am using PolyEdit with a polygon. When double tapped red circles appear as 3 verticies. Also coordinates show in div below the figure. Upon dragging a vertex and then tapping the polygon again, the updated coordinates appear in the div.
issue 1 - I would like the div results to change while dragging instead of having to retap the figure. I tried PanEnd event but am lost on how to do.
issue 2 - after drag I would like the new coordinates to show with only 2 decimal places instead of 15 places
thanks in advance for your help and past help
from bokeh.plotting import column, figure, output_file, show
from bokeh.models import ColumnDataSource, Div, CustomJS
from bokeh.models import PolyDrawTool, PolyEditTool
from bokeh.events import PanEnd
p = figure(x_range=(0, 10), y_range=(0, 10), width=400, height=400,
title='Poly Edit Tool')
ds = ColumnDataSource(data=dict(xs=[[1.01, 2.00, 3.00]], ys=[[3.01, 5.00, 2.00]] ))
p1 = p.patches([], [], fill_alpha=0.4)
p2 = p.patches('xs', 'ys', source=ds, fill_color='green', fill_alpha=0.4)
c1 = p.circle([], [], size=20, color='red')
draw_tool = PolyDrawTool(renderers=[p1, p2])
edit_tool = PolyEditTool(renderers=[p1, p2], vertex_renderer=c1)
p.add_tools(draw_tool, edit_tool)
p.toolbar.active_drag = edit_tool
div = Div()
callback = CustomJS(args=dict(source=ds, div=div), code="""
var selectedIndex = source.selected.indices;
for (var i = 0; i < selectedIndex.length; i++) {
div.text = `x1 x2 x3 = ${source.data['xs'][selectedIndex[i]]}`+` and y1 y2 y3 = ${source.data['ys'][selectedIndex[i]]}`
let xx = `${source.data['xs'][selectedIndex[i]]}`
let yy = `${source.data['ys'][selectedIndex[i]]}`
let x1 = parseInt(xx[0])
let x1a = x1.toFixed(2)
console.log(x1a)
}
""")
ds.selected.js_on_change('indices', callback)
#p2.js_on_event(PanEnd, callback)
#show(p,div)
show(column(p,div))