MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / compute_winding_number

Function compute_winding_number

python/pymesh/winding_number.py:3–35  ·  view source on GitHub ↗

Compute winding number with respect to `mesh` at `queries`. Args: mesh (:class:`Mesh`): The mesh for which winding number is evaluated. queries (:class:`numpy.ndarray`): N by 3 matrix of query points at which winding number is evaluated. engine (``string``):

(mesh, queries, engine="auto")

Source from the content-addressed store, hash-verified

1import PyMesh
2
3def compute_winding_number(mesh, queries, engine="auto"):
4 """ Compute winding number with respect to `mesh` at `queries`.
5
6 Args:
7 mesh (:class:`Mesh`): The mesh for which winding number is evaluated.
8 queries (:class:`numpy.ndarray`): N by 3 matrix of query points at which
9 winding number is evaluated.
10 engine (``string``): (optional) Winding number computing engine name:
11
12 * ``auto``: use default engine (which is ``igl``).
13 * ``igl``: use libigl's `generalized winding number`_.
14 * ``fast_winding_number``: use code from `fast winding number`_
15 paper. It is faster than ``igl`` but can be less accurate sometimes.
16
17
18 Returns:
19 A list of size N, represent the winding numbers at each query points in
20 order.
21
22 .. _`generalized winding number`: https://libigl.github.io/tutorial/#generalized-winding-number
23 .. _`fast winding number`: http://www.dgp.toronto.edu/projects/fast-winding-numbers/
24 """
25 assert(mesh.dim == 3)
26 assert(mesh.vertex_per_face == 3)
27
28 if engine == "auto":
29 engine = "igl"
30
31 engine = PyMesh.WindingNumberEngine.create(engine)
32 engine.set_mesh(mesh.vertices, mesh.faces)
33 winding_numbers = engine.run(queries).ravel()
34
35 return winding_numbers

Callers 2

test_cubeMethod · 0.90

Calls 3

createMethod · 0.45
set_meshMethod · 0.45
runMethod · 0.45

Tested by 2

test_cubeMethod · 0.72