
Hi Anis,
Wrapping is not needed when you want to pass agruments to the library.
POINT pt1; geom::point<POINT> pt2; pt2=pt1; // Assign geom::point = POINT works
Wrapping is needed when you have a POINT a you need to work with it behind a geom::point<>. It is of course possible to copy to a geom::point and then copy the results back...
We currently use concepts, and have a set of metafunctions to enable any geometry object being used or modified by the library. So we say now, internally: geometry::set<0>(p, 3) and its x-value will get an 3 geometry::set_indexed<min_corner,0>(b, 3) and the x-vale of the lowerleft corner of the box will get a 3 The point or box involved can have any structure, for example: struct pnt {double x,y; } struct box1 {int left,top,right,bottom; } struct box2 {pnt lowerleft, pnt upperright; } This is internally. Of course the user can use the point directly, so can state: pnt p; p.x = 3; box1 b; b.left = 3; But the library uses an indirect way to be independant on the types choosen by the user.
PS. I hear lots of people in this thread talking about their own ideas in this domain but I find it hard to find each person's proposition/code (latest versions, and documentation when available), if everyone could provide links to their work it would be great.
Currently our library can be found at: http://geometrylibrary.geodan.nl We will post a new, substantially revised, version in one or two weeks and use Boost SVN as its new repository then. Regards, Barend