Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Inheriting from Extended_homogeneous

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Inheriting from Extended_homogeneous


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Inheriting from Extended_homogeneous
  • Date: Wed, 25 Apr 2012 08:45:25 +0200

I am not sure to understand your question, the code you posted was
correct and was compiling, isn't?

Sebastien.

On 04/24/2012 12:54 PM, Johannes Ulen wrote:
Thank you!
With minor adjustment the code you sent did exactly what I needed.

For my curiosity (and futher people ending up here when they search for
my problem) I still do not understand how to inherit from
Extended_homogeneous kernel and why the syntax would be different than
inheriting from the homogeneous kernel.

- Johannes

On Tue, 2012-04-24 at 08:37 +0200, Sebastien Loriot (GeometryFactory)
wrote:
On 04/23/2012 02:55 PM,

wrote:
I'm trying the add one property to the point class.

By help from StackOverflow I was directed to Manual Chapter 11.5 Extensible
Kernel using this I wrote the code below.

The code will not compile and I get the error:
‘typename CGAL::Extended_homogeneous::Base’ names
'CGAL::Extended_homogeneous::Base’, which is not a class template|

== CODE ==
#include<CGAL/Extended_homogeneous.h>

template< typename K_, typename K_Base>
class My_base : public K_Base::template Base<K_>::Type
{
typedef typename K_Base::template Base<K_>::Type OldK;

public:
typedef K_ Kernel;

template< typename Kernel2>
struct Base { typedef My_base<Kernel2, K_Base> Type; };
};

template< typename RT_>
struct MyKernel : public CGAL::Type_equality_wrapper<My_base<MyKernel<RT_>,
CGAL::Homogeneous<RT_> >, MyKernel<RT_> >
{};

#include<CGAL/Nef_polyhedron_3.h>
typedef MyKernel<CGAL::Gmpz> Kernel;

typedef CGAL::Nef_polyhedron_3<Kernel> Nef_Polyhedron;
typedef Nef_Polyhedron::Plane_3 Plane;

int main()
{
Nef_Polyhedron half_space(Plane(1,1,1,1), Nef_Polyhedron::EXCLUDED);

return 0;
}
====

If the inhertiance is changed to "public K_Base::Base::template B<K_>::Type"
it
will compile but Then I miss the propeties from Extentensions I guess? Because
I get the error "Constructor not available for this kernel" when I run the
program.

The point constructors are not changed by this mechanism. This means
that only those documented are available. If you want to initialize your
extra data, you need to first create an object of type My_point and then
init a point of type MyKernel::Point_3 with it.

The class in the kernel is a kind of interface while My_point is the
representation.

Sebastien.











Archive powered by MHonArc 2.6.16.

Top of Page