<section>
<title>The Title</title>
<section>
  <title>Namespaces</title>
  <itemizedlist>
    <listitem><para><link linkend="Paths">Paths</link></para></listitem>
    
  </itemizedlist>
  
</section>
<section id="Paths">
  <title>Namespace Paths</title>
  <section id="Paths-Bezier">
    <title>class Bezier</title>
    <indexterm type="types"><primary>Bezier</primary><secondary>Paths::Bezier</secondary></indexterm>
    <mediaobject>
      <imageobject><imagedata fileref="images/Paths::Bezier.png" format="PNG"></imagedata></imageobject>
      <imageobject><imagedata fileref="images/Paths::Bezier.svg" format="SVG"></imagedata></imageobject>
      
    </mediaobject>
    <para>
    The Bezier class. It implements a Bezier curve
    for the given order.</para>
    
    <section id="Paths-Bezier-Bezier.l.r">
      <title>Bezier()</title>
      <indexterm type="functions"><primary>Bezier</primary><secondary>Paths::Bezier::Bezier</secondary></indexterm>
      <synopsis> Bezier();
</synopsis>
<para>Create a new Bezier.</para>
      
      
    </section>
    <section id="Paths-Bezier-draw.l.r">
      <title>draw()</title>
      <indexterm type="functions"><primary>draw</primary><secondary>Paths::Bezier::draw</secondary></indexterm>
      <synopsis>void draw();
</synopsis>

    </section>
    <section id="Paths-Bezier-controls_">
      <title>controls_</title>
      <synopsis>std::vector&lt;Vertex&gt; controls_;
</synopsis>
<para>The data...</para>
      
      
    </section>
    <section id=".l'Manipulators'.c.r">
      <title>Manipulators</title>
      <section id="Paths-Bezier-add_control_point.lconst.sVertex.A.r">
        <title>add_control_point(const Vertex&amp;)</title>
        <indexterm type="functions"><primary>add_control_point</primary><secondary>Paths::Bezier::add_control_point</secondary></indexterm>
        <synopsis>void add_control_point(const Vertex&amp;);
</synopsis>
<para>
        Add a new control point.
        </para>
        <variablelist ><title >Parameters</title>
        <varlistentry ><term >p</term><listitem ><para >A point</para></listitem></varlistentry></variablelist>
        
      </section>
      <section id="Paths-Bezier-remove_control_point.lsize_t.r">
        <title>remove_control_point(size_t)</title>
        <indexterm type="functions"><primary>remove_control_point</primary><secondary>Paths::Bezier::remove_control_point</secondary></indexterm>
        <synopsis>void remove_control_point(size_t i);
</synopsis>
<para>
        Remove the control point at index i.
        </para>
        <variablelist ><title >Parameters</title>
        <varlistentry ><term >i</term><listitem ><para >An index</para></listitem></varlistentry></variablelist>
        
      </section>
      
    </section>
    
    
  </section>
  
  <section id="Paths-Nurbs">
    <title>class Nurbs</title>
    <indexterm type="types"><primary>Nurbs</primary><secondary>Paths::Nurbs</secondary></indexterm>
    <mediaobject>
      <imageobject><imagedata fileref="images/Paths::Nurbs.png" format="PNG"></imagedata></imageobject>
      <imageobject><imagedata fileref="images/Paths::Nurbs.svg" format="SVG"></imagedata></imageobject>
      
    </mediaobject>
    <para>The Nurbs class. It implements a nurbs curve
    for the given order. It is a very powerful
    and flexible curve representation. For simpler
    cases you may prefer to use a <link linkend="Paths-Bezier">Bezier</link> curve.</para><para>While non-rational curves are not sufficient to represent a circle,
    this is one of many sets of NURBS control points for an almost uniformly
    parameterized circle:</para><informaltable frame="all">
    <tgroup cols="3">
    <colspec colname="col_1" />
    <colspec colname="col_2" />
    <colspec colname="col_3" />
    <thead>
    <row>
    <entry><para>x</para></entry>
    <entry><para>y</para></entry>
    <entry><para>weight</para></entry>
    </row>
    </thead>
    <tbody>
    <row>
    <entry><para>1</para></entry>
    <entry><para>0</para></entry>
    <entry><para>1</para></entry>
    </row>
    <row>
    <entry><para>1</para></entry>
    <entry><para>1</para></entry>
    <entry><para><emphasis>sqrt(2)/2</emphasis></para></entry>
    </row>
    <row>
    <entry><para>0</para></entry>
    <entry><para>1</para></entry>
    <entry><para>1</para></entry>
    </row>
    <row>
    <entry><para>-1</para></entry>
    <entry><para>1</para></entry>
    <entry><para><emphasis>sqrt(2)/2</emphasis></para></entry>
    </row>
    <row>
    <entry><para>-1</para></entry>
    <entry><para>0</para></entry>
    <entry><para>1</para></entry>
    </row>
    <row>
    <entry><para>-1</para></entry>
    <entry><para>-1</para></entry>
    <entry><para><emphasis>sqrt(2)/2</emphasis></para></entry>
    </row>
    <row>
    <entry><para>0</para></entry>
    <entry><para>-1</para></entry>
    <entry><para>1</para></entry>
    </row>
    <row>
    <entry><para>1</para></entry>
    <entry><para>-1</para></entry>
    <entry><para><emphasis>sqrt(2)/2</emphasis></para></entry>
    </row>
    <row>
    <entry><para>1</para></entry>
    <entry><para>0</para></entry>
    <entry><para>1</para></entry>
    </row>
    </tbody>
    </tgroup>
    </informaltable>
    <para>The order is three, the knot vector is {0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4}.
    It should be noted that the circle is composed of four quarter circles,
    tied together with double knots. Although double knots in a third order NURBS
    curve would normally result in loss of continuity in the first derivative,
    the control points are positioned in such a way that the first derivative is continuous.
    (From <ulink url="http://en.wikipedia.org/wiki/NURBS">Wikipedia</ulink> )</para><para id="wikipedia">Example:</para><programlisting>
    Nurbs&lt;3&gt; circle;
    circle.insert_control_point(0, Vertex(1., 0.), 1.);
    circle.insert_control_point(0, Vertex(1., 1.), sqrt(2.)/2.);
    ...</programlisting>
    
    <section id="Paths-Nurbs-Nurbs.l.r">
      <title>Nurbs()</title>
      <indexterm type="functions"><primary>Nurbs</primary><secondary>Paths::Nurbs::Nurbs</secondary></indexterm>
      <synopsis> Nurbs();
</synopsis>
<para>Create a new Nurbs curve.</para>
      
    </section>
    <section id="Paths-Nurbs-insert_control_point.ldouble.cconst.sVertex.A.cdouble.r">
      <title>insert_control_point(double,const Vertex&amp;,double)</title>
      <indexterm type="functions"><primary>insert_control_point</primary><secondary>Paths::Nurbs::insert_control_point</secondary></indexterm>
      <synopsis>void insert_control_point(double knot, const Vertex&amp; vertex, double weight);
</synopsis>
<para>Inserts a control point with the given weight.
      The knot value determines the position in the sequence.</para><variablelist>
      <varlistentry>
      <term>
      <varname>Parameters:</varname></term>
      <listitem>
      <variablelist>
      <varlistentry>
      <term>
      knot</term>
      <listitem>
      <para>the parameter value at which to insert a new knot</para></listitem>
      </varlistentry>
      <varlistentry>
      <term>
      vertex</term>
      <listitem>
      <para>the control point</para></listitem>
      </varlistentry>
      <varlistentry>
      <term>
      weight</term>
      <listitem>
      <para>the weight of the control point</para></listitem>
      </varlistentry>
      </variablelist>
      </listitem>
      </varlistentry>
      </variablelist>
      
      
    </section>
    <section id="Paths-Nurbs-draw.l.r">
      <title>draw()</title>
      <indexterm type="functions"><primary>draw</primary><secondary>Paths::Nurbs::draw</secondary></indexterm>
      <synopsis>void draw();
</synopsis>

    </section>
    <section id="Paths-Nurbs-controls_">
      <title>controls_</title>
      <synopsis>std::vector&lt;Vertex&gt; controls_;
</synopsis>
<para>The data...</para>
      
    </section>
    <section id="Paths-Nurbs-weights_">
      <title>weights_</title>
      <synopsis>std::vector&lt;double&gt; weights_;
</synopsis>

    </section>
    <section id="Paths-Nurbs-knots_">
      <title>knots_</title>
      <synopsis>std::vector&lt;double&gt; knots_;
</synopsis>

    </section>
    
  </section>
  
  <section id="Paths-Polyline">
    <title>class Polyline</title>
    <indexterm type="types"><primary>Polyline</primary><secondary>Paths::Polyline</secondary></indexterm>
    <mediaobject>
      <imageobject><imagedata fileref="images/Paths::Polyline.png" format="PNG"></imagedata></imageobject>
      <imageobject><imagedata fileref="images/Paths::Polyline.svg" format="SVG"></imagedata></imageobject>
      
    </mediaobject>
    <para>The Polyline class. It is an ordered set of
    connected line segments.</para>
    
    <section id="Paths-Polyline-Polyline.l.r">
      <title>Polyline()</title>
      <indexterm type="functions"><primary>Polyline</primary><secondary>Paths::Polyline::Polyline</secondary></indexterm>
      <synopsis> Polyline();
</synopsis>
<para>Create a new Polyline.
      </para>
      
      
    </section>
    <section id="Paths-Polyline-draw.l.r">
      <title>draw()</title>
      <indexterm type="functions"><primary>draw</primary><secondary>Paths::Polyline::draw</secondary></indexterm>
      <synopsis>void draw();
</synopsis>

    </section>
    <section id="Paths-Polyline-vertices_">
      <title>vertices_</title>
      <synopsis>std::vector&lt;Vertex&gt; vertices_;
</synopsis>
<para>The data...</para>
      
      
    </section>
    <section id=".l'Manipulators'.c.r">
      <title>Manipulators</title>
      <section id="Paths-Polyline-add_vertex.lconst.sVertex.A.r">
        <title>add_vertex(const Vertex&amp;)</title>
        <indexterm type="functions"><primary>add_vertex</primary><secondary>Paths::Polyline::add_vertex</secondary></indexterm>
        <synopsis>void add_vertex(const Vertex&amp;);
</synopsis>
<para>Add a new vertex.</para>
        
        
      </section>
      <section id="Paths-Polyline-remove_vertex.lsize_t.r">
        <title>remove_vertex(size_t)</title>
        <indexterm type="functions"><primary>remove_vertex</primary><secondary>Paths::Polyline::remove_vertex</secondary></indexterm>
        <synopsis>void remove_vertex(size_t i);
</synopsis>
<para>Remove the vertex at index i.</para>
        
        
      </section>
      
    </section>
    
    
  </section>
  
  
</section>

<section id="Bezier_h_">
  <title>Bezier_h_</title>
  <synopsis>Bezier_h_
</synopsis>

</section>
<section id="Nurbs_h_">
  <title>Nurbs_h_</title>
  <synopsis>Nurbs_h_
</synopsis>

</section>
<section id="Path">
  <title>class Path</title>
  <indexterm type="types"><primary>Path</primary><secondary>Path</secondary></indexterm>
  <para>Path is the basic abstraction
  used for drawing (curved) paths.</para>
  
  <section id="Path-~Path.l.r">
    <title>~Path()</title>
    <indexterm type="functions"><primary>~Path</primary><secondary>Path::~Path</secondary></indexterm>
    <synopsis> ~Path();
</synopsis>

  </section>
  <section id="Path-draw.l.r">
    <title>draw()</title>
    <indexterm type="functions"><primary>draw</primary><secondary>Path::draw</secondary></indexterm>
    <synopsis>void draw();
</synopsis>
<para>Draw this path.</para>
    
    
  </section>
  
</section>

<section id="Path_h_">
  <title>Path_h_</title>
  <synopsis>Path_h_
</synopsis>

</section>
<section id="Polyline_h_">
  <title>Polyline_h_</title>
  <synopsis>Polyline_h_
</synopsis>

</section>
<section id="Vertex">
  <title>struct Vertex</title>
  <indexterm type="types"><primary>Vertex</primary><secondary>Vertex</secondary></indexterm>
  <para>A Vertex is a 2D point.</para>
  
  <section id="Vertex-Vertex.ldouble.cdouble.r">
    <title>Vertex(double,double)</title>
    <indexterm type="functions"><primary>Vertex</primary><secondary>Vertex::Vertex</secondary></indexterm>
    <synopsis> Vertex(double xx, double yy);
</synopsis>

  </section>
  <section id="Vertex-x">
    <title>x</title>
    <synopsis>double x;
</synopsis>

  </section>
  <section id="Vertex-y">
    <title>y</title>
    <synopsis>double y;
</synopsis>
<para> the y coordinate</para>
    
    
  </section>
  
</section>

</section>
