Source code for abm_shape_collection.extract_mesh_wireframe

from __future__ import annotations

from typing import TYPE_CHECKING

from vtk import vtkPolyData  # pylint: disable=no-name-in-module

from abm_shape_collection.extract_mesh_projections import convert_vtk_to_trimesh

if TYPE_CHECKING:
    import trimesh


[docs]def extract_mesh_wireframe( mesh: vtkPolyData | trimesh.Trimesh, offset: tuple[float, float, float] | None = None ) -> list[list[tuple[float, float, float]]]: """ Extract wireframe edges from mesh. Parameters ---------- mesh Mesh object. offset Mesh translation applied before extracting slices and/or meshes. Returns ------- : List of wireframe edges. """ if isinstance(mesh, vtkPolyData): mesh = convert_vtk_to_trimesh(mesh) if offset is not None: mesh.apply_translation(offset) all_edges = [[tuple(mesh.vertices[a]), tuple(mesh.vertices[b])] for a, b in mesh.edges] return [ [(x1, y1, z1), (x2, y2, z2)] for (x1, y1, z1), (x2, y2, z2) in {frozenset(edge) for edge in all_edges} ]