bindings/python/alphashapes2d.cpp
author Christos Mantoulidis <cmad@stanford.edu>
Tue, 04 Aug 2009 13:23:16 -0700
branchdev
changeset 156 f75fb57d2831
parent 131 d9e050258358
child 181 1ee6edc17cb6
permissions -rw-r--r--
Changed implementation of WeightedRips to store simplex values (max distance between simplices' vertices) as an invisible layer on top of each simplex object, so that the data() field of WeightedRips has been freed for use by the users again.

// Wrap includes into namespaces to avoid nameclashes
#include "../../examples/alphashapes/alphashapes2d.h" 

#include <boost/python.hpp>
#include <boost/python/stl_iterator.hpp>
namespace bp = boost::python;

#include "simplex.h"                // defines SimplexVD, Vertex, and Data
namespace dp = dionysus::python;


void fill_alpha2D_complex(bp::object points, bp::list complex)
{
    typedef     std::map<AlphaSimplex2D::Vertex, unsigned>      ASPointMap;

    Delaunay2D  Dt;
    ASPointMap  point_map;
    unsigned i = 0;
    for (bp::stl_input_iterator<bp::list> pt = points; pt != bp::stl_input_iterator<bp::list>(); ++pt)
    {
        double x = bp::extract<double>((*pt)[0]);
        double y = bp::extract<double>((*pt)[1]);
        point_map[Dt.insert(Point(x,y))] = i++;
    }

    AlphaSimplex2D::SimplexSet simplices;
    fill_simplex_set(Dt, simplices);

    for (AlphaSimplex2D::SimplexSet::const_iterator cur = simplices.begin(); cur != simplices.end(); ++cur)
    {
        dp::SimplexVD s;
        for (AlphaSimplex2D::VertexContainer::const_iterator vcur  = cur->vertices().begin(); 
                                                             vcur != cur->vertices().end(); ++vcur)
            s.add(point_map[*vcur]);

        complex.append(s);
        complex[-1].attr("data") = cur->value();
        complex[-1].attr("attached") = cur->attached();
    }
}

void export_alphashapes2d()
{
    bp::def("fill_alpha2D_complex",       &fill_alpha2D_complex);
}