<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<Vertex> 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&)</title> <indexterm type="functions"><primary>add_control_point</primary><secondary>Paths::Bezier::add_control_point</secondary></indexterm> <synopsis>void add_control_point(const Vertex&); </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<3> 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&,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& 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<Vertex> controls_; </synopsis> <para>The data...</para> </section> <section id="Paths-Nurbs-weights_"> <title>weights_</title> <synopsis>std::vector<double> weights_; </synopsis> </section> <section id="Paths-Nurbs-knots_"> <title>knots_</title> <synopsis>std::vector<double> 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<Vertex> 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&)</title> <indexterm type="functions"><primary>add_vertex</primary><secondary>Paths::Polyline::add_vertex</secondary></indexterm> <synopsis>void add_vertex(const Vertex&); </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>