mirror of https://github.com/CGAL/cgal
Merge branch 'releases/CGAL-4.14-branch'
This commit is contained in:
commit
c0ba28f80a
|
|
@ -46,15 +46,14 @@ MA 02110-1301, USA. */
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
namespace CORE {
|
namespace CORE {
|
||||||
|
|
||||||
CGAL_INLINE_FUNCTION
|
CGAL_INLINE_FUNCTION
|
||||||
int
|
int
|
||||||
__gmp_istream_set_base (istream &i, char &c, bool &zero, bool &showbase)
|
__gmp_istream_set_base (std::istream &i, char &c, bool &zero, bool &showbase)
|
||||||
{
|
{
|
||||||
int base;
|
int base;
|
||||||
|
using std::ios;
|
||||||
|
|
||||||
zero = showbase = false;
|
zero = showbase = false;
|
||||||
switch (i.flags() & ios::basefield)
|
switch (i.flags() & ios::basefield)
|
||||||
|
|
@ -96,7 +95,7 @@ __gmp_istream_set_base (istream &i, char &c, bool &zero, bool &showbase)
|
||||||
|
|
||||||
CGAL_INLINE_FUNCTION
|
CGAL_INLINE_FUNCTION
|
||||||
void
|
void
|
||||||
__gmp_istream_set_digits (string &s, istream &i, char &c, bool &ok, int base)
|
__gmp_istream_set_digits (std::string &s, std::istream &i, char &c, bool &ok, int base)
|
||||||
{
|
{
|
||||||
switch (base)
|
switch (base)
|
||||||
{
|
{
|
||||||
|
|
@ -131,13 +130,14 @@ __gmp_istream_set_digits (string &s, istream &i, char &c, bool &ok, int base)
|
||||||
}
|
}
|
||||||
|
|
||||||
CGAL_INLINE_FUNCTION
|
CGAL_INLINE_FUNCTION
|
||||||
istream &
|
std::istream &
|
||||||
//operator>> (istream &i, mpz_ptr z)
|
//operator>> (std::istream &i, mpz_ptr z)
|
||||||
io_read (istream &i, mpz_ptr z)
|
io_read (std::istream &i, mpz_ptr z)
|
||||||
{
|
{
|
||||||
|
using namespace std;
|
||||||
int base;
|
int base;
|
||||||
char c = 0;
|
char c = 0;
|
||||||
string s;
|
std::string s;
|
||||||
bool ok = false, zero, showbase;
|
bool ok = false, zero, showbase;
|
||||||
|
|
||||||
i.get(c); // start reading
|
i.get(c); // start reading
|
||||||
|
|
@ -175,13 +175,14 @@ io_read (istream &i, mpz_ptr z)
|
||||||
}
|
}
|
||||||
|
|
||||||
CGAL_INLINE_FUNCTION
|
CGAL_INLINE_FUNCTION
|
||||||
istream &
|
std::istream &
|
||||||
//operator>> (istream &i, mpq_ptr q)
|
//operator>> (std::istream &i, mpq_ptr q)
|
||||||
io_read (istream &i, mpq_ptr q)
|
io_read (std::istream &i, mpq_ptr q)
|
||||||
{
|
{
|
||||||
|
using namespace std;
|
||||||
int base;
|
int base;
|
||||||
char c = 0;
|
char c = 0;
|
||||||
string s;
|
std::string s;
|
||||||
bool ok = false, zero, showbase;
|
bool ok = false, zero, showbase;
|
||||||
|
|
||||||
i.get(c); // start reading
|
i.get(c); // start reading
|
||||||
|
|
@ -253,9 +254,9 @@ io_read (istream &i, mpq_ptr q)
|
||||||
}
|
}
|
||||||
|
|
||||||
CGAL_INLINE_FUNCTION
|
CGAL_INLINE_FUNCTION
|
||||||
ostream&
|
std::ostream&
|
||||||
//operator<< (ostream &o, mpz_srcptr z)
|
//operator<< (std::ostream &o, mpz_srcptr z)
|
||||||
io_write (ostream &o, mpz_srcptr z)
|
io_write (std::ostream &o, mpz_srcptr z)
|
||||||
{
|
{
|
||||||
char *str = new char [mpz_sizeinbase(z,10) + 2];
|
char *str = new char [mpz_sizeinbase(z,10) + 2];
|
||||||
str = mpz_get_str(str, 10, z);
|
str = mpz_get_str(str, 10, z);
|
||||||
|
|
@ -265,9 +266,9 @@ io_write (ostream &o, mpz_srcptr z)
|
||||||
}
|
}
|
||||||
|
|
||||||
CGAL_INLINE_FUNCTION
|
CGAL_INLINE_FUNCTION
|
||||||
ostream&
|
std::ostream&
|
||||||
//operator<< (ostream &o, mpq_srcptr q)
|
//operator<< (std::ostream &o, mpq_srcptr q)
|
||||||
io_write (ostream &o, mpq_srcptr q)
|
io_write (std::ostream &o, mpq_srcptr q)
|
||||||
{
|
{
|
||||||
// size according to GMP documentation
|
// size according to GMP documentation
|
||||||
char *str = new char [mpz_sizeinbase(mpq_numref(q), 10) +
|
char *str = new char [mpz_sizeinbase(mpq_numref(q), 10) +
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@
|
||||||
#include <CGAL/tss.h>
|
#include <CGAL/tss.h>
|
||||||
|
|
||||||
namespace CORE {
|
namespace CORE {
|
||||||
using namespace std;
|
|
||||||
class Expr;
|
class Expr;
|
||||||
// ==================================================
|
// ==================================================
|
||||||
// Typedefs
|
// Typedefs
|
||||||
|
|
@ -117,25 +116,25 @@ public:
|
||||||
Polynomial(const Polynomial &);
|
Polynomial(const Polynomial &);
|
||||||
Polynomial(const VecNT &);
|
Polynomial(const VecNT &);
|
||||||
Polynomial(int n, const char* s[]);
|
Polynomial(int n, const char* s[]);
|
||||||
Polynomial(const string & s, char myX='x');
|
Polynomial(const std::string & s, char myX='x');
|
||||||
Polynomial(const char* s, char myX='x');
|
Polynomial(const char* s, char myX='x');
|
||||||
~Polynomial();
|
~Polynomial();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void constructX(int n, Polynomial<NT>& P);
|
void constructX(int n, Polynomial<NT>& P);
|
||||||
void constructFromString(string & s, char myX='x');
|
void constructFromString(std::string & s, char myX='x');
|
||||||
int getnumber(const char* c, int i, unsigned int len, Polynomial<NT> & P);
|
int getnumber(const char* c, int i, unsigned int len, Polynomial<NT> & P);
|
||||||
bool isint(char c);
|
bool isint(char c);
|
||||||
int getint(const char* c, int i, unsigned int len, int & n);
|
int getint(const char* c, int i, unsigned int len, int & n);
|
||||||
int matchparen(const char* cstr, int start);
|
int matchparen(const char* cstr, int start);
|
||||||
int getbasicterm(string & s, Polynomial<NT> & P);
|
int getbasicterm(std::string & s, Polynomial<NT> & P);
|
||||||
int getterm(string & s, Polynomial<NT> & P);
|
int getterm(std::string & s, Polynomial<NT> & P);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//Returns a Polynomial corresponding to s, which is supposed to
|
//Returns a Polynomial corresponding to s, which is supposed to
|
||||||
//contain as place-holders the chars 'x' and 'y'.
|
//contain as place-holders the chars 'x' and 'y'.
|
||||||
Polynomial<NT> getpoly(string & s);
|
Polynomial<NT> getpoly(std::string & s);
|
||||||
|
|
||||||
// Assignment:
|
// Assignment:
|
||||||
Polynomial & operator=(const Polynomial&);
|
Polynomial & operator=(const Polynomial&);
|
||||||
|
|
|
||||||
|
|
@ -131,21 +131,21 @@ Polynomial<NT>::Polynomial(int n, const char * s[]) {
|
||||||
// want to generalize this to BigFloat, etc.
|
// want to generalize this to BigFloat, etc.
|
||||||
//
|
//
|
||||||
template <class NT>
|
template <class NT>
|
||||||
Polynomial<NT>::Polynomial(const string & s, char myX) {
|
Polynomial<NT>::Polynomial(const std::string & s, char myX) {
|
||||||
string ss(s);
|
std::string ss(s);
|
||||||
constructFromString(ss, myX);
|
constructFromString(ss, myX);
|
||||||
}
|
}
|
||||||
template <class NT>
|
template <class NT>
|
||||||
Polynomial<NT>::Polynomial(const char * s, char myX) {
|
Polynomial<NT>::Polynomial(const char * s, char myX) {
|
||||||
string ss(s);
|
std::string ss(s);
|
||||||
constructFromString(ss, myX);
|
constructFromString(ss, myX);
|
||||||
}
|
}
|
||||||
template <class NT>
|
template <class NT>
|
||||||
void Polynomial<NT>::constructFromString(string & s, char myX) {
|
void Polynomial<NT>::constructFromString(std::string & s, char myX) {
|
||||||
if(myX != 'x' || myX != 'X'){
|
if(myX != 'x' || myX != 'X'){
|
||||||
//Replace myX with 'x'.
|
//Replace myX with 'x'.
|
||||||
string::size_type loc = s.find(myX, 0);
|
std::string::size_type loc = s.find(myX, 0);
|
||||||
while(loc != string::npos){
|
while(loc != std::string::npos){
|
||||||
s.replace(loc,1,1,'x');
|
s.replace(loc,1,1,'x');
|
||||||
loc = s.find(myX, loc+1);
|
loc = s.find(myX, loc+1);
|
||||||
}
|
}
|
||||||
|
|
@ -241,7 +241,7 @@ int Polynomial<NT>::matchparen(const char* cstr, int start){
|
||||||
|
|
||||||
|
|
||||||
template <class NT>
|
template <class NT>
|
||||||
int Polynomial<NT>::getbasicterm(string & s, Polynomial<NT> & P){
|
int Polynomial<NT>::getbasicterm(std::string & s, Polynomial<NT> & P){
|
||||||
const char * cstr = s.c_str();
|
const char * cstr = s.c_str();
|
||||||
unsigned int len = s.length();
|
unsigned int len = s.length();
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
@ -254,7 +254,7 @@ int Polynomial<NT>::getbasicterm(string & s, Polynomial<NT> & P){
|
||||||
}else if(cstr[i] =='('){
|
}else if(cstr[i] =='('){
|
||||||
int oldi = i;
|
int oldi = i;
|
||||||
i = matchparen(cstr, i);
|
i = matchparen(cstr, i);
|
||||||
string t = s.substr(oldi+1, i -oldi -1);
|
std::string t = s.substr(oldi+1, i -oldi -1);
|
||||||
P = getpoly(t);
|
P = getpoly(t);
|
||||||
}else{
|
}else{
|
||||||
#ifdef CGAL_CORE_TRACE
|
#ifdef CGAL_CORE_TRACE
|
||||||
|
|
@ -272,7 +272,7 @@ int Polynomial<NT>::getbasicterm(string & s, Polynomial<NT> & P){
|
||||||
|
|
||||||
|
|
||||||
template <class NT>
|
template <class NT>
|
||||||
int Polynomial<NT>::getterm(string & s, Polynomial<NT> & P){
|
int Polynomial<NT>::getterm(std::string & s, Polynomial<NT> & P){
|
||||||
unsigned int len = s.length();
|
unsigned int len = s.length();
|
||||||
if(len == 0){// Zero Polynomial
|
if(len == 0){// Zero Polynomial
|
||||||
P=Polynomial<NT>();
|
P=Polynomial<NT>();
|
||||||
|
|
@ -280,7 +280,7 @@ int Polynomial<NT>::getterm(string & s, Polynomial<NT> & P){
|
||||||
}
|
}
|
||||||
unsigned int ind, oind;
|
unsigned int ind, oind;
|
||||||
const char* cstr =s.c_str();
|
const char* cstr =s.c_str();
|
||||||
string t;
|
std::string t;
|
||||||
//P will be used to accumulate the product of basic terms.
|
//P will be used to accumulate the product of basic terms.
|
||||||
ind = getbasicterm(s, P);
|
ind = getbasicterm(s, P);
|
||||||
while(ind != len-1 && cstr[ind + 1]!='+' && cstr[ind + 1]!='-' ){
|
while(ind != len-1 && cstr[ind + 1]!='+' && cstr[ind + 1]!='-' ){
|
||||||
|
|
@ -304,11 +304,11 @@ int Polynomial<NT>::getterm(string & s, Polynomial<NT> & P){
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class NT>
|
template <class NT>
|
||||||
Polynomial<NT> Polynomial<NT>::getpoly(string & s){
|
Polynomial<NT> Polynomial<NT>::getpoly(std::string & s){
|
||||||
|
|
||||||
//Remove white spaces from the string
|
//Remove white spaces from the string
|
||||||
string::size_type cnt=s.find(' ',0);
|
std::string::size_type cnt=s.find(' ',0);
|
||||||
while(cnt != string::npos){
|
while(cnt != std::string::npos){
|
||||||
s.erase(cnt, 1);
|
s.erase(cnt, 1);
|
||||||
cnt = s.find(' ', cnt);
|
cnt = s.find(' ', cnt);
|
||||||
}
|
}
|
||||||
|
|
@ -321,10 +321,10 @@ Polynomial<NT> Polynomial<NT>::getpoly(string & s){
|
||||||
//To handle the case when there is one '=' sign
|
//To handle the case when there is one '=' sign
|
||||||
//Suppose s is of the form s1 = s2. Then we assign s to
|
//Suppose s is of the form s1 = s2. Then we assign s to
|
||||||
//s1 + (-1)(s2) and reset len
|
//s1 + (-1)(s2) and reset len
|
||||||
string::size_type loc;
|
std::string::size_type loc;
|
||||||
if((loc=s.find('=',0)) != string::npos){
|
if((loc=s.find('=',0)) != std::string::npos){
|
||||||
s.replace(loc,1,1,'+');
|
s.replace(loc,1,1,'+');
|
||||||
string s3 = "(-1)(";
|
std::string s3 = "(-1)(";
|
||||||
s.insert(loc+1, s3);
|
s.insert(loc+1, s3);
|
||||||
len = s.length();
|
len = s.length();
|
||||||
s.insert(len, 1, ')');
|
s.insert(len, 1, ')');
|
||||||
|
|
@ -332,7 +332,7 @@ Polynomial<NT> Polynomial<NT>::getpoly(string & s){
|
||||||
len = s.length();
|
len = s.length();
|
||||||
|
|
||||||
const char *cstr = s.c_str();
|
const char *cstr = s.c_str();
|
||||||
string t;
|
std::string t;
|
||||||
Polynomial<NT> P;
|
Polynomial<NT> P;
|
||||||
// P will be the polynomial in which we accumulate the
|
// P will be the polynomial in which we accumulate the
|
||||||
//sum and difference of the different terms.
|
//sum and difference of the different terms.
|
||||||
|
|
@ -966,7 +966,7 @@ BigInt Polynomial<NT>::UpperBound() const {
|
||||||
lhsNeg.makeCeilExact();
|
lhsNeg.makeCeilExact();
|
||||||
|
|
||||||
/* compute B^{deg} */
|
/* compute B^{deg} */
|
||||||
if (rhs <= max(lhsPos,lhsNeg)) {
|
if (rhs <= (std::max)(lhsPos,lhsNeg)) {
|
||||||
B <<= 1;
|
B <<= 1;
|
||||||
rhs *= (BigInt(1)<<deg);
|
rhs *= (BigInt(1)<<deg);
|
||||||
} else
|
} else
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,10 @@ public:
|
||||||
double vy() const { return image_ptr->vy; }
|
double vy() const { return image_ptr->vy; }
|
||||||
double vz() const { return image_ptr->vz; }
|
double vz() const { return image_ptr->vz; }
|
||||||
|
|
||||||
|
double tx() const { return image_ptr->tx; }
|
||||||
|
double ty() const { return image_ptr->ty; }
|
||||||
|
double tz() const { return image_ptr->tz; }
|
||||||
|
|
||||||
float value(const std::size_t i,
|
float value(const std::size_t i,
|
||||||
const std::size_t j,
|
const std::size_t j,
|
||||||
const std::size_t k) const
|
const std::size_t k) const
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,28 @@ public:
|
||||||
std::shared_ptr<std::vector<std::size_t> > neighbors;
|
std::shared_ptr<std::vector<std::size_t> > neighbors;
|
||||||
/// \endcond
|
/// \endcond
|
||||||
|
|
||||||
|
/// \cond SKIP_IN_MANUAL
|
||||||
|
class Point_idx_to_point_unary_function
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef std::size_t argument_type;
|
||||||
|
typedef typename ItemMap::reference result_type;
|
||||||
|
typedef boost::readable_property_map_tag category;
|
||||||
|
|
||||||
|
const ItemRange* m_range;
|
||||||
|
ItemMap m_item_map;
|
||||||
|
|
||||||
|
Point_idx_to_point_unary_function (const ItemRange* range, ItemMap item_map)
|
||||||
|
: m_range (range), m_item_map (item_map)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
result_type operator() (const argument_type& arg) const
|
||||||
|
{
|
||||||
|
return get (m_item_map, *(m_range->begin() + arg));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/// \endcond
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const ItemRange* m_range;
|
const ItemRange* m_range;
|
||||||
ItemMap m_item_map;
|
ItemMap m_item_map;
|
||||||
|
|
@ -139,14 +161,12 @@ public:
|
||||||
*/
|
*/
|
||||||
const CGAL::Bbox_3& bbox() const
|
const CGAL::Bbox_3& bbox() const
|
||||||
{
|
{
|
||||||
auto transform = [&](const std::size_t& idx) -> typename ItemMap::reference
|
|
||||||
{
|
|
||||||
return get (m_item_map, *(m_range->begin() + idx));
|
|
||||||
};
|
|
||||||
|
|
||||||
if (m_bounding_box == CGAL::Bbox_3())
|
if (m_bounding_box == CGAL::Bbox_3())
|
||||||
|
{
|
||||||
|
Point_idx_to_point_unary_function transform (m_range, m_item_map);
|
||||||
m_bounding_box = CGAL::bbox_3 (boost::make_transform_iterator (m_inliers->begin(), transform),
|
m_bounding_box = CGAL::bbox_3 (boost::make_transform_iterator (m_inliers->begin(), transform),
|
||||||
boost::make_transform_iterator (m_inliers->end(), transform));
|
boost::make_transform_iterator (m_inliers->end(), transform));
|
||||||
|
}
|
||||||
|
|
||||||
return m_bounding_box;
|
return m_bounding_box;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,21 @@ function(cgal_add_compilation_test exe_name)
|
||||||
COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}")
|
COMMAND ${TIME_COMMAND} "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "${exe_name}")
|
||||||
set_property(TEST "compilation_of__${exe_name}"
|
set_property(TEST "compilation_of__${exe_name}"
|
||||||
APPEND PROPERTY LABELS "${PROJECT_NAME}")
|
APPEND PROPERTY LABELS "${PROJECT_NAME}")
|
||||||
|
if(NOT TARGET cgal_check_build_system)
|
||||||
|
add_custom_target(cgal_check_build_system)
|
||||||
|
endif()
|
||||||
|
if(NOT TEST check_build_system)
|
||||||
|
add_test(NAME "check_build_system"
|
||||||
|
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target "cgal_check_build_system")
|
||||||
|
if(POLICY CMP0066) # cmake 3.7 or later
|
||||||
|
set_property(TEST "check_build_system"
|
||||||
|
PROPERTY FIXTURES_SETUP "check_build_system_SetupFixture")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if(POLICY CMP0066) # cmake 3.7 or later
|
||||||
|
set_property(TEST "compilation_of__${exe_name}"
|
||||||
|
APPEND PROPERTY FIXTURES_REQUIRED "check_build_system_SetupFixture")
|
||||||
|
endif()
|
||||||
endfunction(cgal_add_compilation_test)
|
endfunction(cgal_add_compilation_test)
|
||||||
|
|
||||||
function(cgal_setup_test_properties test_name)
|
function(cgal_setup_test_properties test_name)
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ void test();
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
CGAL::force_ieee_double_precision();
|
CGAL::Set_ieee_double_precision double_precision_guard;
|
||||||
typedef CGAL::Cartesian<double> Clsdb;
|
typedef CGAL::Cartesian<double> Clsdb;
|
||||||
typedef CGAL::Filtered_kernel<Clsdb> Clsd;
|
typedef CGAL::Filtered_kernel<Clsdb> Clsd;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,6 @@ _test_cls_tetrahedron_3(const R& )
|
||||||
typedef typename R::RT RT;
|
typedef typename R::RT RT;
|
||||||
typedef typename R::FT FT;
|
typedef typename R::FT FT;
|
||||||
|
|
||||||
typename R::Tetrahedron_3 it;
|
|
||||||
CGAL::Tetrahedron_3<R> t0(it);
|
|
||||||
|
|
||||||
RT n0 = 0;
|
RT n0 = 0;
|
||||||
RT n1 = 12;
|
RT n1 = 12;
|
||||||
RT n2 = 16;
|
RT n2 = 16;
|
||||||
|
|
@ -60,6 +57,10 @@ _test_cls_tetrahedron_3(const R& )
|
||||||
CGAL::Point_3<R> ps1( n7, n0, n0, n5); // (3, 0, 0)
|
CGAL::Point_3<R> ps1( n7, n0, n0, n5); // (3, 0, 0)
|
||||||
CGAL::Point_3<R> ps0( CGAL::ORIGIN ); // (0, 0, 0)
|
CGAL::Point_3<R> ps0( CGAL::ORIGIN ); // (0, 0, 0)
|
||||||
|
|
||||||
|
typename R::Tetrahedron_3 it0; // check the default-constructor
|
||||||
|
typename R::Tetrahedron_3 it(p1,p2,p3,p4);
|
||||||
|
CGAL::Tetrahedron_3<R> t0(it);
|
||||||
|
|
||||||
const CGAL::Tetrahedron_3<R> t1(p1,p2,p3,p4);
|
const CGAL::Tetrahedron_3<R> t1(p1,p2,p3,p4);
|
||||||
CGAL::Tetrahedron_3<R> t2(p2,p1,p3,p4);
|
CGAL::Tetrahedron_3<R> t2(p2,p1,p3,p4);
|
||||||
CGAL::Tetrahedron_3<R> t3(ps0,ps1,ps2,ps3); // positive oriented
|
CGAL::Tetrahedron_3<R> t3(ps0,ps1,ps2,ps3); // positive oriented
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,6 @@ _test_cls_triangle_3(const R& )
|
||||||
typedef typename R::RT RT;
|
typedef typename R::RT RT;
|
||||||
typedef typename R::FT FT;
|
typedef typename R::FT FT;
|
||||||
|
|
||||||
typename R::Triangle_3 it;
|
|
||||||
CGAL::Triangle_3<R> t0(it);
|
|
||||||
|
|
||||||
RT n0 = 0;
|
RT n0 = 0;
|
||||||
RT n1 = 12;
|
RT n1 = 12;
|
||||||
RT n2 = 16;
|
RT n2 = 16;
|
||||||
|
|
@ -61,7 +58,10 @@ _test_cls_triangle_3(const R& )
|
||||||
CGAL::Point_3<R> ps2( n0, n7, n0, n5); // (0, 3, 0)
|
CGAL::Point_3<R> ps2( n0, n7, n0, n5); // (0, 3, 0)
|
||||||
CGAL::Point_3<R> ps1( n7, n0, n0, n5); // (3, 0, 0)
|
CGAL::Point_3<R> ps1( n7, n0, n0, n5); // (3, 0, 0)
|
||||||
|
|
||||||
|
typename R::Triangle_3 it; // test default-constructor
|
||||||
|
|
||||||
const CGAL::Triangle_3<R> t1(p1,p2,p3);
|
const CGAL::Triangle_3<R> t1(p1,p2,p3);
|
||||||
|
CGAL::Triangle_3<R> t0(t1);
|
||||||
CGAL::Triangle_3<R> t2(p4,p2,p3);
|
CGAL::Triangle_3<R> t2(p4,p2,p3);
|
||||||
CGAL::Triangle_3<R> t3(ps1,ps2,ps3);
|
CGAL::Triangle_3<R> t3(ps1,ps2,ps3);
|
||||||
CGAL::Triangle_3<R> t4(ps2,ps1,ps3);
|
CGAL::Triangle_3<R> t4(ps2,ps1,ps3);
|
||||||
|
|
|
||||||
|
|
@ -221,8 +221,8 @@ test_new_3(const R& rep)
|
||||||
|
|
||||||
typename R::Construct_tetrahedron_3 construct_tetrahedron
|
typename R::Construct_tetrahedron_3 construct_tetrahedron
|
||||||
= rep.construct_tetrahedron_3_object();
|
= rep.construct_tetrahedron_3_object();
|
||||||
Tetrahedron_3 th1;
|
Tetrahedron_3 th0; // test default-constructor
|
||||||
Tetrahedron_3 th2 = construct_tetrahedron(p2,p3,p4,p5);
|
Tetrahedron_3 th2 = construct_tetrahedron(p2,p3,p4,p5), th1 = th2;
|
||||||
|
|
||||||
typename R::Construct_iso_cuboid_3 construct_iso_cuboid
|
typename R::Construct_iso_cuboid_3 construct_iso_cuboid
|
||||||
= rep.construct_iso_cuboid_3_object();
|
= rep.construct_iso_cuboid_3_object();
|
||||||
|
|
|
||||||
|
|
@ -52,19 +52,22 @@ if ( CGAL_FOUND )
|
||||||
include( ${EIGEN3_USE_FILE} )
|
include( ${EIGEN3_USE_FILE} )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(VTK_LIBS "")
|
find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE)
|
||||||
find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE)
|
if(VTK_FOUND)
|
||||||
if(VTK_FOUND)
|
if(VTK_USE_FILE)
|
||||||
include(${VTK_USE_FILE})
|
include(${VTK_USE_FILE})
|
||||||
if ("${VTK_VERSION_MAJOR}" GREATER "5")
|
endif()
|
||||||
message(STATUS "VTK found")
|
if ("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
|
||||||
set( VTK_LIBS vtkImagingGeneral vtkIOImage )
|
message(STATUS "VTK found")
|
||||||
else()
|
if(TARGET VTK::IOImage)
|
||||||
message(STATUS "VTK version 6.0 or greater is required")
|
set(VTK_LIBRARIES VTK::ImagingGeneral VTK::IOImage)
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(STATUS "VTK was not found")
|
|
||||||
endif()
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "VTK version 6.0 or greater is required")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "VTK was not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Compilable examples
|
# Compilable examples
|
||||||
|
|
@ -87,9 +90,10 @@ if ( CGAL_FOUND )
|
||||||
create_single_source_cgal_program( "mesh_polyhedral_complex.cpp" )
|
create_single_source_cgal_program( "mesh_polyhedral_complex.cpp" )
|
||||||
create_single_source_cgal_program( "mesh_polyhedral_complex_sm.cpp" )
|
create_single_source_cgal_program( "mesh_polyhedral_complex_sm.cpp" )
|
||||||
if( WITH_CGAL_ImageIO )
|
if( WITH_CGAL_ImageIO )
|
||||||
if( VTK_FOUND AND "${VTK_VERSION_MAJOR}" GREATER "5" )
|
if( VTK_FOUND AND ("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5) )
|
||||||
add_executable ( mesh_3D_gray_vtk_image mesh_3D_gray_vtk_image.cpp )
|
add_executable ( mesh_3D_gray_vtk_image mesh_3D_gray_vtk_image.cpp )
|
||||||
target_link_libraries( mesh_3D_gray_vtk_image ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ${VTK_LIBS})
|
target_link_libraries( mesh_3D_gray_vtk_image ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ${VTK_LIBRARIES})
|
||||||
|
cgal_add_test( mesh_3D_gray_vtk_image )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
create_single_source_cgal_program( "mesh_3D_gray_image.cpp" )
|
create_single_source_cgal_program( "mesh_3D_gray_image.cpp" )
|
||||||
|
|
|
||||||
|
|
@ -283,7 +283,7 @@ typedef boost::variant<const std::vector<double>*, const std::vector<uint8_t>*,
|
||||||
template <class C3T3>
|
template <class C3T3>
|
||||||
void output_to_vtu_with_attributes(std::ostream& os,
|
void output_to_vtu_with_attributes(std::ostream& os,
|
||||||
const C3T3& c3t3,
|
const C3T3& c3t3,
|
||||||
std::vector<std::pair<const char*, const Vtu_attributes> >&attributes,
|
std::vector<std::pair<const char*, Vtu_attributes> >&attributes,
|
||||||
IO::Mode mode = IO::BINARY)
|
IO::Mode mode = IO::BINARY)
|
||||||
{
|
{
|
||||||
//CGAL_assertion(attributes.size() == attribute_types.size());
|
//CGAL_assertion(attributes.size() == attribute_types.size());
|
||||||
|
|
@ -372,7 +372,7 @@ void output_to_vtu(std::ostream& os,
|
||||||
mids.push_back(v);
|
mids.push_back(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<const char*, const Vtu_attributes > > atts;
|
std::vector<std::pair<const char*, Vtu_attributes > > atts;
|
||||||
Vtu_attributes v = &mids;
|
Vtu_attributes v = &mids;
|
||||||
atts.push_back(std::make_pair("MeshDomain", v));
|
atts.push_back(std::make_pair("MeshDomain", v));
|
||||||
output_to_vtu_with_attributes(os, c3t3, atts, mode);
|
output_to_vtu_with_attributes(os, c3t3, atts, mode);
|
||||||
|
|
|
||||||
|
|
@ -109,12 +109,12 @@ private:
|
||||||
/// Returns a box enclosing image \c im
|
/// Returns a box enclosing image \c im
|
||||||
Bbox_3 compute_bounding_box(const Image& im) const
|
Bbox_3 compute_bounding_box(const Image& im) const
|
||||||
{
|
{
|
||||||
return Bbox_3(-im.vx(),
|
return Bbox_3(-im.vx()+im.tx(),
|
||||||
-im.vy(),
|
-im.vy()+im.ty(),
|
||||||
-im.vz(),
|
-im.vz()+im.tz(),
|
||||||
double(im.xdim()+1)*im.vx(),
|
double(im.xdim()+1)*im.vx()+im.tx(),
|
||||||
double(im.ydim()+1)*im.vy(),
|
double(im.ydim()+1)*im.vy()+im.ty(),
|
||||||
double(im.zdim()+1)*im.vz());
|
double(im.zdim()+1)*im.vz()+im.tz());
|
||||||
}
|
}
|
||||||
}; // end class Labeled_image_mesh_domain_3
|
}; // end class Labeled_image_mesh_domain_3
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,10 +88,10 @@ namespace internal {
|
||||||
/// Returns a box enclosing image \c im
|
/// Returns a box enclosing image \c im
|
||||||
inline Bbox_3 compute_bounding_box(const Image_3& im)
|
inline Bbox_3 compute_bounding_box(const Image_3& im)
|
||||||
{
|
{
|
||||||
return Bbox_3(-1,-1,-1,
|
return Bbox_3(-1+im.tx(),-1+im.ty(),-1+im.tz(),
|
||||||
double(im.xdim())*im.vx()+1,
|
double(im.xdim())*im.vx()+im.tx()+1,
|
||||||
double(im.ydim())*im.vy()+1,
|
double(im.ydim())*im.vy()+im.ty()+1,
|
||||||
double(im.zdim())*im.vz()+1);
|
double(im.zdim())*im.vz()+im.tz()+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Image_values_to_subdom_indices>
|
template <typename Image_values_to_subdom_indices>
|
||||||
|
|
|
||||||
|
|
@ -33,13 +33,17 @@ target_link_libraries(lcc_io_plugin PUBLIC scene_lcc_item)
|
||||||
find_package(VTK QUIET COMPONENTS
|
find_package(VTK QUIET COMPONENTS
|
||||||
vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML vtkFiltersCore vtkFiltersSources)
|
vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML vtkFiltersCore vtkFiltersSources)
|
||||||
if (VTK_FOUND)
|
if (VTK_FOUND)
|
||||||
include(${VTK_USE_FILE})
|
if(VTK_USE_FILE)
|
||||||
if ("${VTK_VERSION_MAJOR}" GREATER "5")
|
include(${VTK_USE_FILE})
|
||||||
|
endif()
|
||||||
|
if ("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
|
||||||
|
if(TARGET VTK::CommonCore)
|
||||||
|
set(VTK_LIBRARIES VTK::CommonCore VTK::IOCore VTK::IOLegacy VTK::IOXML VTK::FiltersCore VTK::FiltersSources)
|
||||||
|
endif()
|
||||||
if(VTK_LIBRARIES)
|
if(VTK_LIBRARIES)
|
||||||
polyhedron_demo_plugin(vtk_plugin VTK_io_plugin KEYWORDS IO Mesh_3)
|
polyhedron_demo_plugin(vtk_plugin VTK_io_plugin KEYWORDS IO Mesh_3)
|
||||||
target_link_libraries(vtk_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_c3t3_item scene_points_with_normal_item
|
target_link_libraries(vtk_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_c3t3_item scene_points_with_normal_item
|
||||||
vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML
|
${VTK_LIBRARIES})
|
||||||
vtkFiltersCore vtkFiltersSources)
|
|
||||||
|
|
||||||
else()
|
else()
|
||||||
message(STATUS "NOTICE : the vtk IO plugin needs VTK libraries and will not be compiled.")
|
message(STATUS "NOTICE : the vtk IO plugin needs VTK libraries and will not be compiled.")
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,18 @@ polyhedron_demo_plugin(mesh_3_plugin Mesh_3_plugin
|
||||||
target_link_libraries(mesh_3_plugin PUBLIC scene_polygon_soup_item scene_polylines_item scene_implicit_function_item scene_image_item
|
target_link_libraries(mesh_3_plugin PUBLIC scene_polygon_soup_item scene_polylines_item scene_implicit_function_item scene_image_item
|
||||||
scene_surface_mesh_item scene_c3t3_item ${OPENGL_gl_LIBRARY} )
|
scene_surface_mesh_item scene_c3t3_item ${OPENGL_gl_LIBRARY} )
|
||||||
|
|
||||||
set(VTK_LIBS "")
|
|
||||||
find_package(VTK QUIET COMPONENTS
|
find_package(VTK QUIET COMPONENTS
|
||||||
vtkImagingGeneral vtkIOImage NO_MODULE)
|
vtkImagingGeneral vtkIOImage NO_MODULE)
|
||||||
if (VTK_FOUND)
|
if (VTK_FOUND)
|
||||||
include(${VTK_USE_FILE})
|
if(VTK_USE_FILE)
|
||||||
if ("${VTK_VERSION_MAJOR}" GREATER "5")
|
include(${VTK_USE_FILE})
|
||||||
|
endif()
|
||||||
|
if ("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
|
||||||
|
if(TARGET VTK::IOImage)
|
||||||
|
set(VTK_LIBRARIES VTK::IOImage)
|
||||||
|
endif()
|
||||||
if(VTK_LIBRARIES)
|
if(VTK_LIBRARIES)
|
||||||
add_definitions(-DCGAL_USE_VTK)
|
add_definitions(-DCGAL_USE_VTK)
|
||||||
set(VTK_LIBS vtkImagingGeneral vtkIOImage)
|
|
||||||
else()
|
else()
|
||||||
message(STATUS "NOTICE : the DICOM files (.dcm) need VTK libraries to be open and will not be able to.")
|
message(STATUS "NOTICE : the DICOM files (.dcm) need VTK libraries to be open and will not be able to.")
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -34,7 +37,7 @@ find_package(Boost QUIET OPTIONAL_COMPONENTS filesystem)
|
||||||
if(Boost_FILESYSTEM_FOUND)
|
if(Boost_FILESYSTEM_FOUND)
|
||||||
qt5_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui)
|
qt5_wrap_ui( imgUI_FILES Image_res_dialog.ui raw_image.ui)
|
||||||
polyhedron_demo_plugin(io_image_plugin Io_image_plugin Volume_plane_intersection.cpp Raw_image_dialog.cpp ${imgUI_FILES} ${VOLUME_MOC_OUTFILES} KEYWORDS IO Mesh_3)
|
polyhedron_demo_plugin(io_image_plugin Io_image_plugin Volume_plane_intersection.cpp Raw_image_dialog.cpp ${imgUI_FILES} ${VOLUME_MOC_OUTFILES} KEYWORDS IO Mesh_3)
|
||||||
target_link_libraries(io_image_plugin PUBLIC scene_image_item ${VTK_LIBS} CGAL::CGAL_ImageIO)
|
target_link_libraries(io_image_plugin PUBLIC scene_image_item ${VTK_LIBRARIES} CGAL::CGAL_ImageIO)
|
||||||
if(TARGET Boost::filesystem)
|
if(TARGET Boost::filesystem)
|
||||||
target_link_libraries(io_image_plugin PUBLIC Boost::filesystem)
|
target_link_libraries(io_image_plugin PUBLIC Boost::filesystem)
|
||||||
else()
|
else()
|
||||||
|
|
|
||||||
|
|
@ -1859,7 +1859,9 @@ void test_rebind(const PT& /*traits*/){
|
||||||
typedef typename AT::Rational Rational;
|
typedef typename AT::Rational Rational;
|
||||||
const int dimension = 4;
|
const int dimension = 4;
|
||||||
typedef typename PT:: template Rebind<Integer,4>::Other PT_Integer_4;
|
typedef typename PT:: template Rebind<Integer,4>::Other PT_Integer_4;
|
||||||
|
CGAL_USE_TYPE(PT_Integer_4);
|
||||||
typedef typename PT:: template Rebind<Rational,4>::Other PT_Rational_4;
|
typedef typename PT:: template Rebind<Rational,4>::Other PT_Rational_4;
|
||||||
|
CGAL_USE_TYPE(PT_Rational_4);
|
||||||
CGAL_static_assertion((boost::is_same< typename PT_Integer_4::Innermost_coefficient_type,
|
CGAL_static_assertion((boost::is_same< typename PT_Integer_4::Innermost_coefficient_type,
|
||||||
Integer>::value));
|
Integer>::value));
|
||||||
CGAL_static_assertion((boost::is_same< typename PT_Rational_4::Innermost_coefficient_type,
|
CGAL_static_assertion((boost::is_same< typename PT_Rational_4::Innermost_coefficient_type,
|
||||||
|
|
|
||||||
|
|
@ -93,14 +93,17 @@ if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND CGAL_ImageIO_FOUND)
|
||||||
|
|
||||||
add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${prj} )
|
add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${prj} )
|
||||||
|
|
||||||
set(VTK_LIBS "")
|
|
||||||
find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE)
|
find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE)
|
||||||
if(VTK_FOUND)
|
if(VTK_FOUND)
|
||||||
include(${VTK_USE_FILE})
|
if(VTK_USE_FILE)
|
||||||
if ("${VTK_VERSION_MAJOR}" GREATER "5")
|
include(${VTK_USE_FILE})
|
||||||
|
endif()
|
||||||
|
if ("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
|
||||||
message(STATUS "VTK found")
|
message(STATUS "VTK found")
|
||||||
add_definitions(-DCGAL_USE_VTK)
|
add_definitions(-DCGAL_USE_VTK)
|
||||||
set(VTK_LIBS vtkImagingGeneral vtkIOImage)
|
if(TARGET VTK::IOImage)
|
||||||
|
set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "Vtk must be at least Rel 6")
|
message(STATUS "Vtk must be at least Rel 6")
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -111,7 +114,7 @@ if ( CGAL_FOUND AND CGAL_Qt5_FOUND AND CGAL_ImageIO_FOUND)
|
||||||
target_link_libraries( ${prj} PRIVATE
|
target_link_libraries( ${prj} PRIVATE
|
||||||
CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_ImageIO
|
CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_ImageIO
|
||||||
${OPENGL_LIBRARIES}
|
${OPENGL_LIBRARIES}
|
||||||
${VTK_LIBS} )
|
${VTK_LIBRARIES} )
|
||||||
|
|
||||||
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
||||||
cgal_add_compilation_test(${prj})
|
cgal_add_compilation_test(${prj})
|
||||||
|
|
|
||||||
|
|
@ -742,13 +742,13 @@ Polyline_constraint_hierarchy_2<T,Compare,Data>::concatenate2(Constraint_id firs
|
||||||
// now we really concatenate the vertex lists
|
// now we really concatenate the vertex lists
|
||||||
// Note that all iterators pointing into second remain valid.
|
// Note that all iterators pointing into second remain valid.
|
||||||
first.vl_ptr()->pop_back(); // because it is the same as second.front()
|
first.vl_ptr()->pop_back(); // because it is the same as second.front()
|
||||||
Vertex_it back_it = first.vl_ptr()->skip_end();
|
Vertex_it back_it = second.vl_ptr()->skip_begin();
|
||||||
--back_it;
|
|
||||||
second.vl_ptr()->splice(second.vl_ptr()->skip_begin(), *(first.vl_ptr()), first.vl_ptr()->skip_begin(), first.vl_ptr()->skip_end());
|
second.vl_ptr()->splice(second.vl_ptr()->skip_begin(), *(first.vl_ptr()), first.vl_ptr()->skip_begin(), first.vl_ptr()->skip_end());
|
||||||
|
|
||||||
// Note that for VC8 with iterator debugging the iterators pointing into second
|
// Note that for VC8 with iterator debugging the iterators pointing into second
|
||||||
// are NOT valid So we have to update them
|
// are NOT valid So we have to update them
|
||||||
for(Vertex_it it = back_it, succ = it, end = first.vl_ptr()->skip_end();
|
for(Vertex_it it = second.vl_ptr()->skip_begin(), succ = it, end = back_it;
|
||||||
++succ != end;
|
++succ != end;
|
||||||
++it){
|
++it){
|
||||||
typename Sc_to_c_map::iterator scit = sc_to_c_map.find(make_edge(*it,*succ));
|
typename Sc_to_c_map::iterator scit = sc_to_c_map.find(make_edge(*it,*succ));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||||
|
#include <CGAL/Triangulation_2.h>
|
||||||
|
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
|
||||||
|
#include <CGAL/Constrained_triangulation_plus_2.h>
|
||||||
|
|
||||||
|
|
||||||
|
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
|
||||||
|
typedef CGAL::Polygon_2<K> Polygon_2;
|
||||||
|
typedef CGAL::Exact_intersections_tag Itag_;
|
||||||
|
typedef CGAL::Constrained_Delaunay_triangulation_2<K,CGAL::Default, Itag_> CDT;
|
||||||
|
typedef CGAL::Constrained_triangulation_plus_2<CDT> CDTP;
|
||||||
|
|
||||||
|
typedef CDTP::Point Point;
|
||||||
|
typedef CDTP::Constraint_id Cid;
|
||||||
|
typedef CDTP::Vertex_handle Vertex_handle;
|
||||||
|
typedef CDTP::Constraint_id Constraint_id;
|
||||||
|
typedef CDTP::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
|
||||||
|
|
||||||
|
int countVertex(CDTP &cdtp, CDTP::Constraint_id id)
|
||||||
|
{
|
||||||
|
Vertices_in_constraint_iterator v=cdtp.vertices_in_constraint_begin(id);
|
||||||
|
|
||||||
|
int count=0;
|
||||||
|
while(v!=cdtp.vertices_in_constraint_end(id))
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
v++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
CDTP cdtp;
|
||||||
|
|
||||||
|
std::list<Point> pointsListCollinear;
|
||||||
|
|
||||||
|
pointsListCollinear.push_back(Point(0,0));
|
||||||
|
pointsListCollinear.push_back(Point(0,1));
|
||||||
|
pointsListCollinear.push_back(Point(0,2));
|
||||||
|
pointsListCollinear.push_back(Point(0,3));
|
||||||
|
pointsListCollinear.push_back(Point(0,4));
|
||||||
|
pointsListCollinear.push_back(Point(0,5));
|
||||||
|
|
||||||
|
std::list<Point> pointsListNoCollinear;
|
||||||
|
|
||||||
|
pointsListNoCollinear.push_back(Point(1,0));
|
||||||
|
pointsListNoCollinear.push_back(Point(2,1));
|
||||||
|
pointsListNoCollinear.push_back(Point(4,2));
|
||||||
|
pointsListNoCollinear.push_back(Point(2,3));
|
||||||
|
pointsListNoCollinear.push_back(Point(4,4));
|
||||||
|
pointsListNoCollinear.push_back(Point(1,5));
|
||||||
|
|
||||||
|
|
||||||
|
Constraint_id ctIdCollinear=cdtp.insert_constraint(pointsListCollinear.begin(),pointsListCollinear.end());
|
||||||
|
Constraint_id ctIdNoCollinear=cdtp.insert_constraint(pointsListNoCollinear.begin(),pointsListNoCollinear.end());
|
||||||
|
|
||||||
|
|
||||||
|
//******************************* attempt with the collinear constraint
|
||||||
|
Vertices_in_constraint_iterator vertexToRemoveCollinear=cdtp.vertices_in_constraint_begin(ctIdCollinear);
|
||||||
|
vertexToRemoveCollinear++;
|
||||||
|
vertexToRemoveCollinear++;
|
||||||
|
|
||||||
|
|
||||||
|
std::cout<<"attempt to remove vertex "<<(*vertexToRemoveCollinear)->point().x()<<" , "<<(*vertexToRemoveCollinear)->point().y() <<std::endl;
|
||||||
|
cdtp.remove_vertex_from_constraint(ctIdCollinear,vertexToRemoveCollinear);
|
||||||
|
|
||||||
|
std::cout<<"number of subconstraints "<<cdtp.number_of_subconstraints()<<std::endl; //--> 5, expected 4
|
||||||
|
std::cout<<"number of constraints "<<cdtp.number_of_constraints()<<std::endl; //--> 1
|
||||||
|
std::cout<<"number of vertex in constraint "<<countVertex(cdtp,ctIdCollinear)<<std::endl; //--> 6, expected 5
|
||||||
|
|
||||||
|
|
||||||
|
//******************************* attempt with the collinear constraint
|
||||||
|
Vertices_in_constraint_iterator vertexToRemoveNoCollinear=cdtp.vertices_in_constraint_begin(ctIdNoCollinear);
|
||||||
|
vertexToRemoveNoCollinear++;
|
||||||
|
vertexToRemoveNoCollinear++;
|
||||||
|
|
||||||
|
std::cout<<"attempt to remove vertex "<<(*vertexToRemoveNoCollinear)->point().x()<<" , "<<(*vertexToRemoveNoCollinear)->point().y() << std::endl;
|
||||||
|
cdtp.remove_vertex_from_constraint(ctIdNoCollinear,vertexToRemoveNoCollinear);
|
||||||
|
|
||||||
|
std::cout<<"number of subconstraints "<<cdtp.number_of_subconstraints()<<std::endl; //--> 4, ok
|
||||||
|
std::cout<<"number of constraints "<<cdtp.number_of_constraints()<<std::endl; //--> 1
|
||||||
|
std::cout<<"number of vertex in constraint "<<countVertex(cdtp,ctIdNoCollinear)<<std::endl; //--> 5, ok
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue