diff --git a/.gitattributes b/.gitattributes index 100bb5da927..0623d79ba39 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3188,6 +3188,7 @@ Scripts/developer_scripts/check_library_uses_no_qpl_files.exceptions -text Scripts/developer_scripts/check_macro_names -text Scripts/developer_scripts/check_no_CGAL_USE_without_includes_before -text Scripts/developer_scripts/check_svn_keywords -text +Scripts/developer_scripts/clean_up_branch.sh -text Scripts/developer_scripts/common_impl.rb -text Scripts/developer_scripts/create_assertions.sh eol=lf Scripts/developer_scripts/create_cgal_test -text diff --git a/Filtered_kernel/include/CGAL/Lazy.h b/Filtered_kernel/include/CGAL/Lazy.h index 75a895c098e..f59b27d316c 100644 --- a/Filtered_kernel/include/CGAL/Lazy.h +++ b/Filtered_kernel/include/CGAL/Lazy.h @@ -1393,9 +1393,9 @@ public: template < typename L1> result_type - operator()(const L1& l1, int i) const + operator()(const L1& l1, int) const { - return result_type(&l1,i); + return result_type(&l1,2); } }; @@ -1422,9 +1422,9 @@ public: template < typename L1> result_type - operator()(const L1& l1, int i) const + operator()(const L1& l1, int) const { - return result_type(&l1,i); + return result_type(&l1,3); } }; diff --git a/Generator/doc_tex/Generator/generators.tex b/Generator/doc_tex/Generator/generators.tex index a4708e7c486..b37c859088f 100644 --- a/Generator/doc_tex/Generator/generators.tex +++ b/Generator/doc_tex/Generator/generators.tex @@ -122,15 +122,15 @@ for the example output. \end{ccTexOnly} \begin{ccHtmlOnly} - -
- Figure: - Output of example program for point generators. - - - Point Generator Example Output -
+
+ + + + + + + +
Point Generator Example Output
Figure: Output of example program for point generators.
\end{ccHtmlOnly} \section{Example Generating Grid Points} @@ -145,16 +145,16 @@ for the example output. \ccIncludeExampleCode{Generator/random_grid.cpp} \begin{ccHtmlOnly} -
-
- Figure: - Output of example program for point generators working - on integer points. - - - Integer Point Generator Example Output -
+
+ + + + + + + +
Integer Point Generator Example Output
Figure: Output of example program for point generators working + on integer points.
\end{ccHtmlOnly}% @@ -200,15 +200,15 @@ output. \ccIncludeExampleCode{Generator/random_segments1.cpp} \begin{ccHtmlOnly} -
-
- Figure: - Output of example program for the generic segment generator. - - - Segment Generator Example Output -
+
+ + + + + + + +
Segment Generator Example Output
Figure: Output of example program for the generic segment generator.
\end{ccHtmlOnly} The second example generates a regular structure of 100 segments; see @@ -225,16 +225,17 @@ used. \ccIncludeExampleCode{Generator/random_segments2.cpp} \begin{ccHtmlOnly} -
- + +
- Figure: + + + + + + +
Segment Generator Example Output 2
Figure: Output of example program for the generic segment generator using - pre-computed point locations. - - - Segment Generator Example Output 2 -
+ pre-computed point locations.
\end{ccHtmlOnly} \lcTex{\ccIndexSubitemEnd[c]{generator}{segment}} diff --git a/Generator/doc_tex/Generator/hypergrid.gif b/Generator/doc_tex/Generator/hypergrid.gif index d703e61dce8..e4ff3bbaff7 100644 Binary files a/Generator/doc_tex/Generator/hypergrid.gif and b/Generator/doc_tex/Generator/hypergrid.gif differ diff --git a/Installation/config/testfiles/CGAL_CFG_NO_CPP0X_STATIC_ASSERT.cpp b/Installation/config/testfiles/CGAL_CFG_NO_CPP0X_STATIC_ASSERT.cpp index 0a0e1d1a352..9fe6379dd13 100644 --- a/Installation/config/testfiles/CGAL_CFG_NO_CPP0X_STATIC_ASSERT.cpp +++ b/Installation/config/testfiles/CGAL_CFG_NO_CPP0X_STATIC_ASSERT.cpp @@ -18,7 +18,7 @@ // Author(s) : Marc Glisse //| If a compiler does not support static_assert (from C++0x) -//| CGAL_CFG_NO_STATIC_ASSERT is set. +//| CGAL_CFG_NO_CPP0X_STATIC_ASSERT is set. int main(){ static_assert(true,"Everything is fine"); diff --git a/Installation/include/CGAL/internal/gcc_cpp0x.h b/Installation/include/CGAL/internal/gcc_cpp0x.h index 76db7a38313..5a5e0ccade6 100644 --- a/Installation/include/CGAL/internal/gcc_cpp0x.h +++ b/Installation/include/CGAL/internal/gcc_cpp0x.h @@ -35,6 +35,7 @@ #undef CGAL_CFG_NO_CPP0X_ISFINITE #undef CGAL_CFG_NO_CPP0X_LONG_LONG #undef CGAL_CFG_NO_CPP0X_RVALUE_REFERENCE +#undef CGAL_CFG_NO_CPP0X_STATIC_ASSERT #undef CGAL_CFG_NO_CPP0X_TUPLE #undef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES diff --git a/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex b/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex index d3ef3720711..3c31c52ac68 100644 --- a/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex +++ b/Kernel_23/doc_tex/Kernel_23_ref/intersection.tex @@ -458,6 +458,7 @@ type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\ +
Point_3
Segment_3
Triangle_3
std::vector < Point_3 >
diff --git a/Mesh_3/demo/Mesh_3/Io_implicit_function_plugin.cpp b/Mesh_3/demo/Mesh_3/Io_implicit_function_plugin.cpp index 2651d825754..7f4d381e142 100644 --- a/Mesh_3/demo/Mesh_3/Io_implicit_function_plugin.cpp +++ b/Mesh_3/demo/Mesh_3/Io_implicit_function_plugin.cpp @@ -164,7 +164,14 @@ Io_implicit_function_plugin:: load_function_plugins() { QDir pluginsDir(qApp->applicationDirPath()); - if ( !pluginsDir.cd("implicit_functions") ) { return; } + QString dirname = pluginsDir.dirName(); + if ( !pluginsDir.cd("implicit_functions") ) { + // In that case, dirname may be "Debug" or "Release" and one has to + // search in ../implicit_functions/Debug or + // ../implicit_functions/Release + QString newDir = QString("../implicit_functions/") + dirname; + if( !pluginsDir.cd(newDir) ) return; + } Q_FOREACH (QString fileName, pluginsDir.entryList(QDir::Files)) { diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h b/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h index c43f3db6768..5cdc8062033 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h @@ -112,6 +112,11 @@ public: /// Removes facet \c facet from 2D complex void remove_from_complex(const Facet& facet); + /// Removes facet(\c cell, \c i) from 2D complex + void remove_from_complex(const Cell_handle& c, const int i) { + remove_from_complex(Facet(c, i)); + } + /// Sets surface index of facet \c facet to \c index void set_surface_patch_index(const Facet& f, const Surface_patch_index& index) { @@ -294,19 +299,20 @@ private: class Facet_iterator_not_in_complex { - const Self& c3t3_; - const Surface_patch_index index_; + const Self* c3t3_; + Surface_patch_index index_; //need by SWIG: should be const Surface_patch_index public: + Facet_iterator_not_in_complex(){} //need by SWIG Facet_iterator_not_in_complex(const Self& c3t3, const Surface_patch_index& index = Surface_patch_index()) - : c3t3_(c3t3) + : c3t3_(&c3t3) , index_(index) { } template bool operator()(Iterator it) const { - if ( index_ == Surface_patch_index() ) { return ! c3t3_.is_in_complex(*it); } - else { return c3t3_.surface_patch_index(*it) != index_; } + if ( index_ == Surface_patch_index() ) { return ! c3t3_->is_in_complex(*it); } + else { return c3t3_->surface_patch_index(*it) != index_; } } }; @@ -317,8 +323,9 @@ private: class Cell_not_in_complex { const Self* r_self_; - Subdomain_index index_; + Subdomain_index index_;//needed by SWIG, should be const Subdomain_index public: + Cell_not_in_complex(){}//needed by SWIG Cell_not_in_complex(const Self& self, const Subdomain_index& index = Subdomain_index()) : r_self_(&self) @@ -388,7 +395,7 @@ public: Self operator++(int) { Self tmp(*this); ++(*this); return tmp; } Self operator--(int) { Self tmp(*this); --(*this); return tmp; } - operator Cell_handle() { return Cell_handle(this->base()); } + operator Cell_handle() const { return Cell_handle(this->base()); } }; // end class Cells_in_complex_iterator @@ -423,7 +430,7 @@ public: typedef Surface_patch_index Surface_index; void set_surface_index(const Facet& f, const Surface_index& index) - { set_surface_patch_index(f.first, index); } + { set_surface_patch_index(f, index); } void set_surface_index(const Cell_handle& c, const int i, const Surface_index& index) { set_surface_patch_index(c,i,index); } diff --git a/Mesh_3/test/Mesh_3/test_c3t3.cpp b/Mesh_3/test/Mesh_3/test_c3t3.cpp index cec0c72e963..c2f37f463c9 100644 --- a/Mesh_3/test/Mesh_3/test_c3t3.cpp +++ b/Mesh_3/test/Mesh_3/test_c3t3.cpp @@ -301,11 +301,19 @@ struct Tester c3t3.set_subdomain_index(ch, subdomain_index_bis); c3t3.set_surface_patch_index(f2, surface_patch_index_bis); +#ifndef CGAL_MESH_3_NO_DEPRECATED_SURFACE_INDEX + c3t3.set_surface_index(f2, surface_patch_index_bis); + c3t3.set_surface_index(f2.first, f2.second, surface_patch_index_bis); +#endif c3t3.set_dimension(vh, 1); c3t3.set_index(vh, vertex_index); assert(c3t3.subdomain_index(ch) == subdomain_index_bis); assert(c3t3.surface_patch_index(f2) == surface_patch_index_bis); +#ifndef CGAL_MESH_3_NO_DEPRECATED_SURFACE_INDEX + assert(c3t3.surface_index(f2) == surface_patch_index_bis); + assert(c3t3.surface_index(f2.first, f2.second) == surface_patch_index_bis); +#endif assert(c3t3.in_dimension(vh) == 1); assert(c3t3.index(vh) == vertex_index); diff --git a/NewKernel_d/test/NewKernel_d/test.cpp b/NewKernel_d/test/NewKernel_d/test.cpp index 9d131a9e8f6..5de518a65cd 100644 --- a/NewKernel_d/test/NewKernel_d/test.cpp +++ b/NewKernel_d/test/NewKernel_d/test.cpp @@ -15,7 +15,7 @@ typedef CGAL::Cartesian_base_d > KE; typedef K0 K2; #elif 0 typedef CGAL::Cartesian_filter_NT K2; -#elif 0 +#elif 1 typedef CGAL::Cartesian_filter_K K2; #elif 1 struct K2: CGAL::Lazy_cartesian,K2>{}; diff --git a/Point_set_processing_3/include/CGAL/compute_average_spacing.h b/Point_set_processing_3/include/CGAL/compute_average_spacing.h index a364e0decef..02808557dfd 100644 --- a/Point_set_processing_3/include/CGAL/compute_average_spacing.h +++ b/Point_set_processing_3/include/CGAL/compute_average_spacing.h @@ -136,12 +136,10 @@ compute_average_spacing( // precondition: at least 2 nearest neighbors CGAL_point_set_processing_precondition(k >= 2); - InputIterator it; - // Instanciate a KD-tree search. // Note: We have to convert each input iterator to Point_3. std::vector kd_tree_points; - for(it = first; it != beyond; it++) + for(InputIterator it = first; it != beyond; it++) { Point point = get(point_pmap, it); kd_tree_points.push_back(point); @@ -152,7 +150,7 @@ compute_average_spacing( // vectors (already normalized) FT sum_spacings = (FT)0.0; unsigned int nb_points = 0; - for(it = first; it != beyond; it++) + for(InputIterator it = first; it != beyond; it++) { sum_spacings += internal::compute_average_spacing(get(point_pmap,it),tree,k); nb_points++; diff --git a/STL_Extension/include/CGAL/is_iterator.h b/STL_Extension/include/CGAL/is_iterator.h index 920805ee06e..a094078ed8a 100644 --- a/STL_Extension/include/CGAL/is_iterator.h +++ b/STL_Extension/include/CGAL/is_iterator.h @@ -41,13 +41,18 @@ template struct is_iterator_type_ : //boost::is_base_of::iterator_category> boost::is_convertible::iterator_category,U> {}; + +template struct decay_array { typedef T type; }; +template struct decay_array { typedef T* type; }; +template struct decay_array { typedef T* type; }; } +// NOTE: we don't want the real std::decay or functions are included template struct is_iterator : - internal::is_iterator_::type> {}; + internal::is_iterator_::type>::type>::type> {}; template struct is_iterator_type : - internal::is_iterator_type_::type,Tag> {}; + internal::is_iterator_type_::type>::type>::type,Tag> {}; } diff --git a/Scripts/developer_scripts/clean_up_branch.sh b/Scripts/developer_scripts/clean_up_branch.sh new file mode 100644 index 00000000000..e1a695993a2 --- /dev/null +++ b/Scripts/developer_scripts/clean_up_branch.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# +# usage: bash clean_up_branch.sh directory [rm] +# +# lists all files that should be removed from a branch. +# directory is the path to the repository. +# If additional rm option is passed, files will be deleted. +# + +REPO_DIR=. +DELETE=0 + +if [ $# -gt 0 ] ; then + REPO_DIR=$1 +fi + +if [ ! -e $REPO_DIR/.svn/entries ]; then + echo "$REPO_DIR is not a working copy" + exit 1 +fi; + +if [ $# -gt 1 ]; then + if [ "$2" == "rm" ]; then + DELETE=1 + else + echo "Unknown option $2" + exit 1 + fi +fi; + +echo Cleaning $REPO_DIR + +#define regular expression to match generated files +REGEXP='ProgramOutput\.|CMakeFiles|CMakeLists.txt|\.moc$|CMakeCache\.txt|error\.txt|cmake_install\.cmake|Makefile|doc_html|doc_pdf|\.pdflg$|\.ilg$|\.cgallog$|\.blg$|\.bak$|\.hax$|\.aux$|\.maf$|\.hlg$|\.out$|demo.*\/qrc_.*\.cxx|demo.*\/ui_.*\.h' + + +INITIAL=`svn status --no-ignore $1| awk '{if ($1 =="?" || $1=="I" ) print $2 }'` + + +#first get executable files +EXECS='' +DIRS='' +KNOWN='' +OTHER='' + +for i in $INITIAL; do + if [ -x $REPO_DIR/$i -a ! -d $REPO_DIR/$i ]; then + EXECS="$EXECS $i" + elif [[ "$i" =~ $REGEXP ]]; then + KNOWN="$KNOWN $i" + else + OTHER="$OTHER $i" + fi; +done + +if [ "$EXECS" ]; then + echo "#Cleaning executables" + echo rm -rf $EXECS +fi + +if [ "$KNOWN" ]; then + echo "#Cleaning known generated files" + echo rm -rf $KNOWN +fi + +if [ "$OTHER" ]; then +echo "#No predefined behavior" +echo "# $OTHER" +fi + + +if [ $DELETE -eq 1 ]; then + if [ "$EXECS" -o "$KNOWN" ]; then + echo "Are you sure you want to execute the printed commands? [YES/NO]" + read ANSWER + if [ "$ANSWER" == "YES" ]; then + for i in $EXECS $KNOWN; do + rm -rf $REPO_DIR/$i + done + fi + else + echo "Nothing to do" + fi +fi + diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex index c61e5420daf..251b7d09a80 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex @@ -4,8 +4,8 @@ % | 07.09.2007 Pierre Alliez, Laurent Saboret, Gael Guennebaud % | Package: Surface_reconstruction_points_3 % | -\RCSdef{\RCSPoissonreconstructionfunctionRev}{$Id$} -\RCSdefDate{\RCSPoissonreconstructionfunctionDate}{$Date$} +%\RCSdef{\RCSPoissonreconstructionfunctionRev}{$Id$} +%\RCSdefDate{\RCSPoissonreconstructionfunctionDate}{$Date$} % | \ccRefPageBegin %%RefPage: end of header, begin of main body @@ -143,7 +143,9 @@ The function \ccc{compute_implicit_function}() must be called after the insertio \ccGlue \ccMethod{FT operator()(const Point& p) const;} { -\ccc{ImplicitFunction} interface: evaluates the implicit function at a given 3D query point. +\ccc{ImplicitFunction} interface: evaluates the implicit function at a +given 3D query point. The function \ccc{compute_implicit_function} must be +called before the first call to \ccc{operator()}. } \ccGlue \ccMethod{Point get_inner_point() const;} @@ -156,7 +158,7 @@ Returns a point located inside the inferred surface. \ccExample -See \ccc{poisson_reconstruction_example.cpp}. +See \ccReferToExampleCode{Surface_reconstruction_points_3/poisson_reconstruction_example.cpp}. \end{ccRefClass} diff --git a/Triangulation_3/doc_tex/Triangulation_3/Triang3.tex b/Triangulation_3/doc_tex/Triangulation_3/Triang3.tex index 23b5fe82f1d..6f65dff391a 100644 --- a/Triangulation_3/doc_tex/Triangulation_3/Triang3.tex +++ b/Triangulation_3/doc_tex/Triangulation_3/Triang3.tex @@ -841,7 +841,11 @@ In 2009, Sylvain Pion simplified the design of the Delaunay hierarchy so that it became the simple \ccc{Fast_location} policy in release~3.6. In 2010, Pedro de Castro and Olivier Devillers added the point -displacement. +displacement in release 3.7. + +In 2011, Pedro de Castro and Olivier Devillers implemented in release +3.8 the +structural filtering method, improving the efficiency of point location. A new demo of this package was introduced in CGAL 3.8, coded by Fei (Sophie) Che, who was co-mentored by Manuel Caroli and Monique