ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/math/AlphaShape.cpp
(Generate patch)

Comparing trunk/src/math/AlphaShape.cpp (file contents):
Revision 1241 by chuckv, Fri Dec 7 00:48:47 2007 UTC vs.
Revision 1242 by chuckv, Wed May 14 14:31:48 2008 UTC

# Line 45 | Line 45
45   *
46   *  Created by Charles F. Vardeman II on 11 Dec 2006.
47   *  @author  Charles F. Vardeman II
48 < *  @version $Id: AlphaShape.cpp,v 1.1 2007-12-07 00:48:47 chuckv Exp $
48 > *  @version $Id: AlphaShape.cpp,v 1.2 2008-05-14 14:31:48 chuckv Exp $
49   *
50   */
51  
# Line 54 | Line 54
54   #include <iostream>
55   #include <list>
56   #include <fstream>
57 + #include <CGAL/IO/Geomview_stream.h>
58   #include <CGAL/IO/alpha_shape_geomview_ostream_3.h>
59  
60   #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
61   #include <CGAL/Delaunay_triangulation_3.h>
62   #include <CGAL/Triangulation_hierarchy_3.h>
63   #include <CGAL/Alpha_shape_3.h>
64 + #include <CGAL/Tetrahedron_3.h>
65  
66  
67   struct K : CGAL::Exact_predicates_inexact_constructions_kernel {};
# Line 75 | Line 77
77   typedef K::Point_3                                  Point;
78   typedef Alpha_shape_3::Alpha_iterator               Alpha_iterator;
79   typedef Alpha_shape_3::NT                           NT;
80 + typedef Alpha_shape_3::Cell_handle          Cell_handle;
81 + typedef Alpha_shape_3::Vertex_handle        Vertex_handle;
82 + typedef Alpha_shape_3::Facet                Facet;
83 + typedef Alpha_shape_3::Edge                 Edge;
84 + typedef CGAL::Tetrahedron_3<K> Tetrahedron;
85  
86  
87  
88  
82
89   using namespace oopse;
90  
91   AlphaShape::AlphaShape(){}
# Line 90 | Line 96 | bool AlphaShape::genHull(std::vector<Vector3d> pos)
96    Delaunay_hierarchy dt;
97    //points.reserve(pos.size());
98    // Copy the positon vector into a points vector for cgal.
99 <  for (int i = 0; i < pos.size(); ++i)
99 >  for (unsigned int i = 0; i < pos.size(); ++i)
100      {
101        Point pt(pos[i][0],pos[i][1],pos[i][2]);
102        dt.insert(pt);
103      }
104  
105    /* Generate Alpha Shape */
106 <
106 >  std::cout << "Generating alpha shape" << std::endl;
107    Alpha_shape_3 ashape(dt);
108    
109 <  
110 <  /*CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 2, 2, 2));
109 >   /*
110 >  CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 2, 2, 2));
111    gv.set_line_width(4);
112    gv.set_trace(false);
113    gv.set_bg_color(CGAL::Color(0, 200, 200));
114 <  gv.clear();*/
115 <  std::cout << ashape;
114 >  gv.clear();
115 >  */
116 >    Alpha_shape_3::NT alpha_solid = ashape.find_alpha_solid();
117 >    Alpha_iterator opt = ashape.find_optimal_alpha(1);
118 >    std::cout << "Smallest alpha value to get a solid through data points is "
119 >            << alpha_solid << std::endl;
120 >    std::cout << "Optimal alpha value to get one connected component is "
121 >            <<  *opt    << std::endl;
122 >    ashape.set_alpha(*opt);
123 >    assert(ashape.number_of_solid_components() == 1);
124 >    std::list<Cell_handle>        cells;
125 >    std::list<Facet>              facets;
126 >    std::list<Edge>               edges;
127 >    std::list<Vertex_handle>      vertices;
128 >    
129 >    ashape.get_alpha_shape_cells(std::back_inserter(cells),
130 >                          Alpha_shape_3::INTERIOR);
131 >    ashape.get_alpha_shape_facets(std::back_inserter(facets),
132 >                          Alpha_shape_3::REGULAR);
133 >    ashape.get_alpha_shape_facets(std::back_inserter(facets),
134 >                          Alpha_shape_3::SINGULAR);
135 >    ashape.get_alpha_shape_edges(std::back_inserter(edges),
136 >                          Alpha_shape_3::SINGULAR);
137 >    ashape.get_alpha_shape_vertices(std::back_inserter(vertices),
138 >            Alpha_shape_3::REGULAR);                      
139 >    std::cout << " The 0-shape has : " << std::endl;
140 >    std::cout << cells.size() << " interior tetrahedra" << std::endl;
141 >    std::cout << facets.size() << " boundary facets" << std::endl;
142 >    std::cout << edges.size()  << " singular edges" << std::endl;
143 >    std::cout << vertices.size() << " singular vertices" << std::endl;
144 >  
145 >    RealType volume_;
146 >    std::list<Cell_handle>::iterator thiscell;
147 >    
148 >    for(Alpha_shape_3::Cell_iterator c_it = ashape.cells_begin(); c_it != ashape.cells_end(); ++c_it)
149 >      {
150 >        volume_ += ashape.tetrahedron(c_it).volume();
151 >      }
152 >  
153 >    //gv << (Delaunay) ashape;
154 >    //std::cout << ashape;
155 >    
156   }
157  
158   RealType AlphaShape::getVolume()

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines