-
Notifications
You must be signed in to change notification settings - Fork 62
Closed
Description
Easy to do with PointsMarkerMaterial and the geometry. One thing I need do figure out is how to do the point rotations in 3D in model space.
with #913 :
see: #908 (comment)
# get uniform x, y positions
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
# positions of each vector as [n_points, 2] array
data = np.column_stack([X.ravel(), Y.ravel()])
# vectors, u and v are x and y components
U = np.cos(X)
V = np.sin(Y)
# angle of each vector
rotations = np.atan2(U, V)
# ravel so it maps `data` index -> rotation
rotations = rotations.ravel()
# sizes is magnitude
# ravel so it maps `data` index -> size
sizes = np.linalg.norm(np.dstack([U, V]), axis=-1).ravel() * 10
fig = fpl.Figure(size=(700, 600))
fig[0, 0].add_scatter(
data,
point_rotation_mode="vertex",
point_rotations=rotations,
sizes=sizes,
markers="custom",
uniform_marker=True,
custom_sdf=vector_sdf,
)
fig.show()Maybe an API like:
subplot.add_vector_field(
positions=[n_vectors, 3], # position of vector in x, xy, or xyz
vectors=[n_vectors, 3], # indicates direction vector is pointing
shape=..., # option from a few predefined common shapes, uses some predefined sdfs
shape_options={...}, # an optional dict of some arrow options in the predfined sdf
custom_shape=... # custom sdf
colors=..., # maps data index -> colors, can be uniform
uniform_colors=...,
cmap=...,
cmap_transform=...,
size_factor=..., # scales sizes by this factor
size_space=..., # usual size space option, world, screen, model,
)see what options other libs have too
The proposed API above will only require 2 new graphic features. One buffer manager to represent the vector directions which is actually a geo rotations buffer, and a uniform for the shape.
Metadata
Metadata
Assignees
Labels
No labels