All notable changes to the project will be documented in this file.
===================================================================================
Line.eval2d()
useful for plottingaddons.BaseCutter
as per #1263 by @natabmaapplications.MorphByLandmarkPlotter
classapplications.MorphBySplinesPlotter
classvolume.extract_components()
applications.ImageEditor
Plotter-derived classpointcloud.project_point_on_variety()
functionaddons.BaseCutter
classexamples/pyplot/embed_matplotlib2.py
examples/basic/cut_interactive.py
examples/volumetric/slice_plane3.py
examples/volumetric/image_editor.py
examples/advanced/measure_curvature2.py
image.tomesh()
is not transmitted to meshExamples that are not fully functional and need some fixing:
advanced/warp4b.py (problem with picker?)
sliders3d.py crashes when moving the scene
interpolate_scalar4.py misplaced scalarbar
markpoint.py (misplaced leader indicator)
cut_and_cap.py (incomplete capping)
tests/issues/discussion_800.py (incomplete capping of tube)
umap_viewer3d should be revised trackviewer (some problems with removing a track, and z spacing) pyplot.plot cannot plot constant line or single point numpy2volume0.py (volume alphas look bad)
Fails to export correctly to npz format
boolean.py
cartoony.py
mesh_lut.py
mesh_map2cell.py
texturecubes.py
meshquality.py
streamlines1.py
===================================================================================
utils.compute_hessian()
.rename()
method to set any object name.line.find_index_at_position()
by @natabmaChanges that may break existing code whose fixing is trivial:
Changes that will break existing code and need active thinking and some work to adapt
examples/pyplot/plot_fxy0.py
examples/volumetric/image_editor.py
examples/other/pysr_regression.py
examples/other/chemistry1.py
tests/issues/issue_1230.py
===================================================================================
settings.force_single_precision_points = False
in #1137 by @JeffreyWardman and @sean-d-zydexLegendBox
in #1153 by @GerritFischermesh.laplacian_diffusion()
DistanceTool
in #1158shapes.Plane.normal
in #1159 by @smoothumutArrow.top_point()
and Arrow.base_point()
to extract current arrow position #1163 @smoothumutArrow.top_index
to produce the correct index valueassembly.Group.objects
by @smoothumutaddons.DrawingWidget
class for tracing on planar propsVideo(..., scale=1)
keyword in #1168 by @YongcaiHuanglegosurface(boundary=True)
default in #1166Mesh.boolean()
#1173 by @jkunimuneCube
and Box
having duplicated vertices to allow defining normals #1171mesh.volume()
and mesh.is_closed()
wrt duplicated vertices.plotter.reset_clipping_range()
to reset the camera clipping range based on the bounds of the visible actors #1170volume.isosurface_discrete()
in #1180 by @snownontracemesh.remove_all_lines()
methodPlane(edge_direction=...)
by @smoothumutisolines(..., n=list())
option to pass specific values.file_io.screenshot()
add fourth channel representing trasparency @miek0tubeCellCenters
which is now function object.cell_centers()
Changes that may break existing code whose fixing is trivial:
object.points()
to object.points
everywhere.object.cell_centers
to object.cell_centers().points
everywhere.Picture()
to Image()
everywhere.Changes that will break existing code and need active thinking and some work to adapt
examples/advanced/spline_draw2.py
examples/volumetric/isosurfaces2.py
examples/pyplot/fit_curve2.py
tests/issues/issue_1146.py
tests/issues/discussion_1190.py
tests/issues/test_sph_harm2.py
tests/issues/issue_1218.py
tests/snippets/test_interactive_plotxy1.py
tests/snippets/test_interactive_plotxy2.py
tests/snippets/test_elastic_pendulum.py
===================================================================================
magic-class
exampleIsosurfaceBrowser
in #1064mesh.adjacency_list()
and graph_ball()
methods by @sergei9838utils.circle_from_3points()
function.examples/other/iminuit2.py
rotation=..
to Arrow2D()
classapplications.MorphPlotter
classFlyOverSurface
class and examples/basic/interaction_modes3.py
mesh.extrude_and_trim_with()
method out of #1077mesh.euler_characteristic()
, mesh.genus()
and mesh.to_reeb_graph()
in #1084reset_camera()
by @sergei9838 and Ericmeshlib
in https://doc.meshinspector.com/index.htmlcore.probe()
methodplotter.freeze()
to freeze interaction of current renderer in #1122 by @sergei9838addons.ButtonWidget
to address issue #1138add typing annotations in submodules
allow for dictionary input in Group and Assembly by @JeffreyWardman in https://github.com/marcomusy/vedo/pull/1057
allow assembly to correctly index objects by @JeffreyWardman in https://github.com/marcomusy/vedo/pull/1062
backwards compatibility in typing with python < 3.11 by @JeffreyWardman in https://github.com/marcomusy/vedo/pull/1093
avoid overwriting screenshots with "S"
key by @j042 in https://github.com/marcomusy/vedo/pull/1100
minor bug in RoundedLine by @PinkMushroom in https://github.com/marcomusy/vedo/pull/1104
bugfix: add tolerance to contains by @JeffreyWardman in https://github.com/marcomusy/vedo/pull/1105
Mitigate issue #769: don't set backend to '2d' in IPython REPLs by @paulbrodersen in https://github.com/marcomusy/vedo/pull/1108
handle empty axis for rotation by @JeffreyWardman in https://github.com/marcomusy/vedo/pull/1113
Print position parameter as 'pos' by @adamltyson in https://github.com/marcomusy/vedo/pull/1134
Changes that will break existing code whose fixing is trivial:
concatenate=True
keyword from apply_transform()
discussed in #1111Changes that will break existing code and need active thinking and work to adapt
examples/basic/interaction_modes3.py
examples/basic/interaction_modes4.py
examples/basic/buttons3.py
examples/advanced/warp4b.py
examples/other/magic-class1.py
examples/other/iminuit2.py
examples/other/meshlib1.py
tests/issues/issue_1077.py
===================================================================================
extrude()
method thanks to @JeffreyWardmanutils.madcad2vedo
conversion as per #976 by @JeffreyWardmanutils.camera_to_dict()
Axes(title_backface_color=...)
keywordlabels()
and labels2d()
shapes.plot_scalar()
plot a scalar along a line.tetgenpy
transformations.compute_main_axes()
transformations.__call__()
to apply a transformationpointcloud.distance_to()
applications.MorphPlotter()
to morph a polygonal mesh to a target meshsmooth_data()
to smooth/diffuse data attributesshapes.Tubes()
utils.Minimizer()
classCellCenters(Points)
classcore.apply_transform_from_actor()
add volume.slab()
mesh.generate_random_points()
to generate random points onto a surfacetetmesh.generate_random_points()
to generate random points in a tet meshintegrate_arrays_over_domain()
to integrate_data
volume.operation()
to support logic operations as per #1002pointcloud.relax_point_positions()
methodpointcloud.auto_distance()
method calculates the distance to the closest point in the same cloud of points.mesh.collapse_edges()
after #992mesh.cut_closed_surface()
image.clone()
in #1011transformations.TransformInterpolator
classLine.find_index_at_position()
finds the index of the line vertex that is closest to a pointvisual.LightKit
class which provides "natural" lighting from 4 sources.fast-simplification
example by @Louis-Pujol in #992volume.slice_plane()
in #1018core.mark_boundaries()
methodexamples/volumetric/slice_plane3.py
utils.andrews_curves()
function.transformations.LinearTransform.transpose()
method.pointcloud.generate_segments()
to generate a continous line from un-ordered points in 3dassembly.__add__()
by @j042 in #1036Ruler3D
class.plotter.render_hidden_lines()
methodMesh([verts, faces, lines, strips])
in #1019join_with_strips()
in #1043shapes.Ellipsoid()
and bug fixes in #978 by @daniel-a-diazpointcloud.pca_ellipsoid()
and bug fixespointcloud.pca_ellipse()
and bug fixesa
toggle keypressmesh.imprint()
applications.Slicer2DPlotter
RectilinearGrid
and StructuredGrid
data (experimental).RayCastPlotter
visual.scalar_range()
to control mesh coloring.shapes.Text3D.text()
by @giodavolume.isosurface_discrete()
methodChanges that can break existing code whose fixing is trivial:
clone2d(scale=...)
to clone2d(size=...)
shapes.StreamLines(object)
becomes object.compute_streamlines()
mesh.decimate()
into mesh.decimate()
, mesh.decimate_pro()
and mesh.decimate_binned()
as per #992core.clean()
after #992import_window()
for obj files and create load_obj()
by @zhouzq-thu in #891smooth_mls_12d(..., n=0)
to fix the number of neighbors in the smoothingmesh.binarize()
plotter.add_hover_legend()
now returns the id of the callback.settings.render_lines_as_tubes
and settings.hidden_line_removal
, add plotter.render_hidden_lines()
methodclose()
, close_window()
is now obsolete and removed.Changes that will break existing code and need active thinking and work to adapt
examples/basic/sliders_hsv.py
examples/basic/buttons1.py
examples/basic/buttons2.py
examples/basic/input_box.py
examples/advanced/warp4b.py
examples/advanced/diffuse_data.py
examples/advanced/moving_least_squares1D.py
examples/volumetric/slab_vol.py
examples/volumetric/streamlines1.py
examples/volumetric/streamlines2.py
examples/volumetric/streamlines3.py
examples/volumetric/streamlines4.py
examples/volumetric/office.py
examples/volumetric/slice_plane1.py
examples/volumetric/slice_plane3.py
examples/volumetric/mesh2volume.py
examples/volumetric/read_volume3.py
examples/volumetric/rectl_grid1.py
examples/volumetric/struc_grid1.py
examples/volumetric/app_raycaster.py
examples/volumetric/isosurfaces1.py
examples/volumetric/isosurfaces2.py
examples/simulations/mag_field1.py
examples/pyplot/andrews_cluster.py
examples/other/madcad1.py
examples/other/tetgen1.py
examples/other/nelder-mead.py
examples/other/fast_simpl.py
tests/issues/issue_968.py
tests/issues/issue_1025.py
tests/issues/test_force_anim.py
tests/snippets/test_discourse_1956.py
tests/snippets/test_ellipsoid_main_axes.py
tests/snippets/test_compare_fit1.py
===================================================================================
Major internal refactoring.
plt.actors
which now become plt.objects
.points()
to property .vertices
. Hence:
mesh.points() -> mesh.vertices
mesh.points(newpoints) -> mesh.vertices = newpoints
.cell_centers()
to property .cell_centers
.faces()
to property .cells
.lines()
to property .lines
.edges()
to property .edges
.normals()
and split it into property .vertex_normals
and property .cell_normals
picture.Picture2D(...)
which becomes Image(...).clone2d()
(see examples/pyplot/embed_matplotlib.py
).Volume.probe_points()
which becomes points.probe(volume)
Volume.probe_line()
which becomes line.probe(volume)
Volume.probe_plane()
which becomes plane.probe(volume)
file_io.load_transform()
. LinearTransform("file.mat")
substitutes it.transform_with_landmarks()
to align_with_landmarks()
find_cells_in()
to find_cells_in_bounds()
mesh.is_inside(pt)
moved to mesh.contains(pt)
Slicer2DPlotter
moved to application module.Slicer2DPlotter
voronoi()
to points.generate_voronoi()
Ruler
to Ruler3D
mesh.clone2d()
Slicer3DPlotter
thanks to @daniel-a-diaz in #925applications.Browser
vedo.transformations.py
module.plotter.pick_area()
thanks to @ZiguoAtGitHub and @RubendeBruin feedback.utils.line_line_distance()
functionutils.segment_segment_distance()
functionplotter.initialize_interactor()
methodflag_labels1.py
)colors.lut_color_at(value)
the color of the lookup table at value..show(..., screenshot="myfile.png")
keywordobject.coordinates
same as object.vertices
move()
to move single points or objectscopy()
as alias to clone()
applications.Slicer3DTwinPlotter
thanks to @daniel-a-diazsmooth_mls_2d()
by @jo-mueller (now store results in arrays mesh.pointdata['MLSVariance']
and mesh.pointdata['MLSValidPoint']
)vtkCamera
to show(camera=...)
triggers a copy of the input which is therefore not muted by any subsequent interaction (thanks @baba-yaga )closest_point()
thanks to @goncalo-ptmp = matplotlib.colormaps[name]
in colors.pyexamples/basic/buttons.py
examples/basic/input_box.py
examples/basic/sliders2.py
examples/basic/spline_tool.py
examples/basic/interaction_modes2.py
examples/advanced/timer_callback1.py
examples/advanced/timer_callback2.py
examples/advanced/warp4a.py
examples/advanced/warp4b.py
examples/pyplot/embed_matplotlib.py
examples/pyplot/plot_fxy2.py
examples/simulations/springs_fem.py
examples/simulations/lorenz.py
examples/volumetric/numpy2volume0.py
examples/volumetric/slicer1.py
examples/volumetric/tet_astyle.py
examples/volumetric/tet_cut1.py
examples/volumetric/tet_cut2.py
examples/other/flag_labels1.py
===================================================================================
io.py
to file_io.py
to avoid overriding stlib io
.plotter.add()
no more accepts keyword render=True/False
. Please use plotter.add().render()
explicitly. Same thing for plotter.remove()
.k3d
jupyter backendplotter.fov(value)
(field of view, the so called "fish-eye" effect)ploter.get_meshes()
plotter.remove(unpack_assemblies=False)
methodio.import_window()
methodcut_with_cookiecutter()
to cut 2D contours.shapes.NormalLines()
classvedo.interactor_modes
modulevedo.interactor_modes.BlenderStyle
classbase.pointdata.clear()
to remove all associated datavolume.hide_voxels()
for visualizationEvent.timerid
attributeVolume.operation
by @DanKrsipyplot
examples by @androbazascreenshot_scale
and remove it from settings.ScalarBar
with a tuple range (min, max)
application.Browser().play()
to autoplay a sliderpad()
to padding a Volume with zeros voxels (useful to dilate()
)ProgressBarWidget()
to show a progress bar in the rendering windowvedo/interactor_modes.mouse_left_move()
by @MiticoDanapplications.AnimationPlayer
class by @mikaeltulldahlexamples/basic/sliders_range.py
examples/basic/interaction_modes.py
examples/advanced/timer_callback3.py
examples/advanced/warp6.py
examples/pyplot/histo_1d_e.py
examples/other/tensor_grid2.py
examples/simulations/airplane1.py
examples/simulations/lorenz.py
examples/simulations/gas.py
examples/simulations/aspring2_player.py