Files
geometry/doc/doxygen_output/html/c01__custom__point__example_8cpp-example.html
Barend Gehrels 363580fbf6 Added old doxygen docs
[SVN r59777]
2010-02-20 15:57:12 +00:00

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">
&nbsp;&nbsp;
</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&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;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 &lt;iostream&gt;</span>
<span class="preprocessor">#include &lt;<a class="code" href="algorithms_2distance_8hpp.html">boost/geometry/algorithms/distance.hpp</a>&gt;</span>
<span class="preprocessor">#include &lt;<a class="code" href="make_8hpp.html">boost/geometry/algorithms/make.hpp</a>&gt;</span>
<span class="preprocessor">#include &lt;<a class="code" href="register_2point_8hpp.html">boost/geometry/geometries/register/point.hpp</a>&gt;</span>
<span class="preprocessor">#include &lt;<a class="code" href="strategies_8hpp.html">boost/geometry/strategies/strategies.hpp</a>&gt;</span>
<span class="preprocessor">#include &lt;<a class="code" href="write__dsv_8hpp.html">boost/geometry/util/write_dsv.hpp</a>&gt;</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&amp; 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>&amp; x()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_x; }
<span class="keyword">const</span> <span class="keywordtype">double</span>&amp; y()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_y; }
<span class="keywordtype">double</span>&amp; x() { <span class="keywordflow">return</span> m_x; }
<span class="keywordtype">double</span>&amp; 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&lt;my_color_point&gt;(255, 3, 233);
my_color_point c2 = boost::geometry::make&lt;my_color_point&gt;(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 &lt;&lt; <span class="stringliteral">"color distance "</span>
&lt;&lt; <a name="a4"></a><a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(c1) &lt;&lt; <span class="stringliteral">" to "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(c2) &lt;&lt; <span class="stringliteral">" is "</span>
&lt;&lt; <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) &lt;&lt; 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 &lt;&lt; <span class="stringliteral">"color distance "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(a1) &lt;&lt; <span class="stringliteral">" to "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(a2) &lt;&lt; <span class="stringliteral">" is "</span>
&lt;&lt; <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(a1,a2) &lt;&lt; std::endl;
my_2d p1 = {1, 5};
my_2d p2 = {3, 4};
std::cout &lt;&lt; <span class="stringliteral">"float distance "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(p1) &lt;&lt; <span class="stringliteral">" to "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(p2) &lt;&lt; <span class="stringliteral">" is "</span>
&lt;&lt; <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(p1,p2) &lt;&lt; std::endl;
my_class_ro cro1(1, 2);
my_class_ro cro2(3, 4);
std::cout &lt;&lt; <span class="stringliteral">"class ro distance "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(cro1) &lt;&lt; <span class="stringliteral">" to "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(cro2) &lt;&lt; <span class="stringliteral">" is "</span>
&lt;&lt; <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(cro1,cro2) &lt;&lt; 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 &lt;&lt; <span class="stringliteral">"class r/w distance "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw1) &lt;&lt; <span class="stringliteral">" to "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw2) &lt;&lt; <span class="stringliteral">" is "</span>
&lt;&lt; <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(crw1,crw2) &lt;&lt; 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 &lt;&lt; <span class="stringliteral">"class g/s distance "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw1) &lt;&lt; <span class="stringliteral">" to "</span>
&lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(crw2) &lt;&lt; <span class="stringliteral">" is "</span>
&lt;&lt; <a class="code" href="group__distance.html#g8fb8022d64a75b24c80a64ba46ec4738" title="Calculate distance between two geometries with a specified strategy.">boost::geometry::distance</a>(cgs1,cgs2) &lt;&lt; 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&nbsp;<a href="http://www.doxygen.org/index.html">Doxygen</a>
</small></address>
</body>
</html>