1234567891011121314151617181920212223242526272829303132333435 |
- "Test line.eval() and line.find_index_at_position()"
- import numpy as np
- import vedo
- def slider_func(sld, _event):
- eval_length = sld.value
- pe = line.eval(eval_length)
- idx_fraction = line.find_index_at_position(pe)
- idx_before = np.floor(idx_fraction).astype(int)
- idx_after = np.ceil(idx_fraction).astype(int) % n
- idx_before = min(idx_before, n-1)
- idx_after = min(idx_after, n-1)
- ps = vedo.Points(points[[idx_before, idx_after]], c="red5", r=15)
- pe = vedo.Point(pe, c="green5", r=20)
- ps.name = "slidingpoints"
- pe.name = "slidingpoints"
- txt.text(f"index_at_position(): {idx_fraction:.3f}")
- plt.remove("slidingpoints").add(ps, pe).render()
- n = 20
- endpt = 1
- angles = np.linspace(0, 2*np.pi, n, endpoint=endpt)
- radii = np.linspace(0.5, 1, n, endpoint=endpt)
- points = np.column_stack([radii * np.cos(angles), radii * np.sin(angles)])
- vedo.settings.default_font = "Roboto"
- line = vedo.Line(points, closed=endpt, lw=2).split_polylines()
- labs = line.labels2d()
- txt = vedo.Text2D(pos="bottom-left", c="k", bg="y")
- plt = vedo.Plotter()
- plt.add_slider(slider_func, 0.001, 1, value=0, title="Fractional position")
- plt.show(line, labs, txt, __doc__)
|