issue_1230.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. "Test line.eval() and line.find_index_at_position()"
  2. import numpy as np
  3. import vedo
  4. def slider_func(sld, _event):
  5. eval_length = sld.value
  6. pe = line.eval(eval_length)
  7. idx_fraction = line.find_index_at_position(pe)
  8. idx_before = np.floor(idx_fraction).astype(int)
  9. idx_after = np.ceil(idx_fraction).astype(int) % n
  10. idx_before = min(idx_before, n-1)
  11. idx_after = min(idx_after, n-1)
  12. ps = vedo.Points(points[[idx_before, idx_after]], c="red5", r=15)
  13. pe = vedo.Point(pe, c="green5", r=20)
  14. ps.name = "slidingpoints"
  15. pe.name = "slidingpoints"
  16. txt.text(f"index_at_position(): {idx_fraction:.3f}")
  17. plt.remove("slidingpoints").add(ps, pe).render()
  18. n = 20
  19. endpt = 1
  20. angles = np.linspace(0, 2*np.pi, n, endpoint=endpt)
  21. radii = np.linspace(0.5, 1, n, endpoint=endpt)
  22. points = np.column_stack([radii * np.cos(angles), radii * np.sin(angles)])
  23. vedo.settings.default_font = "Roboto"
  24. line = vedo.Line(points, closed=endpt, lw=2).split_polylines()
  25. labs = line.labels2d()
  26. txt = vedo.Text2D(pos="bottom-left", c="k", bg="y")
  27. plt = vedo.Plotter()
  28. plt.add_slider(slider_func, 0.001, 1, value=0, title="Fractional position")
  29. plt.show(line, labs, txt, __doc__)