Source code for cellcomplex.property_topomesh.utils.delaunay_tools

# -*- coding: utf-8 -*-
# -*- python -*-
#
#       PropertyTopomesh
#
#       Copyright 2014-2016 INRIA - CIRAD - INRA
#
#       File author(s): Guillaume Cerutti <guillaume.cerutti@inria.fr>
#
#       File contributor(s): Guillaume Cerutti <guillaume.cerutti@inria.fr>
#
#       Distributed under the Cecill-C License.
#       See accompanying file LICENSE.txt or copy at
#           http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
#       OpenaleaLab Website : http://virtualplants.github.io/
#
###############################################################################

import numpy as np
from scipy.spatial.qhull import Delaunay, QhullError
from cellcomplex.property_topomesh.creation import triangle_topomesh

tetra_triangle_edge_list  = np.array([[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]])
tetra_triangle_list  = np.array([[0,1,2],[0,1,3],[0,2,3],[1,2,3]])
triangle_edge_list  = np.array([[1, 2],[0, 2],[0, 1]])

[docs]def delaunay_triangulation(points): if np.any(np.isnan(points)): triangles = np.array([]) elif len(np.unique(points[:,2])) == 1: if np.all(points==0): triangles = np.array([]) else: # try: triangles = Delaunay(np.array(points)[:,:2]).simplices # except QhullError: # triangles = np.array([]) else: if np.all(points==0): tetras = [[0,1,2,3]] else: # try: tetras = Delaunay(np.array(points)).simplices # except QhullError: # tetras = [[0,1,2,3]] triangles = np.unique(np.sort(np.concatenate(tetras[:,tetra_triangle_list])),axis=0) return triangles
[docs]def delaunay_triangulation_topomesh(positions,delaunay_positions=None): if delaunay_positions is None: delaunay_positions = positions triangles = np.array(delaunay_positions.keys())[delaunay_triangulation(np.array(delaunay_positions.values()))] return triangle_topomesh(triangles,positions)