From d1ab01a9b04c19c63120a8451947ec5dbe1ee1a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 8 Dec 2010 17:39:30 +0000 Subject: [PATCH] merge candidate package into trunk --- .gitattributes | 21 + .gitignore | 5 + .../doc_tex/Alpha_shapes_3/PkgDescription.tex | 13 +- .../doc_tex/Alpha_shapes_3/alpha3.tex | 199 ++- .../doc_tex/Alpha_shapes_3/classif.pdf | Bin 0 -> 9155 bytes .../doc_tex/Alpha_shapes_3/classif.png | Bin 0 -> 10243 bytes .../doc_tex/Alpha_shapes_3/gen-reg-ex.png | Bin 0 -> 158805 bytes .../doc_tex/Alpha_shapes_3/main.tex | 3 +- .../Alpha_shapes_3_ref/AlphaShapeTraits_3.tex | 8 +- .../Alpha_shapes_3_ref/Alpha_shape_3.tex | 16 +- .../Alpha_shape_cell_base_3.tex | 2 +- .../Alpha_shape_vertex_base_3.tex | 2 +- .../FixedAlphaShapeCellBase_3.tex | 38 + .../FixedAlphaShapeTraits_3.tex | 62 + .../FixedAlphaShapeVertexBase_3.tex | 44 + .../FixedWeightedAlphaShapeTraits_3.tex | 48 + .../Fixed_alpha_shape_3.tex | 188 +++ .../Fixed_alpha_shape_cell_base_3.tex | 26 + .../Fixed_alpha_shape_vertex_base_3.tex | 27 + .../WeightedAlphaShapeTraits_3.tex | 2 +- .../doc_tex/Alpha_shapes_3_ref/intro.tex | 31 +- .../doc_tex/Alpha_shapes_3_ref/main.tex | 8 + .../Alpha_shapes_3/ex_alpha_shapes_3.cpp | 2 +- .../ex_fixed_weighted_alpha_shapes_3.cpp | 57 + .../include/CGAL/Fixed_alpha_shape_3.h | 1123 +++++++++++++++++ .../CGAL/Fixed_alpha_shape_cell_base_3.h | 76 ++ .../CGAL/Fixed_alpha_shape_vertex_base_3.h | 75 ++ .../Weighted_alpha_shape_euclidean_traits_3.h | 7 +- .../CGAL/internal/Classification_type.h | 9 + ..._weighted_alpha_shape_euclidean_traits_3.h | 302 +++++ Alpha_shapes_3/test/Alpha_shapes_3/copy_tds.h | 59 + .../test/Alpha_shapes_3/data/small-exp.in | 506 ++++++++ .../test/Alpha_shapes_3/data/small.in | 506 ++++++++ .../test_fixed_alpha_shape_3.cmd | 1 + .../test_fixed_alpha_shape_3.cpp | 307 +++++ 35 files changed, 3700 insertions(+), 73 deletions(-) create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.pdf create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.png create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3/gen-reg-ex.png create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex create mode 100644 Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex create mode 100644 Alpha_shapes_3/examples/Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp create mode 100644 Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_3.h create mode 100644 Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_cell_base_3.h create mode 100644 Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_vertex_base_3.h create mode 100644 Alpha_shapes_3/include/CGAL/internal/Classification_type.h create mode 100644 Alpha_shapes_3/test/Alpha_shapes_3/Filtered_weighted_alpha_shape_euclidean_traits_3.h create mode 100644 Alpha_shapes_3/test/Alpha_shapes_3/copy_tds.h create mode 100644 Alpha_shapes_3/test/Alpha_shapes_3/data/small-exp.in create mode 100644 Alpha_shapes_3/test/Alpha_shapes_3/data/small.in create mode 100644 Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3.cmd create mode 100644 Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3.cpp diff --git a/.gitattributes b/.gitattributes index 9f401098a08..6faf6fc3de8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -213,6 +213,27 @@ Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha_shapes_3_large.png -text Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha_shapes_3_small.png -text Alpha_shapes_3/doc_tex/Alpha_shapes_3/alphashape.gif -text svneol=unset#image/gif Alpha_shapes_3/doc_tex/Alpha_shapes_3/alphashape.pdf -text svneol=unset#application/pdf +Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.pdf -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.png -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3/gen-reg-ex.png -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex -text +Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex -text +Alpha_shapes_3/examples/Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp -text +Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_3.h -text +Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_cell_base_3.h -text +Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_vertex_base_3.h -text +Alpha_shapes_3/include/CGAL/internal/Classification_type.h -text +Alpha_shapes_3/test/Alpha_shapes_3/Filtered_weighted_alpha_shape_euclidean_traits_3.h -text +Alpha_shapes_3/test/Alpha_shapes_3/copy_tds.h -text +Alpha_shapes_3/test/Alpha_shapes_3/data/small-exp.in -text +Alpha_shapes_3/test/Alpha_shapes_3/data/small.in -text +Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3.cmd -text +Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3.cpp -text Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-both_vertices.gif -text svneol=unset#image/gif Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-both_vertices_bw.png -text svneol=unset#image/png Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-entire_edge.gif -text svneol=unset#image/gif diff --git a/.gitignore b/.gitignore index fda3d047681..75ec4d41438 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,11 @@ Alpha_shapes_3/demo/Alpha_shapes_3/*.vcproj Alpha_shapes_3/demo/Alpha_shapes_3/Makefile Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3 +Alpha_shapes_3/test/Alpha_shapes_3/CMakeLists.txt +Alpha_shapes_3/test/Alpha_shapes_3/cgal_test_with_cmake +Alpha_shapes_3/test/Alpha_shapes_3/test_alpha_shape_3 +Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3 +Alpha_shapes_3/test/Alpha_shapes_3/test_weighted_alpha_shape_3 Apollonius_graph_2/demo/Apollonius_graph_2/*.exe Apollonius_graph_2/demo/Apollonius_graph_2/*.vcproj Apollonius_graph_2/demo/Apollonius_graph_2/Makefile diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex index 96e1ec184de..ed6b9ca031f 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex @@ -1,11 +1,18 @@ \begin{ccPkgDescription}{3D Alpha Shapes\label{Pkg:AlphaShapes3}} \ccPkgHowToCiteCgal{cgal:dy-as3-10} -\ccPkgSummary{This package offers a data structure encoding the whole family of alpha-complexes -related to a given 3D Delaunay or regular triangulation. In particular, the data structure +\ccPkgSummary{ +This package offers a data structure encoding +either one alpha-complex or +the whole family of alpha-complexes +related to a given 3D Delaunay or regular triangulation. +% In particular, +In the latter case, +the data structure allows to retrieve the alpha-complex for any alpha value, the whole spectrum of critical alpha values and a filtration on the triangulation faces (this filtration is based on the first -alpha value for which each face is included on the alpha-complex).} +alpha value for which each face is included on the alpha-complex). +} \ccPkgDependsOn{\ccRef[2D Triangulation]{Pkg:Triangulation3}} \ccPkgIntroducedInCGAL{2.3} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha3.tex index a6bb18efd96..401aa06ede9 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha3.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha3.tex @@ -72,22 +72,47 @@ The alpha complex is a subcomplex of the Delaunay triangulation. For a given value of $\alpha$, the alpha complex includes all the simplices in the Delaunay triangulation which have -an empty circumsphere with squared radius equal or smaller than $\alpha$. +an empty circumscribing sphere with squared radius equal or smaller than $\alpha$. Here ``empty'' means that the open sphere do not include any points of $S$. The alpha shape is then simply the domain covered by the simplices of the alpha complex (see \cite{em-tdas-94}). -In general, an alpha complex is a non-connected and non-pure complex. +In general, an alpha complex is a disconnected and non-pure complex: This means in particular that the alpha complex may have singular faces. For $0 \leq k \leq d-1$, a $k$-simplex of the alpha complex is said to be -singular if it is not a facet of a $(k+1)$-simplex of the complex -CGAL provides two versions of the alpha shapes. In the general mode, +singular if it is not a facet of a $(k+1)$-simplex of the complex. +CGAL provides two versions of alpha shapes. In the general mode, the alpha shapes correspond strictly to the above definition. -The regularized mode provides a regularized version of the alpha shapes -corresponding to the domain covered by a regularized version -of the alpha complex where singular faces are removed. +The regularized mode provides a regularized version of the alpha shapes. +It corresponds to the domain covered by a regularized version +of the alpha complex where singular faces are removed +(See Figure \ref{fig-gen-reg-ex} for an example). + + +\begin{figure} +\begin{ccTexOnly} +\begin{center} +\includegraphics[width=15cm]{Alpha_shapes_3/gen-reg-ex.png} +\end{center} +\end{ccTexOnly} +\begin{ccHtmlOnly} +
+General vs. regularized alpha-shape +
+\end{ccHtmlOnly} + +\caption{Comparison of general and regularized alpha-shape. +\textbf{Left:} Some points are taken on the surface of a torus, +three points being taken relatively +far from the surface of the torus; +\textbf{Middle:} The general alpha-shape (for a large enough alpha value) +contains the singular triangle facet of the three isolated points; +\textbf{Right:} The regularized version (for the same value of alpha) does not contains any singular facet. +\label{fig-gen-reg-ex}} +\end{figure} + @@ -135,8 +160,8 @@ regular triangulation triangulation such that there is a sphere orthogonal to the weighted points associated with the vertices of the simplex and suborthogonal to all the other input weighted points. Once again the alpha shape is then defined as -the domain covered by a the alpha complex and arise in two versions -general or regularized. +the domain covered by a the alpha complex and comes in general and +regularized versions. @@ -145,6 +170,8 @@ general or regularized. \section{Functionality \label{I1_SectAlpha_Shape_3}} +\subsection{Family of alpha shapes} + The class \ccc{CGAL::Alpha_shape_3
} represents the whole family of alpha shapes for a given set of points. The class includes the underlying triangulation \ccc{Dt} @@ -153,25 +180,10 @@ of the set, and associates to each $k$-face of this triangulation for which values of $\alpha$ the face belongs to the alpha complex. - -The class \ccc{CGAL::Alpha_shape_3
} provides functions to set and +The class provides functions to set and get the current $\alpha$-value, as well as an iterator that enumerates the $\alpha$ values where the alpha shape changes. -The class provides member functions to classify for a given value -of $alpha$ the different faces of the triangulation as -\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or -\ccc{INTERIOR} with respect -to the alpha shape. A $k$ face on the boundary of the alpha complex -is said to be \ccc{REGULAR} if it is a subface of the alpha complex -which is a subface of some $k+1$ face of the alpha complex -and \ccc{SINGULAR} otherwise. - -The class provides also output iterators to get for a given $alpha$ value -the vertices, edges, facets and cells of the different types -(\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or -\ccc{INTERIOR}). - Also the class has a filtration member function that, given an output iterator with \ccc{CGAL::object} as value type, outputs the faces of the triangulation @@ -189,30 +201,84 @@ such that the alpha shape satisfies the following two properties~\\ \smallskip The current implementation is static, that is after its construction points cannot be inserted or removed. + +\subsection{Alpha shape for a fixed alpha} +Given a value of alpha, the class \ccc{CGAL::Fixed_alpha_shape_3
} represents one +alpha shape for a given set of points. +The class includes the underlying triangulation \ccc{Dt} +of the set, and associates to each $k$-face of this triangulation +a classification type. + +\smallskip +The current implementation of this class is dynamic, that is after its construction +points can be inserted or removed. + +\subsection{Classification and iterators} +Both classes provide member functions to classify for a (given) value +of $alpha$ the different faces of the triangulation as +\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or +\ccc{INTERIOR} with respect +to the alpha shape. A $k$-face on the boundary of the alpha complex +is said to be: \ccc{REGULAR} if it is a subface of the alpha-complex which +is a subface of a $(k+1)$-face of the alpha complex, and \ccc{SINGULAR} otherwise. +A $k$-face of the alpha complex which is not on the boundary of the alpha complex +is said to be \ccc{INTERIOR}. See Figure \ref{fig-classif} for a 2D illustration. + + +\begin{figure} +\begin{ccTexOnly} +\begin{center} +\includegraphics[width=15cm]{Alpha_shapes_3/classif} +\end{center} +\end{ccTexOnly} +\begin{ccHtmlOnly} +
+Classification of simplices. +
+\end{ccHtmlOnly} + +\caption{Classification of simplices, a 2D example. +\textbf{Left:} The 2D Delaunay triangulation of a set of points; +\textbf{Right:} Classification of simplices for a given alpha (the squared radius of the red circle). +\ccc{INTERIOR}, \ccc{REGULAR} and \ccc{SINGULAR} simplices are depicted in black, green and blue +respectively. \ccc{EXTERIOR} simplices are not depicted. The vertex \ccc{s} and the edge \ccc{tu} are \ccc{SINGULAR} +since all higher dimension simplices they are incident to are \ccc{EXTERIOR}. +The facet \ccc{pqr} is \ccc{EXTERIOR} because the squared radius of its circumscribed circle is larger +than alpha. +\label{fig-classif}} +\end{figure} + + +The classes provide also output iterators to get for a given $alpha$ value +the vertices, edges, facets and cells of the different types +(\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or +\ccc{INTERIOR}). + + %---------------------------------------------------------------------- \section{Concepts and Models\label{I1_SectDtClass3D}} We currently do not specify concepts for the underlying triangulation -type. Models that work for a basic alpha-shape are the instantiations +type. Models that work for a familly alpha-shapes are the instantiations of the classes \ccc{CGAL::Delaunay_triangulation_3} and \ccc{CGAL::Periodic_3_Delaunay_triangulation_3} (see -example~\ref{l1_SectPeriodicAS3D}). +example~\ref{l1_SectPeriodicAS3D}). A model that works for a fixed alpha-shape are the instantiations +of the class \ccc{CGAL::Delaunay_triangulation_3}. A model that works for a weighted alpha-shape is -the class \ccc{CGAL::Regular_triangulation_3}. +the class \ccc{CGAL::Regular_triangulation_3}. The triangulation needs a geometric traits class +and a triangulation data structure as template parameters. -The triangulation needs a geometric traits class as argument. -The requirements of this class are described in the -concept \ccc{CGAL::AlphaShapeTraits_3} for which -the \cgal\ kernels are models in the non-weighted case, and for which -the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is model +For the class \ccc{CGAL::Alpha_shape_3
}, the requirements of +the traits class are described in the concepts \ccc{CGAL::AlphaShapeTraits_3} +in the non-weighted case and \ccc{CGAL::WeightedAlphaShapeTraits_3} in the weighted case. +The \cgal\ kernels are models in the non-weighted case, and +the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is a model in the weighted case. - -The triangulation data structure of the triangulation with any -has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3}. -However it must be parameterized with -vertex and cell classes, which are models of the concepts +The triangulation data structure of the triangulation +has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3}, +and it must be parameterized with vertex and cell classes, which are model of the concepts \ccc{AlphaShapeVertex_3} and \ccc{AlphaShapeCell_3}. The package provides by default the classes \ccc{CGAL::Alpha_shape_vertex_base_3} and @@ -225,6 +291,51 @@ triangulation the vertex and cell classes need to be models to both (see example~\ref{l1_SectPeriodicAS3D}). + +For the class \ccc{CGAL::Fixed_alpha_shape_3
}, the requirements of +the traits class are described in the concepts \ccc{CGAL::FixedAlphaShapeTraits_3} +in the non-weighted case and \ccc{CGAL::FixedWeightedAlphaShapeTraits_3} in the weighted case. +The \cgal\ kernels are models in the non-weighted case, and +the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is a model +in the weighted case. +The triangulation data structure of the triangulation +has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3}, +and it must be parameterized with vertex and cell classes, which are model of the concepts +\ccc{FixedAlphaShapeVertex_3} and \ccc{FixedAlphaShapeCell_3}. +The package provides models \ccc{CGAL::Fixed_alpha_shape_vertex_base_3} +and \ccc{CGAL::Fixed_alpha_shape_cell_base_3}, respectively. + + + +\section{\ccc{Alpha_shape_3} or \ccc{Fixed_alpha_shape_3}} + +The class \ccc{CGAL::Alpha_shape_3
} represents the whole family +of alpha shapes for a given set of points while the class \ccc{CGAL::Fixed_alpha_shape_3
} +represents only one alpha shape (for a fixed alpha). When using the same kernel, +\ccc{CGAL::Fixed_alpha_shape_3
} being a lighter version, it is naturally much more efficient +when the alpha-shape is needed for a single given value of alpha. +In addition note that the class \ccc{CGAL::Alpha_shape_3
} +requires constructions (squared radius of simplices) while the +class \ccc{CGAL::Fixed_alpha_shape_3
} uses only predicates. +This implies that a certified construction of one (several) +alpha-shape, using the \ccc{CGAL::Alpha_shape_3
} requires a kernel +with exact predicates and exact constructions while using a kernel +with exact predicates is sufficient for the class \ccc{CGAL::Fixed_alpha_shape_3
}. +This makes the class \ccc{CGAL::Fixed_alpha_shape_3
} even more efficient in this setting. +In addition, note that the \ccc{Fixed} version is the only of the +two that supports incremental insertion and removal of points. + +We give the time spent while computing the alpha shape of a protein (considered +as a set of weighted points) featuring 4251 atoms (using \ccc{gcc 4.3} under Linux with \ccc{-O3} +and \ccc{-DNDEBUG} flags, on a 2.27GHz Intel(R) Xeon(R) E5520 CPU): +Using \ccc{CGAL::Exact_predicates_inexact_constructions_kernel}, building +the regular triangulation requires 0.06s, then the class \ccc{CGAL::Fixed_alpha_shape_3
} +required 0.05s while the class \ccc{CGAL::Alpha_shape_3
} requires 0.35s. + + + + + %---------------------------------------------------------------------- \section{Examples} @@ -241,7 +352,7 @@ as underlying triangulation. When many points are input in the alpha shape, say more than 10 000, it may pay off to use a Delaunay triangulation with \ccc{Fast_location} policy as underlying triangulation in order to speed up point location -quesries (cf. \ref{Triangulation3-sec-locpol}). +queries (cf. \ref{Triangulation3-sec-locpol}). \ccIncludeExampleCode{Alpha_shapes_3/ex_alpha_shapes_with_fast_location_3.cpp} %---------------------------------------------------------------------- @@ -255,6 +366,12 @@ The alpha shape is built in \ccc{GENERAL} mode. \ccIncludeExampleCode{Alpha_shapes_3/ex_weighted_alpha_shapes_3.cpp} +\subsection{Example for Fixed Weighted Alpha-Shapes\label{I1_SectFxWeightedAS3D}} + +Same example as previous but using a fixed value of alpha. + +\ccIncludeExampleCode{Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp} + \subsection{Example for periodic Alpha Shapes\label{l1_SectPeriodicAS3D}} @@ -276,4 +393,6 @@ covering space is degenerate. In this case an exact constructions kernel needs to be used to compute the alpha shapes. Otherwise the results will suffer from round-off problems. -\ccIncludeExampleCode{Alpha_shapes_3/ex_periodic_alpha_shapes_3.cpp} \ No newline at end of file +\ccIncludeExampleCode{Alpha_shapes_3/ex_periodic_alpha_shapes_3.cpp} + + diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.pdf b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d5fba871c5f0bc3866ffbcc815e8d29a4a823f4e GIT binary patch literal 9155 zcmc(lXIN9)w)bgLLN9{!MehVc0twQa6a}RBDpg7dp*QKMR6$XC6%YlaC>;R-0i{Yu z5D+QSyVM)p$8+6h-{-ma%lo|fkjydGTyxDa=E}-%{xi6=l~ja8g~dQ(fC%7j;|xei zfxy--NJnc?5fKrL1%MUh0Z{;KYmIrAkpaob0CsM7Fg-!gKhDteL)rmgZEG~z4&?^= z-T37dy)>QN(7y}_2(0Ji;^gM=+fq<)_XSKbBZ&Z*3j$EU90WGfMcW|(1Ofy${?&ql zz&duG?p`QcJI~7*VP*loWsOETVa^m0h5f2h#IrX2pDFiL;#&%D~%8bE|a43$E_jpNB6%L zKoo$BV(x^$3BZzNqy3Sy+HG+?jPe@k|iD}_Q)t=J_AeIs*Y-TS<$ zd?|Zr_bfPgcJ^fd=lKALlfX-te*y1K>pkODIB5p9mHmy*6&yIJASg~;5lB?FeW#Ro zg&qqY6vSlJBSZA{HI`d87iaJxR7)g!c{&v9`FbvBV0_^BD?-{Cgr+1eKcd zGpF=4iDYmQUTDnKV(h0wD_DMKc+`O6O~UQ)Vg_C&vYa7a!LNAeNBH?7KjcO$cyI^K zOrBQ;HP@U15#7-^DL)hWu~?IO?yZDkUENW#UZX#40A#u^a96wLXk8?~u;1|Y$W#%H)EZ*LI;l~zH5tGG z`0sb-W#CB3OHv=}L|d&UP@GOT16EAt3FAy?gOmDxur!rwxN&@_%*C^MxAQ!Yi;+__ zg$dTzsF8Oz9)TPeCkH;K(G4H1LE-A*KgktL39u;fNR+lM@hzQjTjBTcb#t+>Kwoif zp;q`0L-4*jP=S0Q6rYbJJ>XLJwvEfrxM0|^n?5?k?|@k~SFH9^%~h;xqdq!x?A~<0qFc`L1qd4ur*bqLtW>4{=>xMN4AzoE;BQ*H=Y&B0@3pOF>9&d3d56J`T z6vN4pr$ZvUZPBR_`d5f}%DE=S-bgtgBPuU4fTp9YSLLhPalPusQ4z}#TM>;HtHSoD zaf$8bv{iG>YAa25se@Ul>E*|K>Kgkih?x#2nrIL;ueMhgeo9P+Mf*pc3oh2ue(4Dg z2;k2yxQPy|bJCX28TnLR1`|`iG1kEzzCpuio?lQRN2_rt6gT`JXan4-cE0j6{DVmO z_@{m6{uxoXiVj1N#8TnQGuz|<3mNqn&L*{nybX?Y%?z4CjoDGcIwfAEga!A@=c!3k zQt1z~aHjWeYrF{rJwigS$ar-xab++T;#F1eq~W{SS1B_ko16~)PnKr?ovSJ zxIqJ6SZdsZ4`STSXWXgI1W{R~S<)c_>U)(_M^-%>hN$c>gY3Hg6~4DOz9jT|xpr+O zc^+!GaNz8eR%&pAS)GgZGAwwRh(^Y)Yd)!TY0-P)duu$6RD!cF-Eh(fRppWl2L8Ow-lF*fwryhWriU!5vy4}Y<4d|N;A;n}yX$CfFqBmK%ZLWNz8>DNd1 zen9s(NUuA#G9<9(Pw8qM`uN5i#XX(Hx%%~O*Zv)fD(~)bz$7?5YK{?E)ae_FwvQQV z?b!IR*4cc7`}Iu_JKNKw>BoCtvNI#%5AuYD-YEC&Nl^)vW>HV>{D@mO`*L$zB^h_4 zUgvskXQ7tdD74;cI%%i#E%fP_O{pxUa2BZNl=xNfe*PW$k=D^Sy$I_BpCb8f z!ie;jrTVWN`kIQ*DISEhRRk1|pJ^(MSQdS@RjX0Xa;gXlXKDWNxr^Fk8X8hnh`iEJ zRVcKs;ef|U!}8)tIA*prY`Z+eLzPqXaZX~e<#Tkbzj|5dhE84+&cnlP<{7phX#^C$ zbDke<=4imL`7c;HlJ=bJ`HCj5PrgSsKL$ zWI7&FHjUG&czMDxL@H4d>7M~MxYo2N61N$6blcN?VKUFW zexop>i-JKys9sdQpt1hcV6*vo*?hWCrWu*LV|uo$RI)Ff^ujkuwT$?^R8Jq7dqjK< zPhF_pbTj;U5&rZilBu4f4U8qd-{>1@GLUTN+_n386#SIs)a)wG97_7H{26o(YgD|A zje^%NAQ|=zrn`vPO+~gu#XKHymXVc9(vcW<MU|+S{Lzi%z~QKLK%6LD%5&mz&|PBj4rh)pZHhxiDSl(?%jfFghN+JWN6ydU zdD8sUzPh~IqK~Y7eMMofRV-|9)V5Z?i)GcS=F!V10;a=jYwIKQS2+e}nYBrYB1T>F zmu3Sk*dDwWdTMgEn$e}N?Xt!L_426+6eJPKYC^SJ(@#5Q=q!m%mF3VX&{W9u-2Y_w zV&=49sBX;HE#Ax%y_o47JE+LPGEt^fmFFf8d}#-5 z-WvCDB@4cJV*ADN$4ze+&kjCUqpxuJ#-tV_>pMZgt;3l>k7JXO&f@6Y`KcsTx-T;i zCqoQ-m|4#9dzD>#$_2KuRP`*3<~eKeF#O38HTxcY)MQux-@4de$h zHGU)SYe`^Lz`=EDL8z9bGv5e;tLC}!O!Fb-;v>}ngK!#8A3+a=jm~LKtq*5p91fB< z3%099XtUHwO@Al3-E=+!~h`( zOawqcVSoe_fdO-QPg^@TG$4+^bX2rPs@gd@IATn=7zliMk;`L3q6ioWtcJFBak7l~;U#;xdRjncJ41H51)*aM6LdxFtmFTTI#fB}Cy;F3xI zWK_ie7$0VQFB|l)-OOds7-Utj_O!bUA^mc~*XV+)H`wyc^`5w#w`;Tc;Nyo-!VRoC zr-zNfWNNn`NjHnB3<7e^8fj9TTE+)5H^M#*G^>JLeWwBreiUgEaWhg7gZ zor>xBb1nGWMB{^g&Xq2fA8kUu+c*o}oq2G-4E3?61~{pak2ofkobWevhu!687|wizzVj#W)iTTLX%#EEfd(b%;@%-a^E;L9pCr9P*&RI zk!O11m(%HBso7L&&#rtHQL|1}mblJEcB(c8k47Bf zC>;+YfYRfXJ%o;dI6;7m-8DKw;^)1b>T!T{5ii-+gdj{}-%8PONc+DNgRg>P;5Di$ z;}g|>MllxCu8VBsM+vhhA?raQ_EddekMtRjeO?}lm-?h_t2K+R;p11D@4Ldh+UTfu zoGn`<4)xBKFG{s_(QxWwg6gl4Zp*E$ZC6{U)7o(hLYD+h0W4 z{*_<=R)*Wkp6tM=u-Ut%!1cK|3i)8c?qlt6VA#t~_&gCd8yPt9rqsf%F$H`^vxG#` z_}n`_xpP|HU%#p0Xavb=|5_(xua!Fi&dAQh-*fE!fkUUzCJXVHfPnbQZjLMI<6ggr zh|(NPf=}kP86{A9T*yQ+!c1Dmfn}zM*t^9XO4qVoq5hWjbo_%&E`&vJVTFz)WUCEK zTypudC8?$;*<nrk$tNxZql0hbt(6AXNoNLuj?+E+nE{}$1+24Qt;x%BoLE+=SPA81$IM}te3wfifs?h2@&q6 z&mFeGWylQYk8ELXbypqgR>?ms49KPW@+&XwdI`ku^SbgM+^jhj^?;0_Ha#f0R|Jc_ z1EL=$w-7ghS?HpK+*FMwr-(4)gu@tkP&Y&=*nODVqXq_+Eui-|>=fZ09yO&#vM($@ zC)_SNcnX)7grQZi9U@F1PM_pkwL_;p0wyRlJkr+iiK^P zYQM{Jlbt7tz4CcQ<_dNWh`_VnK2))dwsIx5Q+=0?t5DQ|e;2Ab_hOb3$LoD^oQmg6 z%bZx-)VYT0n=5VIxspi4$0EIp~%IZnR)2^;&Xg+t7 zXhW1rWf`pC$9(IbZ8o1)=eWt782@^G;?-tLaUkU|pAoX5VC z%XB>pT$8h1XVPWqhi9o#*-(FJylDi4gs@mrG}fcdh@F{d;0~k{q6VDfh7BEmW@Vzs zC&8nqC1I4*y!QJcZIK|0`!;8RkTgC&8l1ph!pG$w{(hV|*9p2(TgXK9#I!H;@|haf znL9|t63-l}B2X2lvZ-;HrvU|D$NX{?5#L}BPMR$5?|2!w@HE)?XJ^x)@?zEUNw|l0 zaENhVPXWhO;cEX5FqXgW;I%YM)eVJc%w9(tE-k^ulR|ubTI~HOj*`h~j z+sJ%YjO*Rf-B&U=f~9h&Ct3YBYgloe8++b*s?2m}E=dQq$VwfS?%3LD?i*~Fy=)~~ z)ZA#C9bP)~%g*orc@P|uH5S*UW)Q7ti143jz3})l^L=U}`MS?YmAk~eU(ee^#PQlx zgH(lQw<@8ZkTxIJR+A7(^)=Y=rmaQraOduwswoDlk)i>o<4E83{0VX*|HKIhMT#4D zPA(Jrux@B`IV|x<)RUKJM)l!x?|J1^M@{~BqA}*}=7oL_Q&3RyN&dAQJHI`xy^us& z0qZgM)YfzA{pkDnj}jKs6Bd88)GD?6Z|a!I2H&d)zBpRiIg~v;Nw_eQZ8oL(-p@*K zf?cv%S}k(;N%wfB>U@{+$1`%X=bfM2FG6;+Ez@tXCe|$!Sb|PBD~?(kt68nb7UKCk zx-$;kj+Ub>##1+4E@aEst9Tz#M{*R-vYlR7JiQ>jnz<|aPd*lf`~h9Rm0$-u42fc3 z5ks$@7%sfzw7-kjAOItiqugyTQPmXFR8qlkrJXMtqkChH{Nl`CxTkYzD*K{u=%O)V zHE^lU|8gn1ySSrtk=C|$zqEO6MP0!3x7-e3z}ef$)=uY!g88MeeR-+B6nWrMzr8&F zmvnA-$I1G?Wp@}x%!NZC7z|ZJxg&r1MPb4)I6?xzi0Z;3a2Nm+hYBNLmlCd+u;^t^ zc@+Bp)=}FUbqVs9srnnyV(h<*=xRtz=KihKBmNI+eTS(=az31@`NWVna20VapN@*r zocT4S*y}1v&&eO7OuUR!N}(ROWzL)LH{54ad}(lQcal%inW|<(T5cAm5OrGSE5^*U z2__7k4V%>pdoMXYj+9Tb*V+wf%R!nENVa@xRynz45+C`a=x2Ed2bMR&gNQ432cbUX zReitSHU$#WtT#+lSFK~StGn~4Q{O$&Zsi2>!N78-J;Czx78|cO zFSv5=Y7}+@@04ft{rT}VM8ruYE`!L3vaq^6ajY4EQH~Le&MQFTq+TyizP<8}RZ(T# zz1|aH{tZnIqRO#F{vHF5BQ64l;tyd#&1zMgyjFudMRgl7y`@oh{nzE*Zzr*)`LiPP>$n)})X@l;sx7WF zkL0_q_ChJr#~jaKpK7ZO-qNyu%B;6i4dJYMPM;dJGCH4+fCTPtb^#5rKya0f8GPjZ zb5L>iyk7ud(GY7JhJIY=Cxb%B`j~Vl^Lv{)KHn+~fa*U$M{^U;K6Jh_eiT3c=CiWt zT3g~2T|ghHK5AT`eIfdL^rLRJxP!zeJl$z!9J!l4dwy)MUkleq>N2gj1K0bD74vRq zJIXxYNSZM!>Y{tx#S=>h%jxXyg4a#oNTqCQCTs{3`tYiFqwT8@s0!gvJkMdKsJ*Pd zi~E}Bfj!Oj0x|#Cxe8}Rb-5D0gmc~07aobO?fCE4bC}4&jxq|^C$mi=DpZ^j$X|p{ zPT@mFJOnxiRA6@=cRCr6I?Np_KIAv>k8!1KV;A309uM;ieNBreC;fphc44onu$P-B zvT;z{)J~b(rC@0M>$VfUS*;5t2sjCrp zTZmw~^UY7*^2W92!CH$XQ(qVltj&#S)9lU5C08mK7UeMO!%oN&*2cprIM@A57HDp&Vi=UZ!{q7{xgy>rFs9V?*q!LAbk|~GXV?0Bc%-dNXj}mmGzDm^ z_@P4#7A4B9Z=msDn*H=PN!G{y#lkCx(f3bmDGm=q&KBO%YFe5g8*EK8nk#dHCA3?} zb3VS`HnT86rbC4eoCY5m9r7l+MkTpr?dyj-{|vcuU5jfy70D=Hvh}j%f2@6|hf_NX1pSb9-%#(tGtjNeM(ObTu;ym?njoH>V)xLO z3i2dWG#d2D=$=y%l#ZPUEH&!&eIYOsE_FN{?>E%+xVrug`>tj>EY(Lx6X8in(?z2} za57I8{qYL6&wZ4(34Vs}JrsNA%b!X;UCiaW#xkqEnW{f)7rgj;H-j22?)Y6@|9YNX z9ymQAleFXEa02bQk+n|E$LjM&E2TdY8F-J%5S~(Lz1X$$#z1zh`DUGy+`iuQE0(BI zo{zKknZx*8RehBA=8YXJO@deIWraK?_)Y8;w5$DhBQpK zgWO3v7B;k141`&G+>w6!Qs-?|ODqpv2c_nHpQ-M~6d;nm$7hwid2(y_XY91&Xn9Gs zo^EKNWr^?<@rr6I9LoDV{(bFXK=5ND6Pk($b)xSe6(+UMy&Br9YCsfTXZ*Wrhtmqd zx$8#nlzN!vj)4~ffsMR^72$PqZMalf{*?I~r}zfi9O^Odi9%KpU)Uc63~aZe8VmZ~ zr>lC|bBlerrF53TWB&C=Px^FlJCy>jMkr_5u8QH&l{|m>NlF=ulzygE>iZGo4avuE zV^-@CD?}|^l`-KXS+sg^l3fjj(y9>mamgm$Cbr7JpfV!tBB}hhE}6|!*DKv8B*(fO zWh=^Nht6DmgYN8)Qb33oWulQ=Ok*6WF{|&t1<`F!x{lW@Js}x=yM^z*e=xTnQ18Bg z{0NR4L&}2nixqjdDYt;Po9lM z_CnItI^NyL0yAg#&M+fAB$s_eE!t{--lA5}RM4*>9=Xe><+-SC)l5e2JTTHyqcYWW zKBiVYbMf--;m+fS?mx#0^9-w8PIV`vX!%+AxEw>xyLen=ddQG@ia|zqYc-NH;wlv- z+m@a)$I&|@`b!aF4xriPd9Sd6m zJh9Yy9K{D>0&UE!l_^DU?>{WL=5(L`8}C?`%;9p)$+t&W5#mvTr9P~me^AWYUl6Dk zhhzN{5C3O6^t{AFFANc3ghdUfI~au!_{EVr82jXV(J+%0xiIcfhs^kSVUM<1S5oEsPm4OEvEkA@9tlno!s4&E-{l=NfIK0 zsl$LlL?B`is2B`$-Yxe#|2!rp21W4wF=JnpojnLs!T|$esz(0x0)Bl0_Q1b<;t+An zv@c(P+ixEnCWg^v|L((B7=iOYeXxJ}#6&Q42mjFzhQZW-_z)OH_3!<}ME(b#7~~)G z!-V-yAMCQy$tmP mZjZl!AFSqP?+%FmRcrC9RK*&F{*`OEgai!4#igvJ0{SoGkHnh* literal 0 HcmV?d00001 diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.png b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bc8271bd3ec0fbc6b5064f613559fa6c38fc53 GIT binary patch literal 10243 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 Bpxpof literal 0 HcmV?d00001 diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/gen-reg-ex.png b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/gen-reg-ex.png new file mode 100644 index 0000000000000000000000000000000000000000..43070c6005f5eb4f6cf363a75e117a5649667f45 GIT binary patch literal 158805 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

=&nk^!#*+cuZ+) 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
uZy4jI^`m&*MrCUUm3vjbEVI^5D@ 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 const FT& alpha= get_alpha());} {Write the facets which are of type \ccc{type} for the alpha value \ccc{alpha} to the sequence -pointed to by the output iterator \ccc{it}. Return past the end +pointed to by the output iterator \ccc{it}. Returns past the end of the output sequence.} \ccMethod { @@ -303,17 +303,17 @@ template const FT& alpha = get_alpha());} {Write the edges which are of type \ccc{type} for the alpha value \ccc{alpha} to the sequence -pointed to by the output iterator \ccc{it}. Return past the end +pointed to by the output iterator \ccc{it}. Returns past the end of the output sequence.} \ccMethod { template OutputIterator get_alpha_shape_vertices(OutputIterator it, Classification_type type, - const FT& alphaget_alpha());} + const FT& alpha);} {Write the vertices which are of type \ccc{type} for the alpha value \ccc{alpha} to the sequence -pointed to by the output iterator \ccc{it}. Return past the end +pointed to by the output iterator \ccc{it}. Returns past the end of the output sequence.} \ccMethod { @@ -383,7 +383,7 @@ is an internal format. \ccFunction{Geomview_stream& operator<<(Geomview_stream& W, const Alpha_shape_3

& A);} {Inserts the alpha shape \ccVar\ for the current alpha value into the Geomview stream \ccc{W}. -\ccPrecond The insert operator must be defined for \ccc{Point} and \ccc{Triangle}.} +\ccPrecond The insert operator must be defined for \ccc{GT::Point} and \ccc{GT::Triangle}.} \ccImplementation diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_cell_base_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_cell_base_3.tex index b5eef98e384..2a87e8fa682 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_cell_base_3.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_cell_base_3.tex @@ -52,7 +52,7 @@ The class \ccRefName\ is the default model for the concept \ccc{AlphaShapeCell_3}. -The class has to parameters. The traits class \ccc{Traits} +The class has two parameters. The traits class \ccc{Traits} provides the number type for alpha values. The second parameter \ccc{Fb} is a base class instantiated by default with \ccc{CGAL::Triangulation_cell_base_3}. diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_vertex_base_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_vertex_base_3.tex index 45990650bf1..c78e4a88c6e 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_vertex_base_3.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Alpha_shape_vertex_base_3.tex @@ -52,7 +52,7 @@ The class \ccRefName\ is the default model for the concept \ccc{AlphaShapeVertex_3}. -The class has to parameters : the traits class \ccc{Traits} +The class has two parameters : the traits class \ccc{Traits} which provides the type for the points or the weighted points. The second parameter \ccc{Vb} is a base class instantiated by default with \ccc{CGAL::Triangulation_vertex_base_3}. diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex new file mode 100644 index 00000000000..63e3a5f4cc6 --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex @@ -0,0 +1,38 @@ +\begin{ccRefConcept}{FixedAlphaShapeCell_3} + +\ccDefinition +This concept describes the requirements for the base cell of a alpha shape with a fixed value alpha. + + +\ccRefines +\ccc{TriangulationCellBase_3}. + + +\ccCreationVariable{f} + +\ccCreation + + +\ccConstructor{Alpha_shape_cell_base_3();}{default constructor.} +\ccGlue +\ccConstructor{Alpha_shape_cell_base_3(const Vertex_handle& v0, const Vertex_handle& v1, const Vertex_handle& v2, const Vertex_handle& v3);}{constructor setting the incident vertices.} +\ccGlue +\ccConstructor{Alpha_shape_cell_base_3(const Vertex_handle& v0, const Vertex_handle& v1, const Vertex_handle& v2, const Vertex_handle& v3, +const Cell_handle& n0, const Cell_handle& n1, const Cell_handle& n2, const Cell_handle& n3);} +{constructor setting the incident vertices and the neighboring cells.} + + + +\ccAccessFunctions +\ccMethod{Classification_type get_classification_type();}{Returns the classification of the cell.} +\ccMethod{Classification_type get_facet_classification_type(int i);}{Returns the classification of the i-th facet of the cell.} + + +\ccModifiers +\ccMethod{void set_classification_type(Classification_type type);} + { Sets classification of the cell.} +\ccMethod{void set_facet_classification_type(int i, Classification_type type);} +{Sets the classification of the i-th facet of the cell.} + + +\end{ccRefConcept} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex new file mode 100644 index 00000000000..a2308e58013 --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex @@ -0,0 +1,62 @@ +%---------------------------------------------------------------------- + +\begin{ccRefConcept} {FixedAlphaShapeTraits_3} + +\ccCreationVariable{t} + +\ccDefinition +The concept \ccRefName\ describes the requirements +for the geometric traits class +of the underlying Delaunay triangulation of a basic alpha shape with a fixed value alpha. + + +\ccRefines +\ccc{DelaunayTriangulationTraits_3} + +In addition to the requirements described in the concept +\ccc{DelaunayTriangulationTraits_3}, +the geometric traits class of a +Delaunay triangulation plugged in a basic alpha shape with fixed alpha value +provides the following. + + +\ccTypes + +\ccNestedType{Comparison_result}{\ccc{CGAL::Comparison_result} or \ccc{Uncertain}} + +\ccNestedType{Compare_squared_radius_3} +{An object constructor able to compare \\ +the squared radius of the smallest circumscribing sphere of +either four, three, two or one point(s) +with a given value of alpha. +It provides:\\ +\ccc{Comparison_result operator()(Point_3,Point_3,Point_3,Point_3)}\\ +\ccc{Comparison_result operator()(Point_3,Point_3,Point_3)}\\ +\ccc{Comparison_result operator()(Point_3,Point_3)}\\ +\ccc{Comparison_result operator()(Point_3)}\\ +} + + +\ccCreation +\ccCreationVariable{traits} +\ccThree{TriangulationTraits_3xxx();}{Triangulation_traits_3 & tr}{} +\ccThreeToTwo + +\ccConstructor{AlphaShapeTraits_3();}{Default constructor.} + + +\ccAccessFunctions +\ccMethod{Compare_squared_radius_3 compare_squared_radius_3_object();} {} + +\ccHasModels +All \ccc{CGAL} kernels.\\ +\ccc{CGAL::Exact_predicates_inexact_constructions_kernel} (recommended)\\ +\ccc{CGAL::Exact_predicates_exact_constructions_kernel}\\ +\ccc{CGAL::Filtered_kernel}\\ +\ccc{CGAL::Cartesian}\\ +\ccc{CGAL::Simple_cartesian}\\ +\ccc{CGAL::Homogeneous}\\ +\ccc{CGAL::Simple_homogeneous} + + +\end{ccRefConcept} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex new file mode 100644 index 00000000000..8f83ef966f5 --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex @@ -0,0 +1,44 @@ +%---------------------------------------------------------------------- + +\begin{ccRefConcept}{FixedAlphaShapeVertex_3} + +\ccDefinition +This concept describes the requirements for the base vertex of a alpha shape with a fixed value alpha. + + +\ccRefines +\ccc{TriangulationVertexBase_3}. + +\ccCreationVariable{v} + +\ccTypes +\ccNestedType{Point} +{Must be the same as the point type provided by +the geometric traits class of the triangulation.} + +\ccCreation +\ccConstructor{Alpha_shape_vertex_base_3();}{default constructor.} +\ccGlue +\ccConstructor{Alpha_shape_vertex_base_3(Point p);}{constructor setting +the point associated to.} +\ccGlue +\ccConstructor{Alpha_shape_vertex_base_3(Point p, const Cell_handle& c);} +{constructor setting the point associated to and an incident cell.} + + +\ccAccessFunctions +\ccMethod{bool is_on_chull();} +{Returns a boolean indicating whether the point is on the convex hull of the point of the triangulation.} +\ccMethod{Classification_type get_classification_type();} +{Returns the classification of the vertex.} + + +\ccModifiers +\ccMethod{void set_classification_type(Classification_type type);} +{Sets the classification of the vertex.} + +\ccMethod{void is_on_chull(bool b);} +{Sets whether the vertex is on the convex hull.} + + +\end{ccRefConcept} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex new file mode 100644 index 00000000000..938cd66bd2a --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex @@ -0,0 +1,48 @@ +\begin{ccRefConcept}{FixedWeightedAlphaShapeTraits_3} + +%% \ccHtmlCrossLink{} %% add further rules for cross referencing links +%% \ccHtmlIndexC[concept]{} %% add further index entries + +\ccDefinition + +The concept \ccRefName\ describes the requirements +for the geometric traits class of the underlying regular triangulation of a weighted alpha shape with fixed alpha value. + +\ccRefines +\ccc{RegularTriangulationTraits_3} + +In addition to the requirements described in the concept +\ccc{RegularTriangulationTraits_3}, +the geometric traits class of a +Regular triangulation plugged in a weighted alpha shape with fixed alpha value +provides the following. + +\ccTypes +\ccNestedType{Comparison_result}{\ccc{CGAL::Comparison_result} or \ccc{Uncertain}} + +\ccNestedType{Compare_weighted_squared_radius_3} +{An object constructor able to compare the squared radius of the + smallest sphere orthogonal to either four, three, two or one weighted point(s) + to a given value of alpha. +It provides:\\ +\ccc{Comparison_result operator()(Weighted_point_3 ,Weighted_point_3 ,Weighted_point_3 ,Weighted_point_3 )}\\ +\ccc{Comparison_result operator()(Weighted_point_3 ,Weighted_point_3 ,Weighted_point_3 )}\\ +\ccc{Comparison_result operator()(Weighted_point_3 ,Weighted_point_3 )}\\ +\ccc{Comparison_result operator()(Weighted_point_3 )}\\ +} + +\ccCreation +\ccCreationVariable{wast} %% choose variable name + +\ccConstructor{WeightedAlphaShapeTraits_3();}{default constructor.} + +\ccAccessFunctions +\ccMethod{Compare_weighted_squared_radius_3 compare_weighted_squared_radius_3_object();} {} + + +\ccHasModels + +\ccc{CGAL::Regular_triangulation_euclidean_traits_3}, + +\end{ccRefConcept} + diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex new file mode 100644 index 00000000000..ddd930f7c88 --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex @@ -0,0 +1,188 @@ +%---------------------------------------------------------------------- + +\begin{ccRefClass} {Fixed_alpha_shape_3
} + +\ccDefinition + +The class \ccClassTemplateName\ represents one (fixed) +alpha shape of points in the 3D space for a real +$\alpha$. It maintains an underlying triangulation +of the class \ccc{Dt} which +represents connectivity and order among its faces. Each +$k$-dimensional face of the \ccc{Dt} is associated with +a classification that specifies its status in the alpha complex, alpha being fixed. + +Note that this class can be used at the same time to build a {\em basic} or +a {\em weighted} Alpha Shape\ccIndexMainItem[C]{Weighted_alpha_shapes_3}. + + +\ccInclude{CGAL/Fixed_alpha_shape_3.h} + +\ccInheritsFrom + +\ccc{Dt} + +This class is the underlying triangulation class. + +The modifying functions \ccc{insert} and \ccc{remove} will overwrite +the inherited functions. + +\ccTypes +\ccSetThreeColumns{Oriented_side}{}{\hspace*{10cm}} +\ccThreeToTwo + +\ccNestedType{Gt}{the alpha shape traits type.} +it has to derive from a triangulation traits class. +For example \ccc{Dt::Point} is a Point class. + +\ccTypedef{typedef Gt::FT FT;}{the number type of alpha.} + +%\ccNestedType{Alpha_shape_vertices_iterator}{A bidirectional and non-mutable iterator that allow to traverse +%the vertices which belongs to the alpha shape for a fixed $\alpha$. +%\ccPrecond Its \ccc{value_type} is \ccc{Dt::Vertex_handle}} + +%\ccNestedType{Alpha_shape_facets_iterator}{A bidirectional and non-mutable iterator that allow to traverse +%the facets which belongs to the alpha shape for a fixed $\alpha$. +%\ccPrecond Its \ccc{value_type} is \ccc{Dt::Facet}} + +\ccEnum{enum Classification_type {EXTERIOR, SINGULAR, REGULAR, INTERIOR};} +{Enum to classify the simplices of the underlying +triangulation with respect to a given alpha value.\\ +Each k-dimensional simplex of the triangulation +can be classified as EXTERIOR, SINGULAR, REGULAR +or INTERIOR. +A $k$ simplex is REGULAR if it is on the boundary +of the alpha complex and belongs to a $k+1$ simplex in this complex +and it is SINGULAR if it is a boundary simplex that is not included in a $k+1$ simplex of the complex. \\ +} + + + + +\ccCreation +\ccCreationVariable{A} + +\ccConstructor{Alpha_shape_3(FT alpha = 0);} +{Introduces an empty alpha shape data structure +\ccVar\ and set the alpha value to \ccc{alpha}.} + +\ccConstructor{ Alpha_shape_3(Dt& dt,FT alpha = 0);} +{Builds an alpha shape from the triangulation \ccc{dt}, +and set the alpha value to \ccc{alpha}. +Be careful that this operation destroys the triangulation.} + +\ccConstructor{template < class InputIterator > + Alpha_shape_3( + InputIterator first, + InputIterator last, + const FT& alpha = 0);} +{Builds an alpha shape data structure +for the points in the range +$\left[\right.$\ccc{first}, \ccc{last}$\left.\right)$ and +set the alpha value to \ccc{alpha}. +\ccRequire The \ccc{value_type} of \ccc{first} and +\ccc{last} is \ccc{Point} (the type point of the underlying +triangulation.)} + + +\ccModifiers + +\ccMethod{Vertex_handle insert (Point p,Cell_handle start = Cell_handle());} +{ +Inserts point p in the underlying triangulation and returns the corresponding vertex. +The optional argument \ccc{start} is used as a starting place for the search. +The classification types of the new simplices are computed and that of the simplices incident +to the new ones are updated. +} + +\ccMethod{void remove (Vertex_handle v);} +{ +Removes the vertex v from the underlying triangulation. +The classification types of new simplices and their incident faces are set or reset +} + +\ccMethod{void + clear();} +{Clears the structure.} + + +\ccHeading{Query Functions} + + +\ccMethod{const FT& + get_alpha(void) const;} +{Returns the $\alpha$-value.} + +\ccMethod{Classification_type + classify(Cell_handle c) const;} +{Classifies the cell \ccc{c} of the underlying triangulation in the alpha complex.} + +\ccMethod{Classification_type classify(Facet f) const;} +{Classifies the facet \ccc{f} of the underlying triangulation in the alpha complex.} + +\ccMethod{Classification_type classify(Cell_handle f, int i) const;} +{Classifies the facet of the cell \ccc{f} opposite to the vertex with index +\ccc{i} of the underlying triangulation in the alpha complex.} + +\ccMethod{Classification_type classify(const Edge& e) const;} +{Classifies the edge \ccc{e} of the underlying triangulation in the alpha complex. } + +\ccMethod{Classification_type classify(Vertex_handle v) const;} +{Classifies the vertex \ccc{v} of the underlying triangulation in the alpha complex.} + + + +\ccMethod {template + OutputIterator get_alpha_shape_cells(OutputIterator it, Classification_type type);} +{Writes the cells which are of type \ccc{type} in the alpha complex +to the sequence +pointed to by the output iterator \ccc{it}. Returns past the end +of the output sequence.} + + +\ccMethod { +template + OutputIterator get_alpha_shape_facets(OutputIterator it, Classification_type type);} +{Writes the facets which are of type \ccc{type} in the alpha complex +to the sequence pointed to by the output iterator \ccc{it}. Returns past the end +of the output sequence.} + +\ccMethod { +template + OutputIterator get_alpha_shape_edges(OutputIterator it, Classification_type type);} +{Writes the edges which are of type \ccc{type} in the alpha complex +to the sequence +pointed to by the output iterator \ccc{it}. Returns past the end +of the output sequence.} + +\ccMethod { + template + OutputIterator get_alpha_shape_vertices(OutputIterator it, Classification_type type);} +{Writes the vertices which are of type \ccc{type} in the alpha complex +to the sequence pointed to by the output iterator \ccc{it}. Returns past the end +of the output sequence.} + +\ccHeading{I/O} + +The I/O operators are defined for \ccc{iostream}, and for +the window stream provided by \cgal. The format for the iostream +is an internal format. + +\ccInclude{CGAL/IO/io.h} + +\ccFunction{ostream& operator<<(ostream& os, + const Alpha_shape_3
& A);} +{Inserts the alpha shape \ccVar\ for the alpha value of \ccc{A} into the stream \ccc{os}. +\ccRequire The insert operator must be defined for \ccc{GT::Point}.} + +\ccInclude{CGAL/IO/Geomview_stream.h} + +\ccInclude{CGAL/IO/alpha_shape_geomview_ostream_3.h} + +\ccFunction{Geomview_stream& operator<<(Geomview_stream& W, + const Alpha_shape_3
& A);} +{Inserts the alpha shape \ccVar\ into the Geomview stream \ccc{W}. +\ccRequire The insert operator must be defined for \ccc{GT::Point} and \ccc{GT::Triangle}.} + +\end{ccRefClass} + diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex new file mode 100644 index 00000000000..2e4e70d60c6 --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex @@ -0,0 +1,26 @@ +%---------------------------------------------------------------------- + +\begin{ccRefClass}{Fixed_alpha_shape_cell_base_3} + +\ccDefinition + +The class \ccRefName\ is the default model for the concept +\ccc{FixedAlphaShapeCell_3}. + +The class has two parameters. The traits class \ccc{Traits} +provides the number type for alpha values. +The second parameter \ccc{Fb} is a base class instantiated by default +with \ccc{CGAL::Triangulation_cell_base_3}. + + +\ccInclude{CGAL/Fixed_alpha_shape_cell_base_3.h} + +\ccIsModel +\ccc{FixedAlphaShapeCellBase_3} + +\ccInheritsFrom + +\ccc{Fb} + + +\end{ccRefClass} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex new file mode 100644 index 00000000000..00c48a8c196 --- /dev/null +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex @@ -0,0 +1,27 @@ +%---------------------------------------------------------------------- + +\begin{ccRefClass}{Fixed_alpha_shape_vertex_base_3} + +\ccDefinition + +The class \ccRefName\ is the default model for the concept +\ccc{FixedAlphaShapeVertex_3}. + +The class has two parameters : the traits class \ccc{Traits} +which provides the type for the points or the weighted points. +The second parameter \ccc{Vb} is a base class instantiated by default +with \ccc{CGAL::Triangulation_vertex_base_3}. + + +\ccInclude{CGAL/Fixed_alpha_shape_vertex_base_3.h} + + +\ccIsModel +\ccc{FixedAlphaShapeVertexBase_3} + + +\ccInheritsFrom + +\ccc{Vb} + +\end{ccRefClass} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex index d4b91e61766..f920f745295 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex @@ -43,7 +43,7 @@ and the squared radius of the smallest sphere orthogonal to three weighted points \ccc{p0, p1, p2}, and the squared radius of smallest sphere orthogonal to two weighted points \ccc{p0, p1}, -and the squared radius of the smallest spere orthogonal to a single +and the squared radius of the smallest sphere orthogonal to a single point \ccc{p0}.} \ccCreation diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/intro.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/intro.tex index f56aa6b7b01..d74ff1ea419 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/intro.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/intro.tex @@ -51,7 +51,8 @@ %\section{Reference pages for Alpha Shapes in 3D} \ccRefChapter{3D Alpha Shapes} -\ccChapterAuthor{Tran Kai Frank Da \and Mariette Yvinec} +\ccChapterAuthor{Tran Kai Frank Da \and +S\'ebastien Loriot \and Mariette Yvinec} Alpha shapes definition is based on an underlying triangulation that may be a Delaunay triangulation @@ -65,7 +66,7 @@ The alpha complex is a subcomplex of the Delaunay triangulation. For a given value of $\alpha$, the alpha complex includes all the simplices in the Delaunay triangulation which have -an empty circumsphere with squared radius equal or smaller than $\alpha$. +an empty circumscribing sphere with squared radius equal or smaller than $\alpha$. Here ``empty'' means that the open sphere do not include any points of $S$. The alpha shape is then simply the domain covered by the simplices @@ -76,11 +77,6 @@ This means in particular that the alpha complex may have singular faces. For $0 \leq k \leq d-1$, a $k$-simplex of the alpha complex is said to be singular if it is not a facet of a $(k+1)$-simplex of the complex -CGAL provides two versions of the alpha shapes. In the general mode, -the alpha shapes correspond strictly to the above definition. -The regularized mode provides a regularized version of the alpha shapes -corresponding to the domain covered by a regularized version -of the alpha complex where singular faces are removed. The alpha shapes of a set of points $S$ form a discrete family, even though they @@ -95,7 +91,6 @@ easily. Furthermore, we can select the optimal value of $\alpha$ to get an alpha shape including all data points and having less than a given number of connected components. - The definition is analog in the case of weighted alpha shapes. The input set is now a set of weighted points (which can be regarded as spheres) and the underlying triangulation @@ -110,8 +105,16 @@ regular triangulation triangulation such that there is a sphere orthogonal to the weighted points associated with the vertices of the simplex and suborthogonal to all the other input weighted points. Once again the alpha shape is then defined as -the domain covered by a the alpha complex and arise in two versions -general or regularized. +the domain covered by a the alpha complex. + +CGAL provides two versions to compute alpha shapes. +The first one gives access to an explicit classification of all the simplices for a fixed alpha value. +The second one gives access to the entire family of alpha shapes of a set of points. +This latter version comes with two modes. In the general mode, +the alpha shapes correspond strictly to the definition previously made. +The regularized mode provides a regularized version of the alpha shapes +corresponding to the domain covered by a regularized version +of the alpha complex where singular faces are removed. \section{Classified Reference Pages} @@ -122,6 +125,10 @@ general or regularized. \ccRefConceptPage{WeightedAlphaShapeTraits_3} \\ \ccRefConceptPage{AlphaShapeCell_3}\\ \ccRefConceptPage{AlphaShapeVertex_3}\\ +\ccRefConceptPage{FixedAlphaShapeTraits_3}\\ +\ccRefConceptPage{FixedWeightedAlphaShapeTraits_3} \\ +\ccRefConceptPage{FixedAlphaShapeCell_3}\\ +\ccRefConceptPage{FixedAlphaShapeVertex_3}\\ \subsection*{Classes} @@ -130,3 +137,7 @@ general or regularized. %\ccRefIdfierPage{CGAL::Weighted_alpha_shape_euclidean_traits_3}\\ \ccRefIdfierPage{CGAL::Alpha_shape_vertex_base_3}\\ \ccRefIdfierPage{CGAL::Alpha_shape_cell_base_3} + +\ccRefIdfierPage{CGAL::Fixed_alpha_shape_3
}\\ +\ccRefIdfierPage{CGAL::Fixed_alpha_shape_vertex_base_3}\\ +\ccRefIdfierPage{CGAL::Fixed_alpha_shape_cell_base_3} diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/main.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/main.tex index bc0e8aa5e81..15ca63e59f3 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/main.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/main.tex @@ -17,4 +17,12 @@ \input{Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex} \input{Alpha_shapes_3_ref/Weighted_alpha_shape_euclidean_traits_3.tex} +\input{Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex} +\input{Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex} +\input{Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex} +\input{Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex} +\input{Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex} +\input{Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex} +\input{Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex} + %% EOF diff --git a/Alpha_shapes_3/examples/Alpha_shapes_3/ex_alpha_shapes_3.cpp b/Alpha_shapes_3/examples/Alpha_shapes_3/ex_alpha_shapes_3.cpp index e212923c0ee..0712f4f039e 100644 --- a/Alpha_shapes_3/examples/Alpha_shapes_3/ex_alpha_shapes_3.cpp +++ b/Alpha_shapes_3/examples/Alpha_shapes_3/ex_alpha_shapes_3.cpp @@ -34,7 +34,7 @@ int main() // compute alpha shape Alpha_shape_3 as(lp.begin(),lp.end()); - std::cout << "Alpha shape computed in REGULARIZED mode by defaut" + std::cout << "Alpha shape computed in REGULARIZED mode by default" << std::endl; // find optimal alpha value diff --git a/Alpha_shapes_3/examples/Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp b/Alpha_shapes_3/examples/Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp new file mode 100644 index 00000000000..e80c12498f9 --- /dev/null +++ b/Alpha_shapes_3/examples/Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; + +typedef CGAL::Regular_triangulation_euclidean_traits_3 Gt; + +typedef CGAL::Fixed_alpha_shape_vertex_base_3 Vb; +typedef CGAL::Fixed_alpha_shape_cell_base_3 Fb; +typedef CGAL::Triangulation_data_structure_3 Tds; +typedef CGAL::Regular_triangulation_3 Triangulation_3; +typedef CGAL::Fixed_alpha_shape_3 Fixed_alpha_shape_3; + +typedef Fixed_alpha_shape_3::Cell_handle Cell_handle; +typedef Fixed_alpha_shape_3::Vertex_handle Vertex_handle; +typedef Fixed_alpha_shape_3::Facet Facet; +typedef Fixed_alpha_shape_3::Edge Edge; +typedef Gt::Weighted_point Weighted_point; +typedef Gt::Bare_point Bare_point; + +int main() +{ + std::list lwp; + + //input : a small molecule + lwp.push_back(Weighted_point(Bare_point( 1, -1, -1), 4)); + lwp.push_back(Weighted_point(Bare_point(-1, 1, -1), 4)); + lwp.push_back(Weighted_point(Bare_point(-1, -1, 1), 4)); + lwp.push_back(Weighted_point(Bare_point( 1, 1, 1), 4)); + lwp.push_back(Weighted_point(Bare_point( 2, 2, 2), 1)); + + //build one alpha_shape with alpha=0 + Fixed_alpha_shape_3 as(lwp.begin(), lwp.end(), 0); + + //explore the 0-shape - It is dual to the boundary of the union. + std::list cells; + std::list facets; + std::list edges; + as.get_alpha_shape_cells(std::back_inserter(cells), + Fixed_alpha_shape_3::INTERIOR); + as.get_alpha_shape_facets(std::back_inserter(facets), + Fixed_alpha_shape_3::REGULAR); + as.get_alpha_shape_facets(std::back_inserter(facets), + Fixed_alpha_shape_3::SINGULAR); + as.get_alpha_shape_edges(std::back_inserter(edges), + Fixed_alpha_shape_3::SINGULAR); + std::cout << " The 0-shape has : " << std::endl; + std::cout << cells.size() << " interior tetrahedra" << std::endl; + std::cout << facets.size() << " boundary facets" << std::endl; + std::cout << edges.size() << " singular edges" << std::endl; + return 0; +} diff --git a/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_3.h b/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_3.h new file mode 100644 index 00000000000..0461ab84b12 --- /dev/null +++ b/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_3.h @@ -0,0 +1,1123 @@ +// Copyright (c) 2009 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you may redistribute it under +// the terms of the Q Public License version 1.0. +// See the file LICENSE.QPL distributed with CGAL. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the so +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// +// +// Author(s) : Sebastien Loriot +// + +#ifndef CGAL_FIXED_ALPHA_SHAPE_3_H +#define CGAL_FIXED_ALPHA_SHAPE_3_H + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef CGAL_USE_GEOMVIEW +#include // TBC +#endif + +#include + +#include + + +namespace CGAL{ + +namespace internal{ + //small utility to select the correct predicate in the weighted case + template + struct Simplex_classif_predicate; + + template + struct Simplex_classif_predicate{ + static + typename One_alpha::Triangulation::Geom_traits::Compare_squared_radius_3 + predicate(const typename One_alpha::Triangulation& T){ + return T.geom_traits().compare_squared_radius_3_object(); + } + }; + + template + struct Simplex_classif_predicate{ + static + typename One_alpha::Triangulation::Geom_traits::Compare_weighted_squared_radius_3 + predicate(const typename One_alpha::Triangulation& T){ + return T.geom_traits().compare_weighted_squared_radius_3_object(); + } + }; + + //small utility to insert hidden vertices after a removal (in non-weighted case do nothing) + template + struct Hidden_inserter + { + typedef typename One_alpha::Triangulation Dt; + + template + static void insert(One_alpha& one_alpha, Vertex_remover& remover) + { + typename One_alpha::Cell_handle c; + for (typename Vertex_remover::Hidden_points_iterator + hi = remover.hidden_points_begin(); + hi != remover.hidden_points_end(); ++hi) + { + typename One_alpha::Vertex_handle hv = one_alpha.insert (*hi, c); + if (hv != typename One_alpha::Vertex_handle()) c = hv->cell(); + } + } + }; + + template + struct Hidden_inserter{ + typedef typename One_alpha::Triangulation Dt; + template + static void insert(const One_alpha&,const Vertex_remover&){} + }; + + +} //internal + + +template < class Dt > +class Fixed_alpha_shape_3 : public Dt +{ + // DEFINITION The class Fixed_alpha_shape_3
represents the + // alpha-shape for a set of points (or a set of weighted points) + // for a given value of alpha. The alphashape is defined through + // the Delaunay tetrahedralization of the points + // (or the Regular tetrahedralization in case of weighted points) + // and depends on the value of a parameter called alpha. + // The alpha_shape is the domain of a subcomplex of this triangulation + // called the Alpha_complex. The alpha_complex includes any simplex + // having a circumscribing sphere (an orthogonal sphere + // in case of weighted points) empty of other points + // (or suborthogonal to other sites in case of weighted points) + // with squared radius equal or less than alpha + + // In each k-dimensional simplex of the triangulation + // for (k=0,1,2) + // can be classified as EXTERIOR, SINGULAR, REGULAR + // or INTERIOR with respect to the alpha shape. + // A $k$ simplex is REGULAR if it is on the boundary + // of the alpha_complex and belongs to a $k+1$ simplex in the complex + // and it is SINGULAR simplex if it is a boundary simplex tht is not + // included in a $k+1$ simplex of the complex. + + // Roughly, the Fixed_alpha_shape data structure computes and stores, + // for each simplex it classification type. + + + //------------------------- TYPES ------------------------------------ + +public: + typedef Dt Triangulation; + typedef typename Dt::Geom_traits Gt; + typedef typename Dt::Triangulation_data_structure Tds; + + //Classification type: no longer an enum inside the class as Vertex and cell must know it + typedef internal::Classification_type Classification_type; + static const Classification_type EXTERIOR = internal::EXTERIOR; + static const Classification_type REGULAR = internal::REGULAR; + static const Classification_type INTERIOR = internal::INTERIOR; + static const Classification_type SINGULAR = internal::SINGULAR; + + typedef typename Gt::FT Coord_type; + typedef Coord_type NT; + typedef Coord_type FT; + + typedef typename Gt::Point_3 Point; + + typedef typename Dt::Cell_handle Cell_handle; + typedef typename Dt::Vertex_handle Vertex_handle; + typedef typename Dt::Facet Facet; + typedef typename Dt::Edge Edge; + + typedef typename Dt::Cell_circulator Cell_circulator; + typedef typename Dt::Facet_circulator Facet_circulator; + + typedef typename Dt::Cell_iterator Cell_iterator; + typedef typename Dt::Facet_iterator Facet_iterator; + typedef typename Dt::Edge_iterator Edge_iterator; + typedef typename Dt::Vertex_iterator Vertex_iterator; + + typedef typename Dt::Finite_cells_iterator Finite_cells_iterator; + typedef typename Dt::Finite_facets_iterator Finite_facets_iterator; + typedef typename Dt::Finite_edges_iterator Finite_edges_iterator; + typedef typename Dt::Finite_vertices_iterator Finite_vertices_iterator; + + typedef typename Dt::Locate_type Locate_type; + typedef typename Dt::Weighted_tag Weighted_tag; + + using Dt::dimension; + using Dt::finite_facets_begin; + using Dt::finite_facets_end; + using Dt::finite_edges_begin; + using Dt::finite_edges_end; + using Dt::all_edges_begin; + using Dt::all_edges_end; + using Dt::finite_vertices_begin; + using Dt::finite_vertices_end; + using Dt::finite_cells_begin; + using Dt::finite_cells_end; + using Dt::VERTEX; + using Dt::EDGE; + using Dt::FACET; + using Dt::CELL; + using Dt::OUTSIDE_CONVEX_HULL; + using Dt::OUTSIDE_AFFINE_HULL; + using Dt::vertex_triple_index; + using Dt::finite_adjacent_vertices; + using Dt::find_conflicts; + using Dt::is_edge; + using Dt::incident_vertices; + using Dt::incident_facets; + using Dt::is_infinite; + using Dt::is_Gabriel; + using Dt::tds; + + typedef std::pair Vertex_handle_pair; + typedef std::map Edge_status_map; + + //test if a simplex is exterior to the alpha-shape + class Exterior_simplex_test{ + const Fixed_alpha_shape_3 * _as; + public: + Exterior_simplex_test() {} + Exterior_simplex_test(const Fixed_alpha_shape_3 * as) {_as = as;} + bool operator() ( const Finite_cells_iterator& fci) const { + return _as->classify(fci) == EXTERIOR ; + } + bool operator() ( const Finite_vertices_iterator& fvi) const { + return _as->classify(fvi) == EXTERIOR ; + } + bool operator() ( const Finite_facets_iterator& ffi) const { + return _as->classify(*ffi) == EXTERIOR ; + } + bool operator() ( const Finite_edges_iterator& fei) const { + return _as->classify(*fei) == EXTERIOR ; + } + }; + + typedef Filter_iterator< Finite_vertices_iterator, Exterior_simplex_test> Alpha_shape_vertices_iterator; + typedef Filter_iterator< Finite_facets_iterator, Exterior_simplex_test> Alpha_shape_facets_iterator; + typedef Filter_iterator< Finite_edges_iterator, Exterior_simplex_test> Alpha_shape_edges_iterator; + typedef Filter_iterator< Finite_cells_iterator, Exterior_simplex_test> Alpha_shape_cells_iterator; + + + Vertex_handle + insert(const Point& p,Cell_handle start=Cell_handle()) + { + if (this->dimension() < 3){ + Vertex_handle new_v=Triangulation::insert(p,start); + if (this->dimension() == 3) initialize_alpha(); + return new_v; + } + + //Handle only case of dimension 3 of insert_in_conflict from Triangulation_3 class. + typename Triangulation::Locate_type lt; + int li, lj; + Cell_handle c = this->locate(p, lt, li, lj, start); + typename Triangulation::Conflict_tester_3 tester(p, this); + if ((lt == VERTEX) && + (tester.compare_weight(c->vertex(li)->point(), p)==0) ) { + return c->vertex(li); + } + // If the new point is not in conflict with its cell, it is hidden. + if (!tester.test_initial_cell(c)) { + this->hidden_point_visitor.hide_point(c,p); + return Vertex_handle(); + } + + // Ok, we really insert the point now. + // First, find the conflict region. + std::vector cells; + std::vector facets_on_the_boundary_of_the_hole; + + cells.reserve(32); + this->find_conflicts + (c, tester, make_triple(std::back_inserter(facets_on_the_boundary_of_the_hole), + std::back_inserter(cells), + Emptyset_iterator())); + + Facet facet=*boost::prior(facets_on_the_boundary_of_the_hole.end()); + + // Remember the points that are hidden by the conflicting cells, + // as they will be deleted during the insertion. + this->hidden_point_visitor.process_cells_in_conflict(cells.begin(), cells.end()); + + + //Before insertion: + //recover edges on the boundary of the hole. + std::set hole_boundary_edges; + const int indices[3]={1,2,3}; + for (typename std::vector::iterator + it=facets_on_the_boundary_of_the_hole.begin(); + it!=facets_on_the_boundary_of_the_hole.end(); + ++it) + { + Facet f=it->first->tds_data().is_in_conflict()?this->mirror_facet(*it):*it; + CGAL_precondition(!f.first->tds_data().is_in_conflict()); + for (int i=0;i<3;++i){ + Edge edge(f.first,(indices[i]+f.second)%4,(indices[(i+1)%3]+f.second)%4); + if (!this->is_infinite(edge)) + hole_boundary_edges.insert(edge); + } + } + // Erase from edge_status_map, edges that will disappear: + // they are not on the boudary of the hole + std::set hole_edges; + std::pair::iterator,bool> it_hedge_and_not_already_seen; + for (typename std::vector::iterator it=cells.begin();it!=cells.end();++it){ + for (int i=0;i<3;++i) + for (int k=i+1;k<4;++k) + { + Edge edge(*it,i,k); + if (this->is_infinite(edge) || hole_boundary_edges.find(edge)!=hole_boundary_edges.end() ) continue; + it_hedge_and_not_already_seen=hole_edges.insert(edge); + if (!it_hedge_and_not_already_seen.second){ + edge_status_map.erase(make_vertex_handle_pair(*(it_hedge_and_not_already_seen.first))); //for infinite edges it does nothing + } + } + } + + //Insertion using base triangulation + Vertex_handle v = this->_insert_in_hole(p, cells.begin(), cells.end(), + facet.first, facet.second); + + //After insertion + //--set classification of new cells and facets that were on the boundary of the hole + cells.clear(); + this->finite_incident_cells(v,std::back_inserter(cells)); + for (typename std::vector::iterator it=cells.begin();it!=cells.end();++it){ + set_cell_status(*it); //set cell status + set_facet_classification_type( Facet( (*it),(*it)->index(v) ) ); //set facet status (incident to one cell of the hole) + } + //--set classification of new facets + std::vector facets; + this->finite_incident_facets(v,std::back_inserter(facets)); + for (typename std::vector::iterator fit=facets.begin();fit!=facets.end();++fit) + set_facet_classification_type(*fit); + //--init classif of new vertex + v->set_classification_type(SINGULAR); + std::vector edges; + this->finite_incident_edges(v,std::back_inserter(edges)); + //--set status of new edges + update status of new vertex + for (typename std::vector::iterator eit=edges.begin();eit!=edges.end();++eit){ + Classification_type status=compute_edge_status(eit->first, eit->second, eit->third); + Vertex_handle_pair vhp = make_vertex_handle_pair( *eit ); + CGAL_precondition( edge_status_map.find(vhp)==edge_status_map.end() ); + edge_status_map.insert(std::make_pair(vhp, status)); + update_vertex_status(v,status); + } + //--set final status of new vertex + Cell_handle tmp; + int itmp1,itmp2; + v->is_on_chull( this->is_edge(this->infinite_vertex(),v,tmp,itmp1,itmp2) ); + finalize_status_of_vertex(v); + + //--set classification of old edges + for (typename std::set::iterator + eit=hole_boundary_edges.begin();eit!=hole_boundary_edges.end();++eit) + { + CGAL_precondition (!this->is_infinite(*eit)); + Classification_type status=compute_edge_status(eit->first, eit->second, eit->third); + Vertex_handle_pair vhp = make_vertex_handle_pair( *eit ); + typename Edge_status_map::iterator it_status=edge_status_map.find(vhp); + CGAL_precondition(it_status!=edge_status_map.end()); + it_status->second = status; + } + + //--set status of old vertices + update is_on_chull + //TODO: find a better way to do it : make an update + std::vector vertices; + this->finite_adjacent_vertices(v,std::back_inserter(vertices)); + for (typename std::vector::iterator vit=vertices.begin();vit!=vertices.end();++vit){ + if ( (*vit)->is_on_chull() ) + { + (*vit)->is_on_chull( this->is_edge(this->infinite_vertex(),(*vit),tmp,itmp1,itmp2) ); + } + set_vertex_status(*vit); + } + + // Store the hidden points in their new cells. + this->hidden_point_visitor.reinsert_vertices(v); + return v; + } + + void remove (Vertex_handle vertex_to_remove) + { + CGAL_precondition(vertex_to_remove!=Vertex_handle()); + CGAL_precondition(vertex_to_remove!=this->infinite_vertex()); + + std::vector link; + std::vector vertices_to_update; + std::map old_classification; + + if (this->dimension() == 3) + { + //recover facet of the link: they are bounding + //the hole made when removing the vertex + std::vector incident_cells; + this->finite_incident_cells(vertex_to_remove,std::back_inserter(incident_cells)); + for (typename std::vector::iterator it= + incident_cells.begin();it!=incident_cells.end();++it) + { + int index=(*it)->index(vertex_to_remove); + link.push_back( this->mirror_facet(Facet(*it,index)) ); + CGAL_assertion (!this->is_infinite(link.back())); + } + + //get vertices that will need to be updated + this->finite_adjacent_vertices(vertex_to_remove,std::back_inserter(vertices_to_update)); + + //1-erase removed edges from edge_map + //2-store old classification of vertices and set it to SINGULAR + for(typename std::vector::iterator it=vertices_to_update.begin();it!=vertices_to_update.end();++it){ + CGAL_precondition(edge_status_map.find(make_vertex_handle_pair(*it,vertex_to_remove)) != edge_status_map.end()); + edge_status_map.erase(make_vertex_handle_pair(*it,vertex_to_remove)); + old_classification.insert(std::make_pair(*it,(*it)->get_classification_type())); + (*it)->set_classification_type(SINGULAR); + } + } + + //Do remove the vertex from the underlying triangulation + Dt tmp; + typename Dt:: template Vertex_remover
remover(tmp); + typedef CGAL::Triangulation_3 Tr_Base; + Tr_Base::remove(vertex_to_remove,remover); + + if (this->dimension()<3){ + edge_status_map.clear(); + return; + } + + //recover new cells + std::set new_cells;//cells in the hole + std::set outer;//cells that are not in the hole + std::queue to_visit; + for (typename std::vector::iterator it=link.begin();it!=link.end();++it){ + Facet mirror_facet=this->mirror_facet(*it); + if ( !this->is_infinite(mirror_facet.first) ) + { + to_visit.push( mirror_facet.first ); + outer.insert(it->first); + } + } + + while (!to_visit.empty()){ + Cell_handle cell=to_visit.front(); + to_visit.pop(); + if ( !new_cells.insert(cell).second ) continue; //already explored + //explore neighbor cells + for (int i=0;i<4;++i){ + Cell_handle candidate=cell->neighbor(i); + if ( !this->is_infinite(candidate) && outer.find(candidate)==outer.end()) + to_visit.push(candidate); + } + } + + //set status of new cells + for (typename std::set::iterator it=new_cells.begin();it!=new_cells.end();++it){ + CGAL_precondition(!this->is_infinite(*it)); + set_cell_status(*it); + } + + //recover new facets + link facets + //set vertex that are on the convex hull (those on a facet incident to infinite cell) + while (!new_cells.empty()) + { + Cell_handle cell=*new_cells.begin(); + new_cells.erase(new_cells.begin()); + for (int i=0;i<4;++i){ + if ( new_cells.find(cell->neighbor(i)) != new_cells.end() ) + link.push_back(Facet(cell,i)); + else{ + if ( this->is_infinite( cell->neighbor(i) ) ){ + link.push_back(Facet(cell,i)); + cell->vertex((i+1)%4)->is_on_chull(true); + cell->vertex((i+2)%4)->is_on_chull(true); + cell->vertex((i+3)%4)->is_on_chull(true); + } + } + } + } + + std::set new_edges; + //1- set status of these facets + //2- recover new edges + edges incident to link facets + const int index[3]={1,2,3}; + for (typename std::vector::iterator it=link.begin();it!=link.end();++it){ + set_facet_classification_type(*it); + for (int i=0;i<3;++i){ + new_edges.insert(Edge(it->first,(it->second+index[i])%4,(it->second+index[(i+1)%3])%4)); + } + } + + //set status of these edges + for(typename std::set::iterator it=new_edges.begin();it!=new_edges.end();++it){ + Classification_type status=compute_edge_status(it->first, it->second, it->third); + //cross links + Vertex_handle_pair vhp = make_vertex_handle_pair( *it ); + edge_status_map[vhp]=status; + + //update status of incident vertices + update_vertex_status(it->first->vertex(it->second),status); + update_vertex_status(it->first->vertex(it->third),status); + } + + //set final status of vertices + for(typename std::vector::iterator it=vertices_to_update.begin();it!=vertices_to_update.end();++it){ + //this one is working but should be more expensive + //set_vertex_status(*it); continue; + + Classification_type old_status=old_classification[*it]; + Classification_type status=(*it)->get_classification_type(); + + CGAL_precondition( status!=SINGULAR ); // at least on edge is incident to that vertex + + if (status==INTERIOR){ + if (old_status!=INTERIOR || (*it)->is_on_chull()) + (*it)->set_classification_type(REGULAR); + else + (*it)->set_classification_type(INTERIOR); + continue; + } + + if (status==REGULAR) continue; + + if ( status==EXTERIOR && ( old_status==REGULAR || old_status==INTERIOR) ){ //if vertex was EXTERIOR or SINGULAR other edges are not in the alpha complex + //check if former REGULAR vertex becomes EXTERIOR or SINGULAR + std::list incidentv; + finite_adjacent_vertices(*it,back_inserter(incidentv)); + + typename std::list::iterator vvit=incidentv.begin(); + for( ; vvit != incidentv.end(); ++vvit) { + //TODO: We take all edges -> WE SHOULD ONLY TAKE THOSE NOT IN THE HOLE + Vertex_handle_pair vhp = make_vertex_handle_pair( *vvit, *it); + CGAL_assertion(edge_status_map.find(vhp)!=edge_status_map.end()); + Classification_type status=edge_status_map[vhp]; + if (status!=EXTERIOR){ + (*it)->set_classification_type(REGULAR); + break; + } + } + + if ( vvit != incidentv.end() ) continue; + } + + if ( is_vertex_Gabriel((*it),Weighted_tag()) && is_gabriel_simplex_in_alpha_complex((*it)) ) + (*it)->set_classification_type(SINGULAR); + else + (*it)->set_classification_type(EXTERIOR); + } + + //Insert possible hidden points + internal::Hidden_inserter,Weighted_tag>::insert(*this,remover); + } + + + +private: + + typedef internal::Simplex_classif_predicate,Weighted_tag> Simplex_classif; + + +//data members + NT _alpha; //the value of alpha + Edge_status_map edge_status_map; //the map containing the status of edges + + + //------------------------- CONSTRUCTORS ------------------------------ +public: + Fixed_alpha_shape_3(NT alpha=0):_alpha(alpha){} + + Fixed_alpha_shape_3(Dt& dt, NT alpha = 0):_alpha(alpha){ + Dt::swap(dt); + if (dimension() == 3) initialize_alpha(); + } + + // Introduces an alpha-shape `A' for the alpha-value + // `alpha' that is initialized with the points in the range + // from first to last + template < class InputIterator > + Fixed_alpha_shape_3(const InputIterator& first, + const InputIterator& last, + const NT& alpha = 0): _alpha(alpha) + { + Dt::insert(first, last); + if (dimension() == 3) initialize_alpha(); + } + + + +private : + + template < class InputIterator > + int make_alpha_shape(const InputIterator& first, + const InputIterator& last) + { + clear(); + int n = Dt::insert(first, last); + if (dimension() == 3) initialize_alpha(); + return n; + } + + //--------------------- INITIALIZATION OF PRIVATE MEMBERS ----------- + void initialize_status_of_cells(); + void initialize_status_of_facets(); + void initialize_status_of_edges(); + void initialize_status_of_vertices(); + void finalize_status_of_vertex(Vertex_handle); + void initialize_alpha() { + //identify vertices on the convex hull + std::vector chull; + incident_vertices(this->infinite_vertex(),std::back_inserter(chull)); + for ( typename std::vector::iterator it=chull.begin();it!=chull.end();++it) + (*it)->is_on_chull(true); + + initialize_status_of_cells(); + initialize_status_of_facets(); + initialize_status_of_edges(); + initialize_status_of_vertices(); + } + +private : + // prevent default copy constructor and default assigment + Fixed_alpha_shape_3(const Fixed_alpha_shape_3&); + void operator=(const Fixed_alpha_shape_3&); + + static + Vertex_handle_pair + make_vertex_handle_pair( Vertex_handle v1, Vertex_handle v2) { + return v1 < v2 ? std::make_pair(v1,v2) + : std::make_pair(v2,v1); + } + + static + Vertex_handle_pair + make_vertex_handle_pair( const Edge& e) { + return make_vertex_handle_pair(e.first->vertex(e.second),e.first->vertex(e.third)); + } + + struct Compare_edge{ + bool operator()(const Edge& e1,const Edge& e2) const + { + return make_vertex_handle_pair(e1) + bool is_vertex_Gabriel(Vertexhandle v,Tag_true){return is_Gabriel(v);} + void update_vertex_status(Vertex_handle v,Classification_type edge_status); + void set_facet_classification_type(const Facet& f); + void set_vertex_status(Vertex_handle v); + inline void set_cell_status (Cell_handle c); + Classification_type compute_edge_status( const Cell_handle& c,int i,int j) const; + + //--------------------------------------------------------------------- + +public: + // Returns the current alpha-value. + const NT& get_alpha() const + { + return _alpha; + } + + void clear() + { + // clears the structure + Dt::clear(); + edge_status_map.clear(); + } + + //--------------------- PREDICATES ----------------------------------- + +public: + Classification_type classify(const Cell_handle& s) const { + if (is_infinite(s)) return EXTERIOR; + return s->get_classification_type(); + } + Classification_type classify(const Facet& f) const { + if (is_infinite(f)) return EXTERIOR; + return f.first->get_facet_classification_type(f.second); + } + Classification_type classify(const Edge& e) const { + if (is_infinite(e)) return EXTERIOR; + return edge_status_map.find(make_vertex_handle_pair(e))->second; + } + Classification_type classify(const Vertex_handle& v) const { + if (is_infinite(v)) return EXTERIOR; + return v->get_classification_type(); + } + + +//------------------- GEOMETRIC PRIMITIVES ---------------------------- +private: + bool + is_gabriel_simplex_in_alpha_complex (const Cell_handle& s) const{ + return + Simplex_classif::predicate(*this)( + s->vertex(0)->point(), + s->vertex(1)->point(), + s->vertex(2)->point(), + s->vertex(3)->point(), + get_alpha() + ) !=POSITIVE; + } + + bool + is_gabriel_simplex_in_alpha_complex (const Cell_handle& s, const int& i) const{ + return + Simplex_classif::predicate(*this)( + s->vertex(vertex_triple_index(i,0))->point(), + s->vertex(vertex_triple_index(i,1))->point(), + s->vertex(vertex_triple_index(i,2))->point(), + get_alpha() + ) != POSITIVE; + } + + bool + is_gabriel_simplex_in_alpha_complex (const Facet& f) { + return is_gabriel_simplex_in_alpha_complex(f.first, f.second); + } + + bool + is_gabriel_simplex_in_alpha_complex (const Cell_handle& s, const int& i, const int& j) const { + return + Simplex_classif::predicate(*this)( + s->vertex(i)->point(), + s->vertex(j)->point(), + get_alpha() + ) !=POSITIVE; + } + + bool + is_gabriel_simplex_in_alpha_complex (const Edge& e) const { + return is_gabriel_simplex_in_alpha_complex(e.first,e.second,e.third); + } + + bool + is_gabriel_simplex_in_alpha_complex (const Vertex_handle& v) const { + return + Simplex_classif::predicate(*this)( + v->point(), + get_alpha() + ) !=POSITIVE; + } + + //--------------------------------------------------------------------- +public: +#ifdef CGAL_USE_GEOMVIEW + void show_alpha_shape_faces(Geomview_stream &gv) const; +#endif + + + //Iterators + + //--------------------------------------------------------------------- + Alpha_shape_vertices_iterator alpha_shape_vertices_begin() const { + return CGAL::filter_iterator(finite_vertices_end(),Exterior_simplex_test(this),finite_vertices_begin());} + Alpha_shape_vertices_iterator alpha_shape_vertices_end() const { + return CGAL::filter_iterator(finite_vertices_end(),Exterior_simplex_test(this));} + //--------------------------------------------------------------------- + Alpha_shape_facets_iterator alpha_shape_facets_begin() const{ + return CGAL::filter_iterator(finite_facets_end(),Exterior_simplex_test(this),finite_facets_begin());} + Alpha_shape_facets_iterator alpha_shape_facets_end() const { + return CGAL::filter_iterator(finite_facets_end(),Exterior_simplex_test(this));} + //--------------------------------------------------------------------- + Alpha_shape_edges_iterator alpha_shape_edges_begin() const{ + return CGAL::filter_iterator(finite_edges_end(),Exterior_simplex_test(this),finite_edges_begin());} + Alpha_shape_edges_iterator alpha_shape_edges_end() const { + return CGAL::filter_iterator(finite_edges_end(),Exterior_simplex_test(this));} + //--------------------------------------------------------------------- + Alpha_shape_cells_iterator alpha_shape_cells_begin() const { + return CGAL::filter_iterator(finite_cells_end(),Exterior_simplex_test(this),finite_cells_begin()); + } + Alpha_shape_cells_iterator alpha_shape_cells_end() const { + return CGAL::filter_iterator(finite_cells_end(),Exterior_simplex_test(this)); + } + //--------------------------------------------------------------------- + // To extract simplices given a classification type + template + OutputIterator get_alpha_shape_cells(OutputIterator it, + Classification_type type) const + { + Finite_cells_iterator cit = finite_cells_begin(); + for( ; cit != finite_cells_end() ; ++cit){ + if (classify(cit) == type) *it++ = Cell_handle(cit); + } + return it; + } + + template + OutputIterator get_alpha_shape_facets(OutputIterator it, + Classification_type type) const + { + Finite_facets_iterator fit = finite_facets_begin(); + for( ; fit != finite_facets_end() ; ++fit){ + if (classify(*fit) == type) *it++ = *fit; + } + return it; + } + + template + OutputIterator get_alpha_shape_edges(OutputIterator it, + Classification_type type) const + { + Finite_edges_iterator eit = finite_edges_begin(); + for( ; eit != finite_edges_end() ; ++eit){ + if (classify(*eit) == type) *it++ = *eit; + } + return it; + } + + template + OutputIterator get_alpha_shape_vertices(OutputIterator it, + Classification_type type) const + { + Finite_vertices_iterator vit = finite_vertices_begin(); + for( ; vit != finite_vertices_end() ; ++vit){ + if (classify(vit) == type) *it++ = Vertex_handle(vit); + } + return it; + } + +}; + + +template < class Dt > +const typename Fixed_alpha_shape_3
::Classification_type Fixed_alpha_shape_3
::EXTERIOR; +template < class Dt > +const typename Fixed_alpha_shape_3
::Classification_type Fixed_alpha_shape_3
::REGULAR; +template < class Dt > +const typename Fixed_alpha_shape_3
::Classification_type Fixed_alpha_shape_3
::INTERIOR; +template < class Dt > +const typename Fixed_alpha_shape_3
::Classification_type Fixed_alpha_shape_3
::SINGULAR; + +//--------------------------------------------------------------------- +//--------------------- MEMBER FUNCTIONS------------------------------- +//--------------------------------------------------------------------- + + +//--------------------- INITIALIZATION OF PRIVATE MEMBERS ------------- + +template +void Fixed_alpha_shape_3
::set_cell_status(Cell_handle c){ + Classification_type status=is_infinite(c) ? EXTERIOR:( is_gabriel_simplex_in_alpha_complex(c) ? INTERIOR : EXTERIOR ); + c->set_classification_type(status); +} + +template +void +Fixed_alpha_shape_3
::initialize_status_of_cells() +{ + Finite_cells_iterator cell_it, done = finite_cells_end(); + for( cell_it = finite_cells_begin(); cell_it != done; ++cell_it) { + set_cell_status(cell_it); + } +} + + +//--------------------------------------------------------------------- + +template < class Dt > +void +Fixed_alpha_shape_3
:: +set_facet_classification_type( const Facet& f) { + Cell_handle pCell = f.first; + int i = f.second; + Cell_handle pNeighbor = pCell->neighbor(i); + int iNeigh = pNeighbor->index(pCell); + + unsigned nb_interior_cells=0; + + if(!is_infinite(pCell)){ + if (pCell->get_classification_type()==INTERIOR) + ++nb_interior_cells; + } + + if(!is_infinite(pNeighbor)){ + if (pNeighbor->get_classification_type()==INTERIOR) + ++nb_interior_cells; + } + + Classification_type status=EXTERIOR; + switch (nb_interior_cells){ + case 2: + status=INTERIOR; + break; + case 1: + status=REGULAR; + break; + default: + { + if ( is_Gabriel(f) ){ + if ( is_gabriel_simplex_in_alpha_complex(f) ) status=SINGULAR; + } + } + } + pCell->set_facet_classification_type(i,status); + pNeighbor->set_facet_classification_type(iNeigh,status); +} + + +template +void +Fixed_alpha_shape_3
::initialize_status_of_facets() +{ + for(Finite_facets_iterator fit = finite_facets_begin(); + fit != finite_facets_end(); ++fit) + set_facet_classification_type(*fit); +} + + + +template < class Dt > +typename Fixed_alpha_shape_3
::Classification_type +Fixed_alpha_shape_3
:: +compute_edge_status( const Cell_handle& c, int i, int j) const +{ + Facet_circulator fcirc, done; + fcirc = incident_facets(c,i,j); + done = fcirc; + + bool is_regular=false; + bool is_interior=true; + do{ + if (!is_infinite(*fcirc)){ + Classification_type status=(*fcirc).first->get_facet_classification_type((*fcirc).second); + if (status!=INTERIOR) is_interior=false; + if (status!=EXTERIOR) + is_regular=true; + else + if (is_regular) + break; + } + }while(++fcirc!=done); + if (is_interior) return INTERIOR; + if (is_regular) return REGULAR; + + if ( is_Gabriel(c,i,j) ){ + if ( is_gabriel_simplex_in_alpha_complex(c,i,j) ) return SINGULAR; + } + return EXTERIOR; +} + +template +void +Fixed_alpha_shape_3
::initialize_status_of_edges() +{ + for (Finite_edges_iterator eit = finite_edges_begin(); + eit != finite_edges_end(); ++eit) + { + Classification_type status=compute_edge_status(eit->first, eit->second, eit->third); + //cross links + Vertex_handle_pair vhp = make_vertex_handle_pair( *eit ); + edge_status_map.insert(std::make_pair(vhp, status)); + } +} + + +//this function is only to use for update (removal/update) +template +void +Fixed_alpha_shape_3
::set_vertex_status(Vertex_handle v){ + std::list incidentv; + finite_adjacent_vertices(v,back_inserter(incidentv)); + + bool is_interior=true; + bool is_regular=false; + typename std::list::iterator vvit=incidentv.begin(); + for( ; vvit != incidentv.end(); ++vvit) { + Vertex_handle_pair vhp = make_vertex_handle_pair( *vvit, v); + Classification_type status=edge_status_map[vhp]; + if (status!=INTERIOR) is_interior=false; + if (!is_interior && status!=EXTERIOR){ + is_regular=true; + break; + } + } + + Classification_type status=EXTERIOR; + if (is_interior) + status=v->is_on_chull() ? REGULAR : INTERIOR; + else{ + if (is_regular) + status=REGULAR; + else{ + if ( is_vertex_Gabriel(v,Weighted_tag()) ){ + if ( is_gabriel_simplex_in_alpha_complex(v) ) status=SINGULAR; + } + } + } + v->set_classification_type(status); +} + +template +void +Fixed_alpha_shape_3
::update_vertex_status(Vertex_handle v,Classification_type edge_status){ + Classification_type status=v->get_classification_type(); + switch(status){ + case SINGULAR: + switch(edge_status){ + case INTERIOR: + status=INTERIOR; + break; + case EXTERIOR: + status=EXTERIOR; + break; + case REGULAR: + case SINGULAR: + status=REGULAR; + } + break; + case INTERIOR: + switch(edge_status){ + case INTERIOR: + break; + case EXTERIOR: + case REGULAR: + case SINGULAR: + status=REGULAR; + } + break; + case EXTERIOR: + switch(edge_status){ + case EXTERIOR: + break; + case INTERIOR: + case REGULAR: + case SINGULAR: + status=REGULAR; + } + break; + case REGULAR: + break; + } + v->set_classification_type(status); +} + +template +void +Fixed_alpha_shape_3
::finalize_status_of_vertex(Vertex_handle v) +{ + Classification_type status=v->get_classification_type(); + if (v->is_on_chull() && status==INTERIOR){ + v->set_classification_type(REGULAR); + return; + } + if (status==INTERIOR || status==REGULAR) + return; + + //when dimension is 3 any vertex has at least one incident edge, + // thus can't be SINGULAR again (because of update_vertex_status behavior) + CGAL_assertion(v->get_classification_type()==EXTERIOR); + + if ( is_vertex_Gabriel(v,Weighted_tag()) && is_gabriel_simplex_in_alpha_complex(v) ) + v->set_classification_type(SINGULAR); +} + +template +void +Fixed_alpha_shape_3
::initialize_status_of_vertices() +{ + #if 1 //approach avoiding extensive use of the map on 3hfli we move from 0.110983 to 0.082987 + for( Finite_vertices_iterator vit = finite_vertices_begin(); vit != finite_vertices_end(); ++vit) + vit->set_classification_type(SINGULAR); + for (typename Edge_status_map::const_iterator eit=edge_status_map.begin();eit!=edge_status_map.end();++eit){ + Classification_type edge_status=eit->second; + Vertex_handle_pair vhp=eit->first; + update_vertex_status(vhp.first,edge_status); + update_vertex_status(vhp.second,edge_status); + } + for( Finite_vertices_iterator vit = finite_vertices_begin(); vit != finite_vertices_end(); ++vit) + finalize_status_of_vertex(vit); + #else + //This method is slower because it always makes queries in the edge classification map + for( Finite_vertices_iterator vit = finite_vertices_begin(); + vit != finite_vertices_end(); ++vit) + set_vertex_status(vit); + #endif +} + +//--------------------------------------------------------------------- + +template +std::ostream& operator<<(std::ostream& os, const Fixed_alpha_shape_3
& A) + // Inserts the alpha shape into the stream `os' as an indexed face set. + // Precondition: The insert operator must be defined for `Point' +{ + typedef Fixed_alpha_shape_3
AS; + typedef typename AS::Vertex_handle Vertex_handle; + typedef typename AS::Cell_handle Cell_handle; + typedef typename AS::Alpha_shape_vertices_iterator + Alpha_shape_vertices_iterator; + typedef typename AS::Alpha_shape_facets_iterator + Alpha_shape_facets_iterator; + + Unique_hash_map< Vertex_handle, int > V; + int number_of_vertices = 0; + + Alpha_shape_vertices_iterator vit; + for( vit = A.alpha_shape_vertices_begin(); + vit != A.alpha_shape_vertices_end(); + ++vit) { + V[*vit] = number_of_vertices++; + os << (*vit)->point() << std::endl; + } + + Cell_handle c; + int i; + Alpha_shape_facets_iterator fit; + for( fit = A.alpha_shape_facets_begin(); + fit != A.alpha_shape_facets_end(); + ++fit) { + c = fit->first; + i = fit->second; + // the following ensures that regular facets are output + // in ccw order + if (A.classify(*fit) == AS::REGULAR && (A.classify(c) == AS::INTERIOR)){ + c = c->neighbor(i); + i = c->index(fit->first); + } + int i0 = Triangulation_utils_3::vertex_triple_index(i,0); + int i1 = Triangulation_utils_3::vertex_triple_index(i,1); + int i2 = Triangulation_utils_3::vertex_triple_index(i,2); + os << V[c->vertex(i0)] << ' ' + << V[c->vertex(i1)] << ' ' + << V[c->vertex(i2)] << std::endl; + } + return os; +} + +} //namespace CGAL + +#ifdef CGAL_USE_GEOMVIEW +#include +#endif + +#endif //CGAL_FIXED_ALPHA_SHAPE_3_H diff --git a/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_cell_base_3.h b/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_cell_base_3.h new file mode 100644 index 00000000000..ad93c065aaf --- /dev/null +++ b/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_cell_base_3.h @@ -0,0 +1,76 @@ +// Copyright (c) 2009 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you may redistribute it under +// the terms of the Q Public License version 1.0. +// See the file LICENSE.QPL distributed with CGAL. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// +// +// Author(s) : Sebastien Loriot +// + +#ifndef CGAL_FIXED_ALPHA_SHAPE_CELL_BASE_3_H +#define CGAL_FIXED_ALPHA_SHAPE_CELL_BASE_3_H + +#include +#include +#include +#include + +namespace CGAL { + +template < class Gt, class Cb = Triangulation_cell_base_3 > +class Fixed_alpha_shape_cell_base_3 + : public Cb +{ +public: + typedef typename Cb::Vertex_handle Vertex_handle; + typedef typename Cb::Cell_handle Cell_handle; + + template < typename TDS2 > + struct Rebind_TDS { + typedef typename Cb::template Rebind_TDS::Other Cb2; + typedef Fixed_alpha_shape_cell_base_3 Other; + }; + + +private: + typedef internal::Classification_type Classification_type; + + Classification_type facet_status[4]; + Classification_type status_; + +public: + + Fixed_alpha_shape_cell_base_3() + : Cb() {} + + Fixed_alpha_shape_cell_base_3(Vertex_handle v0, Vertex_handle v1, + Vertex_handle v2, Vertex_handle v3) + : Cb(v0, v1, v2, v3) {} + + Fixed_alpha_shape_cell_base_3(Vertex_handle v0, Vertex_handle v1, + Vertex_handle v2, Vertex_handle v3, + Cell_handle n0, Cell_handle n1, + Cell_handle n2, Cell_handle n3) + : Cb(v0, v1, v2, v3, n0, n1, n2, n3) {} + + + Classification_type get_facet_classification_type(int i) const {return facet_status[i];} + void set_facet_classification_type(int i, Classification_type status) { facet_status[i]=status; } + Classification_type get_classification_type() { return status_;} + void set_classification_type(Classification_type status) {status_=status;} +}; + +} //namespace CGAL + +#endif // CGAL_FIXED_ALPHA_SHAPE_CELL_BASE_3_H diff --git a/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_vertex_base_3.h b/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_vertex_base_3.h new file mode 100644 index 00000000000..1d90fbd1a65 --- /dev/null +++ b/Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_vertex_base_3.h @@ -0,0 +1,75 @@ +// Copyright (c) 2009 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you may redistribute it under +// the terms of the Q Public License version 1.0. +// See the file LICENSE.QPL distributed with CGAL. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// +// +// Author(s) : Sebastien Loriot +// + +#ifndef CGAL_FIXED_ALPHA_SHAPE_VERTEX_BASE_3_H +#define CGAL_FIXED_ALPHA_SHAPE_VERTEX_BASE_3_H + +#include +#include +#include +#include + +namespace CGAL { + +template > +class Fixed_alpha_shape_vertex_base_3 + : public Vb +{ +public: + + typedef typename Vb::Cell_handle Cell_handle; + + template < typename TDS2 > + struct Rebind_TDS { + typedef typename Vb::template Rebind_TDS::Other Vb2; + typedef Fixed_alpha_shape_vertex_base_3 Other; + }; + + typedef typename Gt::Point_3 Point; + + +private: + typedef internal::Classification_type Classification_type; + Classification_type status_; + + bool is_on_chull_; + +public: + + Fixed_alpha_shape_vertex_base_3() + : Vb(),is_on_chull_(false) {} + + Fixed_alpha_shape_vertex_base_3(const Point& p) + : Vb(p),is_on_chull_(false) {} + + Fixed_alpha_shape_vertex_base_3(const Point& p, Cell_handle c) + : Vb(p, c),is_on_chull_(false) {} + + Classification_type get_classification_type() { return status_;} + void set_classification_type(Classification_type status) {status_=status;} + + void is_on_chull(bool b){is_on_chull_=b;}; + bool is_on_chull(){return is_on_chull_;} + +}; + +} //namespace CGAL + +#endif // CGAL_FIXED_ALPHA_SHAPE_VERTEX_BASE_3_H diff --git a/Alpha_shapes_3/include/CGAL/Weighted_alpha_shape_euclidean_traits_3.h b/Alpha_shapes_3/include/CGAL/Weighted_alpha_shape_euclidean_traits_3.h index 1afa7bd771e..fb3bfbb3fd2 100644 --- a/Alpha_shapes_3/include/CGAL/Weighted_alpha_shape_euclidean_traits_3.h +++ b/Alpha_shapes_3/include/CGAL/Weighted_alpha_shape_euclidean_traits_3.h @@ -28,14 +28,15 @@ namespace CGAL { //------------------ Traits class ------------------------------------- -#ifndef CGAL_NO_DEPRECATED_CODE +#ifdef CGAL_NO_DEPRECATED_CODE +#error The class Weighted_alpha_shape_euclidean_traits_3 is deprecated in favor of Regular_triangulation_euclidean_traits_3. +#endif template class Weighted_alpha_shape_euclidean_traits_3 : public Regular_triangulation_euclidean_traits_3 {}; - -#endif //CGAL_NO_DEPRECATED_CODE + } //namespace CGAL diff --git a/Alpha_shapes_3/include/CGAL/internal/Classification_type.h b/Alpha_shapes_3/include/CGAL/internal/Classification_type.h new file mode 100644 index 00000000000..32a8e6a33d2 --- /dev/null +++ b/Alpha_shapes_3/include/CGAL/internal/Classification_type.h @@ -0,0 +1,9 @@ +#ifndef CGAL_INTERNAL_CLASSIFICATION_TYPE_H +#define CGAL_INTERNAL_CLASSIFICATION_TYPE_H + +namespace CGAL{ + namespace internal{ + enum Classification_type {EXTERIOR,SINGULAR,REGULAR,INTERIOR}; + } +} +#endif //CGAL_INTERNAL_CLASSIFICATION_TYPE_H diff --git a/Alpha_shapes_3/test/Alpha_shapes_3/Filtered_weighted_alpha_shape_euclidean_traits_3.h b/Alpha_shapes_3/test/Alpha_shapes_3/Filtered_weighted_alpha_shape_euclidean_traits_3.h new file mode 100644 index 00000000000..5369beeca1f --- /dev/null +++ b/Alpha_shapes_3/test/Alpha_shapes_3/Filtered_weighted_alpha_shape_euclidean_traits_3.h @@ -0,0 +1,302 @@ +// Copyright (c) 2009 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you may redistribute it under +// the terms of the Q Public License version 1.0. +// See the file LICENSE.QPL distributed with CGAL. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL: svn+ssh:// $ +// $Id: $ +// +// +// Author(s) : Sébastien Loriot + +#ifndef CGAL_FILTERED_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H +#define CGAL_FILTERED_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H + +#include +#include + +namespace CGAL { + +namespace internal{ + +template