blob: 92f7b0259a5a2a580c62b70f9d84fbc03d11bbe7 [file] [log] [blame]
// Boost.Geometry (aka GGL, Generic Geometry Library)
// QuickBook Example
// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//[make_2d_point
//` Shows the usage of make as a generic constructor for different point types
#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/register/point.hpp>
#include <boost/geometry/geometries/adapted/boost_tuple.hpp>
#include <boost/geometry/geometries/adapted/boost_polygon/point.hpp>
BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(cs::cartesian)
struct mypoint { float _x, _y; };
BOOST_GEOMETRY_REGISTER_POINT_2D(mypoint, float, cs::cartesian, _x, _y)
template <typename Point>
void construct_and_display()
{
using boost::geometry::make;
using boost::geometry::get;
Point p = make<Point>(1, 2);
std::cout << "x=" << get<0>(p) << " y=" << get<1>(p)
<< " (" << typeid(Point).name() << ")"
<< std::endl;
}
int main()
{
construct_and_display<boost::geometry::model::d2::point_xy<double> >();
construct_and_display<boost::geometry::model::d2::point_xy<int> >();
construct_and_display<boost::tuple<double, double> >();
construct_and_display<boost::polygon::point_data<int> >();
construct_and_display<mypoint>();
return 0;
}
//]
//[make_2d_point_output
/*`
Output (compiled using gcc):
[pre
x=1 y=2 (N5boost8geometry5model2d28point_xyIdNS0_2cs9cartesianEEE)
x=1 y=2 (N5boost8geometry5model2d28point_xyIiNS0_2cs9cartesianEEE)
x=1 y=2 (N5boost6tuples5tupleIddNS0_9null_typeES2_S2_S2_S2_S2_S2_S2_EE)
x=1 y=2 (N5boost7polygon10point_dataIiEE)
x=1 y=2 (7mypoint)
]
*/
//]