geosolver/Delny-0.2.0/build/lib.linux-x86_64-2.5/delaunay/core.py

111 lines
3.8 KiB
Python

# core.py - the main user interface to the Delny package
#
# Copyright 2004-2006 Floris Bruynooghe
#
# This file is part of Delny.
#
# Delny is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Delny is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Delny; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
#
# Authors: Floris Bruynooghe (flub)
"""The main user interface to the Delny package
Most users will want to use the Triangulate class to access the
routines provided in the package.
"""
import Numeric
import _qhull
class Triangulation:
"""Represents a Delaunay triangulation of a set of points
All sequences used in this class can be either Python builtin
sequences or Numeric sequences. Results are returned as Python
builtin sequences however.
"""
# Data attributes:
# self.neighbours
# self.facets
# self.indices
def __init__(self, inputset, dim=None):
"""Creates the Delaunay triangulation
The `set' can be a 2 dimensional sequence with the last
dimension being the coordinates of every point.
Alternatively the set is a sequence objet of any dimension.
In this case the `dim' argument should be given and indicate
the number of dimensions. In this case the sequence will be
flattened (made 1-dimensional) and the first point will be
represented by the `dim' first elements of it and so on.
"""
if(dim != None):
self.set = Numeric.array(inputset)
self.set.shape = (-1, dim)
else:
self.set = inputset
self.neighbours, self.facets, self.indices = _qhull.delny(self.set)
def get_set(self):
"""Returns the set as it is being used by this class
This could be any sequence object, however if the `dim'
argument was not passed along to the constructor of the object
you can be sure this is the same sequence object as you passed
to the constructor.
"""
return self.set
def get_neighbours(self):
"""Returns the neighbours of each point in the set
This is a dictionnary with the points of the sets as key and a
list of it's nearest neighbours as value. Every neighbour is
a tuple with <dimension> floats.
"""
return self.neighbours
def get_elements(self):
"""Returns the elements of the Delaunay triangulation
This is a list of elements where every element is a list of
nodes and every node is a tuple of <dimesnion> floats. An
element is a triangle in 2D and a tetraheron in 3D.
"""
return self.facets
def get_elements_indices(self):
"""Returns the elements of the Delaunay triangulation
This is a list of elements where every element is a list of
node indices corresponding to the point index given in the inputset.
An element is a triangle in 2D and a tetraheron in 3D.
"""
return self.indices
def update_set(self, newset):
"""Recalculate the neighbours with a new input set
This has the same effect as creating a new instance but
without doing so.
"""
#FIXME: should this be renamed to set_set()?
#FIXME: should this also take the `dim' argument?
self.__init__(newset)