WIP: Almost fix Skin_surface_3

This commit is contained in:
Andreas Fabri 2017-03-03 11:57:06 +01:00 committed by Mael Rouxel-Labbé
parent b949b667ab
commit 7c89697d17
7 changed files with 29 additions and 20 deletions

View File

@ -153,7 +153,7 @@ private:
Sign test_anchor(Weighted_point const& wp1, Weighted_point const& wp2, Sign test_anchor(Weighted_point const& wp1, Weighted_point const& wp2,
Weighted_point const& wp3) { Weighted_point const& wp3) {
return enum_cast<Sign>( return enum_cast<Sign>(
-reg.geom_traits().power_side_of_bounded_power_sphere_3_object()(wp1, wp2, wp3)); - reg.geom_traits().power_side_of_bounded_power_sphere_3_object()(wp1, wp2, wp3));
} }
Sign test_anchor(Weighted_point const& wp1, Weighted_point const& wp2, Sign test_anchor(Weighted_point const& wp1, Weighted_point const& wp2,
Weighted_point const& wp3, Weighted_point const& wp4) { Weighted_point const& wp3, Weighted_point const& wp4) {

View File

@ -205,7 +205,7 @@ Skin_surface_base_3(WP_iterator begin, WP_iterator end, FT shrink_,
if (grow_balls) { if (grow_balls) {
for (; begin != end; begin++) { for (; begin != end; begin++) {
regular().insert(Weighted_point(*begin, begin->weight()/shrink_factor())); regular().insert(gt.construct_weighted_point_3_object()(gt.construct_point_3_object()(*begin), begin->weight()/shrink_factor()));
} }
} else { } else {
regular().insert(begin, end); regular().insert(begin, end);
@ -371,8 +371,8 @@ intersect(TMC_Cell_handle ch, int i, int j,
Bare_point &p) const { Bare_point &p) const {
Cartesian_converter<FK, Gt> converter; Cartesian_converter<FK, Gt> converter;
Bare_point p1 = converter(ch->vertex(i)->point()); Bare_point p1 = gt.construct_point_3_object()(converter(ch->vertex(i)->point()));
Bare_point p2 = converter(ch->vertex(j)->point()); Bare_point p2 = gt.construct_point_3_object()(converter(ch->vertex(j)->point()));
return intersect(p1, p2, ch, ch, p); return intersect(p1, p2, ch, ch, p);
} }
@ -765,7 +765,7 @@ get_weighted_circumcenter(const Simplex &s, Gt2 &traits) {
case 0: case 0:
{ {
vh = s; vh = s;
result = converter(vh->point()); result = Gt2().construct_point_3_object()(converter(vh->point()));
break; break;
} }
case 1: case 1:

View File

@ -66,7 +66,8 @@ public:
Regular_triangulation_euclidean_traits_3<K> reg_traits; Regular_triangulation_euclidean_traits_3<K> reg_traits;
p = reg_traits.construct_weighted_circumcenter_3_object()(wp0,wp1); p = reg_traits.construct_weighted_circumcenter_3_object()(wp0,wp1);
c = s*(1-s)*reg_traits.compute_squared_radius_smallest_orthogonal_sphere_3_object()(wp0,wp1); c = s*(1-s)*reg_traits.compute_squared_radius_smallest_orthogonal_sphere_3_object()(wp0,wp1);
Vector t = reg_traits.construct_vector_3_object()(wp1,wp0); Vector t = reg_traits.construct_vector_3_object()(reg_traits.construct_point_3_object()(wp1),
reg_traits.construct_point_3_object()(wp0));
FT den = t*t; FT den = t*t;
Q[0] = (- t.x()*t.x()/den + (1-s)); Q[0] = (- t.x()*t.x()/den + (1-s));
@ -90,7 +91,9 @@ public:
p = reg_traits.construct_weighted_circumcenter_3_object()(wp0,wp1,wp2); p = reg_traits.construct_weighted_circumcenter_3_object()(wp0,wp1,wp2);
c = s*(1-s)*reg_traits.compute_squared_radius_smallest_orthogonal_sphere_3_object()(wp0,wp1,wp2); c = s*(1-s)*reg_traits.compute_squared_radius_smallest_orthogonal_sphere_3_object()(wp0,wp1,wp2);
Vector t = K().construct_orthogonal_vector_3_object()(wp0,wp1,wp2); Vector t = K().construct_orthogonal_vector_3_object()(reg_traits.construct_point_3_object()(wp0),
reg_traits.construct_point_3_object()(wp1),
reg_traits.construct_point_3_object()(wp2));
FT den = t*t; FT den = t*t;
Q[0] = -(- t.x()*t.x()/den + s); Q[0] = -(- t.x()*t.x()/den + s);

View File

@ -89,7 +89,7 @@ template <class K>
class Construct_anchor_point_3 { class Construct_anchor_point_3 {
public: public:
typedef typename K::FT FT; typedef typename K::FT FT;
typedef typename K::Bare_point Bare_point; typedef typename K::Point_3 Bare_point;
Construct_anchor_point_3(const FT &shrink) : s(shrink) {} Construct_anchor_point_3(const FT &shrink) : s(shrink) {}
@ -108,16 +108,17 @@ private:
template <class K_> template <class K_>
class Skin_surface_traits_base_3 class Skin_surface_traits_base_3
: public Regular_triangulation_euclidean_traits_3<K_> : public K_
// : public Regular_triangulation_euclidean_traits_3<K_>
{ {
typedef Regular_triangulation_euclidean_traits_3<K_> Base; // typedef Regular_triangulation_euclidean_traits_3<K_> Base;
public: public:
typedef K_ Kernel; typedef K_ Kernel;
typedef Skin_surface_traits_base_3<Kernel> Self; typedef Skin_surface_traits_base_3<Kernel> Self;
typedef typename Kernel::FT FT; typedef typename Kernel::FT FT;
typedef typename Kernel::Point_3 Bare_point; typedef typename Kernel::Point_3 Bare_point;
typedef typename Base::Weighted_point Weighted_point; typedef typename Kernel::Weighted_point_3 Weighted_point;
typedef Weighted_point Weighted_point_3; typedef Weighted_point Weighted_point_3;
typedef CGAL::Side_of_mixed_cell_3<Self> Side_of_mixed_cell_3; typedef CGAL::Side_of_mixed_cell_3<Self> Side_of_mixed_cell_3;

View File

@ -97,6 +97,8 @@ public:
Rt_Facet f; Rt_Facet f;
Rt_Cell_handle ch; Rt_Cell_handle ch;
typename Surface_regular_traits::Construct_point_3 wp2p;
switch (s.dimension()) { switch (s.dimension()) {
case 0: { case 0: {
vh = s; vh = s;
@ -118,7 +120,8 @@ public:
typename Surface_regular_traits:: typename Surface_regular_traits::
Compute_squared_radius_smallest_orthogonal_sphere_3()(p0,p1), Compute_squared_radius_smallest_orthogonal_sphere_3()(p0,p1),
typename Surface_regular_traits:: typename Surface_regular_traits::
Construct_vector_3()(p1,p0), Construct_vector_3()(wp2p(p1),
wp2p(p0)),
r2s_converter(shrink), r2s_converter(shrink),
1); 1);
break; break;
@ -137,7 +140,7 @@ public:
typename Surface_regular_traits:: typename Surface_regular_traits::
Compute_squared_radius_smallest_orthogonal_sphere_3()(p0,p1,p2), Compute_squared_radius_smallest_orthogonal_sphere_3()(p0,p1,p2),
typename Surface_regular_traits:: typename Surface_regular_traits::
Construct_orthogonal_vector_3()(p0,p1,p2), Construct_orthogonal_vector_3()(wp2p(p0),wp2p(p1),wp2p(p2)),
r2s_converter(1-shrink), r2s_converter(1-shrink),
-1); -1);
break; break;

View File

@ -263,8 +263,10 @@ private:
r2t_converter_object; r2t_converter_object;
Construct_anchor_point_3< Construct_anchor_point_3<
Regular_triangulation_euclidean_traits_3< // Regular_triangulation_euclidean_traits_3<
Triangulated_mixed_complex_traits> > construct_anchor_point_3_obj; Triangulated_mixed_complex_traits>
// >
construct_anchor_point_3_obj;
typename Tmc_traits::Compute_squared_radius_smallest_orthogonal_sphere_3 orthoweight_obj; typename Tmc_traits::Compute_squared_radius_smallest_orthogonal_sphere_3 orthoweight_obj;
Compute_anchor_3<Regular> compute_anchor_obj; Compute_anchor_3<Regular> compute_anchor_obj;
@ -1047,7 +1049,7 @@ get_weighted_circumcenter(Rt_Simplex const &s) {
switch (s.dimension()) { switch (s.dimension()) {
case 0: case 0:
vh=s; vh=s;
result = r2t_converter_object(vh->point()); result = Tmc_traits().construct_point_3_object()(r2t_converter_object(vh->point()));
break; break;
case 1: case 1:
e=s; e=s;

View File

@ -565,7 +565,7 @@ get_orthocenter(Rt_Simplex const &s) {
switch (s.dimension()) { switch (s.dimension()) {
case 0: case 0:
vh=s; vh=s;
result = r2t_converter_object(vh->point()); result = Tmc_traits().construct_point_3_object()(r2t_converter_object(vh->point()));
break; break;
case 1: case 1:
e=s; e=s;