mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-13 12:32:09 +00:00
200 lines
14 KiB
HTML
200 lines
14 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|
<title>Boost.Geometry (aka GGL, Generic Geometry Library)</title>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
|
<link href="tabs.css" rel="stylesheet" type="text/css">
|
|
</head>
|
|
|
|
<table cellpadding="2" width="100%">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top">
|
|
<img alt="Boost.Geometry" src="images/ggl-logo-big.png" height="80" width="200">
|
|
|
|
</td>
|
|
<td valign="top" align="right">
|
|
<a href="http://www.boost.org">
|
|
<img alt="Boost C++ Libraries" src="images/accepted_by_boost.png" height="80" width="230" border="0">
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<!-- Generated by Doxygen 1.5.9 -->
|
|
<div class="navigation" id="top">
|
|
<div class="tabs">
|
|
<ul>
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
|
<li><a href="modules.html"><span>Modules</span></a></li>
|
|
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
|
<li><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li><a href="files.html"><span>Files</span></a></li>
|
|
<li><a href="examples.html"><span>Examples</span></a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="contents">
|
|
<h1>c01_custom_point_example.cpp</h1>This sample demonstrates that custom points can be made as well. This sample contains many points, derived from boost::tuple, created from scratch, read only points, legacy points, etc.<p>
|
|
<div class="fragment"><pre class="fragment"><span class="comment">// Boost.Geometry (aka GGL, Generic Geometry Library)</span>
|
|
<span class="comment">//</span>
|
|
<span class="comment">// Copyright Barend Gehrels 2007-2009, Geodan, Amsterdam, the Netherlands</span>
|
|
<span class="comment">// Copyright Bruno Lalande 2008, 2009</span>
|
|
<span class="comment">// Use, modification and distribution is subject to the Boost Software License,</span>
|
|
<span class="comment">// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at</span>
|
|
<span class="comment">// http://www.boost.org/LICENSE_1_0.txt)</span>
|
|
<span class="comment">//</span>
|
|
<span class="comment">// Custom point Example</span>
|
|
|
|
<span class="preprocessor">#include <iostream></span>
|
|
|
|
<span class="preprocessor">#include <<a class="code" href="algorithms_2distance_8hpp.html">boost/geometry/algorithms/distance.hpp</a>></span>
|
|
<span class="preprocessor">#include <<a class="code" href="make_8hpp.html">boost/geometry/algorithms/make.hpp</a>></span>
|
|
<span class="preprocessor">#include <<a class="code" href="register_2point_8hpp.html">boost/geometry/geometries/register/point.hpp</a>></span>
|
|
<span class="preprocessor">#include <<a class="code" href="strategies_8hpp.html">boost/geometry/strategies/strategies.hpp</a>></span>
|
|
<span class="preprocessor">#include <<a class="code" href="write__dsv_8hpp.html">boost/geometry/util/write_dsv.hpp</a>></span>
|
|
|
|
<span class="comment">// Sample point, defining three color values</span>
|
|
<span class="keyword">struct </span>my_color_point
|
|
{
|
|
<span class="keywordtype">double</span> red, green, blue;
|
|
};
|
|
|
|
<span class="comment">// Sample point, having an int array defined</span>
|
|
<span class="keyword">struct </span>my_array_point
|
|
{
|
|
<span class="keywordtype">int</span> c[3];
|
|
};
|
|
|
|
<span class="comment">// Sample point, having x/y</span>
|
|
<span class="keyword">struct </span>my_2d
|
|
{
|
|
<span class="keywordtype">float</span> x,y;
|
|
};
|
|
|
|
<span class="comment">// Sample class, protected and construction-time-only x/y,</span>
|
|
<span class="comment">// Can (of course) only used in algorithms which take const& points</span>
|
|
<span class="keyword">class </span>my_class_ro
|
|
{
|
|
<span class="keyword">public</span>:
|
|
my_class_ro(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y) : m_x(x), m_y(y) {}
|
|
<span class="keywordtype">double</span> x()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_x; }
|
|
<span class="keywordtype">double</span> y()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_y; }
|
|
<span class="keyword">private</span>:
|
|
<span class="keywordtype">double</span> m_x, m_y;
|
|
};
|
|
|
|
<span class="comment">// Sample class using references for read/write</span>
|
|
<span class="keyword">class </span>my_class_rw
|
|
{
|
|
<span class="keyword">public</span>:
|
|
<span class="keyword">const</span> <span class="keywordtype">double</span>& x()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_x; }
|
|
<span class="keyword">const</span> <span class="keywordtype">double</span>& y()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_y; }
|
|
<span class="keywordtype">double</span>& x() { <span class="keywordflow">return</span> m_x; }
|
|
<span class="keywordtype">double</span>& y() { <span class="keywordflow">return</span> m_y; }
|
|
<span class="keyword">private</span>:
|
|
<span class="keywordtype">double</span> m_x, m_y;
|
|
};
|
|
|
|
<span class="comment">// Sample class using getters / setters</span>
|
|
<span class="keyword">class </span>my_class_gs
|
|
{
|
|
<span class="keyword">public</span>:
|
|
<span class="keyword">const</span> <span class="keywordtype">double</span> get_x()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_x; }
|
|
<span class="keyword">const</span> <span class="keywordtype">double</span> get_y()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_y; }
|
|
<span class="keywordtype">void</span> set_x(<span class="keywordtype">double</span> v) { m_x = v; }
|
|
<span class="keywordtype">void</span> set_y(<span class="keywordtype">double</span> v) { m_y = v; }
|
|
<span class="keyword">private</span>:
|
|
<span class="keywordtype">double</span> m_x, m_y;
|
|
};
|
|
|
|
<a name="a0"></a><a class="code" href="register_2point_8hpp.html#98e9781be9019c6d92029507e49ef9a5">BOOST_GEOMETRY_REGISTER_POINT_3D</a>(my_color_point, <span class="keywordtype">double</span>, cs::cartesian, red, green, blue)
|
|
<a class="code" href="register_2point_8hpp.html#98e9781be9019c6d92029507e49ef9a5">BOOST_GEOMETRY_REGISTER_POINT_3D</a>(my_array_point, <span class="keywordtype">int</span>, cs::cartesian, c[0], c[1], c[2])
|
|
<a name="a1"></a><a class="code" href="register_2point_8hpp.html#040a8280aaf06372fc637e1a436019d8">BOOST_GEOMETRY_REGISTER_POINT_2D</a>(my_2d, <span class="keywordtype">float</span>, cs::cartesian, x, y)
|
|
<a name="a2"></a><a class="code" href="register_2point_8hpp.html#3a3e97175ef92eed648707933c3fbeaa">BOOST_GEOMETRY_REGISTER_POINT_2D_CONST</a>(my_class_ro, <span class="keywordtype">double</span>, cs::cartesian, x(), y())
|
|
<a class="code" href="register_2point_8hpp.html#040a8280aaf06372fc637e1a436019d8">BOOST_GEOMETRY_REGISTER_POINT_2D</a>(my_class_rw, <span class="keywordtype">double</span>, cs::cartesian, x(), y())
|
|
<a name="a3"></a><a class="code" href="register_2point_8hpp.html#f174f265da534d30be10c2f5a4a2c75e">BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET</a>(my_class_gs, <span class="keywordtype">double</span>, cs::cartesian, get_x, get_y, set_x, set_y)
|
|
|
|
<span class="keywordtype">int</span> main()
|
|
{
|
|
<span class="comment">// Create 2 instances of our custom color point</span>
|
|
my_color_point c1 = boost::geometry::make<my_color_point>(255, 3, 233);
|
|
my_color_point c2 = boost::geometry::make<my_color_point>(0, 50, 200);
|
|
|
|
<span class="comment">// The distance between them can be calculated using the cartesian method (=pythagoras)</span>
|
|
<span class="comment">// provided with the library, configured by the coordinate_system type of the point</span>
|
|
std::cout << <span class="stringliteral">"color distance "</span>
|
|
<< <a name="a4"></a><a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(c1) << <span class="stringliteral">" to "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(c2) << <span class="stringliteral">" is "</span>
|
|
<< <a name="a5"></a><a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(c1,c2) << std::endl;
|
|
|
|
my_array_point a1 = {{0}};
|
|
my_array_point a2 = {{0}};
|
|
<a name="a6"></a><a class="code" href="group__access.html#gd1a7d6277b95439021f13191094aebdb" title="assign two values to a 2D point">boost::geometry::assign</a>(a1, 1, 2, 3);
|
|
<a class="code" href="group__access.html#gd1a7d6277b95439021f13191094aebdb" title="assign two values to a 2D point">boost::geometry::assign</a>(a2, 3, 2, 1);
|
|
|
|
std::cout << <span class="stringliteral">"color distance "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(a1) << <span class="stringliteral">" to "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(a2) << <span class="stringliteral">" is "</span>
|
|
<< <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(a1,a2) << std::endl;
|
|
|
|
my_2d p1 = {1, 5};
|
|
my_2d p2 = {3, 4};
|
|
std::cout << <span class="stringliteral">"float distance "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(p1) << <span class="stringliteral">" to "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(p2) << <span class="stringliteral">" is "</span>
|
|
<< <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(p1,p2) << std::endl;
|
|
|
|
my_class_ro cro1(1, 2);
|
|
my_class_ro cro2(3, 4);
|
|
std::cout << <span class="stringliteral">"class ro distance "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(cro1) << <span class="stringliteral">" to "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(cro2) << <span class="stringliteral">" is "</span>
|
|
<< <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(cro1,cro2) << std::endl;
|
|
|
|
my_class_rw crw1;
|
|
my_class_rw crw2;
|
|
<a class="code" href="group__access.html#gd1a7d6277b95439021f13191094aebdb" title="assign two values to a 2D point">boost::geometry::assign</a>(crw1, 1, 2);
|
|
<a class="code" href="group__access.html#gd1a7d6277b95439021f13191094aebdb" title="assign two values to a 2D point">boost::geometry::assign</a>(crw2, 3, 4);
|
|
std::cout << <span class="stringliteral">"class r/w distance "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw1) << <span class="stringliteral">" to "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw2) << <span class="stringliteral">" is "</span>
|
|
<< <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(crw1,crw2) << std::endl;
|
|
|
|
my_class_gs cgs1;
|
|
my_class_gs cgs2;
|
|
<a class="code" href="group__access.html#gd1a7d6277b95439021f13191094aebdb" title="assign two values to a 2D point">boost::geometry::assign</a>(cgs1, 1, 2);
|
|
<a class="code" href="group__access.html#gd1a7d6277b95439021f13191094aebdb" title="assign two values to a 2D point">boost::geometry::assign</a>(cgs2, 3, 4);
|
|
std::cout << <span class="stringliteral">"class g/s distance "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw1) << <span class="stringliteral">" to "</span>
|
|
<< <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw2) << <span class="stringliteral">" is "</span>
|
|
<< <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(cgs1,cgs2) << std::endl;
|
|
|
|
<span class="keywordflow">return</span> 0;
|
|
}
|
|
</pre></div> </div>
|
|
<hr size="1">
|
|
<table width="100%">
|
|
<tbody>
|
|
<tr>
|
|
<td align="left"><small>
|
|
<p>December 1, 2009</p>
|
|
</small></td>
|
|
<td align="right">
|
|
<small>Copyright © 1995-2009 Barend Gehrels, Geodan, Amsterdam<br>
|
|
Copyright © 2008-2009 Bruno Lalande, Paris<br>
|
|
Copyright © 2009 Mateusz Loskot, Cadcorp, London<br>
|
|
</small>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<address style="text-align: right;"><small>
|
|
Documentation is generated by <a href="http://www.doxygen.org/index.html">Doxygen</a>
|
|
</small></address>
|
|
</body>
|
|
</html>
|