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

Function resolve_self_intersection

python/pymesh/selfintersection.py:5–56  ·  view source on GitHub ↗

Resolve all self-intersections. Args: mesh (:py:class:`Mesh`): The input mesh. Only triangular mesh is supported. engine (``string``): (optional) Self-intersection engine. Valid engines include: * ``auto``: the default engine (default is `

(mesh, engine="auto")

Source from the content-addressed store, hash-verified

3from .meshio import form_mesh
4
5def resolve_self_intersection(mesh, engine="auto"):
6 """ Resolve all self-intersections.
7
8 Args:
9 mesh (:py:class:`Mesh`): The input mesh. Only triangular mesh is
10 supported.
11 engine (``string``): (optional) Self-intersection engine. Valid engines
12 include:
13
14 * ``auto``: the default engine (default is ``igl``).
15 * ``igl``: `libigl's self-intersection engine
16 <https://github.com/libigl/libigl>`_
17
18 Returns:
19 A triangular :py:class:`Mesh` with all self-intersection resolved. The
20 following per-face scalar field is defined:
21
22 * ``face_sources``: For each output face, this field specifies the index
23 of the corresponding "source face" in the input mesh.
24
25 """
26 if engine == "auto":
27 engine = "igl"
28
29 vertices = mesh.vertices
30 faces = mesh.faces
31 if mesh.dim == 2:
32 vertices = np.hstack((vertices,
33 np.zeros((mesh.num_vertices, 1), dtype=float)))
34 elif mesh.dim != 3:
35 raise NotImplementedError(
36 "Resolving self-intersection only support 2D and 3D meshes")
37 if mesh.vertex_per_face != 3:
38 raise NotImplementedError(
39 "Resolving self-intersection only support triangle meshes")
40
41 resolver = PyMesh.SelfIntersectionResolver.create(engine)
42 resolver.set_mesh(vertices, faces)
43 resolver.run()
44
45 vertices = resolver.get_vertices()
46 faces = resolver.get_faces()
47
48 if mesh.dim == 2:
49 vertices = vertices[:,[0,1]]
50
51 output_mesh = form_mesh(vertices, faces)
52 face_sources = resolver.get_face_sources()
53 output_mesh.add_attribute("face_sources")
54 output_mesh.set_attribute("face_sources", face_sources)
55
56 return output_mesh
57
58def detect_self_intersection(mesh):
59 """ Detect all self-intersections.

Calls 10

NotImplementedErrorClass · 0.85
form_meshFunction · 0.85
createMethod · 0.45
set_meshMethod · 0.45
runMethod · 0.45
get_verticesMethod · 0.45
get_facesMethod · 0.45
get_face_sourcesMethod · 0.45
add_attributeMethod · 0.45
set_attributeMethod · 0.45