%global _empty_manifest_terminate_build 0 Name: python-zmesh Version: 1.6.2 Release: 1 Summary: Multilabel marching cubes and simplification of volumetric data. License: GPLv3+ URL: https://github.com/seung-lab/zmesh/ Source0: https://mirrors.nju.edu.cn/pypi/web/packages/f8/4d/3be291deda3cadf04fc346b52cc1ff12e7f5b8d1d9716ffbb0edf91a4ced/zmesh-1.6.2.tar.gz Requires: python3-numpy %description ## zmesh: Multi-Label Marching Cubes & Mesh Simplification [![Tests](https://github.com/seung-lab/zmesh/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/seung-lab/zmesh/actions/workflows/test.yml) [![PyPI version](https://badge.fury.io/py/zmesh.svg)](https://badge.fury.io/py/zmesh) ```python from zmesh import Mesher labels = ... # some dense volumetric labeled image mesher = Mesher( (4,4,40) ) # anisotropy of image # initial marching cubes pass # close controls whether meshes touching # the image boundary are left open or closed mesher.mesh(labels, close=False) meshes = [] for obj_id in mesher.ids(): meshes.append( mesher.get_mesh( obj_id, normals=False, # whether to calculate normals or not # tries to reduce triangles by this factor # 0 disables simplification simplification_factor=100, # Max tolerable error in physical distance max_simplification_error=8, # whether meshes should be centered in the voxel # on (0,0,0) [False] or (0.5,0.5,0.5) [True] voxel_centered=False, ) ) mesher.erase(obj_id) # delete high res mesh mesher.clear() # clear memory retained by mesher mesh = meshes[0] mesh = mesher.simplify( mesh, # same as simplification_factor in get_mesh reduction_factor=100, # same as max_simplification_error in get_mesh max_error=40, compute_normals=False, # whether to also compute face normals ) # apply simplifier to a pre-existing mesh # compute normals without simplifying mesh = mesher.compute_normals(mesh) mesh.vertices mesh.faces mesh.normals mesh.triangles() # compute triangles from vertices and faces # Extremely common obj format with open('iconic_doge.obj', 'wb') as f: f.write(mesh.to_obj()) # Common binary format with open('iconic_doge.ply', 'wb') as f: f.write(mesh.to_ply()) # Neuroglancer Precomputed format with open('10001001:0', 'wb') as f: f.write(mesh.to_precomputed()) ``` ## Installation If binaries are not available for your system, ensure you have a C++ compiler installed. ```bash pip install zmesh ``` ## Performance Tuning & Notes - The mesher will consume about double memory in 64 bit mode if the size of the object exceeds <1023, 1023, 511> on the x, y, or z axes. This is due to a limitation of the 32-bit format. - The mesher is ambidextrous, it can handle C or Fortran order arrays. - The maximum vertex range supported `.simplify` after converting to voxel space is 220 (appx. 1M) due to the packed 64-bit vertex format. - There is a longstanding design flaw in `cMesher.hpp` that transposes the returned mesh and resolution. We're working on a backwards compatible solution. That's why you need to do `mesher.mesh(data.T)`. ## Related Projects - [zi_lib](https://github.com/zlateski/zi_lib) - zmesh makes heavy use of Aleks' C++ library. - [Igneous](https://github.com/seung-lab/igneous) - Visualization of connectomics data using cloud computing. ## Credits Thanks to Aleks Zlateski for creating and sharing this beautiful mesher. Later changes by Will Silversmith, Nico Kemnitz, and Jingpeng Wu. ## References 1. W. Lorensen and H. Cline. "Marching Cubes: A High Resolution 3D Surface Construction Algorithm". pp 163-169. Computer Graphics, Volume 21, Number 4, July 1987. ([link](https://people.eecs.berkeley.edu/~jrs/meshpapers/LorensenCline.pdf)) 2. M. Garland and P. Heckbert. "Surface simplification using quadric error metrics". SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. Pages 209–216. August 1997. doi: 10.1145/258734.258849 ([link](https://mgarland.org/files/papers/quadrics.pdf)) 3. H. Hoppe. "New Quadric Metric for Simplifying Meshes with Appearance Attributes". IEEE Visualization 1999 Conference. pp. 59-66. doi: 10.1109/VISUAL.1999.809869 ([link](http://hhoppe.com/newqem.pdf)) %package -n python3-zmesh Summary: Multilabel marching cubes and simplification of volumetric data. Provides: python-zmesh BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip BuildRequires: python3-cffi BuildRequires: gcc BuildRequires: gdb %description -n python3-zmesh ## zmesh: Multi-Label Marching Cubes & Mesh Simplification [![Tests](https://github.com/seung-lab/zmesh/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/seung-lab/zmesh/actions/workflows/test.yml) [![PyPI version](https://badge.fury.io/py/zmesh.svg)](https://badge.fury.io/py/zmesh) ```python from zmesh import Mesher labels = ... # some dense volumetric labeled image mesher = Mesher( (4,4,40) ) # anisotropy of image # initial marching cubes pass # close controls whether meshes touching # the image boundary are left open or closed mesher.mesh(labels, close=False) meshes = [] for obj_id in mesher.ids(): meshes.append( mesher.get_mesh( obj_id, normals=False, # whether to calculate normals or not # tries to reduce triangles by this factor # 0 disables simplification simplification_factor=100, # Max tolerable error in physical distance max_simplification_error=8, # whether meshes should be centered in the voxel # on (0,0,0) [False] or (0.5,0.5,0.5) [True] voxel_centered=False, ) ) mesher.erase(obj_id) # delete high res mesh mesher.clear() # clear memory retained by mesher mesh = meshes[0] mesh = mesher.simplify( mesh, # same as simplification_factor in get_mesh reduction_factor=100, # same as max_simplification_error in get_mesh max_error=40, compute_normals=False, # whether to also compute face normals ) # apply simplifier to a pre-existing mesh # compute normals without simplifying mesh = mesher.compute_normals(mesh) mesh.vertices mesh.faces mesh.normals mesh.triangles() # compute triangles from vertices and faces # Extremely common obj format with open('iconic_doge.obj', 'wb') as f: f.write(mesh.to_obj()) # Common binary format with open('iconic_doge.ply', 'wb') as f: f.write(mesh.to_ply()) # Neuroglancer Precomputed format with open('10001001:0', 'wb') as f: f.write(mesh.to_precomputed()) ``` ## Installation If binaries are not available for your system, ensure you have a C++ compiler installed. ```bash pip install zmesh ``` ## Performance Tuning & Notes - The mesher will consume about double memory in 64 bit mode if the size of the object exceeds <1023, 1023, 511> on the x, y, or z axes. This is due to a limitation of the 32-bit format. - The mesher is ambidextrous, it can handle C or Fortran order arrays. - The maximum vertex range supported `.simplify` after converting to voxel space is 220 (appx. 1M) due to the packed 64-bit vertex format. - There is a longstanding design flaw in `cMesher.hpp` that transposes the returned mesh and resolution. We're working on a backwards compatible solution. That's why you need to do `mesher.mesh(data.T)`. ## Related Projects - [zi_lib](https://github.com/zlateski/zi_lib) - zmesh makes heavy use of Aleks' C++ library. - [Igneous](https://github.com/seung-lab/igneous) - Visualization of connectomics data using cloud computing. ## Credits Thanks to Aleks Zlateski for creating and sharing this beautiful mesher. Later changes by Will Silversmith, Nico Kemnitz, and Jingpeng Wu. ## References 1. W. Lorensen and H. Cline. "Marching Cubes: A High Resolution 3D Surface Construction Algorithm". pp 163-169. Computer Graphics, Volume 21, Number 4, July 1987. ([link](https://people.eecs.berkeley.edu/~jrs/meshpapers/LorensenCline.pdf)) 2. M. Garland and P. Heckbert. "Surface simplification using quadric error metrics". SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. Pages 209–216. August 1997. doi: 10.1145/258734.258849 ([link](https://mgarland.org/files/papers/quadrics.pdf)) 3. H. Hoppe. "New Quadric Metric for Simplifying Meshes with Appearance Attributes". IEEE Visualization 1999 Conference. pp. 59-66. doi: 10.1109/VISUAL.1999.809869 ([link](http://hhoppe.com/newqem.pdf)) %package help Summary: Development documents and examples for zmesh Provides: python3-zmesh-doc %description help ## zmesh: Multi-Label Marching Cubes & Mesh Simplification [![Tests](https://github.com/seung-lab/zmesh/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/seung-lab/zmesh/actions/workflows/test.yml) [![PyPI version](https://badge.fury.io/py/zmesh.svg)](https://badge.fury.io/py/zmesh) ```python from zmesh import Mesher labels = ... # some dense volumetric labeled image mesher = Mesher( (4,4,40) ) # anisotropy of image # initial marching cubes pass # close controls whether meshes touching # the image boundary are left open or closed mesher.mesh(labels, close=False) meshes = [] for obj_id in mesher.ids(): meshes.append( mesher.get_mesh( obj_id, normals=False, # whether to calculate normals or not # tries to reduce triangles by this factor # 0 disables simplification simplification_factor=100, # Max tolerable error in physical distance max_simplification_error=8, # whether meshes should be centered in the voxel # on (0,0,0) [False] or (0.5,0.5,0.5) [True] voxel_centered=False, ) ) mesher.erase(obj_id) # delete high res mesh mesher.clear() # clear memory retained by mesher mesh = meshes[0] mesh = mesher.simplify( mesh, # same as simplification_factor in get_mesh reduction_factor=100, # same as max_simplification_error in get_mesh max_error=40, compute_normals=False, # whether to also compute face normals ) # apply simplifier to a pre-existing mesh # compute normals without simplifying mesh = mesher.compute_normals(mesh) mesh.vertices mesh.faces mesh.normals mesh.triangles() # compute triangles from vertices and faces # Extremely common obj format with open('iconic_doge.obj', 'wb') as f: f.write(mesh.to_obj()) # Common binary format with open('iconic_doge.ply', 'wb') as f: f.write(mesh.to_ply()) # Neuroglancer Precomputed format with open('10001001:0', 'wb') as f: f.write(mesh.to_precomputed()) ``` ## Installation If binaries are not available for your system, ensure you have a C++ compiler installed. ```bash pip install zmesh ``` ## Performance Tuning & Notes - The mesher will consume about double memory in 64 bit mode if the size of the object exceeds <1023, 1023, 511> on the x, y, or z axes. This is due to a limitation of the 32-bit format. - The mesher is ambidextrous, it can handle C or Fortran order arrays. - The maximum vertex range supported `.simplify` after converting to voxel space is 220 (appx. 1M) due to the packed 64-bit vertex format. - There is a longstanding design flaw in `cMesher.hpp` that transposes the returned mesh and resolution. We're working on a backwards compatible solution. That's why you need to do `mesher.mesh(data.T)`. ## Related Projects - [zi_lib](https://github.com/zlateski/zi_lib) - zmesh makes heavy use of Aleks' C++ library. - [Igneous](https://github.com/seung-lab/igneous) - Visualization of connectomics data using cloud computing. ## Credits Thanks to Aleks Zlateski for creating and sharing this beautiful mesher. Later changes by Will Silversmith, Nico Kemnitz, and Jingpeng Wu. ## References 1. W. Lorensen and H. Cline. "Marching Cubes: A High Resolution 3D Surface Construction Algorithm". pp 163-169. Computer Graphics, Volume 21, Number 4, July 1987. ([link](https://people.eecs.berkeley.edu/~jrs/meshpapers/LorensenCline.pdf)) 2. M. Garland and P. Heckbert. "Surface simplification using quadric error metrics". SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. Pages 209–216. August 1997. doi: 10.1145/258734.258849 ([link](https://mgarland.org/files/papers/quadrics.pdf)) 3. H. Hoppe. "New Quadric Metric for Simplifying Meshes with Appearance Attributes". IEEE Visualization 1999 Conference. pp. 59-66. doi: 10.1109/VISUAL.1999.809869 ([link](http://hhoppe.com/newqem.pdf)) %prep %autosetup -n zmesh-1.6.2 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-zmesh -f filelist.lst %dir %{python3_sitearch}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 31 2023 Python_Bot - 1.6.2-1 - Package Spec generated