Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] Re: Extracting triangulation from alpha shape

Subject: CGAL users discussion list

List archive

[cgal-discuss] Re: Extracting triangulation from alpha shape


Chronological Thread 
  • From: rcasero <>
  • To:
  • Subject: [cgal-discuss] Re: Extracting triangulation from alpha shape
  • Date: Fri, 2 Aug 2013 04:55:56 -0700 (PDT)

Hi Sebastien,

Many thanks for your indications. I struggled a bit to find the correct way to combine Triangulation_vertex_base_with_info_3 and Alpha_shape_3, but it seems to work in the end. Here's a code snippet in case it's useful for somebody else (I'm programming a Matlab MEX C++ function, so some types are specific to Matlab)

<CODE>
/* CGAL headers */
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_3.h>
#include <CGAL/Triangulation_vertex_base_with_info_3.h>
#include <CGAL/Alpha_shape_3.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
// vertex
typedef CGAL::Triangulation_vertex_base_with_info_3<mwSize, K>  Vb;
typedef CGAL::Alpha_shape_vertex_base_3<K, Vb>       AsVb;
// cell
typedef CGAL::Alpha_shape_cell_base_3<K>             Fb;
// triangulation structure: vertex and cell
typedef CGAL::Triangulation_data_structure_3<AsVb, Fb> Tds;
typedef CGAL::Delaunay_triangulation_3<K, Tds>       Delaunay;
typedef CGAL::Alpha_shape_3<Delaunay>                Alpha_shape_3;

typedef K::Point_3                                   Point;
typedef std::pair<Point, mwIndex>                    PointWithIndex;
typedef Alpha_shape_3::Alpha_iterator                Alpha_iterator;

typedef Alpha_shape_3::Facet                         Facet;

  // read points from function
  std::vector<PointWithIndex> x(nrowsX);
  for (mwIndex i = 0; i < nrowsX; ++i) {
    x[i] = std::make_pair(
  some_function_to_read_a_point(i),
 i+1 // because this will be a row index in Matlab, 1, ..., Nrows
 );
  }

  // Delaunay triangulation
  Delaunay delaunay(x.begin(), x.end());
  CGAL_assertion(delaunay.number_of_vertices() == nrowsX);

  // compute alpha shape
  Alpha_shape_3 as(delaunay);
</CODE>

Best regards,

Ramón.



On 2 August 2013 06:29, Sebastien Loriot (GeometryFactory) [via cgal-discuss] <[hidden email]> wrote:
Use one of the following examples [1] to build the triangulation of your
points and set their indices. Then build the alpha shape from the
triangulation.

then you can do:

typedef CGAL::Delaunay_triangulation_3<.....> DT3;

....

for (std::list<Facet>::iterator it = facets.begin(); it != facets.end();
  ++it)
{
   it->first->vertex( DT3::vertex_triple_index(it->second,0) )->info();
   it->first->vertex( DT3::vertex_triple_index(it->second,1) )->info();
   it->first->vertex( DT3::vertex_triple_index(it->second,2) )->info();
}

Sebastien.

[1]
http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_3/Chapter_main.html#Subsection_39.5.3

On 08/01/2013 08:44 PM, rcasero wrote:

> Dear all,
>
> I'm computing alpha shapes on a set of points
>
>    // read points from function
>    std::vector<Point>  x =
>      some_function_to_read_points();
>
>    // compute alpha shape
>    Alpha_shape_3 as(x.begin(), x.end());
>
> based on the example from the "3D Alpha shapes" documentation:
>
> http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Alpha_shapes_3/Chapter_main.html#Subsection_43.5.1
>

> What I would like to do now is extract the triangulation of a given alpha
> shape in index form, e.g.
>
> tri = [3 2 8
>          2 1 3
>         ...]
>
> where the indices are the indices of the points in the x vector above.
>
> This is similar to a previous question I got help from Sebastien Loriot to
>
> http://cgal-discuss.949826.n4.nabble.com/Getting-index-of-facet-closest-to-a-point-tp4657635.html
>

> but I don't manage to find the right pointers in this case so that I can do
> something like
>
>     std::distance(x.begin(), some_iterator_here);
>
> to get the index.
>
> I can get a list of the facets
>
>    // get alpha-shape surface
>    std::list<Facet>        facets;
>    as.get_alpha_shape_facets(std::back_inserter(facets),
>                              Alpha_shape_3::REGULAR);
>
> and I can iterate said facets
>
>    for (std::list<Facet>::iterator it = facets.begin(); it != facets.end();
> ++it) {
>
>    }
>
>  From the documentation and an old question replied to by sloriot
>
> http://stackoverflow.com/questions/7938311/cgal-help-getting-triangles-coordinates-from-delaunay-triangulation
>

> I know I can the coordinates of the facet vertices as
>
>    for (std::list<Facet>::iterator it = facets.begin(); it != facets.end();
> ++it) {
>
>      it->first->vertex((it->second+1)%4)->point();
>      it->first->vertex((it->second+2)%4)->point();
>      it->first->vertex((it->second+3)%4)->point();
>
>    }
>
> but the it->...->point(); above are not pointing to elements in x, neither
> it->first->vertex((it->second+1)%4).
>
> Many thanks for any help or, ahem, pointers.
>
> Best regards,
>
> Ramon.
>
>
>
> --
> View this message in context: http://cgal-discuss.949826.n4.nabble.com/Extracting-triangulation-from-alpha-shape-tp4657870.html
> Sent from the cgal-discuss mailing list archive at Nabble.com.
>


--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss





If you reply to this email, your message will be added to the discussion below:
http://cgal-discuss.949826.n4.nabble.com/Extracting-triangulation-from-alpha-shape-tp4657870p4657872.html
To unsubscribe from Extracting triangulation from alpha shape, click here.
NAML



--
Dr. Ramón Casero Cañas

Oxford e-Research Centre (OeRC)
University of Oxford
7 Keble Rd
Oxford OX1 3QG

tlf     +44 (0) 1865 610739
web     http://www.cs.ox.ac.uk/people/Ramon.CaseroCanas
photos  http://www.flickr.com/photos/rcasero/


View this message in context: Re: Extracting triangulation from alpha shape
Sent from the cgal-discuss mailing list archive at Nabble.com.



Archive powered by MHonArc 2.6.18.

Top of Page