Subject: CGAL users discussion list
List archive
Re: [cgal-discuss] How to associate indices to points in the same order as they are added to a triangulation?
Chronological Thread
- From: Adrian B <>
- To:
- Cc: "Sebastien Loriot (GeometryFactory)" <>
- Subject: Re: [cgal-discuss] How to associate indices to points in the same order as they are added to a triangulation?
- Date: Wed, 30 Mar 2011 13:47:47 +0900
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=OtjFJF8d1Zh0d77oSLVIe8oDEBGRbQd80FurzjiYOOWAXWm5YG2vRtOgQWjhyvC2Ol 7a0+LDpGB7FA/AjSTHfMHtdcK7/7mjZyYrAFHF7LkmET8lOcy2ZyGQG/ubKz/nXW7vJV I1mXdHQJGITD3ZlYG3qZPZnqPEGqYFq+oAv2w=
Thank you very much, this works perfectly.
Adrian
2011/3/29 Sebastien Loriot (GeometryFactory)
<>:
> With the 3.8-beta1 release of CGAL:
>
> http://www.cgal.org/Manual/beta/doc_html/cgal_manual/Triangulation_2/Chapter_main.html#Subsection_35.11.2
>
> For the projection, you may be interested by this example:
> http://www.cgal.org/Manual/beta/doc_html/cgal_manual/Triangulation_2/Chapter_main.html#Subsection_35.5.2
>
> S.
>
> Adrian B wrote:
>>
>> How can I associate indices to
>> CGAL::Exact_predicates_inexact_constructions_kernel::Point_2 points in
>> the same order as the points are inserted into a Delaunay
>> triangulation structure?
>>
>> Background:
>> In my current project I create a number of 3D points, each of which
>> has a colour, to represent a terrain. Each point is therefore
>> described by its x-, y-, z-, r-, g- and b-value. Now I want to mesh
>> them for creating a surface model, which I safe as a ply-file. To do
>> so, I project the points into the x-y plane and apply 2D Delaunay
>> triangulation for generating the connections. The z-coordinate, as
>> well as the RGB values are preserved. In the end I need to output the
>> points (x, y, z, r, g, b) toghether with the triplets of point's
>> indicies, which define the triangles.
>> On
>> http://www.cgal.org/Manual/3.8-beta1/doc_html/cgal_manual/BGL/Chapter_main.html
>> section 72.5.2 I found a way of associating an index to a vertex.
>> The problem is now, that the indices are apparantly not associated in
>> the same order as the points (vertices) were added. Therefore the
>> vertex IDs point to complete different input points than the line
>> number in my input file. This is my code so far:
>>
>> #include <fstream>
>> #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
>> #include <CGAL/Delaunay_triangulation_2.h>
>> #include <CGAL/Triangulation_vertex_base_with_id_2.h>
>> #include <CGAL/boost/graph/graph_traits_Delaunay_triangulation_2.h>
>>
>> #include <climits>
>> #include <boost/graph/dijkstra_shortest_paths.hpp>
>> #include <boost/graph/filtered_graph.hpp>
>>
>> typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
>> typedef K::Point_2 Point;
>>
>> typedef CGAL::Triangulation_vertex_base_with_id_2<K> Tvb;
>> typedef CGAL::Triangulation_face_base_2<K> Tfb;
>> typedef CGAL::Triangulation_data_structure_2<Tvb,Tfb> Tds;
>> typedef CGAL::Delaunay_triangulation_2<K, Tds> Triangulation;
>>
>> template <typename T>
>> struct Is_finite {
>>
>> const T* t_;
>>
>> Is_finite()
>> : t_(NULL)
>> {}
>>
>> Is_finite(const T& t)
>> : t_(&t)
>> { }
>>
>> template <typename VertexOrEdge>
>> bool operator()(const VertexOrEdge& voe) const {
>> return ! t_->is_infinite(voe);
>> }
>> };
>>
>> typedef Is_finite<Triangulation> Filter;
>> typedef boost::filtered_graph<Triangulation,Filter,Filter>
>> Finite_triangulation;
>> typedef boost::graph_traits<Finite_triangulation>::vertex_descriptor
>> vertex_descriptor;
>> typedef boost::graph_traits<Finite_triangulation>::vertex_iterator
>> vertex_iterator;
>>
>> int main()
>> {
>> Triangulation dt;
>> Filter is_finite(dt);
>> Finite_triangulation ft(dt, is_finite, is_finite);
>> vertex_iterator vit, ve;
>> int index = 0, nbVertices = 0;
>> const int maxLineLength = 200;
>> char line[maxLineLength];
>> float x,y,z;
>> int r,g,b;
>> std::ifstream fPoints("D:/input_file.txt");
>> std::ofstream fPointsAndMeshOut;
>> std::ifstream fPointsAndMeshIn;
>> std::string path_pointsAndMeshFile= "D:/temp_file.txt";
>> std::ofstream fPly("D:/output_file.ply");
>>
>> fPointsAndMeshOut.open(path_pointsAndMeshFile.c_str());
>> fPointsAndMeshOut << std::setprecision(4);
>> while (!fPoints.eof()) {
>> fPoints.getline(line, maxLineLength);
>> sscanf(line, "%f, %f, %f, %d, %d, %d", &x, &y, &z, &r, &g,
>> &b);
>> fPointsAndMeshOut << std::fixed << x << " " << y << " " <<
>> z << " "
>> << r << " " << g << " " << b << std::endl;
>> dt.insert(Point(x,y));
>> nbVertices++;
>> }
>> fPoints.close();
>>
>> for(boost::tie(vit,ve)=boost::vertices(ft); vit!=ve; ++vit ){
>> vertex_descriptor vd = *vit;
>> vd->id()= index++;
>> vd->point();
>> }
>>
>> Triangulation::Finite_faces_iterator it;
>> for (it = dt.finite_faces_begin(); it != dt.finite_faces_end();
>> it++)
>> {
>> fPointsAndMeshOut << "3 " << it->vertex(0)->id() << " "
>> <<
>> it->vertex(1)->id() << " " << it->vertex(2)->id() << std::endl; //
>> Here the IDs don't correspond to the line number in the input file,
>> producing a meaningless file here
>> }
>> fPointsAndMeshOut.close();
>>
>> fPly << "ply" << std::endl;
>> fPly << "format ascii 1.0" << std::endl;
>> fPly << "element vertex " << nbVertices << std::endl;
>> fPly << "property float x" << std::endl;
>> fPly << "property float y" << std::endl;
>> fPly << "property float z" << std::endl;
>> fPly << "property uchar red" << std::endl;
>> fPly << "property uchar green" << std::endl;
>> fPly << "property uchar blue" << std::endl;
>> fPly << "element face " << dt.number_of_faces() << std::endl;
>> fPly << "property list uchar int vertex_index" << std::endl;
>> fPly << "end_header" << std::endl;
>>
>> fPointsAndMeshIn.open(path_pointsAndMeshFile.c_str());
>> while (!fPointsAndMeshIn.eof()) {
>> fPointsAndMeshIn.getline(line, maxLineLength);
>> fPly << line << std::endl;
>> }
>> fPointsAndMeshIn.close();
>> fPly.close();
>>
>> return 0;
>> }
>>
>>
>> Needless to say that the mesh output like this is compeltely wrong,
>> with triangles going all over the place but for sure nothing like in a
>> smooth mesh model.
>> Therefore my question: How can I associate the indices (IDs) in the
>> same order as the points are added?
>>
>
>
> --
> You are currently subscribed to cgal-discuss.
> To unsubscribe or access the archives, go to
> https://lists-sop.inria.fr/wws/info/cgal-discuss
>
>
- [cgal-discuss] How to associate indices to points in the same order as they are added to a triangulation?, Adrian B, 03/29/2011
- Re: [cgal-discuss] How to associate indices to points in the same order as they are added to a triangulation?, Sebastien Loriot (GeometryFactory), 03/29/2011
- Re: [cgal-discuss] How to associate indices to points in the same order as they are added to a triangulation?, Adrian B, 03/30/2011
- Re: [cgal-discuss] How to associate indices to points in the same order as they are added to a triangulation?, Sebastien Loriot (GeometryFactory), 03/29/2011
Archive powered by MHonArc 2.6.16.