mirror of https://github.com/CGAL/cgal
Merge branch 'master' into Frechet-dev
This commit is contained in:
commit
baec5b0168
|
|
@ -118,7 +118,7 @@ public:
|
|||
void cleanup_cache() const;
|
||||
|
||||
/*!
|
||||
Returns a pointer to the used algerbaic kernel object.
|
||||
Returns a pointer to the used algebraic kernel object.
|
||||
*/
|
||||
const Algebraic_kernel_d_1* algebraic_kernel_d_1() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -1237,7 +1237,7 @@ public:
|
|||
//! \brief checks whether curve has only finitely many self-intersection
|
||||
//! points, i.e., it has no self-overlapped continuous parts
|
||||
//!
|
||||
//! for algerbaic curves this means that supporting polynomial is
|
||||
//! for algebraic curves this means that supporting polynomial is
|
||||
//! square-free
|
||||
struct Has_finite_number_of_self_intersections_2 :
|
||||
public CGAL::cpp98::unary_function< Polynomial_2, bool > {
|
||||
|
|
@ -1252,7 +1252,7 @@ public:
|
|||
//! \brief checks whether a curve pair has finitely many intersections,
|
||||
//! in other words, whether two curves have no continuous common part
|
||||
//!
|
||||
//! in case of algerbaic curves: checks whether supporting polynomials are
|
||||
//! in case of algebraic curves: checks whether supporting polynomials are
|
||||
//! coprime
|
||||
struct Has_finite_number_of_intersections_2 :
|
||||
public CGAL::cpp98::binary_function< Curve_analysis_2, Curve_analysis_2, bool > {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ namespace CGAL {
|
|||
|
||||
namespace METIS {
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
|
||||
template<typename TriangleMesh, typename METIS_options, typename NamedParameters>
|
||||
void partition_dual_graph(const TriangleMesh& tm,
|
||||
int nparts,
|
||||
|
|
@ -128,6 +130,8 @@ void partition_dual_graph(const TriangleMesh& tm, int nparts,
|
|||
return partition_dual_graph(tm, nparts, &options, np);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/// \ingroup PkgBGLPartition
|
||||
///
|
||||
/// computes a partition of the input triangular mesh into `nparts` parts,
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ namespace CGAL {
|
|||
|
||||
namespace METIS {
|
||||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
|
||||
struct Output_vertex_partition_ids
|
||||
{
|
||||
template<typename TriangleMesh, typename Indices>
|
||||
|
|
@ -68,6 +70,8 @@ struct Output_face_partition_ids
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
template<typename TriangleMesh, typename METIS_options, typename NamedParameters>
|
||||
void partition_graph(const TriangleMesh& tm,
|
||||
int nparts,
|
||||
|
|
@ -161,6 +165,9 @@ void partition_graph(const TriangleMesh& tm, int nparts,
|
|||
return partition_graph(tm, nparts, &options, np);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/// \ingroup PkgBGLPartition
|
||||
///
|
||||
/// computes a partition of the input triangular mesh into `nparts` parts, based on the
|
||||
|
|
|
|||
|
|
@ -300,8 +300,8 @@ make_quad(const P& p0, const P& p1, const P& p2, const P& p3, Graph& g)
|
|||
* \cgalParamNEnd
|
||||
* \cgalNamedParamsEnd
|
||||
**/
|
||||
template<typename P,
|
||||
typename Graph,
|
||||
template<typename Graph,
|
||||
typename P,
|
||||
typename NamedParameters = parameters::Default_named_parameters>
|
||||
typename boost::graph_traits<Graph>::halfedge_descriptor
|
||||
make_hexahedron(const P& p0, const P& p1, const P& p2, const P& p3,
|
||||
|
|
|
|||
|
|
@ -214,11 +214,6 @@ public:
|
|||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
|
||||
explicit operator bool() const
|
||||
{
|
||||
return (! (this->base() == nullptr));
|
||||
}
|
||||
|
||||
bool operator==( const Self& i) const {
|
||||
CGAL_assertion( anchor == anchor);
|
||||
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
|
||||
|
|
@ -308,11 +303,6 @@ public:
|
|||
|
||||
#ifndef DOXYGEN_RUNNING
|
||||
|
||||
explicit operator bool() const
|
||||
{
|
||||
return (! (this->base() == nullptr));
|
||||
}
|
||||
|
||||
bool operator==( const Self& i) const {
|
||||
CGAL_assertion( anchor == anchor);
|
||||
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
|
||||
|
|
@ -400,11 +390,6 @@ public:
|
|||
pointer operator -> ( ) { return &pos; }
|
||||
const value_type* operator -> ( ) const { return &pos; }
|
||||
|
||||
explicit operator bool() const
|
||||
{
|
||||
return (! (this->base() == nullptr));
|
||||
}
|
||||
|
||||
bool operator==( const Self& i) const {
|
||||
CGAL_assertion( anchor == anchor);
|
||||
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
|
|
@ -33,14 +33,17 @@ This section describes a minimal example of a program that uses \cgal and Qt6 fo
|
|||
\skip cmake_minimum_required
|
||||
\until project
|
||||
|
||||
|
||||
\skip #CGAL_Qt6 is needed for the drawing.
|
||||
\until endif()
|
||||
\until find_package
|
||||
|
||||
|
||||
\skip #create the executable of the application
|
||||
\until "draw_surface_mesh.cpp"
|
||||
|
||||
|
||||
\skip if(CGAL_Qt6_FOUND)
|
||||
\until target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Qt6)
|
||||
\until target_link_libraries(draw_surface_mesh PUBLIC CGAL::CGAL_Basic_viewer)
|
||||
\skip endif
|
||||
\until #end of the file
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ FILTER_PATTERNS = *.txt=${CMAKE_BINARY_DIR}/pkglist_filter
|
|||
|
||||
HTML_EXTRA_FILES += ${CGAL_DOC_RESOURCE_DIR}/hacks.js \
|
||||
${CGAL_DOC_RESOURCE_DIR}/menu_version.js \
|
||||
${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css \
|
||||
${CMAKE_BINARY_DIR}/how_to_cite_cgal.bib \
|
||||
${CMAKE_BINARY_DIR}/how_to_cite.html \
|
||||
${CGAL_PACKAGE_DOC_DIR}/fig/g-196x196-doc.png
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ executables should be linked with the CMake imported target
|
|||
The \libpointmatcher web site is <A
|
||||
HREF="https://github.com/ethz-asl/libpointmatcher">`https://github.com/ethz-asl/libpointmatcher`</A>.
|
||||
\attention On Windows, we only support version 1.3.1 of PointMatcher with version 3.3.7 of Eigen, with some changes to the recipe at
|
||||
`https://github.com/ethz-asl/libpointmatcher/blob/master/doc/CompilationWindows.md`:`NABO_INCLUDE_DIR` becomes `libnabo_INCLUDE_DIRS`
|
||||
`https://github.com/ethz-asl/libpointmatcher/blob/master/doc/Compilation.md`:`NABO_INCLUDE_DIR` becomes `libnabo_INCLUDE_DIRS`
|
||||
and `NABO_LIBRARY` becomes `libnabo_LIBRARIES` in the "Build libpointmatcher" section.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2778,7 +2778,7 @@ author = "Pedro M.M. de Castro and Frederic Cazals and Sebastien Loriot and Moni
|
|||
editor = "Jacob E. Goodman, J\'anos Pach and Emo Welzl",
|
||||
year = {2005},
|
||||
pages = {439-458},
|
||||
URL = {http://library.msri.org/books/Book52/files/23liu.pdf},
|
||||
URL = {http://library.slmath.org/books/Book52/files/23liu.pdf},
|
||||
publisher = {MSRI Publications}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16862,7 +16862,7 @@ Contains C code."
|
|||
, title = "A polyhedron representation for computer vision"
|
||||
, booktitle = "Proc. AFIPS Natl. Comput. Conf."
|
||||
, volume = 44
|
||||
, publisher = "AFIPS Press, Alrington, Va."
|
||||
, publisher = "AFIPS Press, Arlington, Va."
|
||||
, year = 1975
|
||||
, pages = "589--596"
|
||||
, update = "98.07 bibrelex"
|
||||
|
|
@ -116674,7 +116674,7 @@ dither and stipple patterns."
|
|||
|
||||
@article{p-axrac-44
|
||||
, author = "A. L. Patterson"
|
||||
, title = "Amibguities in the {X}-ray analysis of crystal structures"
|
||||
, title = "Ambiguities in the {X}-ray analysis of crystal structures"
|
||||
, journal = "Physical Review"
|
||||
, volume = 65
|
||||
, year = 1944
|
||||
|
|
|
|||
|
|
@ -486,6 +486,24 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
|
|||
|
||||
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are included after the standard style sheets
|
||||
# created by doxygen. Using this option one can overrule certain style aspects.
|
||||
# This is preferred over using HTML_STYLESHEET since it does not replace the
|
||||
# standard style sheet and is therefore more robust against future updates.
|
||||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css
|
||||
|
||||
# Doxygen stores a couple of settings persistently in the browser (via e.g.
|
||||
# cookies). By default these settings apply to all HTML pages generated by
|
||||
# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store
|
||||
|
|
|
|||
|
|
@ -26,8 +26,6 @@ $search
|
|||
$mathjax
|
||||
$darkmode
|
||||
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$extrastylesheet
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -43,8 +43,6 @@
|
|||
<script type="text/javascript" src="../Manual/search/search.js"></script>
|
||||
<!-- Manually done below. -->
|
||||
<link href="$relpath^../Manual/$stylesheet" rel="stylesheet" type="text/css" />
|
||||
<!-- This should probably be an extrastylesheet instead of hardcoded. -->
|
||||
<link href="$relpath$../Manual/cgal_stylesheet.css" rel="stylesheet" type="text/css" />
|
||||
$mathjax
|
||||
$darkmode
|
||||
<script src="$relpath^topics.js" type="text/javascript"></script>
|
||||
|
|
|
|||
|
|
@ -477,6 +477,24 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
|
|||
|
||||
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are included after the standard style sheets
|
||||
# created by doxygen. Using this option one can overrule certain style aspects.
|
||||
# This is preferred over using HTML_STYLESHEET since it does not replace the
|
||||
# standard style sheet and is therefore more robust against future updates.
|
||||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css
|
||||
|
||||
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
|
||||
# page will contain the date and time when the page was generated. Setting this
|
||||
# to YES can help to show when doxygen was last run and thus if the
|
||||
|
|
|
|||
|
|
@ -486,6 +486,24 @@ HTML_HEADER = ${CGAL_DOC_HEADER_PACKAGE}
|
|||
|
||||
HTML_FOOTER = ${CGAL_DOC_RESOURCE_DIR}/footer.html
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are included after the standard style sheets
|
||||
# created by doxygen. Using this option one can overrule certain style aspects.
|
||||
# This is preferred over using HTML_STYLESHEET since it does not replace the
|
||||
# standard style sheet and is therefore more robust against future updates.
|
||||
# Doxygen will copy the style sheet files to the output directory.
|
||||
# Note: The order of the extra style sheet files is of importance (e.g. the last
|
||||
# style sheet in the list overrules the setting of the previous ones in the
|
||||
# list).
|
||||
# Note: Since the styling of scrollbars can currently not be overruled in
|
||||
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
|
||||
# one or more extra stylesheets have been specified. So if scrollbar
|
||||
# customization is desired it has to be added explicitly. For an example see the
|
||||
# documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET = ${CGAL_DOC_RESOURCE_DIR}/cgal_stylesheet.css
|
||||
|
||||
# If you want full control over the layout of the generated HTML pages it might
|
||||
# be necessary to disable the index and replace it with your own. The
|
||||
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ public:
|
|||
// case, to find whether a 2d point lies below/above/on a line
|
||||
// this test is simply computing the sign of:
|
||||
// (1) [(y3 - y1)(z2 - z1) - (z3 - z1)(y2 - y1)] * sign(y3 - y1)
|
||||
// abd comparing to 0, where pi = (xi, yi, zi), and p2 is compared to the
|
||||
// and comparing it with 0, where pi = (xi, yi, zi), and p2 is compared to the
|
||||
// line formed by p1 and p3 (in the direction p1 -> p3)
|
||||
//
|
||||
// for general vertical plane, we change (x, y) coordinates to (v, w),
|
||||
|
|
|
|||
|
|
@ -236,7 +236,7 @@ public:
|
|||
void remove(Vertex_handle v);
|
||||
|
||||
/*!
|
||||
Removes the vertices in the iterator range `[firs, last)` from the triangulation.
|
||||
Removes the vertices in the iterator range `[first, last)` from the triangulation.
|
||||
\pre all vertices in `[first, last)` are vertices of the triangulation.
|
||||
*/
|
||||
template <class VertexRemoveIterator>
|
||||
|
|
|
|||
|
|
@ -17,12 +17,12 @@
|
|||
#define CGAL_VERSION_H
|
||||
|
||||
#ifndef SWIG
|
||||
#define CGAL_VERSION 6.0-beta1
|
||||
#define CGAL_VERSION 6.0-beta2
|
||||
#define CGAL_GIT_HASH abcdef
|
||||
#endif
|
||||
#define CGAL_VERSION_NR 1060000910
|
||||
#define CGAL_VERSION_NR 1060000920
|
||||
#define CGAL_SVN_REVISION 99999
|
||||
#define CGAL_RELEASE_DATE 20240601
|
||||
#define CGAL_RELEASE_DATE 20240701
|
||||
|
||||
#include <CGAL/version_macros.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ set(CGAL_MAJOR_VERSION 6)
|
|||
set(CGAL_MINOR_VERSION 0)
|
||||
set(CGAL_BUGFIX_VERSION 0)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CGALConfigBuildVersion.cmake)
|
||||
set(CGAL_VERSION_PUBLIC_RELEASE_VERSION "6.0-beta1")
|
||||
set(CGAL_VERSION_PUBLIC_RELEASE_VERSION "6.0-beta2")
|
||||
set(CGAL_VERSION_PUBLIC_RELEASE_NAME "CGAL-${CGAL_VERSION_PUBLIC_RELEASE_VERSION}")
|
||||
|
||||
if (CGAL_BUGFIX_VERSION AND CGAL_BUGFIX_VERSION GREATER 0)
|
||||
|
|
|
|||
|
|
@ -764,6 +764,32 @@ public:
|
|||
const K::Point_3& b,
|
||||
const K::Point_3& c,
|
||||
const K::FT& cosine);
|
||||
|
||||
/*!
|
||||
compares the angles \f$ \theta_1\f$ and \f$ \theta_2\f$, where
|
||||
\f$ \theta_1\f$ is the angle in \f$ [0, \pi]\f$ of the triangle
|
||||
\f$ (a1, b1, c1)\f$ at the vertex `b1`, and \f$ \theta_2\f$
|
||||
is the angle in \f$ [0, \pi]\f$ of the triangle \f$ (a2, b2, c2)\f$ at the vertex `b2`.
|
||||
\pre `a1!=b1 && c1!=b1 && a2!=b2 && c2!=b2`.
|
||||
*/
|
||||
Comparison_result operator()(const K::Point_3& a1,
|
||||
const K::Point_3& b1,
|
||||
const K::Point_3& c1,
|
||||
const K::Point_3& a2,
|
||||
const K::Point_3& b2,
|
||||
const K::Point_3& c2);
|
||||
|
||||
/*!
|
||||
compares the angles \f$ \theta_1\f$ and \f$ \theta_2\f$, where
|
||||
\f$ \theta_1\f$ is the angle in \f$ [0, \pi]\f$ between the vectors
|
||||
\f$ u1\f$ and \f$ v1\f$, and \f$ \theta_2\f$ is the angle in \f$ [0, \pi]\f$
|
||||
between the vectors \f$ u2\f$ and \f$ v2\f$.
|
||||
\pre none of the vectors have zero length.
|
||||
*/
|
||||
Comparison_result operator()(const K::Vector_3& u1,
|
||||
const K::Vector_3& v1,
|
||||
const K::Vector_3& u2,
|
||||
const K::Vector_3& v2);
|
||||
};
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -206,16 +206,15 @@ namespace CommonKernelFunctors {
|
|||
typedef typename K::Comparison_result result_type;
|
||||
|
||||
result_type
|
||||
operator()(const Point_3& a1, const Point_3& b1, const Point_3& c1,
|
||||
const Point_3& a2, const Point_3& b2, const Point_3& c2) const
|
||||
operator()(const Vector_3& ba1, const Vector_3& bc1,
|
||||
const Vector_3& ba2, const Vector_3& bc2) const
|
||||
{
|
||||
using FT = typename K::FT;
|
||||
const Vector_3 ba1 = a1 - b1;
|
||||
const Vector_3 bc1 = c1 - b1;
|
||||
const Vector_3 ba2 = a2 - b2;
|
||||
const Vector_3 bc2 = c2 - b2;
|
||||
const FT sc_prod_1 = ba1 * bc1;
|
||||
const FT sc_prod_2 = ba2 * bc2;
|
||||
typename K::Compute_scalar_product_3 scalar_product = K().compute_scalar_product_3_object();
|
||||
typename K::Compute_squared_length_3 sq_length = K().compute_squared_length_3_object();
|
||||
|
||||
const FT sc_prod_1 = scalar_product(ba1, bc1);
|
||||
const FT sc_prod_2 = scalar_product(ba2, bc2);
|
||||
|
||||
// Reminder: cos(angle) = scalar_product(ba, bc) / (length(ba)*length(bc))
|
||||
// cosine is decreasing on 0, pi
|
||||
// thus angle1 < angle2 is equivalent to cos(angle1) > cos(angle2)
|
||||
|
|
@ -223,26 +222,36 @@ namespace CommonKernelFunctors {
|
|||
if(sc_prod_2 >= 0) {
|
||||
// the two cosine are >= 0, we can compare the squares
|
||||
// (square(x) is increasing when x>=0
|
||||
return CGAL::compare(CGAL::square(sc_prod_2)*
|
||||
ba1.squared_length()*bc1.squared_length(),
|
||||
CGAL::square(sc_prod_1)*
|
||||
ba2.squared_length()*bc2.squared_length());
|
||||
return CGAL::compare(CGAL::square(sc_prod_2) * sq_length(ba1) * sq_length(bc1),
|
||||
CGAL::square(sc_prod_1) * sq_length(ba2) * sq_length(bc2));
|
||||
} else {
|
||||
return SMALLER;
|
||||
}
|
||||
} else {
|
||||
if(sc_prod_2 < 0) {
|
||||
// the two cosine are < 0, square(x) is decreasing when x<0
|
||||
return CGAL::compare(CGAL::square(sc_prod_1)*
|
||||
ba2.squared_length()*bc2.squared_length(),
|
||||
CGAL::square(sc_prod_2)*
|
||||
ba1.squared_length()*bc1.squared_length());
|
||||
return CGAL::compare(CGAL::square(sc_prod_1) * sq_length(ba2) * sq_length(bc2),
|
||||
CGAL::square(sc_prod_2) * sq_length(ba1) * sq_length(bc1));
|
||||
} else {
|
||||
return LARGER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result_type
|
||||
operator()(const Point_3& a1, const Point_3& b1, const Point_3& c1,
|
||||
const Point_3& a2, const Point_3& b2, const Point_3& c2) const
|
||||
{
|
||||
typename K::Construct_vector_3 vector = K().construct_vector_3_object();
|
||||
|
||||
const Vector_3 ba1 = vector(b1, a1);
|
||||
const Vector_3 bc1 = vector(b1, c1);
|
||||
const Vector_3 ba2 = vector(b2, a2);
|
||||
const Vector_3 bc2 = vector(b2, c2);
|
||||
|
||||
return this->operator()(ba1, bc1, ba2, bc2);
|
||||
}
|
||||
|
||||
result_type
|
||||
operator()(const Point_3& a, const Point_3& b, const Point_3& c,
|
||||
const FT& cosine) const
|
||||
|
|
|
|||
|
|
@ -318,6 +318,24 @@ compare_angle(const Point_3<K>& a, const Point_3<K>& b, const Point_3<K>& c,
|
|||
return internal::compare_angle(a, b, c, cosine, K());
|
||||
}
|
||||
|
||||
template < class K >
|
||||
inline
|
||||
typename K::Comparison_result
|
||||
compare_angle(const Point_3<K>& a1, const Point_3<K>& b1, const Point_3<K>& c1,
|
||||
const Point_3<K>& a2, const Point_3<K>& b2, const Point_3<K>& c2)
|
||||
{
|
||||
return internal::compare_angle(a1, b1, c1, a2, b2, c2, K());
|
||||
}
|
||||
|
||||
template < class K >
|
||||
inline
|
||||
typename K::Comparison_result
|
||||
compare_angle(const Vector_3<K>& u1, const Vector_3<K>& v1,
|
||||
const Vector_3<K>& u2, const Vector_3<K>& v2)
|
||||
{
|
||||
return internal::compare_angle(u1, v1, u2, v2, K());
|
||||
}
|
||||
|
||||
template < class K >
|
||||
inline
|
||||
typename K::Comparison_result
|
||||
|
|
|
|||
|
|
@ -333,6 +333,32 @@ compare_angle(const typename K::Point_3& a,
|
|||
return k.compare_angle_3_object()(a, b, c, cosine);
|
||||
}
|
||||
|
||||
template < class K >
|
||||
inline
|
||||
typename K::Comparison_result
|
||||
compare_angle(const typename K::Point_3& a1,
|
||||
const typename K::Point_3& b1,
|
||||
const typename K::Point_3& c1,
|
||||
const typename K::Point_3& a2,
|
||||
const typename K::Point_3& b2,
|
||||
const typename K::Point_3& c2,
|
||||
const K& k)
|
||||
{
|
||||
return k.compare_angle_3_object()(a1, b1, c1, a2, b2, c2);
|
||||
}
|
||||
|
||||
template < class K >
|
||||
inline
|
||||
typename K::Comparison_result
|
||||
compare_angle(const typename K::Vector_3& u1,
|
||||
const typename K::Vector_3& v1,
|
||||
const typename K::Vector_3& u2,
|
||||
const typename K::Vector_3& v2,
|
||||
const K& k)
|
||||
{
|
||||
return k.compare_angle_3_object()(u1, v1, u2, v2);
|
||||
}
|
||||
|
||||
template < class K >
|
||||
inline
|
||||
typename K::Comparison_result
|
||||
|
|
|
|||
|
|
@ -14,8 +14,10 @@ template <class R>
|
|||
bool
|
||||
_test_compare_angle_3(const R& rep)
|
||||
{
|
||||
typedef typename R::Point_3 Point_3;
|
||||
typedef typename R::FT FT;
|
||||
typedef typename R::Point_3 Point_3;
|
||||
typedef typename R::Vector_3 Vector_3;
|
||||
|
||||
typename R::Compare_angle_3 compare_angle
|
||||
= rep.compare_angle_3_object();
|
||||
|
||||
|
|
@ -33,6 +35,18 @@ _test_compare_angle_3(const R& rep)
|
|||
return false;
|
||||
if ( CGAL::compare(abs(theta1), abs(theta2)) != compare_angle(a, b, c, FT(std::cos(angle2))) )
|
||||
return false;
|
||||
|
||||
Point_3 d((int)(std::cos(angle2)*1000), (int)(std::sin(angle2)*1000), 0);
|
||||
if ( CGAL::compare(abs(theta1), abs(theta2)) != CGAL::compare_angle(a, b, c, a, b, d ) )
|
||||
return false;
|
||||
if ( CGAL::compare(abs(theta1), abs(theta2)) != compare_angle(a, b, c, a, b, d ) )
|
||||
return false;
|
||||
|
||||
Vector_3 u1(b, a), v1(b, c), v2(b, d);
|
||||
if ( CGAL::compare(abs(theta1), abs(theta2)) != CGAL::compare_angle(u1, v1, u1, v2) )
|
||||
return false;
|
||||
if ( CGAL::compare(abs(theta1), abs(theta2)) != compare_angle(u1, v1, u1, v2) )
|
||||
return false;
|
||||
} // end loop on theta2
|
||||
} // end loop and theta1
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,3 @@ PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - Kinetic Space Partition"
|
|||
EXTRACT_ALL = NO
|
||||
HIDE_UNDOC_CLASSES = YES
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
PREDEFINED += DOXYGEN_RUNNING
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
\cgalPkgShortInfoBegin
|
||||
\cgalPkgSince{6.0}
|
||||
\cgalPkgDependsOn{\ref PkgSurfaceMesh, \ref PkgLinearCellComplex}
|
||||
\cgalPkgBib{cgal:ol-kinetic}
|
||||
\cgalPkgBib{cgal:ol-kinetic-partition}
|
||||
\cgalPkgLicense{\ref licensesGPL "GPL"}
|
||||
\cgalPkgShortInfoEnd
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - Kinetic Surface Reconstruction"
|
||||
EXTRACT_ALL = YES
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
PREDEFINED += DOXYGEN_RUNNING
|
||||
|
||||
INPUT += \
|
||||
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Kinetic_surface_reconstruction_3.h \
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
\cgalPkgShortInfoBegin
|
||||
\cgalPkgSince{6.0}
|
||||
\cgalPkgDependsOn{\ref PkgKineticSpacePartition, \ref PkgSurfaceMesh, \ref PkgLinearCellComplex, \ref PkgShapeDetection}
|
||||
\cgalPkgBib{cgal:ol-kinetic}
|
||||
\cgalPkgBib{cgal:ol-kinetic-reconstruction}
|
||||
\cgalPkgLicense{\ref licensesGPL "GPL"}
|
||||
\cgalPkgShortInfoEnd
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@
|
|||
#include <CGAL/Exact_rational.h>
|
||||
#include <CGAL/Polyhedron_kernel.h>
|
||||
#include <CGAL/convex_hull_3.h>
|
||||
#include <CGAL/Dualizer.h>
|
||||
#include <CGAL/translate.h>
|
||||
#include <CGAL/boost/graph/Dual.h>
|
||||
#include <CGAL/boost/graph/copy_face_graph.h>
|
||||
|
|
@ -95,6 +94,7 @@ void CGAL_Lab_kernel_plugin::on_actionKernel_triggered()
|
|||
|
||||
// get inside point
|
||||
Point inside_point = kernel.inside_point();
|
||||
|
||||
Vector translate = inside_point - CGAL::ORIGIN;
|
||||
|
||||
// compute dual of translated polyhedron w.r.t. inside point.
|
||||
|
|
@ -132,9 +132,6 @@ void CGAL_Lab_kernel_plugin::on_actionKernel_triggered()
|
|||
typedef CGAL::Dual<SMesh> Dual;
|
||||
typedef boost::graph_traits<Dual>::vertex_descriptor dual_vertex_descriptor;
|
||||
|
||||
std::ofstream out("primal.off");
|
||||
out << convex_hull << std::endl;
|
||||
out.close();
|
||||
Dual dual(convex_hull);
|
||||
|
||||
std::map<dual_vertex_descriptor,Point> vpm;
|
||||
|
|
|
|||
|
|
@ -732,92 +732,130 @@ void Basic_generator_plugin::generateLines()
|
|||
{
|
||||
QString text = dock_widget->line_textEdit->toPlainText();
|
||||
std::list<std::vector<Scene_polylines_item::Point_3> > polylines;
|
||||
polylines.resize(polylines.size()+1);
|
||||
std::vector<Scene_polylines_item::Point_3>& polyline = *(polylines.rbegin());
|
||||
QStringList polylines_metadata;
|
||||
|
||||
QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS);
|
||||
int counter = 0;
|
||||
double coord[3];
|
||||
auto read_polyline = [&polylines](const QStringList& list, bool is_2d, bool is_closed)
|
||||
{
|
||||
int counter = -1;
|
||||
double coord[3];
|
||||
bool ok = true;
|
||||
|
||||
if(!is_2d && list.size()%3!=0){
|
||||
QMessageBox *msgBox = new QMessageBox;
|
||||
msgBox->setWindowTitle("Error");
|
||||
msgBox->setText("ERROR : Input should consists of triplets.");
|
||||
msgBox->exec();
|
||||
return false;
|
||||
}
|
||||
else if(is_2d && list.size()%2!=0){
|
||||
QMessageBox *msgBox = new QMessageBox;
|
||||
msgBox->setWindowTitle("Error");
|
||||
msgBox->setText("ERROR : Input should consists of pairs.");
|
||||
msgBox->exec();
|
||||
return false;
|
||||
}
|
||||
|
||||
polylines.back().reserve(list.size()+(is_closed?1:0));
|
||||
|
||||
for(QString s : list)
|
||||
{
|
||||
if(!s.isEmpty())
|
||||
{
|
||||
double res = s.toDouble(&ok);
|
||||
if(!ok)
|
||||
{
|
||||
QMessageBox *msgBox = new QMessageBox;
|
||||
msgBox->setWindowTitle("Error");
|
||||
msgBox->setText("ERROR : Coordinates are invalid.");
|
||||
msgBox->exec();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
coord[++counter] = res;
|
||||
}
|
||||
}
|
||||
if(!is_2d && counter == 2)
|
||||
{
|
||||
Scene_polylines_item::Point_3 p(coord[0], coord[1], coord[2]);
|
||||
polylines.back().push_back(p);
|
||||
counter=-1;
|
||||
}
|
||||
else if(is_2d && counter == 1)
|
||||
{
|
||||
Scene_polylines_item::Point_3 p(coord[0], coord[1], 0);
|
||||
polylines.back().push_back(p);
|
||||
counter=-1;
|
||||
}
|
||||
}
|
||||
if(is_closed)
|
||||
{
|
||||
if (polylines.back().back()!=polylines.back().front())
|
||||
polylines.back().push_back(polylines.back().front()); //close if not already closed
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const bool is_2d = dock_widget->dim2_checkBox->isChecked();
|
||||
const bool is_closed = dock_widget->polygon_checkBox->isChecked();
|
||||
const bool shall_fill = is_closed && dock_widget->fill_checkBox->isChecked();
|
||||
const bool oneperline = dock_widget->oneperline_checkBox->isChecked();
|
||||
|
||||
bool ok = true;
|
||||
if (list.isEmpty()) return;
|
||||
if(!dock_widget->polygon_checkBox->isChecked() && list.size()%3!=0){
|
||||
QMessageBox *msgBox = new QMessageBox;
|
||||
msgBox->setWindowTitle("Error");
|
||||
msgBox->setText("ERROR : Input should consists of triplets.");
|
||||
msgBox->exec();
|
||||
return;
|
||||
}
|
||||
else if(dock_widget->polygon_checkBox->isChecked()&& list.size()%2!=0){
|
||||
QMessageBox *msgBox = new QMessageBox;
|
||||
msgBox->setWindowTitle("Error");
|
||||
msgBox->setText("ERROR : Input should consists of pairs.");
|
||||
msgBox->exec();
|
||||
return;
|
||||
}
|
||||
for(QString s : list)
|
||||
if (oneperline)
|
||||
{
|
||||
if(!s.isEmpty())
|
||||
QStringList poly_list = text.split(QRegularExpression("\\n"), CGAL_QT_SKIP_EMPTY_PARTS);
|
||||
if (poly_list.empty()) return;
|
||||
|
||||
for(const QString& qs : poly_list)
|
||||
{
|
||||
double res = s.toDouble(&ok);
|
||||
if(!ok)
|
||||
{
|
||||
QMessageBox *msgBox = new QMessageBox;
|
||||
msgBox->setWindowTitle("Error");
|
||||
msgBox->setText("ERROR : Coordinates are invalid.");
|
||||
msgBox->exec();
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
coord[counter] = res;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
if(!dock_widget->polygon_checkBox->isChecked() && counter == 3)
|
||||
{
|
||||
Scene_polylines_item::Point_3 p(coord[0], coord[1], coord[2]);
|
||||
polyline.push_back(p);
|
||||
counter =0;
|
||||
}
|
||||
else if(dock_widget->polygon_checkBox->isChecked() && counter == 2)
|
||||
{
|
||||
Scene_polylines_item::Point_3 p(coord[0], coord[1], 0);
|
||||
polyline.push_back(p);
|
||||
counter = 0;
|
||||
QStringList list = qs.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS);
|
||||
if (list.isEmpty()) continue;
|
||||
polylines.emplace_back();
|
||||
ok = read_polyline(list, is_2d, is_closed);
|
||||
if (!ok) return;
|
||||
}
|
||||
}
|
||||
if(dock_widget->polygon_checkBox->isChecked())
|
||||
else
|
||||
{
|
||||
polyline.push_back(polyline.front()); //polygon_2 are not closed.
|
||||
QStringList list = text.split(QRegularExpression("\\s+"), CGAL_QT_SKIP_EMPTY_PARTS);
|
||||
if (list.isEmpty()) return;
|
||||
polylines.emplace_back();
|
||||
ok = read_polyline(list, is_2d, is_closed);
|
||||
if (!ok) return;
|
||||
}
|
||||
|
||||
if(ok)
|
||||
{
|
||||
dock_widget->line_textEdit->clear();
|
||||
if(dock_widget->fill_checkBox->isChecked())
|
||||
if(shall_fill)
|
||||
{
|
||||
CGAL::Three::Three::CursorScopeGuard guard(Qt::WaitCursor);
|
||||
QApplication::processEvents();
|
||||
if(polyline.front() != polyline.back()) {
|
||||
polyline.push_back(polyline.front());
|
||||
}
|
||||
if(polyline.size() < 4) { // no triangle, skip it (needs at least 3 + 1 repeat)
|
||||
QMessageBox::warning(mw, "Warning", "Needs at least 3 points to triangulate. Aborting.");
|
||||
return;
|
||||
}
|
||||
std::vector<Face> patch;
|
||||
CGAL::Polygon_mesh_processing::triangulate_hole_polyline(polyline,
|
||||
std::back_inserter(patch),
|
||||
CGAL::parameters::use_delaunay_triangulation(true));
|
||||
|
||||
if(patch.empty()) {
|
||||
QMessageBox::warning(mw, "Warning", "Triangulation failed.");
|
||||
return;
|
||||
}
|
||||
SMesh* poly = new SMesh;
|
||||
CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(polyline,
|
||||
patch,
|
||||
*poly);
|
||||
for (const auto& polyline : polylines)
|
||||
{
|
||||
if(polyline.size() < 4) { // no triangle, skip it (needs at least 3 + 1 repeat)
|
||||
QMessageBox::warning(mw, "Warning", "Needs at least 3 points to triangulate. Aborting.");
|
||||
delete poly;
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<Face> patch;
|
||||
CGAL::Polygon_mesh_processing::triangulate_hole_polyline(polyline,
|
||||
std::back_inserter(patch),
|
||||
CGAL::parameters::use_delaunay_triangulation(true));
|
||||
|
||||
if(patch.empty()) {
|
||||
QMessageBox::warning(mw, "Warning", "Triangulation failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(polyline,
|
||||
patch,
|
||||
*poly);
|
||||
}
|
||||
|
||||
Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(poly);
|
||||
poly_item->setName(dock_widget->name_lineEdit->text());
|
||||
|
|
@ -831,6 +869,7 @@ void Basic_generator_plugin::generateLines()
|
|||
item->invalidateOpenGLBuffers();
|
||||
item->setName(dock_widget->name_lineEdit->text());
|
||||
item->setColor(Qt::black);
|
||||
QStringList polylines_metadata;
|
||||
item->setProperty("polylines metadata", polylines_metadata);
|
||||
Scene_interface::Item_id id = scene->addItem(item);
|
||||
scene->setSelectedItem(id);
|
||||
|
|
|
|||
|
|
@ -1101,20 +1101,37 @@ li.checked::marker { content: "\2612"; }
|
|||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_23">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="dim2_checkBox">
|
||||
<property name="text">
|
||||
<string>2D</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="polygon_checkBox">
|
||||
<property name="text">
|
||||
<string>From Polygon_2</string>
|
||||
<string>Polygon(s)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="fill_checkBox">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Triangulate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="oneperline_checkBox">
|
||||
<property name="text">
|
||||
<string>One Per Line</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
|
@ -1222,5 +1239,22 @@ li.checked::marker { content: "\2612"; }
|
|||
<include location="../../CGALlab.qrc"/>
|
||||
<include location="../../CGALlab.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>polygon_checkBox</sender>
|
||||
<signal>stateChanged(int)</signal>
|
||||
<receiver>fill_checkBox</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>190</x>
|
||||
<y>83</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>534</x>
|
||||
<y>83</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
|
|
|
|||
|
|
@ -232,11 +232,12 @@ public:
|
|||
"Create Facegraph from Selected Facets" ,
|
||||
"Erase Selected Facets" ,
|
||||
"Keep Connected Components of Selected Facets" ,
|
||||
"Expand Face Selection to Stay Manifold After Removal" ,
|
||||
"Convert from Edge Selection to Facets Selection" ,
|
||||
"Convert from Edge Selection to Point Selection" ,
|
||||
"Convert from Facet Selection to Boundary Edge Selection",
|
||||
"Convert from Facet Selection to Point Selection"
|
||||
"Expand Face Selection to Remain Manifold After Removal" ,
|
||||
"Select Edges Incident to Selected Facets" ,
|
||||
"Select Vertices Incident to Selected Edges" ,
|
||||
"Select Edges on the Boundary of Regions of Selected Facets",
|
||||
"Select Vertices of Selected Facets",
|
||||
"Add Triangle Face from Selected Vertices"
|
||||
};
|
||||
|
||||
operations_map[operations_strings[0]] = 0;
|
||||
|
|
@ -249,6 +250,7 @@ public:
|
|||
operations_map[operations_strings[7]] = 7;
|
||||
operations_map[operations_strings[8]] = 8;
|
||||
operations_map[operations_strings[9]] = 9;
|
||||
operations_map[operations_strings[10]] = 10;
|
||||
}
|
||||
virtual void closure() override
|
||||
{
|
||||
|
|
@ -555,8 +557,6 @@ public Q_SLOTS:
|
|||
}
|
||||
}
|
||||
void on_Selection_type_combo_box_changed(int index) {
|
||||
std::cout << "on_Selection_type_combo_box_changed(" << index << ")" << std::endl;
|
||||
|
||||
typedef Scene_polyhedron_selection_item::Active_handle Active_handle;
|
||||
for(Selection_item_map::iterator it = selection_item_map.begin(); it != selection_item_map.end(); ++it) {
|
||||
it->second->set_active_handle_type(static_cast<Active_handle::Type>(index));
|
||||
|
|
@ -906,6 +906,20 @@ public Q_SLOTS:
|
|||
selection_item->itemChanged();
|
||||
break;
|
||||
}
|
||||
//Add Triangle Face to FaceGraph
|
||||
case 10:
|
||||
{
|
||||
Scene_polyhedron_selection_item* selection_item = getSelectedItem<Scene_polyhedron_selection_item>();
|
||||
if(!selection_item) {
|
||||
print_message("Error: there is no selected polyhedron selection item!");
|
||||
return;
|
||||
}
|
||||
if(selection_item->selected_vertices.size() != 3) {
|
||||
print_message("Error: there is not exactly 3 vertices selected!");
|
||||
return;
|
||||
}
|
||||
selection_item->add_facet_from_selected_vertices();
|
||||
}
|
||||
default :
|
||||
break;
|
||||
}
|
||||
|
|
@ -1175,6 +1189,8 @@ void filter_operations()
|
|||
if(has_v)
|
||||
{
|
||||
ui_widget.operationsBox->addItem(operations_strings[0]);
|
||||
if(selection_item->selected_vertices.size() == 3)
|
||||
ui_widget.operationsBox->addItem(operations_strings[10]);
|
||||
}
|
||||
if(has_e)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -781,6 +781,66 @@ public:
|
|||
return num_vertices(*out) > 0;
|
||||
}
|
||||
|
||||
fg_face_descriptor add_facet_from_selected_vertices()
|
||||
{
|
||||
fg_face_descriptor null_face = boost::graph_traits<Face_graph>::null_face();
|
||||
|
||||
if(selected_vertices.size() != 3) // NYI
|
||||
return null_face;
|
||||
|
||||
// since the selected vertices are a set, we lost order in the process,
|
||||
// so find back the correct orientation
|
||||
std::array<fg_vertex_descriptor, 3> vs;
|
||||
for(std::size_t i=0; i<3; ++i)
|
||||
vs[i] = *(std::next(selected_vertices.begin(), i));
|
||||
|
||||
int pos_counter = 0, neg_counter = 0;
|
||||
for(std::size_t i=0; i<3; ++i)
|
||||
{
|
||||
auto res = halfedge(vs[i], vs[(i+1)%3], *polyhedron());
|
||||
if(res.second && !is_border(res.first, *polyhedron()))
|
||||
{
|
||||
// the halfedge 'vs[i] - vs[i+1]' already exists in the graph and is not border,
|
||||
// so vote for orienting the facet the other way
|
||||
++neg_counter;
|
||||
}
|
||||
|
||||
res = halfedge(vs[(i+1)%3], vs[i], *polyhedron());
|
||||
if(res.second && !is_border(res.first, *polyhedron()))
|
||||
{
|
||||
// the halfedge 'vs[i+1] - vs[i]' already exists in the graph and is not border,
|
||||
// so vote for keeping the current orientationorientation
|
||||
++pos_counter;
|
||||
}
|
||||
}
|
||||
|
||||
if(pos_counter > 0 && neg_counter > 0)
|
||||
{
|
||||
// disagreement, can't insert the face (@todo duplicate and insert?)
|
||||
std::cerr << "Failed to find a valid orientation (" << pos_counter << " VS " << neg_counter << ")!" << std::endl;
|
||||
return null_face;
|
||||
}
|
||||
else if(neg_counter > 0)
|
||||
{
|
||||
std::swap(vs[0], vs[1]);
|
||||
}
|
||||
|
||||
fg_face_descriptor new_f = CGAL::Euler::add_face(vs, *polyhedron());
|
||||
const bool successful_insertion = (new_f != null_face);
|
||||
if(successful_insertion)
|
||||
{
|
||||
selected_vertices.clear();
|
||||
invalidateOpenGLBuffers();
|
||||
changed_with_poly_item();
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Failed to insert face!" << std::endl;
|
||||
}
|
||||
|
||||
return new_f;
|
||||
}
|
||||
|
||||
void select_sharp_edges(const double angle)
|
||||
{
|
||||
CGAL::detect_sharp_edges(polyhedron(), angle);
|
||||
|
|
|
|||
|
|
@ -1,123 +0,0 @@
|
|||
#ifndef _DUALIZER_
|
||||
#define _DUALIZER_
|
||||
|
||||
#include <CGAL/Polyhedron_incremental_builder_3.h>
|
||||
#include <CGAL/Modifier_base.h>
|
||||
template <class Face_handle>
|
||||
struct Facet_cmp
|
||||
{
|
||||
bool operator()(Face_handle a, Face_handle b) const
|
||||
{
|
||||
return &*a < &*b;
|
||||
}
|
||||
};
|
||||
|
||||
template <class HDS,class Polyhedron,class Kernel>
|
||||
class CModifierDual : public CGAL::Modifier_base<HDS>
|
||||
{
|
||||
private:
|
||||
typedef typename Kernel::Point_3 Point;
|
||||
typedef typename Kernel::Plane_3 Plane;
|
||||
typedef typename Kernel::Vector_3 Vector;
|
||||
typedef typename Kernel::FT FT;
|
||||
|
||||
typedef typename HDS::Vertex Vertex;
|
||||
typedef typename HDS::Face_handle Face_handle;
|
||||
typedef typename HDS::Halfedge_handle Halfedge_handle;
|
||||
|
||||
typedef typename Polyhedron::Facet_iterator Facet_iterator;
|
||||
typedef typename Polyhedron::Vertex_iterator Vertex_iterator;
|
||||
typedef typename Polyhedron::Halfedge_around_vertex_circulator HV_circulator;
|
||||
|
||||
typedef typename CGAL::Polyhedron_incremental_builder_3<HDS> builder;
|
||||
Polyhedron *m_pMesh;
|
||||
std::map<Face_handle,int,Facet_cmp<Face_handle> > m_face_map;
|
||||
|
||||
public:
|
||||
|
||||
// life cycle
|
||||
CModifierDual(Polyhedron *pMesh)
|
||||
{
|
||||
CGAL_assertion(pMesh != NULL);
|
||||
m_pMesh = pMesh;
|
||||
}
|
||||
~CModifierDual() {}
|
||||
|
||||
void operator()( HDS& hds)
|
||||
{
|
||||
builder B(hds,true);
|
||||
B.begin_surface(3,1,6);
|
||||
add_vertices(B);
|
||||
add_facets(B);
|
||||
B.end_surface();
|
||||
}
|
||||
|
||||
// add vertices
|
||||
void add_vertices(builder &B)
|
||||
{
|
||||
int index = 0;
|
||||
Facet_iterator it;
|
||||
for(it = m_pMesh->facets_begin();
|
||||
it != m_pMesh->facets_end();
|
||||
it++)
|
||||
{
|
||||
Face_handle f = it;
|
||||
m_face_map[f] = index++;
|
||||
B.add_vertex(dual(f));
|
||||
}
|
||||
}
|
||||
|
||||
Plane facet_plane(Face_handle f)
|
||||
{
|
||||
const Point& a = f->halfedge()->vertex()->point();
|
||||
const Point& b = f->halfedge()->next()->vertex()->point();
|
||||
const Point& c = f->halfedge()->next()->next()->vertex()->point();
|
||||
return Plane(a,b,c);
|
||||
}
|
||||
|
||||
Point dual(Face_handle f)
|
||||
{
|
||||
Plane plane = facet_plane(f);
|
||||
FT sqd = CGAL::squared_distance(Point(CGAL::ORIGIN),plane);
|
||||
FT distance_to_origin = std::sqrt(sqd);
|
||||
Vector normal = plane.orthogonal_vector();
|
||||
normal = normal / std::sqrt(normal * normal);
|
||||
return CGAL::ORIGIN + normal / distance_to_origin;
|
||||
}
|
||||
|
||||
// add facets
|
||||
void add_facets(builder &B)
|
||||
{
|
||||
Vertex_iterator v;
|
||||
for(v = m_pMesh->vertices_begin();
|
||||
v != m_pMesh->vertices_end();
|
||||
v++)
|
||||
{
|
||||
B.begin_facet();
|
||||
HV_circulator he = v->vertex_begin();
|
||||
HV_circulator end = he;
|
||||
CGAL_For_all(he,end)
|
||||
B.add_vertex_to_facet(m_face_map[he->facet()]);
|
||||
B.end_facet();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
template <class Polyhedron, class Kernel>
|
||||
class Dualizer
|
||||
{
|
||||
public:
|
||||
typedef typename Polyhedron::HalfedgeDS HalfedgeDS;
|
||||
Dualizer() {}
|
||||
~Dualizer() {}
|
||||
|
||||
public:
|
||||
void run(Polyhedron &input, Polyhedron &output)
|
||||
{
|
||||
CModifierDual<HalfedgeDS,Polyhedron,Kernel> dualizer(&input);
|
||||
output.delegate(dualizer);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // _DUALIZER_
|
||||
|
|
@ -18,7 +18,7 @@ actions = {
|
|||
"Thursday": integration,
|
||||
"Friday": release("5.5"),
|
||||
"Saturday": release("5.6"),
|
||||
"Sunday": beta_release_from_master(1),
|
||||
"Sunday": beta_release_from_master(2),
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,103 +1,153 @@
|
|||
The CGAL Open Source Project is pleased to announce the release 5.6 Beta 1 of CGAL, the Computational Geometry Algorithms Library.
|
||||
The CGAL Open Source Project is pleased to announce the release 6.0 Beta 1 of CGAL, the Computational Geometry Algorithms Library.
|
||||
|
||||
CGAL version 5.6 Beta 1 is a public testing release. It should provide a solid ground to report bugs that need to be tackled before the release of the final version of CGAL 5.6 in July 2022.
|
||||
CGAL version 6.0 Beta 1 is a public testing release. It should provide a solid ground to report bugs that need to be tackled before the release of the final version of CGAL 6.0 in July 2024.
|
||||
|
||||
Besides fixes and general enhancement to existing packages, the following has changed since CGAL 5.5:
|
||||
Besides fixes and general enhancement to existing packages, the following has changed since CGAL 5.6:
|
||||
|
||||
### General Changes
|
||||
|
||||
- **Breaking change**: Package-specific assertions, preconditions, and postconditions (such as `CGAL_triangulation_assertion`) have been removed. Corresponding CGAL-wide versions (such as `CGAL_assertion`) should be used instead.
|
||||
- CGAL 6.0 is the first release of CGAL that requires a C++ compiler with the support of C++17 or later. The new list of supported compilers is:
|
||||
- Visual C++ 15.9, 16.10, 17.0 (from Visual Studio 2017, 2019 and 2022) or later
|
||||
- Gnu g++ 11.4.0 or later (on Linux or macOS)
|
||||
- LLVM Clang version 15.0.7 or later (on Linux)
|
||||
- Apple Clang compiler versions 10.0.1, 12.0.5, and 15.0.0 (on macOS)
|
||||
- The minimal supported version of Boost is now 1.72.0.
|
||||
- The CGAL `Core` library is no longer based on GMP, but on [Boost.Multiprecision](https://www.boost.org/doc/libs/1_72_0/libs/multiprecision/doc/html/index.html). Either GMP backend or Boost backend can be used.
|
||||
- All demos are now based on Qt6.
|
||||
- **Breaking change**: The CMake file `UseCGAL.cmake` has been removed from CGAL. Usages of the CMake variables `${CGAL_USE_FILE}` and `${CGAL_LIBRARIES}` must be replaced by a link to the imported target `CGAL::CGAL`, for example: `target_link_library(your_target PRIVATE CGAL::CGAL)`.
|
||||
|
||||
### [Shape Detection](https://doc.cgal.org/5.6/Manual/packages.html#PkgShapeDetection) (major changes)
|
||||
### [Kinetic Space Partition](https://doc.cgal.org/6.0/Manual/packages.html#PkgKineticSpacePartition) (new package)
|
||||
|
||||
- **Breaking change**: The region growing part of the package have been reworked to fix design issues introduced with the handling of `FaceGraph` models. In particular, the notion of `Item` has been introduced to reference an element in the input range of elements. Region maps now operates on `Item` and no longer on the value type of the input range.
|
||||
- **Breaking change**: The method `update()` in the concept `RegionType` now returns a `Boolean` instead of `void`, that is used inside the class `Region_growing` for detecting if the input conditions for the new region are satisfied. This change affects only user-defined types of regions.
|
||||
- **Breaking change**: The constructors of all models used together with the region growing algorithm now enable users to provide parameters through the [named parameters](https://doc.cgal.org/5.6/BGL/group__bgl__namedparameters.html) mechanism.
|
||||
- All fitting classes in the region growing framework are now using better versions of the region conditions, more precise and faster, including the correct normal orientations.
|
||||
- Added new models of the concept `RegionType` for getting linear regions in a set of 2D and 3D segments and on 2D and 3D polylines.
|
||||
- Added the class `Polyline_graph` for extracting a set of polylines from a face graph, which splits this graph into a set of user-defined regions.
|
||||
- Added new shapes to the Region Growing algorithm on a point set: circles in 2D, spheres in 3D, and cylinders in 3D.
|
||||
- This package implements kinetic space partition: based on a set of planar input shapes, the bounding box of the input data is split into convex volumes. The complexity of the partition can be adjusted with a single parameter.
|
||||
|
||||
### [2D Straight Skeleton and Polygon Offsetting](https://doc.cgal.org/5.6/Manual/packages.html#PkgStraightSkeleton2) (major changes)
|
||||
- Added weighted straight skeletons: weighted straight skeletons are a generalization of straight skeletons. Contour edges are assigned a positive weight, which can be understood as assigning a speed to the wavefront spawned from the contour edge.
|
||||
- Added straight skeleton extrusion: this CGAL package now implements the extrusion of weighted straight skeletons of polygons with holes. The output is a closed, combinatorially 2-manifold surface triangle mesh.
|
||||
See also the [news entry](https://www.cgal.org/2023/05/09/improved_straight_skeleton/).
|
||||
### [Kinetic Surface Reconstruction](https://doc.cgal.org/6.0/Manual/packages.html#PkgKineticSurfaceReconstruction) (new package)
|
||||
|
||||
### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/5.6/Manual/packages.html#PkgKernel23)
|
||||
- The package implements a piece-wise planar surface reconstruction pipeline from point clouds combining methods from the [Shape Detection](https://doc.cgal.org/6.0/Manual/packages.html#PkgShapeDetection), [Shape Regularization](https://doc.cgal.org/6.0/Manual/packages.html#PkgShapeRegularization) and [Kinetic Shape Partition](https://doc.cgal.org/6.0/Manual/packages.html#PkgKineticSpacePartition) packages and graph-cut to reconstruct surfaces from point clouds.
|
||||
|
||||
- Added the functor [`CompareAngle_3`](https://doc.cgal.org/5.6/Kernel_23/classKernel_1_1CompareAngle__3.html) to the concept [`Kernel`](https://doc.cgal.org/5.6/Kernel_23/classKernel.html) to compare an angle defined by three points to the cosinus of another angle.
|
||||
### [Basic Viewer](https://doc.cgal.org/6.0/Basic_viewer/index.html#Chapter_Basic_viewer) (new package)
|
||||
|
||||
### [Combinatorial Maps](https://doc.cgal.org/5.6/Manual/packages.html#PkgCombinatorialMaps), [Generalized Maps](https://doc.cgal.org/5.6/Manual/packages.html#PkgGeneralizedMaps), and [Linear Cell Complex](https://doc.cgal.org/5.6/Manual/packages.html#PkgLinearCellComplex)
|
||||
- The basic viewer package provides interactive visualization for most CGAL packages, such as [2D Arrangements](https://doc.cgal.org/6.0/Manual/packages.html#PkgArrangementOnSurface2), [2D Regularized Boolean Set-Operations](https://doc.cgal.org/6.0/Manual/packages.html#PkgBooleanSetOperations2), [Linear Cell Complex](https://doc.cgal.org/6.0/Manual/packages.html#PkgLinearCellComplex), [3D Boolean Operations on Nef Polyhedra](https://doc.cgal.org/6.0/Manual/packages.html#PkgNef3), [2D Periodic Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgPeriodic2Triangulation2), [3D Point Set](https://doc.cgal.org/6.0/Manual/packages.html#PkgPointSet3), [2D Polygons](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolygon2), [3D Polyhedral Surface](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolyhedron), [2D Straight Skeleton and Polygon Offsetting](https://doc.cgal.org/6.0/Manual/packages.html#PkgStraightSkeleton2), [Surface Mesh](https://doc.cgal.org/6.0/Manual/packages.html#PkgSurfaceMesh), [2D Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgTriangulation2), [3D Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgTriangulation3), [2D Voronoi Diagrams](https://doc.cgal.org/6.0/Manual/packages.html#PkgVoronoiDiagram2), and more. The most simple use case of the basic viewer is the call of the global `CGAL::draw()` function. There is one such `draw()` function for each CGAL package that has a basic viewer. Such a call opens an interactive window showing the given model and allowing to navigate in the scene, show or hide some specific cells, show the interior of the model if any, etc. The `Basic_viewer` is based on Qt6.
|
||||
|
||||
- Added a version that uses indices instead of handles as dart and attribute descriptors. As the indices are integers convertible from and to `std::size_t`, they can be used as index into vectors which store properties. To use the index version, `Use_index` must be defined and be equal to `CGAL::Tag_true` in the item class.
|
||||
### [Polygon Repair](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolygonRepair) (new package)
|
||||
|
||||
### [Linear Cell Complex](https://doc.cgal.org/5.6/Manual/packages.html#PkgLinearCellComplex)
|
||||
- This package provides algorithms to repair 2D polygons, polygons with holes, and multipolygons with holes, by selecting faces of the arrangement of the input using the odd-even heuristic.
|
||||
|
||||
- Added the class [`Linear_cell_complex_incremental_builder_3`](https://doc.cgal.org/5.6/Linear_cell_complex/classCGAL_1_1Linear__cell__complex__incremental__builder__3.html).
|
||||
### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/6.0/Manual/packages.html#PkgKernel23)
|
||||
|
||||
### [2D Arrangements](https://doc.cgal.org/5.6/Manual/packages.html#PkgArrangementOnSurface2)
|
||||
- **Breaking change**: Replaced all instances of `boost::variant` with `std::variant` in the intersection functions.
|
||||
- **Breaking change**: Replaced all instances of `boost::optional` with `std::optional` in the intersection functions.
|
||||
|
||||
- Introduced an overload function template, namely `draw(arr)`, that renders arrangements based on the `Basic_viewer_qt` class template. As of now, only 2D arrangements on the plane induced by (i) segments, (ii) conics, and (iii) circular arcs or (linear) segments are supported.
|
||||
- Improved the traits class template that handles conics, namely [`Arr_conic_traits_2`](https://doc.cgal.org/5.6/Arrangement_on_surface_2/classCGAL_1_1Arr__conic__traits__2.html). This includes the following: 1. Fixed a couple of bugs and slightly optimized some functions. 2. Introduced functionality that approximates conics with polylines. (This is used to draw conic curves.) 3. **Breaking change**: Changed the interface to generate conic curves. In the past, curves where generated directly using the constructors of the conic and x-monotone conic constructs. Now, they are constructed via function objects provided by the traits. This eliminates the constructions of temporary kernels. The old functionality is obsolete, but still supported for a limited number of versions. It depends on a static member function of the traits. In a future version this function will no longer be static, implying that the old functionality will no longer be supported.
|
||||
- Introduced functionality that approximates circular segments with polylines. (This is used to draw conic curves.)
|
||||
### [3D Polyhedral Surface](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolyhedron)
|
||||
|
||||
### [Polygon Mesh Processing](https://doc.cgal.org/5.6/Manual/packages.html#PkgPolygonMeshProcessing)
|
||||
- The demo of this package, also known as “Polyhedron Demo” has been renamed “CGAL Lab” and moved to its own package (“Lab”).
|
||||
|
||||
- Added functions [`CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PkgPolygonMeshProcessingRef.html#ga50dcd2f6295f584d2e378b57290ae2af) and [`CGAL::Polygon_mesh_processing::detect_corners_of_regions()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PkgPolygonMeshProcessingRef.html#gac8e445730d718a2fc49604e865017d2e), which enable partitioning a mesh into planar regions using the region growing algorithm from the [Shape Detection](https://doc.cgal.org/5.6/Manual/packages.html#PkgShapeDetection) package.
|
||||
### [2D and 3D Fast Intersection and Distance Computation (AABB Tree)](https://doc.cgal.org/6.0/Manual/packages.html#PkgAABBTree)
|
||||
|
||||
- Added the functions [`CGAL::Polygon_mesh_processing::remesh_planar_patches()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga7fca6fa2db94560ab6d32e6a77fc35b6) and [`CGAL::Polygon_mesh_processing::remesh_almost_planar_patches()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga0e6da479548199a5d82c3cf0ed36e8a0), which can be used to remesh patches of coplanar faces in a mesh.
|
||||
- The AABB tree can now be used with 2D or 3D primitives:
|
||||
- The concepts `AABBGeomTraits` and `AABBRayIntersectionGeomTraits` have been replaced by [`AABBGeomTraits_3`](https://doc.cgal.org/6.0/AABB_tree/classAABBGeomTraits__3.html) and by [`AABBRayIntersectionGeomTraits_3`](https://doc.cgal.org/6.0/AABB_tree/classAABBRayIntersectionGeomTraits__3.html), respectively.
|
||||
- The concepts [`AABBGeomTraits_2`](https://doc.cgal.org/6.0/AABB_tree/classAABBGeomTraits__2.html) and [`AABBRayIntersectionGeomTraits_2`](https://doc.cgal.org/6.0/AABB_tree/classAABBRayIntersectionGeomTraits__2.html) have been introduced, as the 2D counterparts.
|
||||
- The class [`CGAL::AABB_traits`](https://doc.cgal.org/6.0/AABB_tree/group__PkgAABBTreeRef.html#ga764f0fc59c96355877536810aa1aca5b) is deprecated and replaced by [`CGAL::AABB_traits_3`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__traits__3.html).
|
||||
- The class [`CGAL::AABB_traits_2`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__traits__2.html) is introduced as the 2D counterpart.
|
||||
- The class [`CGAL::AABB_segment_primitive`](https://doc.cgal.org/6.0/AABB_tree/group__PkgAABBTreeRef.html#gad0acfd5c4a3c081b7570cc6bd4594c8d) has been deprecated and replaced by the class [`CGAL::AABB_segment_primitive_3`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__segment__primitive__3.html).
|
||||
- The class [`CGAL::AABB_triangle_primitive`](https://doc.cgal.org/6.0/AABB_tree/group__PkgAABBTreeRef.html#ga54a56f01dc8024624f7d83ee0a01add0) has been deprecated and replaced by the class [`CGAL::AABB_triangle_primitive_3`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__triangle__primitive__3.html).
|
||||
- The following 2D primitive classes have been added: [`CGAL::AABB_segment_primitive_2`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__segment__primitive__2.html), [`CGAL::AABB_polyline_segment_primitive_2`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__polyline__segment__primitive__2.html), [`CGAL::AABB_triangle_primitive_2`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__triangle__primitive__2.html), [`CGAL::AABB_indexed_triangle_primitive_2`](https://doc.cgal.org/6.0/AABB_tree/classCGAL_1_1AABB__indexed__triangle__primitive__2.html).
|
||||
- **Breaking change**: The concept [`AABBTraits`](https://doc.cgal.org/6.0/AABB_tree/classAABBTraits.html) now refines the concept [`SearchTraits`](https://doc.cgal.org/6.0/Spatial_searching/classSearchTraits.html).
|
||||
- **Breaking change**: Replaced all instances of `boost::optional` with `std::optional`.
|
||||
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::surface_Delaunay_remeshing()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#gaff62f9415d2fe96d1d3095351f156ced), which can be used to remesh a surface triangle mesh using the Delaunay refinement algorithm from the [3D Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) package.
|
||||
### [2D Arrangements](https://doc.cgal.org/6.0/Manual/packages.html#PkgArrangementOnSurface2)
|
||||
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::remove_almost_degenerate_faces()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__geometric__repair__grp.html#ga48008d2b66de8a68a7068f29db15dad6), which can be used to remove badly shaped triangles faces in a mesh.
|
||||
- **Breaking change**: Replaced all instances of `boost::variant` with `std::variant`.
|
||||
- **Breaking change**: The type of the result of point location queries has been changed to `std::variant`. Support for the old macro `CGAL_ARR_POINT_LOCATION_VERSION` has been removed.
|
||||
- **Breaking change**: Eliminated the error-prone C-type casting that was used to define observers. In general, backward compatibility was maintained; however, the class template [`CGAL::Arr_observer`](https://doc.cgal.org/6.0/Arrangement_on_surface_2/group__PkgArrangementOnSurface2Ref.html#ga8019f986f5469920136c4b92290b7b1b) has been replaced by an alias template. (The class `CGAL::Arr_observer` was renamed to [`CGAL::Aos_observer`](https://doc.cgal.org/6.0/Arrangement_on_surface_2/classCGAL_1_1Aos__observer.html)).
|
||||
- Introduced [`Arr_dcel`](https://doc.cgal.org/6.0/Arrangement_on_surface_2/classCGAL_1_1Arr__dcel.html), which essentially replaces the former `CGAL::Arr_default_dcel`. Backward compatibility was maintained by the introduction of the alias template [`CGAL::Arr_default_dcel`](https://doc.cgal.org/6.0/Arrangement_on_surface_2/group__PkgArrangementOnSurface2DCEL.html#gaf9635869a3794a46d7dcfce63d7de2a6). `CGAL::Arr_dcel`, as opposed to the former `CGAL::Arr_default_dcel` is templated (in addition to the geometry traits) by `Vertex`, `Halfedge`, and `Face` template parameters, and they have default type values. All this enables the layered extension of DCEL records.
|
||||
- Fixed a bug in the zone construction code applied to arrangements of geodesic arcs on a sphere, when inserting an arc that lies on the identification curve.
|
||||
- Introduced a new interactive program that demonstrates 2D arrangements embedded on the sphere called `earth`. The program (i) reads a database of all administrative boundaries of the countries in the world, (ii) displays the globe with all countries and land covered by water (which is land not covered by countries) on a window, and (ii) enables interaction with the user.
|
||||
|
||||
- Added the functions [`CGAL::Polygon_mesh_processing::does_triangle_soup_self_intersect()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__intersection__grp.html#ga4909920dc48b8285e69feb845feb1e53) and [`CGAL::Polygon_mesh_processing::triangle_soup_self_intersections()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__intersection__grp.html#ga1c5fee17bd0d92d5a2fba77ed94d4b4d) to identify and report self-intersections in a triangle soup, similarly to existing functions on triangle meshes.
|
||||
### [3D Envelopes](https://doc.cgal.org/6.0/Manual/packages.html#PkgEnvelope3)
|
||||
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::triangulate_polygons()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga8b7db6aa8c3e79526b594739ba926d82), which allows users to triangulate polygon soups.
|
||||
- **Breaking change**: [`Construct_projected_boundary_2`](https://doc.cgal.org/6.0/Envelope_3/classEnvelopeTraits__3.html#ac7b8f72870f0572834a0a3de62c67bc1) in [`EnvelopeTraits_3`](https://doc.cgal.org/6.0/Envelope_3/classEnvelopeTraits__3.html) now uses `std::variant` instead of [`CGAL::Object`](https://doc.cgal.org/6.0/STL_Extension/classCGAL_1_1Object.html).
|
||||
- Passed the base class of [`CGAL::Env_plane_traits_3`](https://doc.cgal.org/6.0/Envelope_3/classCGAL_1_1Env__plane__traits__3.html) as a template parameter with a default value (being the 2D arrangement linear traits). Similarly, passed the base class of `CGAL::Env_triangle_traits_3` as a template parameter with a default value (being the 2D arrangement segment traits).
|
||||
|
||||
- Added a named parameter to [`CGAL::Polygon_mesh_processing::smooth_shape()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga57fa999abe8dc557003482444df2a189) to disable the scaling, which otherwise aims to compensate volume loss during smoothing.
|
||||
### [Combinatorial Maps](https://doc.cgal.org/6.0/Manual/packages.html#PkgCombinatorialMaps) and [Generalized Maps](https://doc.cgal.org/6.0/Manual/packages.html#PkgGeneralizedMaps)
|
||||
|
||||
- Deprecated the overloads of functions [`CGAL::Polygon_mesh_processing::triangulate_hole()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#ga3abdf2d0558822e85f060966b69cae98), [`CGAL::Polygon_mesh_processing::triangulate_and_refine_hole()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#ga9868fac4d9dca77462ad7828bc99d8a1), and [`CGAL::Polygon_mesh_processing::triangulate_refine_and_fair_hole()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#ga18eac756a8f8e5d5f73e645fd4e26cad) which have output iterators for vertices and faces as parameter. They are replaced by overloads with two additional named parameters.
|
||||
- Added the function [`insert_cell_1_between_two_cells_2()`](https://doc.cgal.org/6.0/Combinatorial_map/classGenericMap.html#aa29570a0812094c7876e24a228373f12) to the [`GenericMap`](https://doc.cgal.org/6.0/Combinatorial_map/classGenericMap.html) concept, which enables users to insert an edge between two different faces in order to create faces with holes.
|
||||
|
||||
### [2D Convex Hulls](https://doc.cgal.org/5.6/Manual/packages.html#PkgConvexHull2)
|
||||
- Added new meshing criterion `edge_distance`, an upper bound for the distance from the edge to the 1D feature.
|
||||
|
||||
- **Breaking change**: The concept [`ConvexHullTraits_2`](https://doc.cgal.org/5.6/Convex_hull_2/classConvexHullTraits__2.html) no longer requires the functor `Less_signed_distance_to_line_2`, but requires the functor `Compare_signed_distance_to_line_2` instead.
|
||||
- The long-deprecated classes `Convex_hull_projective_xy_traits_2`, `Convex_hull_projective_xz_traits_2`, and `Convex_hull_projective_yz_traits_2` have been removed. Users should use [`Projection_traits_xy_3`](https://doc.cgal.org/5.6/Kernel_23/classCGAL_1_1Projection__traits__xy__3.html), [`Projection_traits_xz_3`](https://doc.cgal.org/5.6/Kernel_23/classCGAL_1_1Projection__traits__xz__3.html), and [`Projection_traits_yz_3`](https://doc.cgal.org/5.6/Kernel_23/classCGAL_1_1Projection__traits__yz__3.html) instead.
|
||||
- **Breaking change**: the concept `MeshEdgeCriteria_3` was modified to include the new meshing criterion `edge_distance`.
|
||||
|
||||
### [2D Triangulations](https://doc.cgal.org/5.6/Manual/packages.html#PkgTriangulation2)
|
||||
### [Quadtrees, Octrees, and Orthtrees](https://doc.cgal.org/6.0/Manual/packages.html#PkgOrthtree)
|
||||
|
||||
- Added the function [`CGAL::mark_domain_in_triangulation()`](https://doc.cgal.org/5.6/Triangulation_2/group__PkgTriangulation2Miscellaneous.html#ga0409755d0eb89100810230443a85e7eb) to mark faces connected with non-constrained edges as inside of the domain based on the nesting level.
|
||||
- **Breaking change**:
|
||||
- Node splitting behavior and per-node data are now customizable via the Traits class.
|
||||
- Nodes are now stored as a property map, with properties of each node accessed by index.
|
||||
- Nearest neighbors functions only work for Orthtrees which provide the necessary functionality.
|
||||
|
||||
### [2D Conforming Triangulations and Meshes](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh2)
|
||||
### [CGAL and the Boost Graph Library (BGL)](https://doc.cgal.org/6.0/Manual/packages.html#PkgBGL)
|
||||
|
||||
- Added new overloads to the function [`write_VTU()`](https://doc.cgal.org/5.6/Mesh_2/group__PkgMesh2IO.html), with property maps for specifying the domain.
|
||||
- Deprecated usage of boost parameters in favor of function named parameters in [`CGAL::lloyd_optimize_mesh_2()`](https://doc.cgal.org/5.6/Mesh_2/group__PkgMesh2Functions.html#gafeaf59d3fa014da287f8514913b38d05).
|
||||
- Deprecated two overloads of the function [`refine_Delaunay_mesh()`](https://doc.cgal.org/5.6/Mesh_2/group__PkgMesh2Functions.html), and replaced them with versions using function named parameters.
|
||||
- Added the function [`CGAL::remove_all_elements()`](https://doc.cgal.org/6.0/BGL/group__PkgBGLHelperFct.html#gac7e199820c95ed1fc6ab536750749358), which removes vertices, halfedges, and faces without collecting garbage and without removing properties.
|
||||
- [Dynamic property maps](https://doc.cgal.org/6.0/BGL/group__PkgBGLPropertiesDynamic.html) can now have a default value.
|
||||
- The class [`CGAL::Face_filtered_graph`](https://doc.cgal.org/6.0/BGL/structCGAL_1_1Face__filtered__graph.html) now supports patch IDs of any type and not just `faces_size_type`. The only requirement is that the type is hashable.
|
||||
|
||||
### [2D Hyperbolic Triangulations](https://doc.cgal.org/5.6/Manual/packages.html#PkgHyperbolicTriangulation2)
|
||||
### [Polygon Mesh Processing](https://doc.cgal.org/6.0/Manual/packages.html#PkgPolygonMeshProcessing)
|
||||
|
||||
- **Breaking change**: the concept [`HyperbolicTriangulationFaceBase_2`](https://doc.cgal.org/5.6/Hyperbolic_triangulation_2/classHyperbolicTriangulationFaceBase__2.html) has been modified to better reflect the triangulation's requirements and avoid a conflict with the requirements described by the concept `TriangulationDataStructure_2::Face`. The model [`CGAL::Hyperbolic_triangulation_face_base_2`](https://doc.cgal.org/5.6/Hyperbolic_triangulation_2/classCGAL_1_1Hyperbolic__triangulation__face__base__2.html) has been adapted correspondingly.
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::autorefine_triangle_soup()`](https://doc.cgal.org/6.0/Polygon_mesh_processing/group__PMP__corefinement__grp.html#gaec85370aa0b2acc0919e5f8406cfb74c), which can be used to refine a soup of triangles such that no pair of triangles intersects in their interiors. Also added, the function [`CGAL::Polygon_mesh_processing::autorefine()`](https://doc.cgal.org/6.0/Polygon_mesh_processing/group__PMP__corefinement__grp.html#ga3e3a0a82b6c04bdc3a6c070e8da4aed5) operating directly on a triangle mesh and updating it using the aforementioned function on a triangle soup.
|
||||
- Added the class [`CGAL::Corefinement::Non_manifold_output_visitor`](https://doc.cgal.org/6.0/Polygon_mesh_processing/structCGAL_1_1Polygon__mesh__processing_1_1Corefinement_1_1Non__manifold__output__visitor.html), which can be used in corefinement based functions to deal with non-manifold outputs.
|
||||
- Added the option to use a variable sizing field for [`CGAL::Polygon_mesh_processing::isotropic_remeshing()`](https://doc.cgal.org/6.0/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga66cb01cf228ed22f0a2a474cfa2aeb3f), and a sizing function based on a measure of local curvature for adaptive remeshing.
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()`](https://doc.cgal.org/6.0/Polygon_mesh_processing/group__PMP__corrected__curvatures__grp.html#ga22665c9ce92aaedab07df1b05f20bdb2) which can be used to compute the mean and Gaussian curvatures, as well as the principal curvature and directions.
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::refine_mesh_at_isolevel()`](https://doc.cgal.org/6.0/Polygon_mesh_processing/group__PkgPolygonMeshProcessingRef.html#ga396505d5a60b5f6d29792b214fa59352) which can be used to refine a polygon mesh along an isocurve.
|
||||
- Added the function [`CGAL::Polygon_mesh_processing::add_bbox()`](https://doc.cgal.org/6.0/Polygon_mesh_processing/group__PkgPolygonMeshProcessingRef.html#gabaf98d2fd9ae599ff1f3a5a6cde79cf3), which enables adding a tight or extended, triangulated or not, bounding box to a face graph.
|
||||
|
||||
### [3D Simplicial Mesh Data Structure](https://doc.cgal.org/5.6/Manual/packages.html#PkgSMDS3) (new package)
|
||||
### [2D Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgTriangulation2)
|
||||
|
||||
- This new package wraps all the existing code that deals with a [`MeshComplex_3InTriangulation_3`](https://doc.cgal.org/5.6/SMDS_3/classMeshComplex__3InTriangulation__3.html) to describe 3D simplicial meshes, and makes the data structure independent from the [tetrahedral mesh generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) package.
|
||||
- **Breaking change**: the concept [`TriangulationTraits_2`](https://doc.cgal.org/6.0/Triangulation_2/classTriangulationTraits__2.html) now requires an additional functor `Compare_xy_2`.
|
||||
|
||||
### [3D Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3)
|
||||
### [3D Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgTriangulation3)
|
||||
|
||||
- Added two new named parameters to the named constructor [`CGAL::create_labeled_image_mesh_domain()`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Labeled__mesh__domain__3.html#aec3f58e9883a8036a1b3e379df7d8fa9) for automatic detection and protection of 1D-curves that lie at the intersection of three or more subdomains extracted from labeled images.
|
||||
- Added [`CGAL::Sizing_field_with_aabb_tree`](https://doc.cgal.org/5.6/Mesh_3/structCGAL_1_1Sizing__field__with__aabb__tree.html), a geometry-aware sizing field for feature edges in polyhedral domains.
|
||||
- Added new meshing criterion [`edge_min_size`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Mesh__criteria__3.html#a5f1c2649cb7ea346a3b6a2a8724b4df1) to avoid subdividing sharp edges that are shorter than a prescribed size bound.
|
||||
- Added new meshing criteria [`facet_min_size`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Mesh__criteria__3.html#a5f1c2649cb7ea346a3b6a2a8724b4df1) and [`cell_min_size`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Mesh__criteria__3.html#a5f1c2649cb7ea346a3b6a2a8724b4df1) to prevent Delaunay refinement from creating simplices smaller than a prescribed bound.
|
||||
- Deprecated usage of boost parameters in favor of function named parameters.
|
||||
- Added three member functions [`vertices()`](https://doc.cgal.org/6.0/Triangulation_3/classCGAL_1_1Triangulation__3.html#a02faf334255e1ca8caa1a6f412533759) to the class [`CGAL::Triangulation_3`](https://doc.cgal.org/6.0/Triangulation_3/classCGAL_1_1Triangulation__3.html). Each of them returns an array containing the vertices of the given triangulation simplex.
|
||||
|
||||
### [3D Periodic Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgPeriodic3Mesh3)
|
||||
### [dD Triangulations](https://doc.cgal.org/6.0/Manual/packages.html#PkgTriangulations)
|
||||
|
||||
- Periodic Mesh Generation now supports non-cubic domains.
|
||||
- Deprecated usage of boost parameters in favor of function named parameters.
|
||||
- **Breaking change**: `CGAL::TDS_full_cell_mirror_storage_policy` is now unsupported in dimension larger than 127.
|
||||
- **Breaking change**: Inserting multiple unweighted points in the same position now keeps the first one, instead of switching to the latest. This only affects custom point types where not all points in the same position are equivalent.
|
||||
|
||||
### [Surface Mesh Simplification](https://doc.cgal.org/5.6/Manual/packages.html#PkgSurfaceMeshSimplification)
|
||||
- The stop predicates [`Count_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Count__stop__predicate.html) and [`Count_ratio_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Count__ratio__stop__predicate.html) are renamed to [`Edge_count_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Edge__count__stop__predicate.html) and [`Edge_count_ratio_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Edge__count__ratio__stop__predicate.html). Older versions have been deprecated.
|
||||
- Introduced [`Face_count_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Face__count__stop__predicate.html) and [`Face_count_ratio_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Face__count__ratio__stop__predicate.html), which can be used to stop the simplification algorithm based on a desired number of faces in the output, or a ratio between input and output face numbers.
|
||||
### [Tetrahedral Remeshing](https://doc.cgal.org/6.0/Manual/packages.html#PkgTetrahedralRemeshing)
|
||||
|
||||
### [2D Regularized Boolean Set Operations](https://doc.cgal.org/5.6/Manual/packages.html#PkgBooleanSetOperations2)
|
||||
- Exposed all required member functions of the [`GeneralPolygonWithHoles_2`](https://doc.cgal.org/5.6/Polygon/classGeneralPolygonWithHoles__2.html) concept (e.g., [`clear_outer_boundary()`](https://doc.cgal.org/5.6/Polygon/classGeneralPolygonWithHoles__2.html#a9f5f035047505a2ccab3e68770f51bc6), [`clear_holes()`](https://cgal.geometryfactory.com/CGAL/doc/master/Polygon/classGeneralPolygonWithHoles__2.html#a2a507be648f127ac605da8c670ea2580), and [`clear()`](https://doc.cgal.org/5.6/Polygon/classGeneralPolygonWithHoles__2.html#a2ca4d9b43cc9216c1b2cdb080a915944) ).
|
||||
- Added a sizing field as new parameter of [`CGAL::tetrahedral_isotropic_remeshing()`](https://doc.cgal.org/6.0/Tetrahedral_remeshing/group__PkgTetrahedralRemeshingRef.html#ga263775c52eeb483a86a16aeb9eb31af0), which can be used to perform non-uniform and adaptive remeshing.
|
||||
- **Breaking change**: The template parameters of [`CGAL::Tetrahedral_remeshing::Remeshing_cell_base_3`](https://doc.cgal.org/6.0/Tetrahedral_remeshing/classCGAL_1_1Tetrahedral__remeshing_1_1Remeshing__cell__base__3.html) have been modified, reverting changes introduced in CGAL 5.6.
|
||||
- **Breaking change**: The vertex base of [`CGAL::Tetrahedral_remeshing::Remeshing_vertex_base_3`](https://doc.cgal.org/6.0/Tetrahedral_remeshing/classCGAL_1_1Tetrahedral__remeshing_1_1Remeshing__vertex__base__3.html) must now be a model of the concept [`SimplicialMeshVertexBase_3`](https://doc.cgal.org/6.0/SMDS_3/classSimplicialMeshVertexBase__3.html) (and not only [`TriangulationVertexBase_3`](https://doc.cgal.org/6.0/Triangulation_3/classTriangulationVertexBase__3.html)).
|
||||
|
||||
### [3D Simplicial Mesh Data Structure](https://doc.cgal.org/6.0/Manual/packages.html#PkgSMDS3)
|
||||
|
||||
- **Breaking change**: The template parameters of [`CGAL::Simplicial_mesh_cell_base_3`](https://doc.cgal.org/6.0/SMDS_3/classCGAL_1_1Simplicial__mesh__cell__base__3.html) have been modified to enable passing a geometric traits and a custom cell base class.
|
||||
|
||||
### [3D Mesh Generation](https://doc.cgal.org/6.0/Manual/packages.html#PkgMesh3)
|
||||
|
||||
- **Breaking change**: Removed the concept `TriangleAccessor`, the template parameter `TriangleAccessor`, as well as the class `Triangle_accessor`. These were no longer used for several releases.
|
||||
- **Breaking change**: Removed the class templates `CGAL::Gray_image_mesh_domain_3`, `CGAL::Implicit_mesh_domain_3`, and `CGAL::Labeled_image_mesh_domain_3`, which were deprecated since CGAL-4.13.
|
||||
|
||||
### [3D Surface Mesh Generation](https://doc.cgal.org/6.0/Manual/packages.html#PkgSurfaceMesher3)
|
||||
|
||||
- This package is deprecated and the package [3D Mesh Generation](https://doc.cgal.org/6.0/Manual/packages.html#PkgMesh3) should be used instead.
|
||||
|
||||
### [Surface Mesh Parameterization](https://doc.cgal.org/6.0/Manual/packages.html#PkgSurfaceMeshParameterization)
|
||||
|
||||
- **Breaking change**: The method [`CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3`](https://doc.cgal.org/6.0/Surface_mesh_parameterization/classCGAL_1_1Surface__mesh__parameterization_1_1LSCM__parameterizer__3.html) now requires the Eigen library.
|
||||
- **Breaking change**: CGAL no longer ships its own version of OpenNL.
|
||||
|
||||
### [Surface Mesh](https://doc.cgal.org/6.0/Manual/packages.html#PkgSurfaceMesh)
|
||||
|
||||
- **Breaking change**: The return type of [`CGAL::Surface_mesh::property_map()`](https://doc.cgal.org/6.0/Surface_mesh/classCGAL_1_1Surface__mesh.html#afc99c7ea179dc1c21a2ab59ed183184a) has been changed to `std::optional`.
|
||||
|
||||
### [3D Point Set](https://doc.cgal.org/6.0/Manual/packages.html#PkgPointSet3)
|
||||
|
||||
- **Breaking change**: The return type of [`CGAL::Point_set_3::property_map()`](https://doc.cgal.org/6.0/Point_set_3/classCGAL_1_1Point__set__3.html#a571ecc603cd32d78c7effaf86fe120ad) has been changed to `std::optional`.
|
||||
|
||||
### [Shape Detection](https://doc.cgal.org/6.0/Manual/packages.html#PkgShapeDetection)
|
||||
|
||||
- **Breaking change**: Replaced all instances of `boost::shared_ptr` with `std::shared_ptr`.
|
||||
|
||||
### [2D Straight Skeleton and Polygon Offsetting](https://doc.cgal.org/6.0/Manual/packages.html#PkgStraightSkeleton2)
|
||||
|
||||
- **Breaking change**: Replaced all instances of `boost::shared_ptr` with `std::shared_ptr`.
|
||||
- **Breaking change**: Replaced all instances of `boost::optional` with `std::optional`.
|
||||
|
|
|
|||
|
|
@ -1,168 +1,301 @@
|
|||
Subject: CGAL 5.6 Beta 1 Released, Computational Geometry Algorithms Library
|
||||
Subject: CGAL 6.0 Beta 1 Released, Computational Geometry Algorithms Library
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Body:
|
||||
|
||||
The CGAL Open Source Project is pleased to announce the release 5.6 Beta 1 of
|
||||
CGAL, the Computational Geometry Algorithms Library.
|
||||
The CGAL Open Source Project is pleased to announce the release
|
||||
6.0 Beta 1 of CGAL, the Computational Geometry Algorithms Library.
|
||||
|
||||
CGAL version 5.6 Beta 1 is a public testing release. It should provide a
|
||||
CGAL version 6.0 Beta 1 is a public testing release. It should provide a
|
||||
solid ground to report bugs that need to be tackled before the release
|
||||
of the final version of CGAL 5.6 in July 2023.
|
||||
of the final version of CGAL 6.0 in July 2024.
|
||||
|
||||
Besides fixes and general enhancement to existing packages, the
|
||||
following has changed since CGAL 5.5:
|
||||
following has changed since CGAL 5.6:
|
||||
|
||||
General Changes
|
||||
|
||||
- Breaking change: Package-specific assertions, preconditions, and
|
||||
postconditions (such as CGAL_triangulation_assertion) have been
|
||||
removed. Corresponding CGAL-wide versions (such as CGAL_assertion)
|
||||
should be used instead.
|
||||
- CGAL 6.0 is the first release of CGAL that requires a C++ compiler
|
||||
with the support of C++17 or later. The new list of supported
|
||||
compilers is:
|
||||
- Visual C++ 15.9, 16.10, 17.0 (from Visual Studio 2017, 2019
|
||||
and 2022) or later
|
||||
- Gnu g++ 11.4.0 or later (on Linux or macOS)
|
||||
- LLVM Clang version 15.0.7 or later (on Linux)
|
||||
- Apple Clang compiler versions 10.0.1, 12.0.5, and 15.0.0 (on
|
||||
macOS)
|
||||
- The minimal supported version of Boost is now 1.72.0.
|
||||
- The CGAL Core library is no longer based on GMP, but on
|
||||
Boost.Multiprecision. Either GMP backend or Boost backend can be
|
||||
used.
|
||||
- All demos are now based on Qt6.
|
||||
- Breaking change: The CMake file UseCGAL.cmake has been removed from
|
||||
CGAL. Usages of the CMake variables ${CGAL_USE_FILE} and
|
||||
${CGAL_LIBRARIES} must be replaced by a link to the imported target
|
||||
CGAL::CGAL, for example:
|
||||
target_link_library(your_target PRIVATE CGAL::CGAL).
|
||||
|
||||
Shape Detection (major changes)
|
||||
Kinetic Space Partition (new package)
|
||||
|
||||
- Breaking change: The region growing part of the package have been
|
||||
reworked to fix design issues introduced with the handling of
|
||||
FaceGraph models. In particular, the notion of Item has been
|
||||
introduced to reference an element in the input range of elements.
|
||||
Region maps now operates on Item and no longer on the value type of
|
||||
the input range.
|
||||
- Breaking change: The method update() in the concept RegionType now
|
||||
returns a Boolean instead of void, that is used inside the class
|
||||
Region_growing for detecting if the input conditions for the new
|
||||
region are satisfied. This change affects only user-defined types of
|
||||
regions.
|
||||
- Breaking change: The constructors of all models used together with
|
||||
the region growing algorithm now enable users to provide parameters
|
||||
through the named parameters mechanism.
|
||||
- All fitting classes in the region growing framework are now using
|
||||
better versions of the region conditions, more precise and faster,
|
||||
including the correct normal orientations.
|
||||
- Added new models of the concept RegionType for getting linear
|
||||
regions in a set of 2D and 3D segments and on 2D and 3D polylines.
|
||||
- Added the class Polyline_graph for extracting a set of polylines
|
||||
from a face graph, which splits this graph into a set of
|
||||
user-defined regions.
|
||||
- Added new shapes to the Region Growing algorithm on a point set:
|
||||
circles in 2D, spheres in 3D, and cylinders in 3D.
|
||||
- This package implements kinetic space partition: based on a set of
|
||||
planar input shapes, the bounding box of the input data is split
|
||||
into convex volumes. The complexity of the partition can be adjusted
|
||||
with a single parameter.
|
||||
|
||||
2D Straight Skeleton and Polygon Offsetting (major changes)
|
||||
Kinetic Surface Reconstruction (new package)
|
||||
|
||||
- Added weighted straight skeletons: weighted straight skeletons are a
|
||||
generalization of straight skeletons. Contour edges are assigned a
|
||||
positive weight, which can be understood as assigning a speed to the
|
||||
wavefront spawned from the contour edge.
|
||||
- Added straight skeleton extrusion: this CGAL package now implements
|
||||
the extrusion of weighted straight skeletons of polygons with holes.
|
||||
The output is a closed, combinatorially 2-manifold surface triangle
|
||||
mesh. See also the news entry.
|
||||
- The package implements a piece-wise planar surface reconstruction
|
||||
pipeline from point clouds combining methods from the Shape
|
||||
Detection, Shape Regularization and Kinetic Shape Partition packages
|
||||
and graph-cut to reconstruct surfaces from point clouds.
|
||||
|
||||
Combinatorial Maps, Generalized Maps, and Linear Cell Complex
|
||||
Basic Viewer (new package)
|
||||
|
||||
- Added a version that uses indices instead of handles as dart and
|
||||
attribute descriptors. As the indices are integers convertible from
|
||||
and to std::size_t, they can be used as index into vectors which
|
||||
store properties. To use the index version, Use_index must be
|
||||
defined and be equal to CGAL::Tag_true in the item class.
|
||||
- The basic viewer package provides interactive visualization for most
|
||||
CGAL packages, such as 2D Arrangements, 2D Regularized Boolean
|
||||
Set-Operations, Linear Cell Complex, 3D Boolean Operations on Nef
|
||||
Polyhedra, 2D Periodic Triangulations, 3D Point Set, 2D Polygons, 3D
|
||||
Polyhedral Surface, 2D Straight Skeleton and Polygon Offsetting,
|
||||
Surface Mesh, 2D Triangulations, 3D Triangulations, 2D Voronoi
|
||||
Diagrams, and more. The most simple use case of the basic viewer is
|
||||
the call of the global CGAL::draw() function. There is one such
|
||||
draw() function for each CGAL package that has a basic viewer. Such
|
||||
a call opens an interactive window showing the given model and
|
||||
allowing to navigate in the scene, show or hide some specific cells,
|
||||
show the interior of the model if any, etc. The Basic_viewer is
|
||||
based on Qt6.
|
||||
|
||||
Polygon Repair (new package)
|
||||
|
||||
- This package provides algorithms to repair 2D polygons, polygons
|
||||
with holes, and multipolygons with holes, by selecting faces of the
|
||||
arrangement of the input using the odd-even heuristic.
|
||||
|
||||
2D and 3D Linear Geometry Kernel
|
||||
|
||||
- Breaking change: Replaced all instances of boost::variant with
|
||||
std::variant in the intersection functions.
|
||||
- Breaking change: Replaced all instances of boost::optional with
|
||||
std::optional in the intersection functions.
|
||||
|
||||
3D Polyhedral Surface
|
||||
|
||||
- The demo of this package, also known as “Polyhedron Demo” has been
|
||||
renamed “CGAL Lab” and moved to its own package (“Lab”).
|
||||
|
||||
2D and 3D Fast Intersection and Distance Computation (AABB Tree)
|
||||
|
||||
- The AABB tree can now be used with 2D or 3D primitives:
|
||||
- The concepts AABBGeomTraits and AABBRayIntersectionGeomTraits
|
||||
have been replaced by AABBGeomTraits_3 and by
|
||||
AABBRayIntersectionGeomTraits_3, respectively.
|
||||
- The concepts AABBGeomTraits_2 and
|
||||
AABBRayIntersectionGeomTraits_2 have been introduced, as the 2D
|
||||
counterparts.
|
||||
- The class CGAL::AABB_traits is deprecated and replaced by
|
||||
CGAL::AABB_traits_3.
|
||||
- The class CGAL::AABB_traits_2 is introduced as the 2D
|
||||
counterpart.
|
||||
- The class CGAL::AABB_segment_primitive has been deprecated and
|
||||
replaced by the class CGAL::AABB_segment_primitive_3.
|
||||
- The class CGAL::AABB_triangle_primitive has been deprecated and
|
||||
replaced by the class CGAL::AABB_triangle_primitive_3.
|
||||
- The following 2D primitive classes have been added:
|
||||
CGAL::AABB_segment_primitive_2,
|
||||
CGAL::AABB_polyline_segment_primitive_2,
|
||||
CGAL::AABB_triangle_primitive_2,
|
||||
CGAL::AABB_indexed_triangle_primitive_2.
|
||||
- Breaking change: The concept AABBTraits now refines the concept
|
||||
SearchTraits.
|
||||
- Breaking change: Replaced all instances of boost::optional with
|
||||
std::optional.
|
||||
|
||||
2D Arrangements
|
||||
|
||||
- Introduced an overload function template, namely draw(arr), that
|
||||
renders arrangements based on the Basic_viewer_qt class template. As
|
||||
of now, only 2D arrangements on the plane induced by (i)
|
||||
segments, (ii) conics, and (iii) circular arcs or (linear) segments
|
||||
are supported.
|
||||
- Improved the traits class template that handles conics, namely
|
||||
Arr_conic_traits_2. This includes the following: 1. Fixed a couple
|
||||
of bugs and slightly optimized some functions. 2. Introduced
|
||||
functionality that approximates conics with polylines. (This is used
|
||||
to draw conic curves.) 3. Breaking change: Changed the interface to
|
||||
generate conic curves. In the past, curves where generated directly
|
||||
using the constructors of the conic and x-monotone conic constructs.
|
||||
Now, they are constructed via function objects provided by the
|
||||
traits. This eliminates the constructions of temporary kernels. The
|
||||
old functionality is obsolete, but still supported for a limited
|
||||
number of versions. It depends on a static member function of the
|
||||
traits. In a future version this function will no longer be static,
|
||||
implying that the old functionality will no longer be supported.
|
||||
- Introduced functionality that approximates circular segments with
|
||||
polylines. (This is used to draw conic curves.)
|
||||
- Breaking change: Replaced all instances of boost::variant with
|
||||
std::variant.
|
||||
- Breaking change: The type of the result of point location queries
|
||||
has been changed to std::variant. Support for the old macro
|
||||
CGAL_ARR_POINT_LOCATION_VERSION has been removed.
|
||||
- Breaking change: Eliminated the error-prone C-type casting that was
|
||||
used to define observers. In general, backward compatibility was
|
||||
maintained; however, the class template CGAL::Arr_observer has been
|
||||
replaced by an alias template. (The class CGAL::Arr_observer was
|
||||
renamed to CGAL::Aos_observer).
|
||||
- Introduced Arr_dcel, which essentially replaces the former
|
||||
CGAL::Arr_default_dcel. Backward compatibility was maintained by the
|
||||
introduction of the alias template CGAL::Arr_default_dcel.
|
||||
CGAL::Arr_dcel, as opposed to the former CGAL::Arr_default_dcel is
|
||||
templated (in addition to the geometry traits) by Vertex, Halfedge,
|
||||
and Face template parameters, and they have default type values. All
|
||||
this enables the layered extension of DCEL records.
|
||||
- Fixed a bug in the zone construction code applied to arrangements of
|
||||
geodesic arcs on a sphere, when inserting an arc that lies on the
|
||||
identification curve.
|
||||
- Introduced a new interactive program that demonstrates 2D
|
||||
arrangements embedded on the sphere called earth. The program (i)
|
||||
reads a database of all administrative boundaries of the countries
|
||||
in the world, (ii) displays the globe with all countries and land
|
||||
covered by water (which is land not covered by countries) on a
|
||||
window, and (ii) enables interaction with the user.
|
||||
|
||||
3D Envelopes
|
||||
|
||||
- Breaking change: Construct_projected_boundary_2 in EnvelopeTraits_3
|
||||
now uses std::variant instead of CGAL::Object.
|
||||
- Passed the base class of CGAL::Env_plane_traits_3 as a template
|
||||
parameter with a default value (being the 2D arrangement linear
|
||||
traits). Similarly, passed the base class of
|
||||
CGAL::Env_triangle_traits_3 as a template parameter with a default
|
||||
value (being the 2D arrangement segment traits).
|
||||
|
||||
Combinatorial Maps and Generalized Maps
|
||||
|
||||
- Added the function insert_cell_1_between_two_cells_2() to the
|
||||
GenericMap concept, which enables users to insert an edge between
|
||||
two different faces in order to create faces with holes.
|
||||
|
||||
- Added new meshing criterion edge_distance, an upper bound for the
|
||||
distance from the edge to the 1D feature.
|
||||
|
||||
- Breaking change: the concept MeshEdgeCriteria_3 was modified to
|
||||
include the new meshing criterion edge_distance.
|
||||
|
||||
Quadtrees, Octrees, and Orthtrees
|
||||
|
||||
- Breaking change:
|
||||
- Node splitting behavior and per-node data are now customizable
|
||||
via the Traits class.
|
||||
- Nodes are now stored as a property map, with properties of each
|
||||
node accessed by index.
|
||||
- Nearest neighbors functions only work for Orthtrees which
|
||||
provide the necessary functionality.
|
||||
|
||||
CGAL and the Boost Graph Library (BGL)
|
||||
|
||||
- Added the function CGAL::remove_all_elements(), which removes
|
||||
vertices, halfedges, and faces without collecting garbage and
|
||||
without removing properties.
|
||||
- Dynamic property maps can now have a default value.
|
||||
- The class CGAL::Face_filtered_graph now supports patch IDs of any
|
||||
type and not just faces_size_type. The only requirement is that the
|
||||
type is hashable.
|
||||
|
||||
Polygon Mesh Processing
|
||||
|
||||
- Added functions
|
||||
CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()
|
||||
and CGAL::Polygon_mesh_processing::detect_corners_of_regions(),
|
||||
which enable partitioning a mesh into planar regions using the
|
||||
region growing algorithm from the Shape Detection package.
|
||||
|
||||
- Added the functions
|
||||
CGAL::Polygon_mesh_processing::remesh_planar_patches() and
|
||||
CGAL::Polygon_mesh_processing::remesh_almost_planar_patches(), which
|
||||
can be used to remesh patches of coplanar faces in a mesh.
|
||||
|
||||
- Added the function
|
||||
CGAL::Polygon_mesh_processing::surface_Delaunay_remeshing(), which
|
||||
can be used to remesh a surface triangle mesh using the Delaunay
|
||||
refinement algorithm from the 3D Mesh Generation package.
|
||||
|
||||
CGAL::Polygon_mesh_processing::autorefine_triangle_soup(), which can
|
||||
be used to refine a soup of triangles such that no pair of triangles
|
||||
intersects in their interiors. Also added, the function
|
||||
CGAL::Polygon_mesh_processing::autorefine() operating directly on a
|
||||
triangle mesh and updating it using the aforementioned function on a
|
||||
triangle soup.
|
||||
- Added the class CGAL::Corefinement::Non_manifold_output_visitor,
|
||||
which can be used in corefinement based functions to deal with
|
||||
non-manifold outputs.
|
||||
- Added the option to use a variable sizing field for
|
||||
CGAL::Polygon_mesh_processing::isotropic_remeshing(), and a sizing
|
||||
function based on a measure of local curvature for adaptive
|
||||
remeshing.
|
||||
- Added the function
|
||||
CGAL::Polygon_mesh_processing::remove_almost_degenerate_faces(),
|
||||
which can be used to remove badly shaped triangles faces in a mesh.
|
||||
|
||||
- Added the functions
|
||||
CGAL::Polygon_mesh_processing::does_triangle_soup_self_intersect()
|
||||
and
|
||||
CGAL::Polygon_mesh_processing::triangle_soup_self_intersections() to
|
||||
identify and report self-intersections in a triangle soup, similarly
|
||||
to existing functions on triangle meshes.
|
||||
|
||||
CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()
|
||||
which can be used to compute the mean and Gaussian curvatures, as
|
||||
well as the principal curvature and directions.
|
||||
- Added the function
|
||||
CGAL::Polygon_mesh_processing::triangulate_polygons(), which allows
|
||||
users to triangulate polygon soups.
|
||||
CGAL::Polygon_mesh_processing::refine_mesh_at_isolevel() which can
|
||||
be used to refine a polygon mesh along an isocurve.
|
||||
- Added the function CGAL::Polygon_mesh_processing::add_bbox(), which
|
||||
enables adding a tight or extended, triangulated or not, bounding
|
||||
box to a face graph.
|
||||
|
||||
- Added a named parameter to
|
||||
CGAL::Polygon_mesh_processing::smooth_shape() to disable the
|
||||
scaling, which otherwise aims to compensate volume loss during
|
||||
smoothing.
|
||||
2D Triangulations
|
||||
|
||||
- Deprecated the overloads of functions
|
||||
CGAL::Polygon_mesh_processing::triangulate_hole(),
|
||||
CGAL::Polygon_mesh_processing::triangulate_and_refine_hole(), and
|
||||
CGAL::Polygon_mesh_processing::triangulate_refine_and_fair_hole()
|
||||
which have output iterators for vertices and faces as parameter.
|
||||
They are replaced by overloads with two additional named parameters.
|
||||
- Breaking change: the concept TriangulationTraits_2 now requires an
|
||||
additional functor Compare_xy_2.
|
||||
|
||||
3D Triangulations
|
||||
|
||||
- Added three member functions vertices() to the class
|
||||
CGAL::Triangulation_3. Each of them returns an array containing the
|
||||
vertices of the given triangulation simplex.
|
||||
|
||||
dD Triangulations
|
||||
|
||||
- Breaking change: CGAL::TDS_full_cell_mirror_storage_policy is now
|
||||
unsupported in dimension larger than 127.
|
||||
- Breaking change: Inserting multiple unweighted points in the same
|
||||
position now keeps the first one, instead of switching to the
|
||||
latest. This only affects custom point types where not all points in
|
||||
the same position are equivalent.
|
||||
|
||||
Tetrahedral Remeshing
|
||||
|
||||
- Added a sizing field as new parameter of
|
||||
CGAL::tetrahedral_isotropic_remeshing(), which can be used to
|
||||
perform non-uniform and adaptive remeshing.
|
||||
- Breaking change: The template parameters of
|
||||
CGAL::Tetrahedral_remeshing::Remeshing_cell_base_3 have been
|
||||
modified, reverting changes introduced in CGAL 5.6.
|
||||
- Breaking change: The vertex base of
|
||||
CGAL::Tetrahedral_remeshing::Remeshing_vertex_base_3 must now be a
|
||||
model of the concept SimplicialMeshVertexBase_3 (and not only
|
||||
TriangulationVertexBase_3).
|
||||
|
||||
3D Simplicial Mesh Data Structure
|
||||
|
||||
- Breaking change: The template parameters of
|
||||
CGAL::Simplicial_mesh_cell_base_3 have been modified to enable
|
||||
passing a geometric traits and a custom cell base class.
|
||||
|
||||
3D Mesh Generation
|
||||
|
||||
- Added two new named parameters to the named constructor
|
||||
CGAL::create_labeled_image_mesh_domain() for automatic detection and
|
||||
protection of 1D-curves that lie at the intersection of three or
|
||||
more subdomains extracted from labeled images.
|
||||
- Added CGAL::Sizing_field_with_aabb_tree, a geometry-aware sizing
|
||||
field for feature edges in polyhedral domains.
|
||||
- Added new meshing criterion edge_min_size to avoid subdividing sharp
|
||||
edges that are shorter than a prescribed size bound.
|
||||
- Added new meshing criteria facet_min_size and cell_min_size to
|
||||
prevent Delaunay refinement from creating simplices smaller than a
|
||||
prescribed bound.
|
||||
- Deprecated usage of boost parameters in favor of function named
|
||||
parameters.
|
||||
- Breaking change: Removed the concept TriangleAccessor, the template
|
||||
parameter TriangleAccessor, as well as the class Triangle_accessor.
|
||||
These were no longer used for several releases.
|
||||
- Breaking change: Removed the class templates
|
||||
CGAL::Gray_image_mesh_domain_3, CGAL::Implicit_mesh_domain_3, and
|
||||
CGAL::Labeled_image_mesh_domain_3, which were deprecated since
|
||||
CGAL-4.13.
|
||||
|
||||
3D Surface Mesh Generation
|
||||
|
||||
- This package is deprecated and the package 3D Mesh Generation should
|
||||
be used instead.
|
||||
|
||||
Surface Mesh Parameterization
|
||||
|
||||
- Breaking change: The method
|
||||
CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3 now
|
||||
requires the Eigen library.
|
||||
- Breaking change: CGAL no longer ships its own version of OpenNL.
|
||||
|
||||
Surface Mesh
|
||||
|
||||
- Breaking change: The return type of
|
||||
CGAL::Surface_mesh::property_map() has been changed to
|
||||
std::optional.
|
||||
|
||||
3D Point Set
|
||||
|
||||
- Breaking change: The return type of
|
||||
CGAL::Point_set_3::property_map() has been changed to std::optional.
|
||||
|
||||
Shape Detection
|
||||
|
||||
- Breaking change: Replaced all instances of boost::shared_ptr with
|
||||
std::shared_ptr.
|
||||
|
||||
2D Straight Skeleton and Polygon Offsetting
|
||||
|
||||
- Breaking change: Replaced all instances of boost::shared_ptr with
|
||||
std::shared_ptr.
|
||||
- Breaking change: Replaced all instances of boost::optional with
|
||||
std::optional.
|
||||
|
||||
|
||||
See https://www.cgal.org/2023/06/13/cgal56-beta1/ for a
|
||||
See https://www.cgal.org/2024/06/21/cgal60-beta1/ for a
|
||||
complete list of changes.
|
||||
|
||||
|
||||
The development of CGAL will then now on the future CGAL-6.0 (planned
|
||||
for December 2023), with bug-fixes regularly backported to the branches
|
||||
for CGAL-5.5.x and CGAL-5.6.x.
|
||||
|
||||
CGAL-6.0 will be the first release of CGAL requiring C++17 or later. It
|
||||
will also support Qt6.
|
||||
|
||||
|
||||
The CGAL project is a collaborative effort to develop a robust,
|
||||
easy-to-use, and efficient C++ software library of geometric data
|
||||
structures and algorithms, like
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ printf "Copy documentation to doc_html/ and doc_html_online/...\n"
|
|||
[ -d "/srv/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual" ] || mkdir -p "/srv/CGAL/www/${PUBLIC_RELEASE_NAME#CGAL-}/Manual"
|
||||
|
||||
cp "$PUBLIC_RELEASE_DIR"/*(.) "${RELEASE_CANDIDATES_DIR}/$PUBLIC_RELEASE_NAME"
|
||||
files=("$MANUAL_TESTS_DIR/$INTERNAL_RELEASE"/output1/*)
|
||||
files=("$MANUAL_TESTS_DIR/$INTERNAL_RELEASE"/output2/*)
|
||||
if ((${#files[@]} == 0)); then
|
||||
printf "ERROR: documentation files are missing\n"
|
||||
error_code=1
|
||||
else
|
||||
rsync -a --exclude xml "$MANUAL_TESTS_DIR/$INTERNAL_RELEASE"/output1/* "$DEST_DIR/doc_html/"
|
||||
rsync -a --exclude xml "$MANUAL_TESTS_DIR/$INTERNAL_RELEASE"/output2/* "$DEST_DIR/doc_html/"
|
||||
pushd "$DEST_DIR/doc_html/Manual/search"
|
||||
for i in g n c s i; do sed -i "s/..\/BGL$i/..\/BGL\/$i/g" *; done
|
||||
popd
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ int main(int argc, char *argv[])
|
|||
Polyhedron P1, P2;
|
||||
std::ifstream ifs1((argc > 1) ? argv[1] : CGAL::data_file_path("meshes/cross_quad.off"));
|
||||
ifs1 >> P1;
|
||||
std::ifstream ifs2((argc > 1) ? argv[1] : CGAL::data_file_path("meshes/beam.off"));
|
||||
std::ifstream ifs2((argc > 2) ? argv[2] : CGAL::data_file_path("meshes/beam.off"));
|
||||
ifs2 >> P2;
|
||||
|
||||
// initialize nef from polyhedron
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ void polygon_mesh_to_nef_3(const PolygonMesh& P, SNC_structure& S, FaceIndexMap
|
|||
PolygonMesh, SNC_structure,HalfedgeIndexMap> index_adder(P,himap);
|
||||
|
||||
for(vertex_descriptor pv : vertices(P) ) {
|
||||
if (halfedge(pv, P) == boost::graph_traits<PolygonMesh>::null_halfedge()) continue; // skip isolated vertices
|
||||
|
||||
typename boost::property_traits<PMap>::reference npv = get(pmap,pv);
|
||||
Vertex_handle nv = S.new_vertex();
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
\cgalConcept
|
||||
|
||||
The concept `Periodic_2DelaunayTriangulationTraits_2` is the first template parameter of the class
|
||||
`Periodic_2_Delaunay_triangulation_2`. It refines the concepts
|
||||
`CGAL::Periodic_2_Delaunay_triangulation_2`. It refines the concepts
|
||||
`Periodic_2TriangulationTraits_2` and `DelaunayTriangulationTraits_2`.
|
||||
It redefines the geometric objects, predicates and constructions to work with
|
||||
point-offset pairs. In most cases the offsets will be (0,0) and the
|
||||
|
|
@ -125,4 +125,3 @@ public:
|
|||
/// @}
|
||||
|
||||
}; /* end Periodic_2DelaunayTriangulationTraits_2 */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
\cgalConcept
|
||||
|
||||
The concept `Periodic_2TriangulationTraits_2` is the first template parameter of the classes
|
||||
`Periodic_2_triangulation_2<Traits, Tds>`. This concept provides the types of
|
||||
`CGAL::Periodic_2_triangulation_2<Traits, Tds>`. This concept provides the types of
|
||||
the geometric primitives used in the triangulation and some function
|
||||
object types for the required predicates on those primitives.
|
||||
|
||||
|
|
@ -296,4 +296,3 @@ public:
|
|||
/// @}
|
||||
|
||||
}; /* end Periodic_2TriangulationTraits_2 */
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ functor the version without offsets.
|
|||
\cgalHasModelsEnd
|
||||
|
||||
In addition to the requirements described for the traits class
|
||||
RegularTriangulationTraits_3, the geometric traits class of a
|
||||
`RegularTriangulationTraits_3`, the geometric traits class of a
|
||||
periodic regular triangulation must fulfill the following
|
||||
requirements.
|
||||
|
||||
|
|
@ -250,4 +250,3 @@ Construct_weighted_circumcenter_3 construct_weighted_circumcenter_3_object();
|
|||
/// @}
|
||||
|
||||
}; /* end Periodic_3RegularTriangulationTraits_3 */
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
\cgalConcept
|
||||
|
||||
The concept `Periodic_3TriangulationTraits_3` is the first template parameter of the class
|
||||
`Periodic_3_triangulation_3`. It refines the concept
|
||||
`CGAL::Periodic_3_triangulation_3`. It refines the concept
|
||||
`TriangulationTraits_3` from the \cgal 3D Triangulations.
|
||||
It redefines the geometric objects, predicates and constructions to
|
||||
work with point-offset pairs. In most cases the offsets will be
|
||||
|
|
@ -258,4 +258,3 @@ Construct_tetrahedron_3 construct_tetrahedron_3_object();
|
|||
/// @}
|
||||
|
||||
}; /* end Periodic_3TriangulationTraits_3 */
|
||||
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ The class expects two template parameters.
|
|||
bool remove(Vertex_handle v);
|
||||
|
||||
/*!
|
||||
Removes the vertices in the iterator range `[firs, last)` from the triangulation.
|
||||
Removes the vertices in the iterator range `[first, last)` from the triangulation.
|
||||
\pre all vertices in `[first, last)` are vertices of the triangulation.
|
||||
*/
|
||||
template <class VertexRemoveIterator>
|
||||
|
|
|
|||
|
|
@ -105,7 +105,12 @@ void simplify_range(HalfedgeRange& halfedge_range,
|
|||
typedef CGAL::dynamic_halfedge_property_t<bool> Halfedge_bool_tag;
|
||||
typedef typename boost::property_map<TriangleMesh, Halfedge_bool_tag>::type Range_halfedges;
|
||||
|
||||
Range_halfedges range_halfedges = get(Halfedge_bool_tag(), tm, false);
|
||||
const bool all_hedges = (::CGAL::internal::exact_num_halfedges(tm)==halfedge_range.size());
|
||||
|
||||
Range_halfedges range_halfedges = get(Halfedge_bool_tag(), tm, all_hedges);
|
||||
if (!all_hedges)
|
||||
for(halfedge_descriptor h : halfedge_range)
|
||||
put(range_halfedges, h, true);
|
||||
|
||||
CGAL_postcondition_code(const std::size_t initial_n = halfedge_range.size();)
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
|
|
@ -44,7 +44,7 @@ functions of the package are provided in Section \ref Ridges_3Examples.
|
|||
|
||||
For a detailed introduction to ridges and related topics, the reader
|
||||
may consult
|
||||
\cgalCite{cgal:hgygm-ttdpf-99},cgal:p-gd-01, as well as
|
||||
\cgalCite{cgal:hgygm-ttdpf-99},\cgalCite{cgal:p-gd-01}, as well as
|
||||
the following survey article \cgalCite{cgal:cp-ssulc-05}.
|
||||
In the sequel, we just introduce the basic notions so as to explain
|
||||
our algorithms. Consider a smooth embedded surface, and denote \f$ k_1\f$
|
||||
|
|
|
|||
|
|
@ -13,6 +13,14 @@ exec > "$LOGFILE"
|
|||
# Display commands as if using `set -o xtrace`, but to the stdout
|
||||
trap 'echo "[$BASH_SOURCE:$LINENO] $BASH_COMMAND" >&1' DEBUG
|
||||
|
||||
# Report errxit errors on cerr (&2)
|
||||
report_errexit() {
|
||||
echo "errexit on line $(caller)" >&1
|
||||
echo "errexit on line $(caller)" >&2
|
||||
}
|
||||
|
||||
trap report_errexit ERR
|
||||
|
||||
# A helper error function that outputs both to stderr and stdout before
|
||||
# aborting the script.
|
||||
function error() {
|
||||
|
|
|
|||
|
|
@ -31,10 +31,6 @@
|
|||
namespace CGAL {
|
||||
namespace Shape_detection {
|
||||
|
||||
// Forward declaration needed for automatic traits detection without
|
||||
// including the deprecated header itself
|
||||
template <typename Gt, typename IR, typename IPM, typename INM>
|
||||
struct Shape_detection_traits;
|
||||
|
||||
namespace internal {
|
||||
|
||||
|
|
@ -43,9 +39,6 @@ struct Traits_base { typedef Traits type; };
|
|||
template <typename Gt, typename IR, typename IPM, typename INM>
|
||||
struct Traits_base<CGAL::Shape_detection::Efficient_RANSAC_traits<Gt,IR,IPM,INM> >
|
||||
{ typedef Gt type; };
|
||||
template <typename Gt, typename IR, typename IPM, typename INM>
|
||||
struct Traits_base<CGAL::Shape_detection::Shape_detection_traits<Gt,IR,IPM,INM> >
|
||||
{ typedef Gt type; };
|
||||
|
||||
template<class Traits>
|
||||
class RANSAC_octree {
|
||||
|
|
|
|||
|
|
@ -828,8 +828,8 @@ Triangulation_data_structure<Dim, Vb, Fcb>
|
|||
delete_vertex(v);
|
||||
delete_full_cell(s);
|
||||
inf1->set_vertex(1, Vertex_handle());
|
||||
inf1->set_vertex(1, Vertex_handle());
|
||||
inf2->set_neighbor(1, Full_cell_handle());
|
||||
inf2->set_vertex(1, Vertex_handle());
|
||||
inf1->set_neighbor(1, Full_cell_handle());
|
||||
inf2->set_neighbor(1, Full_cell_handle());
|
||||
associate_vertex_with_full_cell(inf1, 0, star);
|
||||
associate_vertex_with_full_cell(inf2, 0, v2);
|
||||
|
|
|
|||
|
|
@ -23,8 +23,9 @@ if(TARGET CGAL::Eigen3_support)
|
|||
create_single_source_cgal_program("test_torture.cpp")
|
||||
create_single_source_cgal_program("test_insert_if_in_star.cpp")
|
||||
create_single_source_cgal_program("simple_io_test.cpp")
|
||||
create_single_source_cgal_program("issue_8347.cpp")
|
||||
foreach(target test_triangulation test_delaunay test_regular test_tds
|
||||
test_torture test_insert_if_in_star simple_io_test)
|
||||
test_torture test_insert_if_in_star simple_io_test issue_8347)
|
||||
target_link_libraries(${target} PUBLIC CGAL::Eigen3_support)
|
||||
endforeach()
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
#include <iostream>
|
||||
|
||||
#include <CGAL/Epick_d.h>
|
||||
#include <CGAL/Epeck_d.h>
|
||||
#include <CGAL/Delaunay_triangulation.h>
|
||||
|
||||
typedef CGAL::Dynamic_dimension_tag Dim_tag;
|
||||
//typedef CGAL::Dimension_tag<2> Dim_tag;
|
||||
|
||||
typedef CGAL::Epick_d< Dim_tag > Kernel;
|
||||
typedef CGAL::Delaunay_triangulation<Kernel> Triangulation;
|
||||
|
||||
typedef typename Triangulation::Vertex_handle Vertex_handle;
|
||||
typedef typename Triangulation::Point Point;
|
||||
|
||||
Point create_point(double x,double y) {
|
||||
std::vector<double> c;
|
||||
c.push_back(x);
|
||||
c.push_back(y);
|
||||
return Point(2,c.begin(),c.end());
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
Triangulation T(2);
|
||||
|
||||
Point p1=create_point(2, 3);
|
||||
Point p2=create_point(6, 3);
|
||||
Point p3=create_point(0, 4);
|
||||
|
||||
Vertex_handle vh1=T.insert(p1);
|
||||
T.insert(p2);
|
||||
T.remove(vh1);
|
||||
|
||||
T.insert(p3);
|
||||
|
||||
std::cout << "Exit normally" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
\cgalConcept
|
||||
|
||||
The concept `DelaunayTriangulationTraits_3` is the first template parameter of the class
|
||||
`Delaunay_triangulation_3`. It defines the geometric objects (points,
|
||||
`CGAL::Delaunay_triangulation_3`. It defines the geometric objects (points,
|
||||
segments...) forming the triangulation together with a few geometric
|
||||
predicates and constructions on these objects.
|
||||
|
||||
|
|
@ -221,4 +221,3 @@ Construct_ray_3 construct_ray_3_object();
|
|||
/// @}
|
||||
|
||||
}; /* end DelaunayTriangulationTraits_3 */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
\cgalRefines{SpatialSortingTraits_3}
|
||||
|
||||
The concept `TriangulationTraits_3` is the first template parameter of the class
|
||||
`Triangulation_3`. It defines the geometric objects (points, segments,
|
||||
`CGAL::Triangulation_3`. It defines the geometric objects (points, segments,
|
||||
triangles and tetrahedra) forming the triangulation together with a few
|
||||
geometric predicates and constructions on these objects: lexicographical
|
||||
comparison, orientation in case of coplanar points and orientation in space.
|
||||
|
|
@ -188,4 +188,3 @@ Orientation_3 orientation_3_object();
|
|||
/// @}
|
||||
|
||||
}; /* end TriangulationTraits_3 */
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB |
Loading…
Reference in New Issue