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)