pax_global_header 0000666 0000000 0000000 00000000064 14746674057 0014536 g ustar 00root root 0000000 0000000 52 comment=48dd287af8b4502daa227b0e9d612ad8a88fd630
vedo-2025.5.3/ 0000775 0000000 0000000 00000000000 14746674057 0012731 5 ustar 00root root 0000000 0000000 vedo-2025.5.3/.circleci/ 0000775 0000000 0000000 00000000000 14746674057 0014564 5 ustar 00root root 0000000 0000000 vedo-2025.5.3/.circleci/config.yml 0000664 0000000 0000000 00000002102 14746674057 0016547 0 ustar 00root root 0000000 0000000 # Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
version: 2
jobs:
##############################################################
test-vedo:
machine:
image: ubuntu-2004:current
resource_class: medium
environment:
MPLBACKEND: "agg"
DEBIAN_FRONTEND: "noninteractive"
steps:
- checkout
- run:
name: installing vedo
command: |
sudo apt-get update
sudo apt install libgl1-mesa-dev xvfb -y
pip3 install typing-extensions
pip3 install vedo
pip3 install matplotlib
pip3 install scipy
pip3 install --no-deps .
- run:
name: Run tests
command: |
cd
cd project/tests/common
source run_all.sh
- store_artifacts:
path: test-reports
destination: test-reports
######################################################
workflows:
version: 2
build-stuff:
jobs:
- test-vedo
vedo-2025.5.3/.gitignore 0000664 0000000 0000000 00000000365 14746674057 0014725 0 ustar 00root root 0000000 0000000 *pyc
.DS_Store
docs/pdoc/html
develop/
dist/
vtk_data
vedo.egg-info
build
.jupyter
.ipynb
*.ipynb
.ipynb_checkpoints
examples/notebooks/.ipynb_checkpoints
*png
*jpg
*tiff
*tif
# *npz
untitled*.py
bug_*.py
data
www
dev_*.py
z?.py
x?.py
v?.py vedo-2025.5.3/CHANGELOG.md 0000664 0000000 0000000 00000043261 14746674057 0014550 0 ustar 00root root 0000000 0000000 # Changelog
All notable changes to this project will be documented in this file.
# Development Version
## Changes and Fixes
## Soft-breaking Changes
Changes that may break existing code whose fixing is trivial:
## Hard-breaking Changes
Changes that will break existing code and need active thinking and some work to adapt
- None
## New/Revised Examples
```
```
## To Do
- fix trasform in image.tomesh() is not transmitted to mesh
### Broken Examples
Examples that are not fully functional and need some fixing:
```
markpoint.py (misplaced leader indicator)
cut_and_cap.py (incomplete capping)
tests/issues/discussion_800.py (incomplete capping of tube)
advanced/warp4b.py (probs with picker?)
```
#### (Internal) Known issues
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)
##### (Internal) Broken exports to .npz:
Fails to export correctly to npz format
```
boolean.py
cartoony.py
mesh_lut.py
mesh_map2cell.py
texturecubes.py
meshquality.py
streamlines1.py
```
# Version 2024.5.3
## Changes and Fixes
- add `settings.force_single_precision_points = False` in #1137 by @JeffreyWardman and @sean-d-zydex
- fix Volume masking in #1146 by @ivishalanand
- fix `LegendBox` in #1153 by @GerritFischer
- add `mesh.laplacian_diffusion()`
- fix `DistanceTool` in #1158
- fix `shapes.Plane.normal` in #1159 by @smoothumut
- add `Arrow.top_point()` and `Arrow.base_point()` to extract current arrow position #1163 @smoothumut
- fix `Arrow.top_index` to produce the correct index value
- add `assembly.Group.objects` by @smoothumut
- add `addons.DrawingWidget` class for tracing on planar props
- add `Video(..., scale=1)` keyword in #1168 by @YongcaiHuang
- modify `legosurface(boundary=True)` default in #1166
- make load functions compatible with pathlib #1176 by @Louis-Pujol
- fixed broken link to example #1175 by @jo-mueller
- add documentation to `Mesh.boolean()` #1173 by @jkunimune
- raise an error when calling cell_normals before compute_normals() #1172 by @jkunimune
- add documentation warning as computing normals can affect appearence of the mesh #1174 by @jkunimune
- add documentation about `Cube` and `Box` having duplicated vertices to allow defining normals #1171
- add documentation do address the behaviour of `mesh.volume()` and `mesh.is_closed()` wrt duplicated vertices.
- add `plotter.reset_clipping_range()` to reset the camera clipping range based on the bounds of the visible actors #1170
- fix issue with find_cell() in #1095
- improvements to `volume.isosurface_discrete()` in #1180 by @snownontrace
- fix bug on video frame by resetting camera clipping range in #1180 by @snownontrace
- changes in the scalarbar2d object.
- fix purging of nan in pyplot.plot()
- fix line trace to skip first point
- adjust volume transfer function for transparency @Poisoned
- fixing axes type 10 by @Poisoned
- improvements to input/output functionality for Assembly @ttsesm
- added `mesh.remove_all_lines()` method
- added keyword `Plane(edge_direction=...)` by @smoothumut
- added `isolines(..., n=list())` option to pass specific values.
- in `file_io.screenshot()` add fourth channel representing trasparency @miek0tube
- remove obsolete class `CellCenters` which is now function `object.cell_centers()`
## Soft-breaking Changes
Changes that may break existing code whose fixing is trivial:
- change `object.points()` to `object.points` everywhere.
- change `object.cell_centers` to `object.cell_centers().points` everywhere.
- change `Picture()` to `Image()` everywhere.
## Hard-breaking Changes
Changes that will break existing code and need active thinking and some work to adapt
- None
## New/Revised Examples
```
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
```
# Version 2024.5.2
## Changes and Fixes
- add `magic-class` example
- fix bug in `IsosurfaceBrowser` in #1064
- add `mesh.adjacency_list()` and `graph_ball()` methods by @sergei9838
- add `utils.circle_from_3points()` function.
- add example `examples/other/iminuit2.py`
- add `rotation=..` to `Arrow2D()` class
- improvements to `applications.MorphPlotter` class
- add `FlyOverSurface` class and `examples/basic/interaction_modes3.py`
- add `mesh.extrude_and_trim_with()` method out of #1077
- fix reset clipping range in thumbnail generation in #1085
- add `mesh.euler_characteristic()`, `mesh.genus()` and `mesh.to_reeb_graph()` in #1084
- fix `reset_camera()` by @sergei9838 and Eric
- fix handle empty axis for rotation #1113 by @JeffreyWardman
- fix minor bug in RoundedLine #1104 by @PinkMushroom
- fix avoid overwriting screenshots with "S" key #1100 by @j042
- add support for `meshlib` in https://doc.meshinspector.com/index.html
- add relevant keyword options to `core.probe()` method
- increase precision in writing obj files in #1119 by @ManuGraiph
- add `plotter.freeze()` to freeze interaction of current renderer in #1122 by @sergei9838
- add class `addons.ButtonWidget` to address issue #1138
- add 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
## Soft-breaking Changes
Changes that will break existing code whose fixing is trivial:
- remove `concatenate=True` keyword from `apply_transform()` discussed in #1111
## Hard-breaking Changes
Changes that will break existing code and need active thinking and work to adapt
- None
## New/Revised Examples
```
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
```
# Version 2024.5.1
## Changes and Fixes
- fixes to `extrude()` method thanks to @JeffreyWardman
- add `utils.madcad2vedo` conversion as per #976 by @JeffreyWardman
- add `utils.camera_to_dict()`
- add `Axes(title_backface_color=...)` keyword
- fix `labels()` and `labels2d()`
- add `shapes.plot_scalar()` plot a scalar along a line.
- add support for `tetgenpy`
- add `transformations.compute_main_axes()`
- add `transformations.__call__()` to apply a transformation
- fix small bug in `pointcloud.distance_to()`
- add `applications.MorphPlotter()` to morph a polygonal mesh to a target mesh
- add `smooth_data()` to smooth/diffuse data attributes
- add `shapes.Tubes()`
- add `utils.Minimizer()` class
- add `CellCenters(Points)` class
- add `core.apply_transform_from_actor()`
- add `add volume.slab()`
- add `mesh.generate_random_points()` to generate random points onto a surface
- add `tetmesh.generate_random_points()` to generate random points in a tet mesh
- rename `integrate_arrays_over_domain()` to `integrate_data`
- extend `volume.operation()` to support logic operations as per #1002
- add `pointcloud.relax_point_positions()` method
- add `pointcloud.auto_distance()` method calculates the distance to the closest point in the same cloud of points.
- fixed `mesh.collapse_edges()` after #992
- add `mesh.cut_closed_surface()`
- fix `image.clone()` in #1011
- add `transformations.TransformInterpolator` class
- add `Line.find_index_at_position()` finds the index of the line vertex that is closest to a point
- add `visual.LightKit` class which provides "natural" lighting from 4 sources.
- add `fast-simplification` example by @Louis-Pujol in #992
- add metadata "shape" to `volume.slice_plane()` in #1018
- fix `core.mark_boundaries()` method
- add callbacks for cutters in #1020 and `examples/volumetric/slice_plane3.py`
- add `utils.andrews_curves()` function.
- add `transformations.LinearTransform.transpose()` method.
- add `pointcloud.generate_segments()` to generate a continous line from un-ordered points in 3d
- fix `assembly.__add__()` by @j042 in #1036
- small fix to `Ruler3D` class.
- add `plotter.render_hidden_lines()` method
- add slot for triangle strips in constructor `Mesh([verts, faces, lines, strips])` in #1019
- internally use "import vedo.vtkclasses as vtki" instead of "vtk" to avoid confusion
- add `join_with_strips()` in #1043
- improvements to `shapes.Ellipsoid()` and bug fixes in #978 by @daniel-a-diaz
- improvements to `pointcloud.pca_ellipsoid()` and bug fixes
- improvements to `pointcloud.pca_ellipse()` and bug fixes
- fix Plotter `a` toggle keypress
- fix viz on jupyter notebook as per #994
- fix `mesh.imprint()`
- small fix to `applications.Slicer2DPlotter`
- automatically apply the actor transform to an object actor that was moved manually (via eg "InteractorStyleTrackballActor") in #1045 and #1046 by @sergei9838
- add support to `RectilinearGrid` and `StructuredGrid` data (experimental).
- improvements to `RayCastPlotter`
- add `visual.scalar_range()` to control mesh coloring.
- fix `shapes.Text3D.text()` by @gioda
- add `volume.isosurface_discrete()` method
## Soft Breaking Changes
Changes that can break existing code whose fixing is trivial:
- change `clone2d(scale=...)` to `clone2d(size=...)`
- remove `shapes.StreamLines(object)` becomes `object.compute_streamlines()`
- split `mesh.decimate()` into `mesh.decimate()`, `mesh.decimate_pro()` and `mesh.decimate_binned()` as per #992
- modified `core.clean()` after #992
- remove `import_window()` for obj files and create `load_obj()` by @zhouzq-thu in #891
- add `smooth_mls_12d(..., n=0)` to fix the number of neighbors in the smoothing
- modified API for `mesh.binarize()`
- `plotter.add_hover_legend()` now returns the id of the callback.
- removed `settings.render_lines_as_tubes` and `settings.hidden_line_removal`, add `plotter.render_hidden_lines()` method
- fix `close()`, `close_window()` is now obsolete and removed.
## Hard Breaking Changes
Changes that will break existing code and need active thinking and work to adapt
- None
## New/Revised Examples
```
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
```
# Version 2023.5.0
## Main changes
Major internal refactoring.
## Breaking changes
- rename internal list `plt.actors` which now become `plt.objects`
- rename `.points()` to property `.vertices`. Hence:
`mesh.points() -> mesh.vertices`
`mesh.points(newpoints) -> mesh.vertices = newpoints`
- rename `.cell_centers()` to property `.cell_centers`
- rename `.faces()` to property `.cells`
- rename `.lines()` to property `.lines`
- rename `.edges()` to property `.edges`
- rename `.normals()` and split it into property `.vertex_normals` and property `.cell_normals`
- rename `picture.Picture2D(...)` which becomes `Image(...).clone2d()` (see `examples/pyplot/embed_matplotlib.py`).
- rename `Volume.probe_points()` which becomes `points.probe(volume)`
- rename `Volume.probe_line()` which becomes `line.probe(volume)`
- rename `Volume.probe_plane()` which becomes `plane.probe(volume)`
- rename `file_io.load_transform()`. `LinearTransform("file.mat")` substitutes it.
- rename `transform_with_landmarks()` to `align_with_landmarks()`
- rename `find_cells_in()` to `find_cells_in_bounds()`
- rename `mesh.is_inside(pt)` moved to `mesh.contains(pt)`
- rename `Slicer2DPlotter` moved to `application module.Slicer2DPlotter`
- rename and moved method `voronoi()` to `points.generate_voronoi()`
- rename class `Ruler` to `Ruler3D`
## Other changes
- improvements in how vtk classes are imported (allow lazy import)
- improvements to method `mesh.clone2d()`
- improvements in `Slicer3DPlotter` thanks to @daniel-a-diaz in #925
- improvements in `applications.Browser`
- add new `vedo.transformations.py` module.
- add `plotter.pick_area()` thanks to @ZiguoAtGitHub and @RubendeBruin feedback.
- add texture to npz files thanks to @zhouzq-thu in #918
- add background radial gradients
- add `utils.line_line_distance()` function
- add `utils.segment_segment_distance()` function
- add `plotter.initialize_interactor()` method
- add object hinting by hovering mouse (see `flag_labels1.py`)
- add `colors.lut_color_at(value)` the color of the lookup table at value.
- add `.show(..., screenshot="myfile.png")` keyword
- add `object.coordinates` same as `object.vertices`
- add `move()` to move single points or objects
- add `copy()` as alias to `clone()`
- add "Roll" to camera dictionary (thanks @baba-yaga )
- add `applications.Slicer3DTwinPlotter` thanks to @daniel-a-diaz
- add radii feature to `smooth_mls_2d()` by @jo-mueller (now store results in arrays `mesh.pointdata['MLSVariance']` and `mesh.pointdata['MLSValidPoint']`)
- passing a `vtkCamera` to `show(camera=...)` triggers a copy of the input which is therefore not muted by any subsequent interaction (thanks @baba-yaga )
## Bug Fixes
- bug fix in `closest_point()` thanks to @goncalo-pt
- bug fix in tformat thanks to @JohnsWor in #913
- bug fix in windows OS in timers callbacks thanks to @jonaslindemann
- bug fix to non linear tranforms mode. Now it can be instantiated with a dictionary
- bug fix in meshlab interface thanks to @JeffreyWardman in #924
- bug fix changed `mp = matplotlib.colormaps[name]` in colors.py
## New/Revised Examples
```
examples/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
```
# Version 2023.4.5
## Main changes
- Rename module `io.py` to `file_io.py` to avoid overriding stlib `io`.
- Complete revision of cutter widgets functionality
- Integration in napari thanks to @jo-mueller
### Breaking changes
- method `plotter.add()` no more accepts keyword `render=True/False`. Please use `plotter.add().render()` explicitly. Same thing for `plotter.remove()`.
### Other fixes and improvements
- added gpu acceleration for CLI volumetric visualization in #832 by @zhang-qiang-github
- fixes for `k3d` jupyter backend
- added `plotter.fov(value)` (field of view, the so called "fish-eye" effect)
- fix `ploter.get_meshes()`
- fix for `plotter.remove(unpack_assemblies=False)` method
- fix for `io.import_window()` method
- added `cut_with_cookiecutter()` to cut 2D contours.
- fix `shapes.NormalLines()` class
- added `vedo.interactor_modes` module
- added `vedo.interactor_modes.BlenderStyle` class
- added `base.pointdata.clear()` to remove all associated data
- added `volume.hide_voxels()` for visualization
- added `Event.timerid` attribute
- fix to `Volume.operation` by @DanKrsi
- fix links in `pyplot` examples by @androbaza
- fix `screenshot_scale` and remove it from settings.
- allow initializing `ScalarBar` with a tuple range `(min, max)`
- Update API Documentation for Changing Backend by @bhacha
- Add `application.Browser().play()` to autoplay a slider
- Add `pad()` to padding a Volume with zeros voxels (useful to `dilate()`)
- Add `ProgressBarWidget()` to show a progress bar in the rendering window
- Fix Scalarbar3D logscale and change separator symbol by @XushanLu
- Fix `vedo/interactor_modes.mouse_left_move()` by @MiticoDan
- Added `applications.AnimationPlayer` class by @mikaeltulldahl
- fix convex hull in 2D by @ManuGraiph
-------------------------
## New/Revised Examples
```
examples/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
```
vedo-2025.5.3/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000005750 14746674057 0015537 0 ustar 00root root 0000000 0000000 ## Code of Conduct
### Our Pledge
We, as contributors and maintainers of the vedo project, pledge to make participation in our project a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
We are committed to creating a welcoming and inclusive environment for all.
### Our Standards
Examples of behavior that contributes to creating a positive environment include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
### Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
### Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
Examples of representing the project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
### Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [this email](marco.musy@embl.es). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
### Attribution
This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. vedo-2025.5.3/CONTRIBUTING.md 0000664 0000000 0000000 00000003416 14746674057 0015166 0 ustar 00root root 0000000 0000000 ## Contributing to vedo
Thank you for considering contributing to vedo!
vedo is an open-source 3D visualization library for scientific data in Python. It aims to provide an easy-to-use and flexible toolset for creating publication-quality visualizations of complex 3D data.
We welcome all contributions, including bug reports, feature requests, and code contributions. This file outlines the guidelines for contributing to the vedo project.
### Reporting bugs and requesting features
If you encounter a bug in vedo, or would like to request a new feature, please open an issue on the vedo GitHub repository. When opening an issue, please provide as much detail as possible about the problem or feature request, including code snippets, screenshots, or other relevant information.
### Contributing code
If you would like to contribute code to vedo, please follow these guidelines:
Fork the vedo repository and create a new branch for your changes.
Make your changes, including adding tests and updating documentation as necessary.
Submit a pull request to the vedo repository.
When submitting a pull request, please provide a clear and detailed description of your changes, including the motivation for the changes and any relevant background information.
All contributions will be reviewed by the vedo development team, and we may request changes or ask for additional information before merging your changes.
### Code style
When contributing code to vedo, please follow the PEP 8 style guide.
###Licensing
All contributions to vedo are subject to the MIT license.
By contributing to vedo, you agree to license your contributions under the terms of this license.
### Thank you!
We appreciate your interest in contributing to vedo, and we look forward to working with you to make it even better!
vedo-2025.5.3/FONT.LICENSE 0000664 0000000 0000000 00000016701 14746674057 0014510 0 ustar 00root root 0000000 0000000 Files: vedo/fonts/Bongas.*
Source: https://www.1001freefonts.com/boogaloo.font
Copyright: 2011 John Vargas Beltrán, with Reserved Font Name Boogaloo
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Bongas
License: OFL
Files: vedo/fonts/Calco.*
Source: https://www.1001freefonts.com/calling-code.font
Copyright: 2017 Ryoichi Tsunekawa, with Reserved Font Name Calling Code
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Calco
License: OFL
Files: vedo/fonts/Comae.*
Source: https://www.1001freefonts.com/comfortaa.font
Copyright: 2011 Johan Aakerlund, with Reserved Font Name Comfortaa
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Comae
License: OFL
Files: vedo/fonts/Glasgo.*
Source: https://www.1001freefonts.com/class-coder.font
Copyright: 2017 Walter E Stewart, with Reserved Font Name Class Coder
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Glasgo
License: OFL
Files: vedo/fonts/Kanopus.*
Source: https://www.1001freefonts.com/kelvinch.font
Copyright: 2016 Paul Miller, with Reserved Font Names "Kelvinch" and "SIL"
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Kanopus
License: OFL
Files: vedo/fonts/Normografo.*
Source: https://www.1001freefonts.com/tecnico-font-19886.font
Copyright: 2017 Cristhian Gomez, with Reserved Font Name Tecnico
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Normografo
License: OFL
Files: vedo/fonts/SmartCouric.*
Source: https://www.fontsquirrel.com/fonts/courier-prime
Copyright: 2013 Quote-Unquote Apps, with Reserved Font Name Courier Prime
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name SmartCouric
License: OFL
Files: vedo/fonts/Theemim.*
Source: https://www.1001freefonts.com/theano-didot.font
Copyright: Alexey Kryukov, with Reserved Font Name Theano Didot
2020 M. Musy
Comment: 2020 subset and polygonized for vedo with name Theemim
License: OFL
Files: vedo/fonts/VictorMono.ttf
Source: https://www.fontsquirrel.com/fonts/victor-mono
Copyright: 2019 Rune Bjørnerås, (https://rubjo.github.io/victor-mono)
License: MIT
Files: vedo/fonts/Quikhand.ttf
Source: https://www.1001freefonts.com/quikhand.font
Copyright: 2020 Qwerks (http://graphicriver.net/user/joiaco)
License: public-domain
License: MIT
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
License: public-domain
Files in the public domain have no restrictions on use and may be
used, modified and redistributed freely.
Licence: OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
.
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
.
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
.
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
.
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
vedo-2025.5.3/LICENSE 0000664 0000000 0000000 00000002053 14746674057 0013736 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2017 Marco Musy
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
vedo-2025.5.3/README.md 0000664 0000000 0000000 00000026340 14746674057 0014215 0 ustar 00root root 0000000 0000000

[](https://en.wikipedia.org/wiki/MIT_License)
[](https://anaconda.org/conda-forge/vedo)
[](https://repology.org/project/vedo/versions)
[](https://doi.org/10.5281/zenodo.4587871)
[](https://pepy.tech/project/vedo)
[](https://circleci.com/gh/marcomusy/vedo)
Your friendly python module
for scientific analysis and **v**isualization of **3d** **o**bjects.
## 💾 Installation
```bash
pip install vedo
```
additional installation details [click to expand]
- To install the latest _dev_ version of `vedo`:
```bash
pip install -U git+https://github.com/marcomusy/vedo.git
```
- To install from the conda-forge channel:
```bash
conda install -c conda-forge vedo
```
## 📙 Documentation
The webpage of the library with documentation is available [**here**](https://vedo.embl.es).
📌 **Need help? Have a question, or wish to ask for a missing feature?**
Do not hesitate to ask any questions on the [**image.sc** forum](https://forum.image.sc/)
or by opening a [**github issue**](https://github.com/marcomusy/vedo/issues).
## 🎨 Features
The library includes a [large set of working examples](https://github.com/marcomusy/vedo/tree/master/examples)
for a wide range of functionalities
working with polygonal meshes and point clouds [click to expand]
- Import meshes from VTK format, STL, Wavefront OBJ, 3DS, Dolfin-XML, Neutral, GMSH, OFF, PCD (PointCloud),
- Export meshes as ASCII or binary to VTK, STL, OBJ, PLY ... formats.
- Analysis tools like Moving Least Squares, mesh morphing and more..
- Tools to visualize and edit meshes (cutting a mesh with another mesh, slicing, normalizing, moving vertex positions, etc..).
- Split mesh based on surface connectivity. Extract the largest connected area.
- Calculate areas, volumes, center of mass, average sizes etc.
- Calculate vertex and face normals, curvatures, feature edges. Fill mesh holes.
- Subdivide faces of a mesh, increasing the number of vertex points. Mesh simplification.
- Coloring and thresholding of meshes based on associated scalar or vectorial data.
- Point-surface operations: find nearest points, determine if a point lies inside or outside of a mesh.
- Create primitive shapes: spheres, arrows, cubes, torus, ellipsoids...
- Generate glyphs (associate a mesh to every vertex of a source mesh).
- Create animations easily by just setting the position of the displayed objects in the 3D scene. Add trailing lines and shadows to moving objects is supported.
- Straightforward support for multiple sync-ed or independent renderers in the same window.
- Registration (alignment) of meshes with different techniques.
- Mesh smoothing.
- Delaunay triangulation in 2D and 3D.
- Generate meshes by joining nearby lines in space.
- Find the closest path from one point to another, traveling along the edges of a mesh.
- Find the intersection of a mesh with lines, planes or other meshes.
- Interpolate scalar and vectorial fields with Radial Basis Functions and Thin Plate Splines.
- Add sliders and buttons to interact with the scene and the individual objects.
- Visualization of tensors.
- Analysis of Point Clouds
- Moving Least Squares smoothing of 2D, 3D and 4D clouds
- Fit lines, planes, spheres and ellipsoids in space
- Identify outliers in a distribution of points
- Decimate a cloud to a uniform distribution.
working with volumetric data and tetrahedral meshes
- Import data from VTK format volumetric TIFF stacks, DICOM, SLC, MHD and more
- Import 2D images as PNG, JPEG, BMP
- Isosurfacing of volumes
- Composite and maximum projection volumetric rendering
- Generate volumetric signed-distance data from an input surface mesh
- Probe volumes with lines and planes
- Generate stream-lines and stream-tubes from vectorial fields
- Slice and crop volumes
- Support for other volumetric structures (structured and grid data)
plotting and histogramming in 2D and 3D
- Polygonal 3D text rendering with Latex-like syntax and unicode characters, with 30 different fonts.
- Fully customizable axis styles
- donut plots and pie charts
- Scatter plots in 2D and 3D
- Surface function plotting
- 1D customizable histograms
- 2D hexagonal histograms
- Polar plots, spherical plots and histogramming
- Draw latex-formatted formulas in the rendering window.
- Quiver, violin, whisker and stream-line plots
- Graphical markers analogous to matplotlib
integration with other libraries
- Integration with the [Qt5](https://www.qt.io/) framework.
- Support for [FEniCS/Dolfin](https://fenicsproject.org/) platform for visualization of PDE/FEM solutions.
- Interoperability with the [trimesh](https://trimsh.org/), [pyvista](https://github.com/pyvista/pyvista) and [pymeshlab](https://github.com/cnr-isti-vclab/PyMeshLab) libraries.
- Export 3D scenes and embed them into a [web page](https://vedo.embl.es/examples/fenics_elasticity.html).
- Embed 3D scenes in *jupyter* notebooks with [K3D](https://github.com/K3D-tools/K3D-jupyter) (can export an interactive 3D-snapshot page [here](https://vedo.embl.es/examples/geo_scene.html)).
### ⌨ Command Line Interface
Visualize a polygonal mesh or a volume from a terminal window simply with:
```bash
vedo https://vedo.embl.es/examples/data/embryo.tif
```
volumetric files (slc, tiff, DICOM...) can be visualized in different modes [click to expand]
|Volume 3D slicing
`vedo --slicer embryo.slc`| Ray-casting
`vedo -g`| 2D slicing
`vedo --slicer2d`|
|:--------|:-----|:--------|
|  |  |  |
Type `vedo -h` for the complete list of options.
## 🐾 Gallery
`vedo` currently includes 300+ working [examples](https://github.com/marcomusy/vedo/tree/master/examples) and [notebooks](https://github.com/marcomusy/vedo/tree/master/examples/notebooks).
Run any of the built-in examples. In a terminal type: `vedo -r warp2`
Check out the example galleries organized by subject here:

## ✏ Contributing
Any contributions are **greatly appreciated**!
If you have a suggestion that would make this better,
please fork the repo and create a pull request. This is how:
```bash
# 1. Fork the repository on GitHub then clone your fork locally:
git clone https://github.com/your-username/vedo.git
# 2. Create a new branch for your feature or bugfix:
git checkout -b feature/my-feature
# 3. Make your changes and commit them:
git commit -m "Description of my feature"
# 4. Push your changes to your fork:
git push origin feature/my-feature
# 5. Open a Pull Request on the main repository.
```
You can also simply open an issue with the tag "enhancement".
## 📜 References
**Scientific publications leveraging `vedo`:**
- X. Diego *et al.*:
*"Key features of Turing systems are determined purely by network topology"*,
Phys. Rev. X 8, 021071,
[DOI](https://journals.aps.org/prx/abstract/10.1103/PhysRevX.8.021071).
- M. Musy, K. Flaherty *et al.*:
*"A Quantitative Method for Staging Mouse Limb Embryos based on Limb Morphometry"*,
Development (2018) 145 (7): dev154856,
[DOI](http://dev.biologists.org/content/145/7/dev154856).
- F. Claudi, A. L. Tyson, T. Branco, *"Brainrender. A python based software for visualisation
of neuroanatomical and morphological data."*,
eLife 2021;10:e65751,
[DOI](https://doi.org/10.7554/eLife.65751).
- J. S. Bennett, D. Sijacki,
*"Resolving shocks and filaments in galaxy formation simulations: effects on gas properties and
star formation in the circumgalactic medium"*,
Monthly Notices of the Royal Astronomical Society, Volume 499, Issue 1,
[DOI](https://doi.org/10.1093/mnras/staa2835).
- J.D.P. Deshapriya *et al.*,
*"Spectral analysis of craters on (101955) Bennu"*.
Icarus 2020,
[DOI](https://doi.org/10.1016/j.icarus.2020.114252).
- A. Pollack *et al.*,
*"Stochastic inversion of gravity, magnetic, tracer, lithology, and fault data
for geologically realistic structural models: Patua Geothermal Field case study"*,
Geothermics, Volume 95, September 2021,
[DOI](https://doi.org/10.1016/j.geothermics.2021.102129).
- X. Lu *et al.*,
*"3D electromagnetic modeling of graphitic faults in the Athabasca
Basin using a finite-volume time-domain approach with unstructured grids"*,
Geophysics,
[DOI](https://doi.org/10.1190/geo2020-0657.1).
- M. Deepa Maheshvare *et al.*,
*"A Graph-Based Framework for Multiscale Modeling of Physiological Transport"*,
Front. Netw. Physiol. 1:802881,
[DOI](https://www.frontiersin.org/articles/10.3389/fnetp.2021.802881/full).
- F. Claudi, T. Branco,
*"Differential geometry methods for constructing manifold-targeted recurrent neural networks"*,
bioRxiv 2021.10.07.463479,
[DOI](https://doi.org/10.1101/2021.10.07.463479).
- J. Klatzow, G. Dalmasso, N. Martínez-Abadías, J. Sharpe, V. Uhlmann,
*"µMatch: 3D shape correspondence for microscopy data"*,
Front. Comput. Sci., 15 February 2022.
[DOI](https://doi.org/10.3389/fcomp.2022.777615)
- G. Dalmasso *et al.*, *"4D reconstruction of murine developmental trajectories using spherical harmonics"*,
Developmental Cell 57, 1–11 September 2022,
[DOI](https://doi.org/10.1016/j.devcel.2022.08.005).
- D.J.E Waibel *et al.*, *"Capturing Shape Information with Multi-scale Topological Loss Terms for 3D Reconstruction"*,
Lecture Notes in Computer Science, vol 13434. Springer, Cham.
[DOI](https://doi.org/10.1007/978-3-031-16440-8_15).
- N. Lamb *et al.*, *"DeepJoin: Learning a Joint Occupancy, Signed Distance, and Normal Field Function for Shape Repair"*,
ACM Transactions on Graphics (TOG), vol 41, 6, 2022.
[DOI](https://dl.acm.org/doi/abs/10.1145/3550454.3555470)
- J. Cotterell *et al.*, *"Cell 3D Positioning by Optical encoding (C3PO) and its application to spatial transcriptomics"*, bioRxiv 2024.03.12.584578;
[DOI](https://doi.org/10.1101/2024.03.12.584578)
**Have you found this software useful for your research? Star ✨ the project and cite it as:**
M. Musy et al.,
"vedo
, a python module for scientific analysis and visualization of 3D objects and point clouds",
Zenodo, 2021, doi: 10.5281/zenodo.7019968.
[](https://www.embl.es)
vedo-2025.5.3/docs/ 0000775 0000000 0000000 00000000000 14746674057 0013661 5 ustar 00root root 0000000 0000000 vedo-2025.5.3/docs/colormaps.jpg 0000664 0000000 0000000 00000520252 14746674057 0016370 0 ustar 00root root 0000000 0000000 JFIF ' ' C
C
q 1q!A"2FG BEQr#%&'367DV$45CRTUWabHScd8Xesvfgt Y
1QRSABCT2D!abq34EUcd"#$5r%e&s