aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02787.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/doxygen/nel/a02787.html')
-rw-r--r--docs/doxygen/nel/a02787.html5467
1 files changed, 5467 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02787.html b/docs/doxygen/nel/a02787.html
new file mode 100644
index 00000000..2e798745
--- /dev/null
+++ b/docs/doxygen/nel/a02787.html
@@ -0,0 +1,5467 @@
+<!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>NeL: NLPACS::CLocalRetriever class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NLPACS::CLocalRetriever Class Reference</h1><code>#include &lt;<a class="el" href="a05930.html">local_retriever.h</a>&gt;</code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A surface retriever, located by its bounding box. <dl compact><dt><b>Author:</b></dt><dd>Benjamin Legros <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2001 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00063">63</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a> { <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw2">Landscape</a> = 0,
+<a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw1">Interior</a>
+ }</td></tr>
+
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera0">distanceToBorder</a> (const <a class="el" href="a02793.html">ULocalPosition</a> &amp;pos) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera1">dumpSurface</a> (<a class="el" href="a04558.html#a15">uint</a> surf, const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;vect=<a class="el" href="a03128.html#NLMISC_1_1CVectors3">NLMISC::CVector::Null</a>) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera2">findPath</a> (const <a class="el" href="a02792.html">CLocalPosition</a> &amp;A, const <a class="el" href="a02792.html">CLocalPosition</a> &amp;B, std::vector&lt; <a class="el" href="a03662.html">CVector2s</a> &gt; &amp;path, <a class="el" href="a02387.html">NLPACS::CCollisionSurfaceTemp</a> &amp;cst) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Finds a path in a given surface, from the point A to the point B. <a href="#NLPACS_1_1CLocalRetrievera2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera3">forceBorderChainId</a> (<a class="el" href="a04558.html#a11">uint32</a> chainId, <a class="el" href="a04558.html#a11">uint32</a> borderId)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera4">getHeight</a> (const <a class="el" href="a02793.html">ULocalPosition</a> &amp;position) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera5">getNextChain</a> (<a class="el" href="a04558.html#a11">uint32</a> chain, <a class="el" href="a04558.html#a10">sint32</a> surface) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera6">getPreviousChain</a> (<a class="el" href="a04558.html#a11">uint32</a> chain, <a class="el" href="a04558.html#a10">sint32</a> surface) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera7">getStartVector</a> (<a class="el" href="a04558.html#a11">uint32</a> chain, <a class="el" href="a04558.html#a10">sint32</a> surface) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera8">getStartVector</a> (<a class="el" href="a04558.html#a11">uint32</a> chain) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera9">getStopVector</a> (<a class="el" href="a04558.html#a11">uint32</a> chain, <a class="el" href="a04558.html#a10">sint32</a> surface) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera10">getStopVector</a> (<a class="el" href="a04558.html#a11">uint32</a> chain) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera11">insurePosition</a> (<a class="el" href="a02793.html">ULocalPosition</a> &amp;local) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assures a position is really inside a surface (and independent from any accuracy issue) and returns true if the position was moved. <a href="#NLPACS_1_1CLocalRetrievera11"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera12">replaceChain</a> (<a class="el" href="a04558.html#a11">uint32</a> chainId, const std::vector&lt; <a class="el" href="a02788.html">CChainReplacement</a> &gt; &amp;replacement)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera13">retrieveAccuratePosition</a> (<a class="el" href="a03662.html">CVector2s</a> estimated, <a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;cst, bool &amp;onBorder) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a position inside the retriever (from the local position), returns true if the position is close to a border. <a href="#NLPACS_1_1CLocalRetrievera13"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera14">retrievePosition</a> (<a class="el" href="a03128.html">NLMISC::CVector</a> estimated, <a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;cst) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a position inside the retriever (from the local position), returns true if the position is close to a border. <a href="#NLPACS_1_1CLocalRetrievera14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera15">snapToInteriorGround</a> (<a class="el" href="a02793.html">ULocalPosition</a> &amp;position, bool &amp;snapped) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Snaps on the ground. <a href="#NLPACS_1_1CLocalRetrievera15"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera16">testPosition</a> (<a class="el" href="a02793.html">ULocalPosition</a> &amp;local, <a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;cst) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a position inside the retriever (from the local position), returns true if the position is close to a border. <a href="#NLPACS_1_1CLocalRetrievera16"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievera17">unify</a> ()</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Mutators</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_0">addChain</a> (const std::vector&lt; <a class="el" href="a03128.html">NLMISC::CVector</a> &gt; &amp;vertices, <a class="el" href="a04558.html#a10">sint32</a> left, <a class="el" href="a04558.html#a10">sint32</a> right)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_1">addSurface</a> (<a class="el" href="a04558.html#a7">uint8</a> normalq, <a class="el" href="a04558.html#a7">uint8</a> orientationq, <a class="el" href="a04558.html#a7">uint8</a> mat, <a class="el" href="a04558.html#a7">uint8</a> charact, <a class="el" href="a04558.html#a7">uint8</a> <a class="el" href="a04223.html#a630">level</a>, bool isUnderWater, float waterHeight, bool clusterHint, const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;center, const <a class="el" href="a03466.html">CSurfaceQuadTree</a> &amp;quad, <a class="el" href="a04558.html#a6">sint8</a> quantHeight=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds a surface to the local retriever, using its features. Returns the id of the newly created surface. <a href="#NLPACS_1_1CLocalRetrieverz1259_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_2">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear. <a href="#NLPACS_1_1CLocalRetrieverz1259_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_3">computeLoopsAndTips</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Builds tips. <a href="#NLPACS_1_1CLocalRetrieverz1259_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_4">computeTopologies</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Builds topologies tables. <a href="#NLPACS_1_1CLocalRetrieverz1259_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_5">findBorderChains</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Found chains on the edges of the retriever and fills _BorderChains tables. <a href="#NLPACS_1_1CLocalRetrieverz1259_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_6">flushFullOrderedChains</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02334.html">CChainQuad</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_7">getChainQuad</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the chain quad. <a href="#NLPACS_1_1CLocalRetrieverz1259_7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02789.html">CInteriorFace</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_8">getInteriorFaces</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the interior faces. <a href="#NLPACS_1_1CLocalRetrieverz1259_8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03128.html">NLMISC::CVector</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_9">getInteriorVertices</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the interior vertices. <a href="#NLPACS_1_1CLocalRetrieverz1259_9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_10">initFaceGrid</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inits the face grid. <a href="#NLPACS_1_1CLocalRetrieverz1259_10"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_11">serial</a> (<a class="el" href="a02270.html">NLMISC::IStream</a> &amp;f)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Serialises the <a class="el" href="a02787.html">CLocalRetriever</a>. <a href="#NLPACS_1_1CLocalRetrieverz1259_11"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_12">setBBox</a> (const <a class="el" href="a02156.html">NLMISC::CAABBox</a> &amp;bbox)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the bbox of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1259_12"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_13">setExteriorMesh</a> (const <a class="el" href="a02492.html">CExteriorMesh</a> &amp;em)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the exterior mesh. <a href="#NLPACS_1_1CLocalRetrieverz1259_13"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_14">setFullOrderedChains</a> (const std::vector&lt; <a class="el" href="a03028.html">COrderedChain3f</a> &gt; &amp;foc)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_15">setIdentifier</a> (const std::string &amp;<a class="el" href="a04223.html#a564">id</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the identifier of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1259_15"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_16">setType</a> (<a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a> <a class="el" href="a04223.html#a581">type</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the type of the retriever (see EType). <a href="#NLPACS_1_1CLocalRetrieverz1259_16"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_17">sortTips</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sorts chains references inside the tips. NOT IMPLEMENTED YET. <a href="#NLPACS_1_1CLocalRetrieverz1259_17"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_18">translate</a> (const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;translation)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Translates the local retriever by the translation vector. <a href="#NLPACS_1_1CLocalRetrieverz1259_18"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_19">updateChainIds</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Updates surfaces links from the links contained in the chains... <a href="#NLPACS_1_1CLocalRetrieverz1259_19"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Selectors</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_0">build3dSurfacePolygons</a> (std::list&lt; std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &gt; &amp;polygons) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Builds the polygons (loops) of all surfaces in the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_1">build3dSurfacePolygons</a> (<a class="el" href="a04558.html#a11">uint32</a> surface, std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &amp;polygons) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Builds the polygons (loops) of a given surface. <a href="#NLPACS_1_1CLocalRetrieverz1257_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_2">buildInteriorSurfaceBBoxes</a> (std::vector&lt; <a class="el" href="a02156.html">NLMISC::CAABBox</a> &gt; &amp;surfaceBBoxes) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">build BBoxes of interior surfaces in surfaceBBoxes (cleared first) <a href="#NLPACS_1_1CLocalRetrieverz1257_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_3">buildSurfacePolygons</a> (std::list&lt; std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &gt; &amp;polygons) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Builds the polygons (loops) of all surfaces in the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_4">buildSurfacePolygons</a> (<a class="el" href="a04558.html#a11">uint32</a> surface, std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &amp;polygons) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Builds the polygons (loops) of a given surface. <a href="#NLPACS_1_1CLocalRetrieverz1257_4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_5">forceLoaded</a> (bool state)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Force Loaded State. <a href="#NLPACS_1_1CLocalRetrieverz1257_5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02156.html">NLMISC::CAABBox</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_6">getBBox</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the bbox. <a href="#NLPACS_1_1CLocalRetrieverz1257_6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a9">uint16</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_7">getBorderChain</a> (<a class="el" href="a04558.html#a15">uint</a> n) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the id of the nth chain on the edges of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a04558.html#a9">uint16</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_8">getBorderChains</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the ids of the chains on the edges of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02333.html">CChain</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_9">getChain</a> (<a class="el" href="a04558.html#a15">uint</a> n) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">retruns the nth chain. <a href="#NLPACS_1_1CLocalRetrieverz1257_9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a02333.html">CChain</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_10">getChains</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the chains. <a href="#NLPACS_1_1CLocalRetrieverz1257_10"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a02492.html">CExteriorMesh</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_11">getExteriorMesh</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the exterior mesh of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_11"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03028.html">COrderedChain3f</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_12">getFullOrderedChain</a> (<a class="el" href="a04558.html#a15">uint</a> n) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the nth full ordered chain. <a href="#NLPACS_1_1CLocalRetrieverz1257_12"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a03028.html">COrderedChain3f</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_13">getFullOrderedChains</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the full ordered chains. <a href="#NLPACS_1_1CLocalRetrieverz1257_13"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::string &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_14">getIdentifier</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the identifier of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_14"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a02789.html">CInteriorFace</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_15">getInteriorFaces</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the interior faces. <a href="#NLPACS_1_1CLocalRetrieverz1257_15"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a03128.html">NLMISC::CVector</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_16">getInteriorVertices</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the interior vertices. <a href="#NLPACS_1_1CLocalRetrieverz1257_16"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03027.html">COrderedChain</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_17">getOrderedChain</a> (<a class="el" href="a04558.html#a15">uint</a> n) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the nth ordered chain. <a href="#NLPACS_1_1CLocalRetrieverz1257_17"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a03027.html">COrderedChain</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_18">getOrderedChains</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the ordered chains. <a href="#NLPACS_1_1CLocalRetrieverz1257_18"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const <a class="el" href="a03328.html">CRetrievableSurface</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_19">getSurface</a> (<a class="el" href="a04558.html#a15">uint</a> n) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the nth surface. <a href="#NLPACS_1_1CLocalRetrieverz1257_19"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const std::vector&lt; <a class="el" href="a03328.html">CRetrievableSurface</a> &gt; &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_20">getSurfaces</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the surfaces. <a href="#NLPACS_1_1CLocalRetrieverz1257_20"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_21">getType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the type of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1257_21"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_22">isLoaded</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Is loaded ? <a href="#NLPACS_1_1CLocalRetrieverz1257_22"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Constructors</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1255_0">CLocalRetriever</a> ()</td></tr>
+
+<tr><td colspan="2"><div class="groupHeader">Collisions part.</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1261_0">computeCollisionChainQuad</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compute the chain quad, used for collisions. the ChainQuad is serialised in <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_11">serial()</a>. _OrderedChains must be OK. <a href="#NLPACS_1_1CLocalRetrieverz1261_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1261_1">testCollision</a> (<a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;cst, const <a class="el" href="a02156.html">NLMISC::CAABBox</a> &amp;bboxMove, const <a class="el" href="a03660.html">NLMISC::CVector2f</a> &amp;transBase) const </td></tr>
+
+<tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a15">uint</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievero0">FreeOChains</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievero1">LoadCheckFlag</a></td></tr>
+
+<tr><td colspan=2><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02794.html">CTip</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp0">__Tips</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The tips making links between different chains. <a href="#NLPACS_1_1CLocalRetrieverp0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02156.html">NLMISC::CAABBox</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The bbox of the local retriever. <a href="#NLPACS_1_1CLocalRetrieverp1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a04558.html#a9">uint16</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The chains on the edges of the zone. <a href="#NLPACS_1_1CLocalRetrieverp2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02334.html">CChainQuad</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">For collisions, the chainquad. <a href="#NLPACS_1_1CLocalRetrieverp3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02333.html">CChain</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The chains insinde the zone. <a href="#NLPACS_1_1CLocalRetrieverp4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03028.html">COrderedChain3f</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tells if retriever is loaded. <a href="#NLPACS_1_1CLocalRetrieverp6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03027.html">COrderedChain</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The chains insinde the zone. <a href="#NLPACS_1_1CLocalRetrieverp7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03328.html">CRetrievableSurface</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The surfaces inside the zone. <a href="#NLPACS_1_1CLocalRetrieverp8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02796.html">CTopology</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp9">_Topologies</a> [NumMaxCreatureModels]</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The topologies within the zone. <a href="#NLPACS_1_1CLocalRetrieverp9"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The type of the retriever. <a href="#NLPACS_1_1CLocalRetrieverp10"></a><br><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Internior retriever specific</div></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02492.html">CExteriorMesh</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The exterior mesh, for collisions. <a href="#NLPACS_1_1CLocalRetrieverz1253_0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02497.html">CFaceGrid</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_1">_FaceGrid</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The face selection grid. <a href="#NLPACS_1_1CLocalRetrieverz1253_1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::string&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_2">_Id</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An human readable identifier of the retriever. <a href="#NLPACS_1_1CLocalRetrieverz1253_2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a02789.html">CInteriorFace</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The faces of the collision mesh. <a href="#NLPACS_1_1CLocalRetrieverz1253_3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>std::vector&lt; <a class="el" href="a03128.html">NLMISC::CVector</a> &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_4">_InteriorVertices</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The vertices of the collision mesh. <a href="#NLPACS_1_1CLocalRetrieverz1253_4"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Static Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievert0">_EdgeTipThreshold</a> = 0.1f</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The tip recognition threshold. <a href="#NLPACS_1_1CLocalRetrievert0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const float&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievert1">_TipThreshold</a> = 0.1f</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The tip recognition threshold. <a href="#NLPACS_1_1CLocalRetrievert1"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Friends</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>class&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievern0">CRetrieverInstance</a></td></tr>
+
+</table>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverw0" doxytag="NLPACS::CLocalRetriever::EType" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> enum <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">NLPACS::CLocalRetriever::EType</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The different types of retriever (landscape or interior.) <dl compact><dt><b>Author:</b></dt><dd>Benjamin Legros <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2001</dd></dl>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw2" doxytag="Landscape" ></a>Landscape</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw1" doxytag="Interior" ></a>Interior</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00160">160</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05930.html#l00404">getType()</a>.
+<p>
+<div class="fragment"><pre>00161 {
+00162 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw2">Landscape</a> = 0,
+00163 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw1">Interior</a>
+00164 };
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1255_0" doxytag="NLPACS::CLocalRetriever::CLocalRetriever" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NLPACS::CLocalRetriever::CLocalRetriever </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00056">56</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00341">_Loaded</a>, and <a class="el" href="a05930.html#l00345">LoadCheckFlag</a>.
+<p>
+<div class="fragment"><pre>00057 {
+00058 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a> = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw2">Landscape</a>;
+00059 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a> = <span class="keyword">false</span>;
+00060 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievero1">LoadCheckFlag</a> = <span class="keyword">false</span>;
+00061 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_0" doxytag="NLPACS::CLocalRetriever::addChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a10">sint32</a> NLPACS::CLocalRetriever::addChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::vector&lt; <a class="el" href="a03128.html">NLMISC::CVector</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>vertices</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>right</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Adds a chain to the local retriever, using the vertices of the chain, the left and right surfaces id and the edge on which the chain is stuck
+<p>
+Definition at line <a class="el" href="a05929.html#l00361">361</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05540.html#l00226">NLPACS::CChain::_StartTip</a>, <a class="el" href="a05540.html#l00227">NLPACS::CChain::_StopTip</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05539.html#l00199">NLPACS::CChain::make()</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00098">uint16</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00365">NLPACS::buildSurfaces()</a>.
+<p>
+<div class="fragment"><pre>00363 {
+00364 vector&lt;CVector&gt; vertices = verts;
+00365 <a class="code" href="a04558.html#a15">uint</a> i;
+00366
+00367 <span class="keywordflow">if</span> (vertices.size() &lt; 2)
+00368 {
+00369 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::addChain()"</span>);
+00370 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"The chain has less than 2 vertices"</span>);
+00371 <span class="keywordflow">return</span> -1;
+00372 }
+00373
+00374 <span class="comment">// Remove doubled vertices due to CVector2s snapping</span>
+00375 vector&lt;CVector2s&gt; converts;
+00376
+00377 <span class="keywordflow">for</span> (i=0; i&lt;vertices.size(); ++i)
+00378 converts.push_back(CVector2s(vertices[i]));
+00379
+00380 vector&lt;CVector2s&gt;::iterator next2s = converts.begin(), it2s, prev2s;
+00381 prev2s = next2s; ++next2s;
+00382 it2s = next2s; ++next2s;
+00383
+00384 vector&lt;CVector&gt;::iterator it3f = vertices.begin();
+00385 CVector prev3f = *it3f;
+00386 ++it3f;
+00387
+00388
+00389 <span class="keywordflow">for</span> (; it2s != converts.end() &amp;&amp; next2s != converts.end(); )
+00390 {
+00391 <span class="comment">// if the next point is equal to the previous</span>
+00392 <span class="keywordflow">if</span> (*it2s == *prev2s || *it2s == *next2s)
+00393 {
+00394 <span class="comment">// then remove the next point</span>
+00395 it2s = converts.erase(it2s);
+00396 it3f = vertices.erase(it3f);
+00397
+00398 prev2s = it2s;
+00399 --prev2s;
+00400 next2s = it2s;
+00401 ++next2s;
+00402 }
+00403 <span class="keywordflow">else</span>
+00404 {
+00405 <span class="comment">// else remember the next point, and step to the next...</span>
+00406 ++prev2s;
+00407 ++it2s;
+00408 ++next2s;
+00409 ++it3f;
+00410 prev3f = *it3f;
+00411 }
+00412 }
+00413
+00414 <span class="keywordflow">if</span> (vertices.size() &lt; 2)
+00415 {
+00416 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::addChain()"</span>);
+00417 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"The chain was snapped to a single point"</span>);
+00418 <span class="keywordflow">return</span> -1;
+00419 }
+00420
+00421 <a class="code" href="a04558.html#a10">sint32</a> newId = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>.size();
+00422 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>.resize(newId+1);
+00423 CChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>.back();
+00424
+00425 <span class="keywordflow">if</span> (left&gt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size())
+00426 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"left surface id MUST be id&lt;%d (id=%d)"</span>, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(), left);
+00427 <span class="keywordflow">if</span> (right&gt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size())
+00428 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"right surface id MUST be id&lt;%d (id=%d)"</span>, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(), right);
+00429
+00430 <span class="comment">// checks if we can build the chain.</span>
+00431 <span class="keywordflow">if</span> (newId &gt; 65535)
+00432 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::addChain(): reached the maximum number of chains"</span>);
+00433
+00434 CRetrievableSurface *leftSurface = (left&gt;=0) ? &amp;(<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[left]) : NULL;
+00435 CRetrievableSurface *rightSurface = (right&gt;=0) ? &amp;(<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[right]) : NULL;
+00436
+00437 <span class="comment">// adds the chain and the link to the surface links vector.</span>
+00438 <span class="keywordflow">if</span> (leftSurface != NULL)
+00439 leftSurface-&gt;_Chains.push_back(CRetrievableSurface::CSurfaceLink(newId, right));
+00440 <span class="keywordflow">if</span> (rightSurface != NULL)
+00441 rightSurface-&gt;_Chains.push_back(CRetrievableSurface::CSurfaceLink(newId, left));
+00442
+00443 chain._StartTip = 0xffff;
+00444 chain._StopTip = 0xffff;
+00445
+00446 <span class="comment">// make the chain and its subchains.</span>
+00447 vector&lt;uint&gt; empty;
+00448 chain.make(vertices, left, right, _OrderedChains, (<a class="code" href="a04558.html#a9">uint16</a>)newId, _FullOrderedChains, empty);
+00449
+00450 <span class="keywordflow">return</span> newId;
+00451 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_1" doxytag="NLPACS::CLocalRetriever::addSurface" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a10">sint32</a> NLPACS::CLocalRetriever::addSurface </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>normalq</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>orientationq</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>mat</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>charact</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a7">uint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>level</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>isUnderWater</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>float&nbsp;</td>
+ <td class="mdname" nowrap> <em>waterHeight</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>clusterHint</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>center</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03466.html">CSurfaceQuadTree</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>quad</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a6">sint8</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>quantHeight</em> = 0</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Adds a surface to the local retriever, using its features. Returns the id of the newly created surface.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00320">320</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a06334.html#l00149">NLPACS::CRetrievableSurface::_Center</a>, <a class="el" href="a06334.html#l00125">NLPACS::CRetrievableSurface::_Character</a>, <a class="el" href="a06334.html#l00133">NLPACS::CRetrievableSurface::_Flags</a>, <a class="el" href="a06334.html#l00129">NLPACS::CRetrievableSurface::_IsCeiling</a>, <a class="el" href="a06334.html#l00128">NLPACS::CRetrievableSurface::_IsFloor</a>, <a class="el" href="a06334.html#l00126">NLPACS::CRetrievableSurface::_Level</a>, <a class="el" href="a06334.html#l00124">NLPACS::CRetrievableSurface::_Material</a>, <a class="el" href="a06334.html#l00122">NLPACS::CRetrievableSurface::_NormalQuanta</a>, <a class="el" href="a06334.html#l00123">NLPACS::CRetrievableSurface::_OrientationQuanta</a>, <a class="el" href="a06334.html#l00143">NLPACS::CRetrievableSurface::_Quad</a>, <a class="el" href="a06334.html#l00127">NLPACS::CRetrievableSurface::_QuantHeight</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a06334.html#l00134">NLPACS::CRetrievableSurface::_WaterHeight</a>, <a class="el" href="a05646.html#l01013">level</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00095">sint8</a>, and <a class="el" href="a05981.html#l00096">uint8</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00365">NLPACS::buildSurfaces()</a>.
+<p>
+<div class="fragment"><pre>00327 {
+00328 <span class="comment">// creates a new surface...</span>
+00329 <a class="code" href="a04558.html#a10">sint32</a> newId = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size();
+00330 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.resize(newId+1);
+00331 CRetrievableSurface &amp;surf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.back();
+00332
+00333 <span class="comment">// ... and fills it</span>
+00334 surf._NormalQuanta = normalq;
+00335 surf._OrientationQuanta = orientationq;
+00336 surf._Material = mat;
+00337 surf._Character = charact;
+00338 surf._Level = <a class="code" href="a04223.html#a630">level</a>;
+00339 surf._Quad = quad;
+00340 surf._Center = center;
+00341 surf._QuantHeight = quantHeight;
+00342
+00343 <span class="comment">// WARNING!! MODIFY THESE IF QUANTAS VALUES CHANGE !!</span>
+00344 surf._IsFloor = (surf._NormalQuanta &lt;= 1);
+00345 surf._IsCeiling = (surf._NormalQuanta &gt;= 3);
+00346
+00347 surf._Flags = 0;
+00348 surf._Flags |= (surf._IsFloor) ? (1&lt;&lt;CRetrievableSurface::IsFloorBit) : 0;
+00349 surf._Flags |= (surf._IsCeiling) ? (1&lt;&lt;CRetrievableSurface::IsCeilingBit) : 0;
+00350 surf._Flags |= (!surf._IsFloor &amp;&amp; !surf._IsCeiling) ? (1&lt;&lt;CRetrievableSurface::IsSlantBit) : 0;
+00351 surf._Flags |= clusterHint ? (1&lt;&lt;CRetrievableSurface::ClusterHintBit) : 0;
+00352
+00353 surf._Flags |= (isUnderWater) ? (1&lt;&lt;CRetrievableSurface::IsUnderWaterBit) : 0;
+00354 surf._WaterHeight = waterHeight;
+00355
+00356 surf._Flags |= ((0xffffffff&lt;&lt;(CRetrievableSurface::NormalQuantasStartBit)) &amp; CRetrievableSurface::NormalQuantasBitMask);
+00357
+00358 <span class="keywordflow">return</span> newId;
+00359 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_0" doxytag="NLPACS::CLocalRetriever::build3dSurfacePolygons" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::build3dSurfacePolygons </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::list&lt; std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>polygons</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Builds the polygons (loops) of all surfaces in the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00448">448</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05929.html#l00714">build3dSurfacePolygons()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00449 {
+00450 <a class="code" href="a04558.html#a15">uint</a> i;
+00451 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++i)
+00452 {
+00453 polygons.push_back();
+00454 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_1">build3dSurfacePolygons</a>(i, polygons.back());
+00455 }
+00456 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_1" doxytag="NLPACS::CLocalRetriever::build3dSurfacePolygons" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::build3dSurfacePolygons </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surface</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>polygons</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Builds the polygons (loops) of a given surface.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00714">714</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05540.html#l00220">NLPACS::CChain::_Left</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05540.html#l00217">NLPACS::CChain::_SubChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05540.html#l00068">NLPACS::COrderedChain3f::getVertices()</a>, <a class="el" href="a05540.html#l00071">NLPACS::COrderedChain3f::isForward()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a06191.html#l00055">NLMISC::CPolygon::Vertices</a>.
+<p>
+Referenced by <a class="el" href="a05930.html#l00448">build3dSurfacePolygons()</a>.
+<p>
+<div class="fragment"><pre>00715 {
+00716 <span class="keyword">const</span> CRetrievableSurface &amp;surf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface];
+00717
+00718 <a class="code" href="a04558.html#a15">uint</a> i, j, k, <a class="code" href="a05373.html#a2">l</a>;
+00719
+00720 <span class="keywordflow">for</span> (i=0; i&lt;surf._Loops.size(); ++i)
+00721 {
+00722 polygons.push_back();
+00723 <a class="code" href="a03100.html">CPolygon</a> &amp;poly = polygons.back();
+00724
+00725 <span class="keywordflow">for</span> (j=0; j&lt;surf._Loops[i].size(); ++j)
+00726 {
+00727 <span class="keyword">const</span> CRetrievableSurface::TLoop &amp;loop = surf._Loops[i];
+00728 <span class="keyword">const</span> CChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[surf._Chains[loop[j]].Chain];
+00729 <span class="keywordtype">bool</span> chainforward = ((<a class="code" href="a04558.html#a11">uint32</a>)chain._Left == surface);
+00730
+00731 <span class="keywordflow">if</span> (chainforward)
+00732 {
+00733 <span class="keywordflow">for</span> (k=0; k&lt;chain._SubChains.size(); ++k)
+00734 {
+00735 <span class="keyword">const</span> COrderedChain3f &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[chain._SubChains[k]];
+00736 <span class="keywordtype">bool</span> ochainforward = ochain.isForward();
+00737
+00738 <span class="keywordflow">if</span> (ochainforward)
+00739 {
+00740 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=0; <a class="code" href="a05373.html#a2">l</a>&lt;ochain.getVertices().size()-1; ++<a class="code" href="a05373.html#a2">l</a>)
+00741 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l]);
+00742 }
+00743 <span class="keywordflow">else</span>
+00744 {
+00745 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=ochain.getVertices().size()-1; <a class="code" href="a05373.html#a2">l</a>&gt;0; --<a class="code" href="a05373.html#a2">l</a>)
+00746 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l]);
+00747 }
+00748 }
+00749 }
+00750 <span class="keywordflow">else</span>
+00751 {
+00752 <span class="keywordflow">for</span> (k=chain._SubChains.size()-1; (<a class="code" href="a04558.html#a14">sint</a>)k&gt;=0; --k)
+00753 {
+00754 <span class="keyword">const</span> COrderedChain3f &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[chain._SubChains[k]];
+00755 <span class="keywordtype">bool</span> ochainforward = ochain.isForward();
+00756
+00757 <span class="keywordflow">if</span> (ochainforward)
+00758 {
+00759 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=ochain.getVertices().size()-1; (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a05373.html#a2">l</a>&gt;0; --<a class="code" href="a05373.html#a2">l</a>)
+00760 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l]);
+00761 }
+00762 <span class="keywordflow">else</span>
+00763 {
+00764 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=0; <a class="code" href="a05373.html#a2">l</a>&lt;ochain.getVertices().size()-1; ++<a class="code" href="a05373.html#a2">l</a>)
+00765 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l]);
+00766 }
+00767 }
+00768 }
+00769 }
+00770 }
+00771 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_2" doxytag="NLPACS::CLocalRetriever::buildInteriorSurfaceBBoxes" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::buildInteriorSurfaceBBoxes </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="a02156.html">NLMISC::CAABBox</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>surfaceBBoxes</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+build BBoxes of interior surfaces in surfaceBBoxes (cleared first)
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01935">1935</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00330">_InteriorFaces</a>, <a class="el" href="a05930.html#l00327">_InteriorVertices</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05930.html#l00177">NLPACS::CLocalRetriever::CInteriorFace::Surface</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05930.html#l00176">NLPACS::CLocalRetriever::CInteriorFace::Verts</a>.
+<p>
+<div class="fragment"><pre>01936 {
+01937 <span class="comment">// resize dest, and init.</span>
+01938 vector&lt;bool&gt; firstTriangle;
+01939 surfaceBBoxes.clear();
+01940 surfaceBBoxes.resize(<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size());
+01941 firstTriangle.resize(<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(), <span class="keyword">true</span>);
+01942
+01943 <span class="comment">// For all _InteriorFaces.</span>
+01944 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> iIntFace=0; iIntFace&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>.size(); iIntFace++)
+01945 {
+01946 <span class="keyword">const</span> CInteriorFace &amp;intFace= <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>[iIntFace];
+01947
+01948 <span class="comment">// Extend the surface of this face with her 3 points.</span>
+01949
+01950 <span class="comment">// check good id.</span>
+01951 <span class="keywordflow">if</span>(intFace.Surface==(<a class="code" href="a04558.html#a15">uint</a>)-1)
+01952 <span class="keywordflow">continue</span>;
+01953 <a class="code" href="a04199.html#a6">nlassert</a>(intFace.Surface&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size());
+01954
+01955 <span class="comment">// If first time we extend the bbox of this surface</span>
+01956 <span class="keywordflow">if</span>(firstTriangle[intFace.Surface])
+01957 {
+01958 surfaceBBoxes[intFace.Surface].setCenter(_InteriorVertices[intFace.Verts[0]] );
+01959 firstTriangle[intFace.Surface]= <span class="keyword">false</span>;
+01960 }
+01961 <span class="keywordflow">else</span>
+01962 surfaceBBoxes[intFace.Surface].extend(_InteriorVertices[intFace.Verts[0]] );
+01963
+01964 <span class="comment">// extend with other 2 points</span>
+01965 surfaceBBoxes[intFace.Surface].extend(_InteriorVertices[intFace.Verts[1]] );
+01966 surfaceBBoxes[intFace.Surface].extend(_InteriorVertices[intFace.Verts[2]] );
+01967 }
+01968
+01969 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_3" doxytag="NLPACS::CLocalRetriever::buildSurfacePolygons" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::buildSurfacePolygons </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">std::list&lt; std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>polygons</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Builds the polygons (loops) of all surfaces in the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00434">434</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05929.html#l00655">buildSurfacePolygons()</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00435 {
+00436 <a class="code" href="a04558.html#a15">uint</a> i;
+00437 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++i)
+00438 {
+00439 polygons.push_back();
+00440 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_4">buildSurfacePolygons</a>(i, polygons.back());
+00441 }
+00442 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_4" doxytag="NLPACS::CLocalRetriever::buildSurfacePolygons" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::buildSurfacePolygons </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surface</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::list&lt; <a class="el" href="a03100.html">NLMISC::CPolygon</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>polygons</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Builds the polygons (loops) of a given surface.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00655">655</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05540.html#l00220">NLPACS::CChain::_Left</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05540.html#l00217">NLPACS::CChain::_SubChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05540.html#l00133">NLPACS::COrderedChain::getVertices()</a>, <a class="el" href="a05540.html#l00136">NLPACS::COrderedChain::isForward()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, and <a class="el" href="a06191.html#l00055">NLMISC::CPolygon::Vertices</a>.
+<p>
+Referenced by <a class="el" href="a05930.html#l00434">buildSurfacePolygons()</a>.
+<p>
+<div class="fragment"><pre>00656 {
+00657 <span class="keyword">const</span> CRetrievableSurface &amp;surf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface];
+00658
+00659 <a class="code" href="a04558.html#a15">uint</a> i, j, k, <a class="code" href="a05373.html#a2">l</a>;
+00660
+00661 <span class="keywordflow">for</span> (i=0; i&lt;surf._Loops.size(); ++i)
+00662 {
+00663 polygons.push_back();
+00664 <a class="code" href="a03100.html">CPolygon</a> &amp;poly = polygons.back();
+00665
+00666 <span class="keywordflow">for</span> (j=0; j&lt;surf._Loops[i].size(); ++j)
+00667 {
+00668 <span class="keyword">const</span> CChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[surf._Loops[i][j]];
+00669 <span class="keywordtype">bool</span> chainforward = ((<a class="code" href="a04558.html#a11">uint32</a>)chain._Left == surface);
+00670
+00671 <span class="keywordflow">if</span> (chainforward)
+00672 {
+00673 <span class="keywordflow">for</span> (k=0; k&lt;chain._SubChains.size(); ++k)
+00674 {
+00675 <span class="keyword">const</span> COrderedChain &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[chain._SubChains[k]];
+00676 <span class="keywordtype">bool</span> ochainforward = ochain.isForward();
+00677
+00678 <span class="keywordflow">if</span> (ochainforward)
+00679 {
+00680 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=0; <a class="code" href="a05373.html#a2">l</a>&lt;ochain.getVertices().size()-1; ++<a class="code" href="a05373.html#a2">l</a>)
+00681 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l].unpack3f());
+00682 }
+00683 <span class="keywordflow">else</span>
+00684 {
+00685 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=ochain.getVertices().size()-1; <a class="code" href="a05373.html#a2">l</a>&gt;0; --<a class="code" href="a05373.html#a2">l</a>)
+00686 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l].unpack3f());
+00687 }
+00688 }
+00689 }
+00690 <span class="keywordflow">else</span>
+00691 {
+00692 <span class="keywordflow">for</span> (k=chain._SubChains.size(); (<a class="code" href="a04558.html#a14">sint</a>)k&gt;0; --k)
+00693 {
+00694 <span class="keyword">const</span> COrderedChain &amp;ochain = _OrderedChains[chain._SubChains[k]];
+00695 <span class="keywordtype">bool</span> ochainforward = ochain.isForward();
+00696
+00697 <span class="keywordflow">if</span> (ochainforward)
+00698 {
+00699 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=ochain.getVertices().size()-1; (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a05373.html#a2">l</a>&gt;0; --<a class="code" href="a05373.html#a2">l</a>)
+00700 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l].unpack3f());
+00701 }
+00702 <span class="keywordflow">else</span>
+00703 {
+00704 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=0; <a class="code" href="a05373.html#a2">l</a>&lt;ochain.getVertices().size()-1; ++<a class="code" href="a05373.html#a2">l</a>)
+00705 poly.<a class="code" href="a03100.html#NLMISC_1_1CPolygono0">Vertices</a>.push_back(ochain[l].unpack3f());
+00706 }
+00707 }
+00708 }
+00709 }
+00710 }
+00711 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_2" doxytag="NLPACS::CLocalRetriever::clear" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::clear </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Clear.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00064">64</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00301">__Tips</a>, <a class="el" href="a05930.html#l00304">_BorderChains</a>, <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00324">_ExteriorMesh</a>, <a class="el" href="a05930.html#l00333">_FaceGrid</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05930.html#l00330">_InteriorFaces</a>, <a class="el" href="a05930.html#l00327">_InteriorVertices</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05930.html#l00307">_Topologies</a>, <a class="el" href="a05694.html#l00120">NLPACS::CFaceGrid::clear()</a>, <a class="el" href="a05693.html#l00106">NLPACS::CExteriorMesh::clear()</a>, <a class="el" href="a05542.html#l00099">NLPACS::CChainQuad::clear()</a>, <a class="el" href="a05930.html#l00345">LoadCheckFlag</a>, <a class="el" href="a05380.html#a31a8">NLPACS::NumMaxCreatureModels</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00065 {
+00066 <a class="code" href="a05378.html#a381">contReset</a>(_OrderedChains);
+00067 <a class="code" href="a05378.html#a381">contReset</a>(_FullOrderedChains);
+00068 <a class="code" href="a05378.html#a381">contReset</a>(_Chains);
+00069 <a class="code" href="a05378.html#a381">contReset</a>(_Surfaces);
+00070 <a class="code" href="a05378.html#a381">contReset</a>(__Tips);
+00071 <a class="code" href="a05378.html#a381">contReset</a>(_BorderChains);
+00072 <a class="code" href="a04558.html#a15">uint</a> i;
+00073 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a05380.html#a31a8">NumMaxCreatureModels</a>; ++i)
+00074 <a class="code" href="a05378.html#a381">contReset</a>(_Topologies[i]);
+00075 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>.clear();
+00076 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a>.clear();
+00077 <a class="code" href="a05378.html#a381">contReset</a>(_InteriorVertices);
+00078 <a class="code" href="a05378.html#a381">contReset</a>(_InteriorFaces);
+00079 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_1">_FaceGrid</a>.clear();
+00080 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_2">_Id</a>.resize(0);
+00081 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a> = <span class="keyword">false</span>;
+00082 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievero1">LoadCheckFlag</a> = <span class="keyword">false</span>;
+00083 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1261_0" doxytag="NLPACS::CLocalRetriever::computeCollisionChainQuad" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::computeCollisionChainQuad </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+compute the chain quad, used for collisions. the ChainQuad is serialised in <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1259_11">serial()</a>. _OrderedChains must be OK.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01800">1800</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, and <a class="el" href="a05541.html#l00122">NLPACS::CChainQuad::build()</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>01801 {
+01802 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>.build(_OrderedChains);
+01803 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_3" doxytag="NLPACS::CLocalRetriever::computeLoopsAndTips" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::computeLoopsAndTips </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Builds tips.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00456">456</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05929.html#l00248">dumpSurface()</a>, <a class="el" href="a05929.html#l00086">getStartVector()</a>, <a class="el" href="a05929.html#l00092">getStopVector()</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00457 {
+00458 <span class="comment">// for each surface,</span>
+00459 <span class="comment">// examine each chain tip to match another tip inside the surface tips</span>
+00460 <span class="comment">// if there is no matching tip, then creates a new one</span>
+00461
+00462 <a class="code" href="a04558.html#a15">uint</a> i, j;
+00463
+00464 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++i)
+00465 {
+00466 CRetrievableSurface &amp;surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[i];
+00467
+00468 vector&lt;bool&gt; chainFlags;
+00469 chainFlags.resize(surface._Chains.size());
+00470 <span class="keywordflow">for</span> (j=0; j&lt;chainFlags.size(); ++j)
+00471 chainFlags[j] = <span class="keyword">false</span>;
+00472
+00473 <a class="code" href="a04558.html#a15">uint</a> totalAdded = 0;
+00474
+00475 <span class="keywordflow">while</span> (<span class="keyword">true</span>)
+00476 {
+00477 <span class="keywordflow">for</span> (j=0; j&lt;chainFlags.size() &amp;&amp; chainFlags[j]; ++j)
+00478 ;
+00479
+00480 <span class="keywordflow">if</span> (j == chainFlags.size())
+00481 <span class="keywordflow">break</span>;
+00482
+00483 <a class="code" href="a04558.html#a11">uint32</a> loopId = surface._Loops.size();
+00484 surface._Loops.push_back(CRetrievableSurface::TLoop());
+00485 CRetrievableSurface::TLoop &amp;loop = surface._Loops.back();
+00486
+00487 CVector loopStart = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera8">getStartVector</a>(surface._Chains[j].Chain, i);
+00488 CVector currentEnd = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera10">getStopVector</a>(surface._Chains[j].Chain, i);
+00489 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[surface._Chains[j].Chain].setLoopIndexes(i, loopId, loop.size());
+00490 loop.push_back(j);
+00491 chainFlags[j] = <span class="keyword">true</span>;
+00492
+00493 <span class="keywordtype">float</span> loopCloseDistance;
+00494
+00495 <span class="keywordflow">while</span> (<span class="keyword">true</span>)
+00496 {
+00497 <span class="comment">// loopCloseDistance = hybrid2dNorm(loopStart-currentEnd);</span>
+00498 loopCloseDistance = (loopStart-currentEnd).norm();
+00499
+00500 <span class="comment">// choose the best matching start vector</span>
+00501 <a class="code" href="a04558.html#a14">sint</a> bestChain = -1;
+00502 <span class="keywordtype">float</span> best = 1.0e10f;
+00503 CVector thisStart;
+00504 <span class="keywordflow">for</span> (j=0; j&lt;chainFlags.size(); ++j)
+00505 {
+00506 <span class="keywordflow">if</span> (chainFlags[j])
+00507 <span class="keywordflow">continue</span>;
+00508 thisStart = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera8">getStartVector</a>(surface._Chains[j].Chain, i);
+00509 <span class="comment">// float d = hybrid2dNorm(thisStart-currentEnd);</span>
+00510 <span class="keywordtype">float</span> d = (thisStart-currentEnd).norm();
+00511 <span class="keywordflow">if</span> (d &lt; best)
+00512 {
+00513 best = d;
+00514 bestChain = j;
+00515 }
+00516 }
+00517
+00518 <span class="keywordflow">if</span> ((bestChain == -1 || best &gt; 3.0e-2f)&amp;&amp; loopCloseDistance &gt; 3.0e-2f)
+00519 {
+00520 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::computeTips()"</span>);
+00521
+00522 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera1">dumpSurface</a>(i);
+00523
+00524 <span class="keywordflow">for</span> (j=0; j&lt;surface._Chains.size(); ++j)
+00525 {
+00526 CVector start = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera8">getStartVector</a>(surface._Chains[j].Chain, i);
+00527 CVector end = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera10">getStopVector</a>(surface._Chains[j].Chain, i);
+00528 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"surf=%d chain=%d"</span>, i, surface._Chains[j].Chain);
+00529 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"start=(%f,%f,%f)"</span>, start.x, start.y, start.z);
+00530 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"end=(%f,%f,%f)"</span>, end.x, end.y, end.z);
+00531 }
+00532
+00533 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"bestChain=%d best=%f"</span>, bestChain, best);
+00534 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"loopCloseDistance=%f"</span>, loopCloseDistance);
+00535 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Couldn't close loop on surface=%d"</span>, i);
+00536 }
+00537 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (best &gt; 1.0e0f &amp;&amp; loopCloseDistance &lt; 3.0e-2f ||
+00538 loopCloseDistance &lt; 1.0e-3f)
+00539 {
+00540 <span class="keywordflow">break</span>;
+00541 }
+00542
+00543 currentEnd = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera10">getStopVector</a>(surface._Chains[bestChain].Chain, i);
+00544 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[surface._Chains[bestChain].Chain].setLoopIndexes(i, loopId, loop.size());
+00545 loop.push_back(bestChain);
+00546 chainFlags[bestChain] = <span class="keyword">true</span>;
+00547 ++totalAdded;
+00548 }
+00549 }
+00550 }
+00551 <span class="comment">/*</span>
+00552 <span class="comment"> dumpSurface(9);</span>
+00553 <span class="comment"> dumpSurface(10);</span>
+00554 <span class="comment"></span>
+00555 <span class="comment"> for (i=0; i&lt;_Chains.size(); ++i)</span>
+00556 <span class="comment"> {</span>
+00557 <span class="comment"> if (i == 127)</span>
+00558 <span class="comment"> nlinfo("");</span>
+00559 <span class="comment"></span>
+00560 <span class="comment"> uint whichTip;</span>
+00561 <span class="comment"> // for both tips (start and stop)</span>
+00562 <span class="comment"> for (whichTip=0; whichTip&lt;=1; ++whichTip)</span>
+00563 <span class="comment"> {</span>
+00564 <span class="comment"> // get the tip id</span>
+00565 <span class="comment"> uint thisTip = (whichTip) ? _Chains[i].getStopTip() : _Chains[i].getStartTip();</span>
+00566 <span class="comment"></span>
+00567 <span class="comment"> if (thisTip != 0xffff &amp;&amp; thisTip &gt;= _Tips.size())</span>
+00568 <span class="comment"> {</span>
+00569 <span class="comment"> nlwarning("in NLPACS::CLocalRetriever::computeLoopsAndTips()");</span>
+00570 <span class="comment"> nlerror("checked a tip that doesn't exist on chain %d (tipId=%d)", i, thisTip);</span>
+00571 <span class="comment"> }</span>
+00572 <span class="comment"></span>
+00573 <span class="comment"> // if it is unaffected yet creates an new tip and affect it to the common chains</span>
+00574 <span class="comment"> if (thisTip == 0xffff)</span>
+00575 <span class="comment"> {</span>
+00576 <span class="comment"> uint turn;</span>
+00577 <span class="comment"> uint tipId = _Tips.size();</span>
+00578 <span class="comment"></span>
+00579 <span class="comment"> if (tipId == 62)</span>
+00580 <span class="comment"> nlinfo("");</span>
+00581 <span class="comment"></span>
+00582 <span class="comment"> _Tips.resize(tipId+1);</span>
+00583 <span class="comment"> CTip &amp;tip = _Tips[tipId];</span>
+00584 <span class="comment"> tip.Point = (whichTip) ? getStopVector(i) : getStartVector(i);</span>
+00585 <span class="comment"></span>
+00586 <span class="comment"> for (turn=0; turn&lt;=1; ++turn)</span>
+00587 <span class="comment"> {</span>
+00588 <span class="comment"> uint chain = i;</span>
+00589 <span class="comment"></span>
+00590 <span class="comment"> //</span>
+00591 <span class="comment"> if (whichTip)</span>
+00592 <span class="comment"> _Chains[chain]._StopTip = tipId;</span>
+00593 <span class="comment"> else</span>
+00594 <span class="comment"> _Chains[chain]._StartTip = tipId;</span>
+00595 <span class="comment"></span>
+00596 <span class="comment"> sint32 surf = (!turn &amp;&amp; !whichTip || turn &amp;&amp; whichTip) ? _Chains[chain].getLeft() : _Chains[chain].getRight();</span>
+00597 <span class="comment"></span>
+00598 <span class="comment"> while (surf &gt;= 0)</span>
+00599 <span class="comment"> {</span>
+00600 <span class="comment"></span>
+00601 <span class="comment"> CChain &amp;nextChain = (turn) ? _Chains[chain = getNextChain(chain, surf)] : _Chains[chain = getPreviousChain(chain, surf)];</span>
+00602 <span class="comment"> bool isForward = (nextChain.getLeft() == surf); // tells if the left surf is the current surf</span>
+00603 <span class="comment"> bool selectTip = isForward &amp;&amp; !turn || !isForward &amp;&amp; turn;</span>
+00604 <span class="comment"> uint16 &amp;tipRef = selectTip ? nextChain._StopTip : nextChain._StartTip;</span>
+00605 <span class="comment"> surf = (isForward) ? nextChain.getRight() : nextChain.getLeft();</span>
+00606 <span class="comment"></span>
+00607 <span class="comment"> if (tipRef != 0xffff &amp;&amp; tipRef != tipId)</span>
+00608 <span class="comment"> {</span>
+00609 <span class="comment"> nlwarning("in NLPACS::CLocalRetriever::computeLoopsAndTips()");</span>
+00610 <span class="comment"> nlerror("Trying to setup a already created tip (tipId=%d, previous=%d)", tipId, tipRef);</span>
+00611 <span class="comment"> }</span>
+00612 <span class="comment"> else if (tipRef != 0xffff)</span>
+00613 <span class="comment"> {</span>
+00614 <span class="comment"> break;</span>
+00615 <span class="comment"> }</span>
+00616 <span class="comment"></span>
+00617 <span class="comment"> tipRef = tipId;</span>
+00618 <span class="comment"> }</span>
+00619 <span class="comment"> }</span>
+00620 <span class="comment"> }</span>
+00621 <span class="comment"> }</span>
+00622 <span class="comment"> }</span>
+00623 <span class="comment"></span>
+00624 <span class="comment"> for (i=0; i&lt;_Chains.size(); ++i)</span>
+00625 <span class="comment"> {</span>
+00626 <span class="comment"> uint startTip = _Chains[i].getStartTip(),</span>
+00627 <span class="comment"> stopTip = _Chains[i].getStopTip();</span>
+00628 <span class="comment"></span>
+00629 <span class="comment"></span>
+00630 <span class="comment">// if (_Chains[i].getEdge() &gt;= 0 &amp;&amp; startTip == stopTip)</span>
+00631 <span class="comment">// {</span>
+00632 <span class="comment">// nlwarning("NLPACS::CLocalRetriever::computeLoopsAndTips(): chain %d on edge %d has same StartTip and StopTip", i, _Chains[i].getEdge(), startTip, stopTip);</span>
+00633 <span class="comment">// }</span>
+00634 <span class="comment"></span>
+00635 <span class="comment"></span>
+00636 <span class="comment"> _Tips[startTip].Chains.push_back(CTip::CChainTip(i, true));</span>
+00637 <span class="comment"> _Tips[stopTip].Chains.push_back(CTip::CChainTip(i, false));</span>
+00638 <span class="comment"> }</span>
+00639 <span class="comment">*/</span>
+00640 <span class="keywordflow">for</span> (i=0; i&lt;_Surfaces.size(); ++i)
+00641 {
+00642 <span class="keywordflow">for</span> (j=0; j&lt;_Surfaces[i]._Loops.size(); ++j)
+00643 {
+00644 _Surfaces[i]._Loops[j].Length = 0.0f;
+00645 <a class="code" href="a04558.html#a15">uint</a> k;
+00646
+00647 <span class="keywordflow">for</span> (k=0; k&lt;_Surfaces[i]._Loops[j].size(); ++k)
+00648 _Surfaces[i]._Loops[j].Length += <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[_Surfaces[i]._Chains[_Surfaces[i]._Loops[j][k]].Chain].getLength();
+00649 }
+00650 }
+00651 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_4" doxytag="NLPACS::CLocalRetriever::computeTopologies" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::computeTopologies </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Builds topologies tables.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00822">822</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a06334.html#l00125">NLPACS::CRetrievableSurface::_Character</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05930.html#l00307">_Topologies</a>, <a class="el" href="a06334.html#l00146">NLPACS::CRetrievableSurface::_Topologies</a>, <a class="el" href="a05540.html#l00269">NLPACS::CChain::getLeft()</a>, <a class="el" href="a05540.html#l00274">NLPACS::CChain::getRight()</a>, <a class="el" href="a05380.html#a31a9">NLPACS::NumCreatureModels</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00823 {
+00824 <span class="comment">//nlinfo("compute topologies");</span>
+00825
+00826 <span class="comment">// Find topologies out...</span>
+00827 <a class="code" href="a04558.html#a15">uint</a> character;
+00828 <span class="keywordflow">for</span> (character=0; character&lt;<a class="code" href="a05380.html#a31a9">NumCreatureModels</a>; ++character)
+00829 {
+00830 <span class="comment">// for each type of creature, flood fill surfaces...</span>
+00831 <a class="code" href="a04558.html#a10">sint32</a> surface;
+00832 <a class="code" href="a04558.html#a15">uint</a> topology = 0;
+00833
+00834 <span class="keywordflow">for</span> (surface=0; surface&lt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++surface)
+00835 {
+00836 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface]._Topologies[character] == -1 &amp;&amp;
+00837 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface]._Character == character)
+00838 {
+00839 vector&lt;sint32&gt; surfacesStack;
+00840 surfacesStack.push_back(surface);
+00841
+00842 <span class="keywordflow">while</span> (!surfacesStack.empty())
+00843 {
+00844 CRetrievableSurface &amp;current = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surfacesStack.back()];
+00845 surfacesStack.pop_back();
+00846 current._Topologies[character] = topology;
+00847
+00848 <a class="code" href="a04558.html#a15">uint</a> i;
+00849 <span class="keywordflow">for</span> (i=0; i&lt;current._Chains.size(); ++i)
+00850 {
+00851 CChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[current._Chains[i].Chain];
+00852 <a class="code" href="a04558.html#a10">sint32</a> link = (chain.getLeft() == surface) ? chain.getRight() : chain.getLeft();
+00853 <span class="keywordflow">if</span> (link&gt;=0 &amp;&amp; link&lt;(<a class="code" href="a04558.html#a14">sint</a>)_Surfaces.size() &amp;&amp;
+00854 _Surfaces[link]._Topologies[character] == -1 &amp;&amp;
+00855 _Surfaces[link]._Character &gt;= character)
+00856 {
+00857 surfacesStack.push_back(link);
+00858 _Surfaces[link]._Topologies[character] = topology;
+00859 }
+00860 }
+00861 }
+00862
+00863 ++topology;
+00864 }
+00865 }
+00866
+00867 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp9">_Topologies</a>[character].resize(topology);
+00868 <span class="comment">//nlinfo("generated %d topologies for character %d", topology, character);</span>
+00869 }
+00870
+00871 <a class="code" href="a04558.html#a15">uint</a> surface;
+00872 <span class="keywordflow">for</span> (surface=0; surface&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++surface)
+00873 {
+00874 CRetrievableSurface &amp;current = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface];
+00875
+00876 <span class="keywordflow">for</span> (character=0; character&lt;<a class="code" href="a05380.html#a31a9">NumCreatureModels</a>; ++character)
+00877 <span class="keywordflow">if</span> (current._Topologies[character] &gt;= 0)
+00878 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp9">_Topologies</a>[character][current._Topologies[character]].push_back(surface);
+00879 }
+00880 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera0" doxytag="NLPACS::CLocalRetriever::distanceToBorder" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> float NLPACS::CLocalRetriever::distanceToBorder </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02793.html">ULocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>pos</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00291">291</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a06605.html#l00051">NLPACS::ULocalPosition::Estimation</a>, <a class="el" href="a05540.html#l00266">NLPACS::CChain::getSubChain()</a>, <a class="el" href="a05540.html#l00263">NLPACS::CChain::getSubChains()</a>, <a class="el" href="a05930.html#l00422">isLoaded()</a>, <a class="el" href="a06605.html#l00048">NLPACS::ULocalPosition::Surface</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00252">NLPACS::CGlobalRetriever::distanceToBorder()</a>.
+<p>
+<div class="fragment"><pre>00292 {
+00293 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_22">isLoaded</a>())
+00294 <span class="keywordflow">return</span> 0.0f;
+00295
+00296 <span class="keyword">const</span> CRetrievableSurface &amp;surf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[pos.Surface];
+00297 <a class="code" href="a04558.html#a15">uint</a> i, j;
+00298 <span class="keywordtype">float</span> minDist = 1.0e10f, dist;
+00299
+00300 <span class="keywordflow">for</span> (i=0; i&lt;surf._Chains.size(); ++i)
+00301 {
+00302 <span class="keyword">const</span> CChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[surf._Chains[i].Chain];
+00303 <span class="keywordflow">for</span> (j=0; j&lt;chain.getSubChains().size(); ++j)
+00304 {
+00305 dist = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[chain.getSubChain(j)].distance(pos.Estimation);
+00306 <span class="keywordflow">if</span> (dist &lt; minDist)
+00307 {
+00308 minDist = dist;
+00309 }
+00310 }
+00311 }
+00312
+00313 <span class="keywordflow">return</span> minDist;
+00314 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera1" doxytag="NLPACS::CLocalRetriever::dumpSurface" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::dumpSurface </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surf</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>vect</em> = <a class="el" href="a03128.html#NLMISC_1_1CVectors3">NLMISC::CVector::Null</a></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00248">248</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05646.html#l00649">buffer</a>, <a class="el" href="a05540.html#l00077">NLPACS::COrderedChain3f::getIndexInParent()</a>, <a class="el" href="a05540.html#l00269">NLPACS::CChain::getLeft()</a>, <a class="el" href="a05540.html#l00074">NLPACS::COrderedChain3f::getParentId()</a>, <a class="el" href="a05540.html#l00274">NLPACS::CChain::getRight()</a>, <a class="el" href="a05540.html#l00300">NLPACS::CChain::getStartTip()</a>, <a class="el" href="a05540.html#l00303">NLPACS::CChain::getStopTip()</a>, <a class="el" href="a05540.html#l00266">NLPACS::CChain::getSubChain()</a>, <a class="el" href="a05540.html#l00263">NLPACS::CChain::getSubChains()</a>, <a class="el" href="a05540.html#l00133">NLPACS::COrderedChain::getVertices()</a>, <a class="el" href="a05540.html#l00068">NLPACS::COrderedChain3f::getVertices()</a>, <a class="el" href="a05540.html#l00071">NLPACS::COrderedChain3f::isForward()</a>, <a class="el" href="a06334.html#l00113">NLPACS::CRetrievableSurface::TLoop::Length</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00456">computeLoopsAndTips()</a>.
+<p>
+<div class="fragment"><pre>00249 {
+00250 <span class="keyword">const</span> CRetrievableSurface &amp;surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surf];
+00251
+00252 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"dump surf %d"</span>, surf);
+00253 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"%d chains, %d loops"</span>, surface._Chains.size(), surface._Loops.size());
+00254
+00255 <a class="code" href="a04558.html#a15">uint</a> i, j, k;
+00256
+00257 <span class="keywordflow">for</span> (i=0; i&lt;surface._Chains.size(); ++i)
+00258 {
+00259 <a class="code" href="a04558.html#a15">uint</a> chainId = surface._Chains[i].Chain;
+00260 <span class="keyword">const</span> CChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chainId];
+00261 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"-- chain %d[%d]: %d sub left=%d right=%d start=%d stop=%d"</span>, i, chainId, chain.getSubChains().size(), chain.getLeft(), chain.getRight(), chain.getStartTip(), chain.getStopTip());
+00262
+00263 <span class="keywordflow">for</span> (j=0; j&lt;chain.getSubChains().size(); ++j)
+00264 {
+00265 <span class="keyword">const</span> COrderedChain3f &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[chain.getSubChain(j)];
+00266 <span class="keyword">const</span> COrderedChain &amp;ochains = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[chain.getSubChain(j)];
+00267 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">" subchain %d[%d]: fwd=%d parent=%d idx=%d"</span>, j, chain.getSubChain(j), ochain.isForward(), ochain.getParentId(), ochain.getIndexInParent());
+00268 <span class="keywordflow">for</span> (k=0; k&lt;ochain.getVertices().size(); ++k)
+00269 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">" v[%d]=(%.3f,%.3f,%.3f) (%d,%d)"</span>, k, ochain.getVertices()[k].x+vect.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a>, ochain.getVertices()[k].y+vect.<a class="code" href="a03128.html#NLMISC_1_1CVectoro1">y</a>, ochain.getVertices()[k].z+vect.<a class="code" href="a03128.html#NLMISC_1_1CVectoro2">z</a>, ochains.getVertices()[k].x, ochains.getVertices()[k].y);
+00270 }
+00271
+00272 }
+00273
+00274 <span class="keywordflow">for</span> (i=0; i&lt;surface._Loops.size(); ++i)
+00275 {
+00276 <span class="keyword">const</span> CRetrievableSurface::TLoop &amp;loop = surface._Loops[i];
+00277 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"-- loop %d: %d chains length=%.2f"</span>, i, loop.size(), loop.Length);
+00278 <span class="keyword">static</span> <span class="keywordtype">char</span> wbuffer[256];
+00279 <span class="keyword">static</span> <span class="keywordtype">char</span> <a class="code" href="a04223.html#a589">buffer</a>[10240];
+00280 sprintf(buffer, <span class="stringliteral">" chains:"</span>);
+00281 <span class="keywordflow">for</span> (j=0; j&lt;loop.size(); ++j)
+00282 {
+00283 sprintf(wbuffer, <span class="stringliteral">" %d[%d]"</span>, loop[j], surface._Chains[loop[j]].Chain);
+00284 strcat(buffer, wbuffer);
+00285 }
+00286 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"%s"</span>, buffer);
+00287 }
+00288 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_5" doxytag="NLPACS::CLocalRetriever::findBorderChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::findBorderChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Found chains on the edges of the retriever and fills _BorderChains tables.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00782">782</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00304">_BorderChains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05646.html#l00225">index</a>, <a class="el" href="a05981.html#l00099">sint32</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00783 {
+00784 <a class="code" href="a04558.html#a15">uint</a> chain;
+00785
+00786 <span class="comment">// for each chain, if it belongs to an edge of the</span>
+00787 <span class="comment">// local retriever, then adds it to the _BorderChains.</span>
+00788 <span class="keywordflow">for</span> (chain=0; chain&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>.size(); ++chain)
+00789 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].isBorderChain())
+00790 {
+00791 <a class="code" href="a04558.html#a10">sint32</a> <a class="code" href="a04223.html#a566">index</a> = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>.size();
+00792 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>.push_back(chain);
+00793 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].setBorderChainIndex(index);
+00794 }
+00795 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera2" doxytag="NLPACS::CLocalRetriever::findPath" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::findPath </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02792.html">CLocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>A</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02792.html">CLocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>B</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>std::vector&lt; <a class="el" href="a03662.html">CVector2s</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>path</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02387.html">NLPACS::CCollisionSurfaceTemp</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>cst</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Finds a path in a given surface, from the point A to the point B.
+<p>
+
+<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000011">Todo:</a></b></dt><dd>Ben use smart allocations here</dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01576">1576</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05540.html#l00217">NLPACS::CChain::_SubChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05583.html#l00287">NLPACS::CCollisionSurfaceTemp::EdgeChainEntries</a>, <a class="el" href="a05583.html#l00128">NLPACS::CEdgeChainEntry::EdgeEnd</a>, <a class="el" href="a05583.html#l00126">NLPACS::CEdgeChainEntry::EdgeStart</a>, <a class="el" href="a06605.html#l00051">NLPACS::ULocalPosition::Estimation</a>, <a class="el" href="a06756.html#l00873">from</a>, <a class="el" href="a05540.html#l00269">NLPACS::CChain::getLeft()</a>, <a class="el" href="a05540.html#l00270">NLPACS::CChain::getLeftLoop()</a>, <a class="el" href="a05540.html#l00271">NLPACS::CChain::getLeftLoopIndex()</a>, <a class="el" href="a05540.html#l00279">NLPACS::CChain::getLength()</a>, <a class="el" href="a05540.html#l00139">NLPACS::COrderedChain::getParentId()</a>, <a class="el" href="a05540.html#l00275">NLPACS::CChain::getRightLoop()</a>, <a class="el" href="a05540.html#l00276">NLPACS::CChain::getRightLoopIndex()</a>, <a class="el" href="a06334.html#l00113">NLPACS::CRetrievableSurface::TLoop::Length</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05583.html#l00124">NLPACS::CEdgeChainEntry::OChainId</a>, <a class="el" href="a05541.html#l00289">NLPACS::CChainQuad::selectEdges()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06605.html#l00048">NLPACS::ULocalPosition::Surface</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l01062">NLPACS::CGlobalRetriever::findPath()</a>.
+<p>
+<div class="fragment"><pre>01580 {
+01581 <span class="keywordflow">if</span> (A.Surface != B.Surface)
+01582 {
+01583 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::findPath()"</span>);
+01584 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Try to find a path between 2 points that are not in the same surface (A=%d, B=%d)"</span>, A.Surface, B.Surface);
+01585 }
+01586
+01587 CVector a = A.Estimation,
+01588 b = B.Estimation,
+01589 n = CVector(a.y-b.y, b.x-a.x, 0.0f);
+01590
+01591 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>.selectEdges(a, b, cst);
+01592
+01594 vector&lt;CIntersectionMarker&gt; intersections;
+01595
+01596 <a class="code" href="a04558.html#a15">uint</a> i, j;
+01597 <a class="code" href="a04558.html#a10">sint32</a> surfaceId = A.Surface;
+01598 <span class="keyword">const</span> CRetrievableSurface &amp;surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surfaceId];
+01599
+01600 <span class="keywordflow">for</span> (i=0; i&lt;cst.<a class="code" href="a02387.html#NLPACS_1_1CCollisionSurfaceTempo3">EdgeChainEntries</a>.size(); ++i)
+01601 {
+01602 CEdgeChainEntry &amp;entry = cst.<a class="code" href="a02387.html#NLPACS_1_1CCollisionSurfaceTempo3">EdgeChainEntries</a>[i];
+01603 <span class="keyword">const</span> COrderedChain &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[entry.OChainId];
+01604
+01605 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain.getParentId()].getLeft() != surfaceId &amp;&amp;
+01606 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain.getParentId()].getRight() != surfaceId)
+01607 <span class="keywordflow">continue</span>;
+01608
+01609 <span class="keywordflow">for</span> (j=entry.EdgeStart; j&lt;entry.EdgeEnd; ++j)
+01610 {
+01611 <span class="comment">// here the edge collision test</span>
+01612
+01613 CVector p0 = chain[j].unpack3f(),
+01614 p1 = chain[j+1].unpack3f();
+01615
+01616 <span class="keywordtype">float</span> vp0 = (p0-a)*n,
+01617 vp1 = (p1-a)*n;
+01618
+01619 <span class="keywordflow">if</span> (vp0*vp1 &lt;= 0.0f)
+01620 {
+01621 CVector np = CVector(p0.y-p1.y, p1.x-p0.x, 0.0f);
+01622
+01623 <span class="keywordtype">float</span> va = (a-p0)*np,
+01624 vb = (b-p0)*np;
+01625
+01626 <span class="comment">// here we have an intersection</span>
+01627 <span class="keywordflow">if</span> (va*vb &lt;= 0.0f)
+01628 {
+01629 <span class="keyword">const</span> CChain &amp;parent = _Chains[chain.getParentId()];
+01630 <span class="keywordtype">bool</span> isIn = (va-vb &lt; 0.0f) ^ (parent.getLeft() == surfaceId) ^ chain.isForward();
+01631
+01632 intersections.push_back(CIntersectionMarker(va/(va-vb), entry.OChainId, j, isIn));
+01633 }
+01634 }
+01635 }
+01636 }
+01637
+01638 sort(intersections.begin(), intersections.end());
+01639
+01640 <a class="code" href="a04558.html#a15">uint</a> intersStart = 0;
+01641 <a class="code" href="a04558.html#a15">uint</a> intersEnd = intersections.size();
+01642
+01643 <span class="keywordflow">if</span> (intersEnd &gt; 0)
+01644 {
+01645 <span class="keywordflow">while</span> (intersStart &lt; intersections.size() &amp;&amp;
+01646 intersections[intersStart].In &amp;&amp; intersections[intersStart].Position &lt; 1.0e-4f)
+01647 ++intersStart;
+01648
+01649 <span class="keywordflow">while</span> (intersStart &lt; intersEnd &amp;&amp;
+01650 !intersections[intersEnd-1].In &amp;&amp; intersections[intersEnd-1].Position &gt; 1.0f-1.0e-4f)
+01651 --intersEnd;
+01652
+01653 <span class="comment">// Check intersections have a valid order</span>
+01654 <span class="keywordflow">if</span> ((intersEnd-intersStart) &amp; 1)
+01655 {
+01656 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::findPath()"</span>);
+01657 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Found an odd (%d) number of intersections"</span>, intersections.size());
+01658 }
+01659
+01660 <span class="keywordflow">for</span> (i=intersStart; i&lt;intersEnd; )
+01661 {
+01662 <a class="code" href="a04558.html#a15">uint</a> exitLoop, enterLoop;
+01663
+01664 <span class="keyword">const</span> CChain &amp;exitChain = _Chains[_OrderedChains[intersections[i].OChain].getParentId()];
+01665 exitLoop = (exitChain.getLeft() == surfaceId) ? exitChain.getLeftLoop() : exitChain.getRightLoop();
+01666
+01667 <span class="keywordflow">if</span> (intersections[i++].In)
+01668 {
+01669 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::findPath()"</span>);
+01670 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Entered the surface before exited"</span>, intersections.size());
+01671 }
+01672
+01673 <span class="keyword">const</span> CChain &amp;enterChain = _Chains[_OrderedChains[intersections[i].OChain].getParentId()];
+01674 enterLoop = (enterChain.getLeft() == surfaceId) ? enterChain.getLeftLoop() : enterChain.getRightLoop();
+01675
+01676 <span class="keywordflow">if</span> (!intersections[i++].In)
+01677 {
+01678 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::findPath()"</span>);
+01679 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Exited twice the surface"</span>, intersections.size());
+01680 }
+01681
+01682 <span class="keywordflow">if</span> (exitLoop != enterLoop)
+01683 {
+01684 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::findPath()"</span>);
+01685 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Exited and rentered by a different loop"</span>);
+01686 }
+01687 }
+01688 }
+01689
+01690 <span class="comment">// dumpSurface(surfaceId);</span>
+01691
+01692 path.push_back(CVector2s(A.Estimation));
+01693
+01694 <span class="keywordflow">for</span> (i=intersStart; i&lt;intersEnd; )
+01695 {
+01696 <a class="code" href="a04558.html#a15">uint</a> exitChainId = _OrderedChains[intersections[i].OChain].getParentId(),
+01697 enterChainId = _OrderedChains[intersections[i+1].OChain].getParentId();
+01698 <span class="keyword">const</span> CChain &amp;exitChain = _Chains[exitChainId],
+01699 &amp;enterChain = _Chains[enterChainId];
+01700 <a class="code" href="a04558.html#a15">uint</a> loopId, exitLoopIndex, enterLoopIndex;
+01701
+01702 <span class="keywordflow">if</span> (exitChain.getLeft() == surfaceId)
+01703 {
+01704 loopId = exitChain.getLeftLoop();
+01705 exitLoopIndex = exitChain.getLeftLoopIndex();
+01706 }
+01707 <span class="keywordflow">else</span>
+01708 {
+01709 loopId = exitChain.getRightLoop();
+01710 exitLoopIndex = exitChain.getRightLoopIndex();
+01711 }
+01712
+01713 <span class="keyword">const</span> CRetrievableSurface::TLoop &amp;loop = surface._Loops[loopId];
+01714
+01715 <span class="keywordflow">if</span> (enterChain.getLeft() == surfaceId)
+01716 enterLoopIndex = enterChain.getLeftLoopIndex();
+01717 <span class="keywordflow">else</span>
+01718 enterLoopIndex = enterChain.getRightLoopIndex();
+01719
+01720 <span class="keywordtype">float</span> forwardLength = (exitChain.getLength()+enterChain.getLength())*0.5f;
+01721
+01722 <a class="code" href="a04558.html#a14">sint</a> loopIndex = exitLoopIndex;
+01723 <a class="code" href="a04558.html#a15">uint</a> thisChainId = exitChainId;
+01724 <span class="keywordtype">bool</span> thisChainForward = (enterChain.getLeft() == surfaceId);
+01725 <a class="code" href="a04558.html#a15">uint</a> thisOChainId = intersections[i].OChain;
+01726 <a class="code" href="a04558.html#a14">sint</a> thisOChainIndex = _OrderedChains[thisOChainId].getIndexInParent();
+01727 <span class="keywordtype">bool</span> forward;
+01728
+01729 <span class="keywordflow">if</span> (exitChainId != enterChainId)
+01730 {
+01731 <span class="keywordflow">for</span> (j=(exitLoopIndex+1)%loop.size(); j!=enterLoopIndex; j=(j+1)%loop.size())
+01732 forwardLength += _Chains[surface._Chains[loop[j]].Chain].getLength();
+01733 forward = (forwardLength &lt;= loop.Length-forwardLength);
+01734 }
+01735 <span class="keywordflow">else</span>
+01736 {
+01737 forward = !thisChainForward ^ (_OrderedChains[intersections[i].OChain].getIndexInParent() &lt; _OrderedChains[intersections[i+1].OChain].getIndexInParent());
+01738 }
+01739
+01740 path.push_back(CVector2s(A.Estimation+intersections[i].Position*(B.Estimation-A.Estimation)));
+01741
+01742 <span class="keywordflow">while</span> (<span class="keyword">true</span>)
+01743 {
+01744 <a class="code" href="a04558.html#a14">sint</a> <a class="code" href="a05333.html#a132">from</a> = (thisOChainId == intersections[i].OChain) ? intersections[i].Edge : -1,
+01745 to = (thisOChainId == intersections[i+1].OChain) ? intersections[i+1].Edge : -1;
+01746 <span class="keywordtype">bool</span> oforward = thisChainForward ^ forward ^ _OrderedChains[thisOChainId].isForward();
+01747
+01748 <span class="keywordflow">if</span> (<a class="code" href="a05333.html#a132">from</a> != -1 &amp;&amp; to != -1)
+01749 oforward = (intersections[i].Edge &lt; intersections[i+1].Edge);
+01750
+01751 _OrderedChains[thisOChainId].traverse(from, to, oforward, path);
+01752
+01753 <span class="keywordflow">if</span> (thisOChainId == intersections[i+1].OChain)
+01754 <span class="keywordflow">break</span>;
+01755
+01756 thisOChainIndex = (thisChainForward ^ forward) ? thisOChainIndex-1 : thisOChainIndex+1;
+01757
+01758 <span class="keywordflow">if</span> (thisOChainIndex &lt; 0 || thisOChainIndex &gt;= (<a class="code" href="a04558.html#a14">sint</a>)_Chains[thisChainId]._SubChains.size())
+01759 {
+01760 <span class="keywordflow">if</span> (forward)
+01761 {
+01762 loopIndex++;
+01763 <span class="keywordflow">if</span> (loopIndex == (<a class="code" href="a04558.html#a14">sint</a>)loop.size())
+01764 loopIndex = 0;
+01765 }
+01766 <span class="keywordflow">else</span>
+01767 {
+01768 loopIndex--;
+01769 <span class="keywordflow">if</span> (loopIndex &lt; 0)
+01770 loopIndex = loop.size()-1;
+01771 }
+01772
+01773 thisChainId = surface._Chains[loop[loopIndex]].Chain;
+01774 thisChainForward = (_Chains[thisChainId].getLeft() == surfaceId);
+01775 thisOChainIndex = (thisChainForward &amp;&amp; forward || !thisChainForward &amp;&amp; !forward) ?
+01776 0 : _Chains[thisChainId]._SubChains.size()-1;
+01777 }
+01778
+01779 thisOChainId = _Chains[thisChainId]._SubChains[thisOChainIndex];
+01780 }
+01781
+01782 path.push_back(CVector2s(A.Estimation+intersections[i+1].Position*(B.Estimation-A.Estimation)));
+01783 i += 2;
+01784 }
+01785
+01786 path.push_back(CVector2s(B.Estimation));
+01787 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_6" doxytag="NLPACS::CLocalRetriever::flushFullOrderedChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::flushFullOrderedChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Adds a chain to the local retriever, using the vertices of the chain, the left and right surfaces id and the edge on which the chain is stuck
+<p>
+Definition at line <a class="el" href="a05930.html#l00529">529</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>.
+<p>
+<div class="fragment"><pre>00529 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>.clear(); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera3" doxytag="NLPACS::CLocalRetriever::forceBorderChainId" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::forceBorderChainId </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>chainId</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>borderId</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00602">602</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00603 {
+00604 <span class="keywordflow">if</span> (chainId &gt;= <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>.size())
+00605 {
+00606 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"forceBorderChainId(): couldn't force border id %d for chain %d, doesn't exist"</span>, borderId, chainId);
+00607 <span class="keywordflow">return</span>;
+00608 }
+00609
+00610 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chainId].setBorderChainIndex(borderId);
+00611 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_5" doxytag="NLPACS::CLocalRetriever::forceLoaded" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::forceLoaded </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>state</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Force Loaded State.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00425">425</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00341">_Loaded</a>.
+<p>
+<div class="fragment"><pre>00425 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>= state; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_6" doxytag="NLPACS::CLocalRetriever::getBBox" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a02156.html">NLMISC::CAABBox</a>&amp; NLPACS::CLocalRetriever::getBBox </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the bbox.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00407">407</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a06337.html#l00109">NLPACS::CRetrieverInstance::make()</a>.
+<p>
+<div class="fragment"><pre>00407 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_7" doxytag="NLPACS::CLocalRetriever::getBorderChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a9">uint16</a> NLPACS::CLocalRetriever::getBorderChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the id of the nth chain on the edges of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00396">396</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00304">_BorderChains</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00098">uint16</a>.
+<p>
+<div class="fragment"><pre>00396 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>[n]; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_8" doxytag="NLPACS::CLocalRetriever::getBorderChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a04558.html#a9">uint16</a>&gt;&amp; NLPACS::CLocalRetriever::getBorderChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the ids of the chains on the edges of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00394">394</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00304">_BorderChains</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00153">NLPACS::CGlobalRetriever::check()</a>, <a class="el" href="a06337.html#l00089">NLPACS::CRetrieverInstance::init()</a>, <a class="el" href="a06337.html#l00194">NLPACS::CRetrieverInstance::link()</a>, and <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>.
+<p>
+<div class="fragment"><pre>00394 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_9" doxytag="NLPACS::CLocalRetriever::getChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a02333.html">CChain</a>&amp; NLPACS::CLocalRetriever::getChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+retruns the nth chain.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00391">391</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00153">NLPACS::CGlobalRetriever::check()</a>, <a class="el" href="a05930.html#l00265">NLPACS::CLocalRetriever::CIterator::end()</a>, <a class="el" href="a05761.html#l00855">NLPACS::CGlobalRetriever::findAStarPath()</a>, <a class="el" href="a05761.html#l01177">NLPACS::CGlobalRetriever::findCollisionChains()</a>, <a class="el" href="a05761.html#l01062">NLPACS::CGlobalRetriever::findPath()</a>, <a class="el" href="a05930.html#l00257">NLPACS::CLocalRetriever::CIterator::get3d()</a>, <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>, <a class="el" href="a05930.html#l00250">NLPACS::CLocalRetriever::CIterator::operator *()</a>, <a class="el" href="a05930.html#l00223">NLPACS::CLocalRetriever::CIterator::operator++()</a>, and <a class="el" href="a05930.html#l00272">NLPACS::CLocalRetriever::CIterator::setupIndex()</a>.
+<p>
+<div class="fragment"><pre>00391 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[n]; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_7" doxytag="NLPACS::CLocalRetriever::getChainQuad" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02334.html">CChainQuad</a>&amp; NLPACS::CLocalRetriever::getChainQuad </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the chain quad.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00500">500</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00316">_ChainQuad</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>.
+<p>
+<div class="fragment"><pre>00500 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_10" doxytag="NLPACS::CLocalRetriever::getChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a02333.html">CChain</a>&gt;&amp; NLPACS::CLocalRetriever::getChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the chains.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00389">389</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00153">NLPACS::CGlobalRetriever::check()</a>, <a class="el" href="a06337.html#l00194">NLPACS::CRetrieverInstance::link()</a>, <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>, and <a class="el" href="a05929.html#l01807">testCollision()</a>.
+<p>
+<div class="fragment"><pre>00389 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_11" doxytag="NLPACS::CLocalRetriever::getExteriorMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a02492.html">CExteriorMesh</a>&amp; NLPACS::CLocalRetriever::getExteriorMesh </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the exterior mesh of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00410">410</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00324">_ExteriorMesh</a>.
+<p>
+Referenced by <a class="el" href="a06337.html#l00139">NLPACS::CRetrieverInstance::initEdgeQuad()</a>, <a class="el" href="a06337.html#l00152">NLPACS::CRetrieverInstance::linkEdgeQuad()</a>, and <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>.
+<p>
+<div class="fragment"><pre>00410 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_12" doxytag="NLPACS::CLocalRetriever::getFullOrderedChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03028.html">COrderedChain3f</a>&amp; NLPACS::CLocalRetriever::getFullOrderedChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the nth full ordered chain.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00386">386</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05930.html#l00257">NLPACS::CLocalRetriever::CIterator::get3d()</a>, and <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>.
+<p>
+<div class="fragment"><pre>00386 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[n]; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_13" doxytag="NLPACS::CLocalRetriever::getFullOrderedChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a03028.html">COrderedChain3f</a>&gt;&amp; NLPACS::CLocalRetriever::getFullOrderedChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the full ordered chains.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00384">384</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>, and <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>.
+<p>
+<div class="fragment"><pre>00384 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera4" doxytag="NLPACS::CLocalRetriever::getHeight" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> float NLPACS::CLocalRetriever::getHeight </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02793.html">ULocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>position</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01479">1479</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00333">_FaceGrid</a>, <a class="el" href="a05930.html#l00330">_InteriorFaces</a>, <a class="el" href="a05930.html#l00327">_InteriorVertices</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a06605.html#l00051">NLPACS::ULocalPosition::Estimation</a>, <a class="el" href="a06478.html#l00054">NLPACS::IQuadNode::getMaxHeight()</a>, <a class="el" href="a06478.html#l00053">NLPACS::IQuadNode::getMinHeight()</a>, <a class="el" href="a06172.html#l00051">NLMISC::CPlane::intersect()</a>, <a class="el" href="a06170.html#l00036">NLMISC::CPlane::make()</a>, <a class="el" href="a05694.html#l00151">NLPACS::CFaceGrid::select()</a>, <a class="el" href="a05981.html#l00095">sint8</a>, <a class="el" href="a06605.html#l00048">NLPACS::ULocalPosition::Surface</a>, <a class="el" href="a05930.html#l00177">NLPACS::CLocalRetriever::CInteriorFace::Surface</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05646.html#l00237">v</a>, <a class="el" href="a05930.html#l00176">NLPACS::CLocalRetriever::CInteriorFace::Verts</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l02421">NLPACS::CGlobalRetriever::getMeanHeight()</a>, and <a class="el" href="a06337.html#l00507">NLPACS::CRetrieverInstance::snap()</a>.
+<p>
+<div class="fragment"><pre>01480 {
+01481 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+01482 <span class="keywordflow">return</span> 0.0f;
+01483
+01484 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a> == <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw1">Interior</a>)
+01485 {
+01486 <span class="comment">// first preselect faces around the (x, y) position (CQuadGrid ?)</span>
+01487 vector&lt;uint32&gt; selection;
+01488 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_1">_FaceGrid</a>.select(position.Estimation, selection);
+01489
+01490 <span class="comment">// from the preselect faces, look for the only face that belongs to the surface</span>
+01491 <span class="comment">// and that contains the position</span>
+01492 CVector pos = position.Estimation;
+01493 CVector posh = pos+CVector(0.0f, 0.0f, 1.0f);
+01494 <span class="keywordtype">float</span> bestDist = 1.0e10f;
+01495 CVector best;
+01496 vector&lt;uint32&gt;::iterator it;
+01497 <span class="keywordflow">for</span> (it=selection.begin(); it!=selection.end(); ++it)
+01498 {
+01499 <span class="keyword">const</span> CInteriorFace &amp;f = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>[*it];
+01500 <span class="keywordflow">if</span> (f.Surface == (<a class="code" href="a04558.html#a11">uint32</a>)position.Surface)
+01501 {
+01502 CVector <a class="code" href="a04223.html#a576">v</a>[3];
+01503 <a class="code" href="a04223.html#a576">v</a>[0] = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_4">_InteriorVertices</a>[f.Verts[0]];
+01504 <a class="code" href="a04223.html#a576">v</a>[1] = _InteriorVertices[f.Verts[1]];
+01505 <a class="code" href="a04223.html#a576">v</a>[2] = _InteriorVertices[f.Verts[2]];
+01506
+01507 <span class="keywordtype">float</span> a,b,c; <span class="comment">// 2D cartesian coefficients of line in plane X/Y.</span>
+01508 <span class="comment">// Line p0-p1.</span>
+01509 a = -(<a class="code" href="a04223.html#a576">v</a>[1].y-<a class="code" href="a04223.html#a576">v</a>[0].y);
+01510 b = (<a class="code" href="a04223.html#a576">v</a>[1].x-<a class="code" href="a04223.html#a576">v</a>[0].x);
+01511 c = -(<a class="code" href="a04223.html#a576">v</a>[0].x*a + <a class="code" href="a04223.html#a576">v</a>[0].y*b);
+01512 <span class="keywordflow">if</span> (a*pos.x + b*pos.y + c &lt; 0) <span class="keywordflow">continue</span>;
+01513 <span class="comment">// Line p1-p2.</span>
+01514 a = -(<a class="code" href="a04223.html#a576">v</a>[2].y-<a class="code" href="a04223.html#a576">v</a>[1].y);
+01515 b = (<a class="code" href="a04223.html#a576">v</a>[2].x-<a class="code" href="a04223.html#a576">v</a>[1].x);
+01516 c = -(<a class="code" href="a04223.html#a576">v</a>[1].x*a + <a class="code" href="a04223.html#a576">v</a>[1].y*b);
+01517 <span class="keywordflow">if</span> (a*pos.x + b*pos.y + c &lt; 0) <span class="keywordflow">continue</span>;
+01518 <span class="comment">// Line p2-p0.</span>
+01519 a = -(<a class="code" href="a04223.html#a576">v</a>[0].y-<a class="code" href="a04223.html#a576">v</a>[2].y);
+01520 b = (<a class="code" href="a04223.html#a576">v</a>[0].x-<a class="code" href="a04223.html#a576">v</a>[2].x);
+01521 c = -(<a class="code" href="a04223.html#a576">v</a>[2].x*a + <a class="code" href="a04223.html#a576">v</a>[2].y*b);
+01522 <span class="keywordflow">if</span> (a*pos.x + b*pos.y + c &lt; 0) <span class="keywordflow">continue</span>;
+01523
+01524 <a class="code" href="a03082.html">CPlane</a> p;
+01525 p.<a class="code" href="a03082.html#NLMISC_1_1CPlanez1990_2">make</a>(v[0], v[1], v[2]);
+01526
+01527 CVector i = p.<a class="code" href="a03082.html#NLMISC_1_1CPlanez1992_5">intersect</a>(pos, posh);
+01528
+01529 <span class="keywordtype">float</span> d = (<span class="keywordtype">float</span>)fabs(pos.z-i.z);
+01530
+01531 <span class="keywordflow">if</span> (d &lt; bestDist)
+01532 {
+01533 bestDist = d;
+01534 best = i;
+01535 }
+01536 }
+01537 }
+01538
+01539 <span class="comment">// and computes the real position on this face</span>
+01540 <span class="keywordflow">return</span> (bestDist &lt; 200.0f) ? best.z : position.Estimation.z;
+01541 }
+01542 <span class="keywordflow">else</span>
+01543 {
+01544 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[position.Surface].getQuadTree().getRoot() != NULL)
+01545 {
+01546 <span class="comment">// find quad leaf.</span>
+01547 <span class="keyword">const</span> CQuadLeaf *leaf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[position.Surface].getQuadTree().getLeaf(position.Estimation);
+01548
+01549 <span class="comment">// if there is no acceptable leaf, just give up</span>
+01550 <span class="keywordflow">if</span> (leaf == NULL)
+01551 {
+01552 <span class="comment">//nlinfo("COL: quadtree: don't find the quadLeaf!");</span>
+01553 <span class="keywordflow">return</span> position.Estimation.z;
+01554 }
+01555 <span class="keywordflow">else</span>
+01556 {
+01557 <span class="comment">// else return mean height.</span>
+01558 <span class="keywordtype">float</span> meanHeight = (leaf-&gt;getMinHeight()+leaf-&gt;getMaxHeight())*0.5f;
+01559 <span class="keywordflow">return</span> meanHeight;
+01560 }
+01561 }
+01562 <span class="keywordflow">else</span>
+01563 {
+01564 <a class="code" href="a04558.html#a6">sint8</a> qh = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[position.Surface].getQuantHeight();
+01565 <span class="keywordflow">return</span> qh*2.0f + 1.0f;
+01566 }
+01567 }
+01568 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_14" doxytag="NLPACS::CLocalRetriever::getIdentifier" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::string&amp; NLPACS::CLocalRetriever::getIdentifier </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the identifier of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00419">419</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00736">NLPACS::CGlobalRetriever::getIdentifier()</a>, and <a class="el" href="a05761.html#l00493">NLPACS::CGlobalRetriever::retrievePosition()</a>.
+<p>
+<div class="fragment"><pre>00419 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_2">_Id</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_8" doxytag="NLPACS::CLocalRetriever::getInteriorFaces" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02789.html">CInteriorFace</a>&gt;&amp; NLPACS::CLocalRetriever::getInteriorFaces </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the interior faces.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00493">493</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00330">_InteriorFaces</a>.
+<p>
+<div class="fragment"><pre>00493 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_15" doxytag="NLPACS::CLocalRetriever::getInteriorFaces" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a02789.html">CInteriorFace</a>&gt;&amp; NLPACS::CLocalRetriever::getInteriorFaces </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the interior faces.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00416">416</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00330">_InteriorFaces</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00405">NLPACS::buildSnapping()</a>.
+<p>
+<div class="fragment"><pre>00416 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_9" doxytag="NLPACS::CLocalRetriever::getInteriorVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03128.html">NLMISC::CVector</a>&gt;&amp; NLPACS::CLocalRetriever::getInteriorVertices </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the interior vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00490">490</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00327">_InteriorVertices</a>.
+<p>
+<div class="fragment"><pre>00490 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_4">_InteriorVertices</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_16" doxytag="NLPACS::CLocalRetriever::getInteriorVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a03128.html">NLMISC::CVector</a>&gt;&amp; NLPACS::CLocalRetriever::getInteriorVertices </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the interior vertices.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00413">413</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00327">_InteriorVertices</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00405">NLPACS::buildSnapping()</a>.
+<p>
+<div class="fragment"><pre>00413 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_4">_InteriorVertices</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera5" doxytag="NLPACS::CLocalRetriever::getNextChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> NLPACS::CLocalRetriever::getNextChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>chain</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surface</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00182">182</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00183 {
+00184 <a class="code" href="a04558.html#a15">uint</a> loop;
+00185 <a class="code" href="a04558.html#a15">uint</a> loopIndex;
+00186
+00187 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].getLeft() == surface)
+00188 {
+00189 loop = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._LeftLoop;
+00190 loopIndex = _Chains[chain]._LeftLoopIndex;
+00191 }
+00192 <span class="keywordflow">else</span>
+00193 {
+00194 loop = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._RightLoop;
+00195 loopIndex = _Chains[chain]._RightLoopIndex;
+00196 }
+00197
+00198 <span class="keyword">const</span> CRetrievableSurface &amp;surf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface];
+00199 <span class="keyword">const</span> CRetrievableSurface::TLoop &amp;sLoop = surf._Loops[loop];
+00200 <span class="keywordflow">return</span> surf._Chains[sLoop[(loopIndex+1)%sLoop.size()]].Chain;
+00201 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_17" doxytag="NLPACS::CLocalRetriever::getOrderedChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03027.html">COrderedChain</a>&amp; NLPACS::CLocalRetriever::getOrderedChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the nth ordered chain.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00381">381</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00288">_OrderedChains</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00153">NLPACS::CGlobalRetriever::check()</a>, <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>, <a class="el" href="a05761.html#l01062">NLPACS::CGlobalRetriever::findPath()</a>, <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>, <a class="el" href="a05930.html#l00250">NLPACS::CLocalRetriever::CIterator::operator *()</a>, and <a class="el" href="a05930.html#l00272">NLPACS::CLocalRetriever::CIterator::setupIndex()</a>.
+<p>
+<div class="fragment"><pre>00381 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[n]; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_18" doxytag="NLPACS::CLocalRetriever::getOrderedChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a03027.html">COrderedChain</a>&gt;&amp; NLPACS::CLocalRetriever::getOrderedChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the ordered chains.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00379">379</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00288">_OrderedChains</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00153">NLPACS::CGlobalRetriever::check()</a>, <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>, and <a class="el" href="a05929.html#l01807">testCollision()</a>.
+<p>
+<div class="fragment"><pre>00379 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera6" doxytag="NLPACS::CLocalRetriever::getPreviousChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a11">uint32</a> NLPACS::CLocalRetriever::getPreviousChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>chain</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surface</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00161">161</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00140">NLPACS::CRetrievableSurface::_Loops</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00162 {
+00163 <a class="code" href="a04558.html#a15">uint</a> loop;
+00164 <a class="code" href="a04558.html#a15">uint</a> loopIndex;
+00165
+00166 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].getLeft() == surface)
+00167 {
+00168 loop = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._LeftLoop;
+00169 loopIndex = _Chains[chain]._LeftLoopIndex;
+00170 }
+00171 <span class="keywordflow">else</span>
+00172 {
+00173 loop = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._RightLoop;
+00174 loopIndex = _Chains[chain]._RightLoopIndex;
+00175 }
+00176
+00177 <span class="keyword">const</span> CRetrievableSurface &amp;surf = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surface];
+00178 <span class="keyword">const</span> CRetrievableSurface::TLoop &amp;sLoop = surf._Loops[loop];
+00179 <span class="keywordflow">return</span> surf._Chains[sLoop[(loopIndex+sLoop.size()-1)%sLoop.size()]].Chain;
+00180 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera7" doxytag="NLPACS::CLocalRetriever::getStartVector" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03128.html">CVector</a> &amp; NLPACS::CLocalRetriever::getStartVector </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>chain</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surface</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00101">101</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05540.html#l00068">NLPACS::COrderedChain3f::getVertices()</a>, <a class="el" href="a05540.html#l00071">NLPACS::COrderedChain3f::isForward()</a>, <a class="el" href="a05981.html#l00099">sint32</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00102 {
+00103 <span class="keywordtype">bool</span> onLeft = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].getLeft() == surface;
+00104 <span class="keyword">const</span> COrderedChain3f &amp;ochain = onLeft ? <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[_Chains[chain].getSubChains().front()] :
+00105 _FullOrderedChains[_Chains[chain].getSubChains().back()];
+00106
+00107 <span class="keywordflow">if</span> (ochain.isForward() &amp;&amp; onLeft || !ochain.isForward() &amp;&amp; !onLeft)
+00108 <span class="keywordflow">return</span> ochain.getVertices().front();
+00109 <span class="keywordflow">else</span>
+00110 <span class="keywordflow">return</span> ochain.getVertices().back();
+00111 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera8" doxytag="NLPACS::CLocalRetriever::getStartVector" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03128.html">CVector</a> &amp; NLPACS::CLocalRetriever::getStartVector </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>chain</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00086">86</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05540.html#l00068">NLPACS::COrderedChain3f::getVertices()</a>, <a class="el" href="a05540.html#l00071">NLPACS::COrderedChain3f::isForward()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00456">computeLoopsAndTips()</a>, <a class="el" href="a06337.html#l00194">NLPACS::CRetrieverInstance::link()</a>, and <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>.
+<p>
+<div class="fragment"><pre>00087 {
+00088 <span class="keyword">const</span> COrderedChain3f &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].getSubChains().front()];
+00089 <span class="keywordflow">return</span> (ochain.isForward()) ? ochain.getVertices().front() : ochain.getVertices().back();
+00090 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera9" doxytag="NLPACS::CLocalRetriever::getStopVector" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03128.html">CVector</a> &amp; NLPACS::CLocalRetriever::getStopVector </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>chain</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a10">sint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>surface</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00113">113</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05540.html#l00068">NLPACS::COrderedChain3f::getVertices()</a>, <a class="el" href="a05540.html#l00071">NLPACS::COrderedChain3f::isForward()</a>, <a class="el" href="a05981.html#l00099">sint32</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>00114 {
+00115 <span class="keywordtype">bool</span> onLeft = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].getLeft() == surface;
+00116 <span class="keyword">const</span> COrderedChain3f &amp;ochain = onLeft ? <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[_Chains[chain].getSubChains().back()] :
+00117 _FullOrderedChains[_Chains[chain].getSubChains().front()];
+00118
+00119 <span class="keywordflow">if</span> (ochain.isForward() &amp;&amp; onLeft || !ochain.isForward() &amp;&amp; !onLeft)
+00120 <span class="keywordflow">return</span> ochain.getVertices().back();
+00121 <span class="keywordflow">else</span>
+00122 <span class="keywordflow">return</span> ochain.getVertices().front();
+00123 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera10" doxytag="NLPACS::CLocalRetriever::getStopVector" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03128.html">CVector</a> &amp; NLPACS::CLocalRetriever::getStopVector </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>chain</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00092">92</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05540.html#l00068">NLPACS::COrderedChain3f::getVertices()</a>, <a class="el" href="a05540.html#l00071">NLPACS::COrderedChain3f::isForward()</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00456">computeLoopsAndTips()</a>, <a class="el" href="a06337.html#l00194">NLPACS::CRetrieverInstance::link()</a>, and <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>.
+<p>
+<div class="fragment"><pre>00093 {
+00094 <span class="keyword">const</span> COrderedChain3f &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain].getSubChains().back()];
+00095 <span class="keywordflow">return</span> (ochain.isForward()) ? ochain.getVertices().back() : ochain.getVertices().front();
+00096 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_19" doxytag="NLPACS::CLocalRetriever::getSurface" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const <a class="el" href="a03328.html">CRetrievableSurface</a>&amp; NLPACS::CLocalRetriever::getSurface </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>n</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the nth surface.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00401">401</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00295">_Surfaces</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00855">NLPACS::CGlobalRetriever::findAStarPath()</a>, <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>, <a class="el" href="a05762.html#l00224">NLPACS::CGlobalRetriever::getMaterial()</a>, <a class="el" href="a05761.html#l01159">NLPACS::CGlobalRetriever::getSurfaceById()</a>, <a class="el" href="a05762.html#l00248">NLPACS::CGlobalRetriever::isWaterPosition()</a>, <a class="el" href="a06337.html#l00387">NLPACS::CRetrieverInstance::retrievePosition()</a>, <a class="el" href="a05761.html#l01392">NLPACS::CGlobalRetriever::testCollisionWithCollisionChains()</a>, and <a class="el" href="a05761.html#l01649">NLPACS::CGlobalRetriever::testMovementWithCollisionChains()</a>.
+<p>
+<div class="fragment"><pre>00401 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[n]; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_20" doxytag="NLPACS::CLocalRetriever::getSurfaces" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const std::vector&lt;<a class="el" href="a03328.html">CRetrievableSurface</a>&gt;&amp; NLPACS::CLocalRetriever::getSurfaces </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the surfaces.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00399">399</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00295">_Surfaces</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l00153">NLPACS::CGlobalRetriever::check()</a>, <a class="el" href="a05762.html#l00224">NLPACS::CGlobalRetriever::getMaterial()</a>, <a class="el" href="a05761.html#l01159">NLPACS::CGlobalRetriever::getSurfaceById()</a>, <a class="el" href="a05761.html#l00088">NLPACS::CGlobalRetriever::initRetrieveTable()</a>, <a class="el" href="a05761.html#l00430">NLPACS::CGlobalRetriever::makeInstance()</a>, and <a class="el" href="a05761.html#l01392">NLPACS::CGlobalRetriever::testCollisionWithCollisionChains()</a>.
+<p>
+<div class="fragment"><pre>00399 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_21" doxytag="NLPACS::CLocalRetriever::getType" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a> NLPACS::CLocalRetriever::getType </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the type of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00404">404</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00160">EType</a>.
+<p>
+Referenced by <a class="el" href="a06337.html#l00089">NLPACS::CRetrieverInstance::init()</a>, <a class="el" href="a06337.html#l00139">NLPACS::CRetrieverInstance::initEdgeQuad()</a>, <a class="el" href="a05761.html#l00430">NLPACS::CGlobalRetriever::makeInstance()</a>, <a class="el" href="a05761.html#l00367">NLPACS::CGlobalRetriever::makeLinks()</a>, and <a class="el" href="a05761.html#l00493">NLPACS::CGlobalRetriever::retrievePosition()</a>.
+<p>
+<div class="fragment"><pre>00404 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_10" doxytag="NLPACS::CLocalRetriever::initFaceGrid" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::initFaceGrid </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Inits the face grid.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01393">1393</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00333">_FaceGrid</a>, <a class="el" href="a05930.html#l00330">_InteriorFaces</a>, <a class="el" href="a05930.html#l00327">_InteriorVertices</a>, <a class="el" href="a05694.html#l00129">NLPACS::CFaceGrid::create()</a>, <a class="el" href="a05384.html#l00215">NLMISC::CAABBox::extend()</a>, <a class="el" href="a05385.html#l00087">NLMISC::CAABBox::getMax()</a>, <a class="el" href="a05385.html#l00086">NLMISC::CAABBox::getMin()</a>, <a class="el" href="a05694.html#l00187">NLPACS::CFaceGrid::CFaceGridBuild::init()</a>, <a class="el" href="a05694.html#l00196">NLPACS::CFaceGrid::CFaceGridBuild::insert()</a>, <a class="el" href="a05385.html#l00066">NLMISC::CAABBox::setCenter()</a>, <a class="el" href="a05981.html#l00105">uint</a>, and <a class="el" href="a05930.html#l00176">NLPACS::CLocalRetriever::CInteriorFace::Verts</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00405">NLPACS::buildSnapping()</a>.
+<p>
+<div class="fragment"><pre>01394 {
+01395 CFaceGrid::CFaceGridBuild fgb;
+01396 fgb.init(64, 4.0f);
+01397
+01398 <a class="code" href="a04558.html#a15">uint</a> i;
+01399 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>.size(); ++i)
+01400 {
+01401 <a class="code" href="a02156.html">CAABBox</a> box;
+01402 CInteriorFace &amp;f = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>[i];
+01403 box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1902_1">setCenter</a>(_InteriorVertices[f.Verts[0]]);
+01404 box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxExtz1902_0">extend</a>(_InteriorVertices[f.Verts[1]]);
+01405 box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxExtz1902_0">extend</a>(_InteriorVertices[f.Verts[2]]);
+01406
+01407 fgb.insert(box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1904_5">getMin</a>(), box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1904_3">getMax</a>(), i);
+01408 }
+01409
+01410 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_1">_FaceGrid</a>.create(fgb);
+01411 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera11" doxytag="NLPACS::CLocalRetriever::insurePosition" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NLPACS::CLocalRetriever::insurePosition </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02793.html">ULocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>local</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Assures a position is really inside a surface (and independent from any accuracy issue) and returns true if the position was moved.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00960">960</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a06605.html#l00051">NLPACS::ULocalPosition::Estimation</a>, <a class="el" href="a06334.html#l00180">NLPACS::CRetrievableSurface::getChain()</a>, <a class="el" href="a06334.html#l00178">NLPACS::CRetrievableSurface::getChains()</a>, <a class="el" href="a05540.html#l00269">NLPACS::CChain::getLeft()</a>, <a class="el" href="a05540.html#l00266">NLPACS::CChain::getSubChain()</a>, <a class="el" href="a05540.html#l00263">NLPACS::CChain::getSubChains()</a>, <a class="el" href="a05540.html#l00133">NLPACS::COrderedChain::getVertices()</a>, <a class="el" href="a05929.html#l00045">InsurePositionThreshold</a>, <a class="el" href="a05540.html#l00136">NLPACS::COrderedChain::isForward()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06338.html#l00292">NLPACS::CRetrieverInstance::snapVector()</a>, <a class="el" href="a06677.html#l00091">NLMISC::CVector2f::sqrnorm()</a>, <a class="el" href="a06605.html#l00048">NLPACS::ULocalPosition::Surface</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06677.html#l00052">NLMISC::CVector2f::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>, and <a class="el" href="a06677.html#l00052">NLMISC::CVector2f::y</a>.
+<p>
+Referenced by <a class="el" href="a05762.html#l00295">NLPACS::CGlobalRetriever::insurePosition()</a>, and <a class="el" href="a05761.html#l00493">NLPACS::CGlobalRetriever::retrievePosition()</a>.
+<p>
+<div class="fragment"><pre>00961 {
+00962 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+00963 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00964
+00965 <span class="keywordflow">if</span> (local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a> &lt; 0 || local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a> &gt;= (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size())
+00966 {
+00967 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"PACS: can't insure position to inexistant surface %d"</span>, local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>);
+00968 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00969 }
+00970
+00971 <span class="comment">// the surface</span>
+00972 <span class="keyword">const</span> <a class="code" href="a03328.html">NLPACS::CRetrievableSurface</a> &amp;surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>];
+00973
+00974 <a class="code" href="a04558.html#a15">uint</a> i, j, k;
+00975 CVector2f M = CVector2f(local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>);
+00976 <span class="keywordtype">bool</span> moved = <span class="keyword">false</span>;
+00977
+00978 <span class="comment">// for each chain and each subchain of the surface,</span>
+00979 <span class="comment">// check if point is located on the good side of the border (and far enough to avoid accuracy issues)</span>
+00980 <span class="keywordflow">for</span> (i=0; i&lt;surface.<a class="code" href="a03328.html#NLPACS_1_1CRetrievableSurfacea4">getChains</a>().size(); ++i)
+00981 {
+00982 <a class="code" href="a04558.html#a15">uint</a> ichain = surface.<a class="code" href="a03328.html#NLPACS_1_1CRetrievableSurfacea3">getChain</a>(i).Chain;
+00983 <span class="keyword">const</span> <a class="code" href="a02333.html">NLPACS::CChain</a> &amp;chain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[ichain];
+00984
+00985 <span class="keywordflow">for</span> (j=0; j&lt;chain.<a class="code" href="a02333.html#NLPACS_1_1CChaina12">getSubChains</a>().size(); ++j)
+00986 {
+00987 <a class="code" href="a04558.html#a15">uint</a> iochain = chain.<a class="code" href="a02333.html#NLPACS_1_1CChaina11">getSubChain</a>(j);
+00988 <span class="keyword">const</span> <a class="code" href="a03027.html">NLPACS::COrderedChain</a> &amp;ochain = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[iochain];
+00989
+00990 <a class="code" href="a04558.html#a15">uint</a> isAtLeft = ((chain.<a class="code" href="a02333.html#NLPACS_1_1CChaina2">getLeft</a>() == local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>) ? 1 : 0);
+00991 <a class="code" href="a04558.html#a15">uint</a> isForward = (ochain.<a class="code" href="a03027.html#NLPACS_1_1COrderedChaina8">isForward</a>() ? 1 : 0);
+00992 <span class="keywordtype">bool</span> shouldBeUpper = !((isAtLeft ^ isForward) != 0); <span class="comment">// shouldBeAtLeft for vertical segment</span>
+00993
+00994 <span class="keywordflow">for</span> (k=0; (<a class="code" href="a04558.html#a14">sint</a>)k&lt;(<a class="code" href="a04558.html#a14">sint</a>)(ochain.<a class="code" href="a03027.html#NLPACS_1_1COrderedChaina7">getVertices</a>().size()-1); ++k)
+00995 {
+00996 CVector2f A = ochain[k].unpack();
+00997 CVector2f B = ochain[k+1].unpack();
+00998 CVector2f AB = B-A;
+00999
+01000 <span class="keywordtype">float</span> lambda = ((M-A)*AB)/AB.sqrnorm();
+01001
+01002 <span class="keywordflow">if</span> (lambda&lt;0.0f || lambda&gt;1.0f)
+01003 <span class="keywordflow">continue</span>;
+01004
+01005 CVector2f n = (shouldBeUpper ? CVector2f(-AB.y, AB.x) : CVector2f(AB.<a class="code" href="a04223.html#a573">y</a>, -AB.<a class="code" href="a04223.html#a572">x</a>)).normed();
+01006 <span class="keywordtype">float</span> d = (M-A)*n;
+01007
+01008 <span class="comment">// if point is too close of the border or on the wrong side</span>
+01009 <span class="comment">// move it far enough</span>
+01010 <span class="keywordflow">if</span> (d &lt; InsurePositionThreshold &amp;&amp; d &gt; -<a class="code" href="a04506.html#a0">InsurePositionThreshold</a>)
+01011 {
+01012 M += (<a class="code" href="a04506.html#a0">InsurePositionThreshold</a>*1.1f-d)*n;
+01013 moved = <span class="keyword">true</span>;
+01014 }
+01015 }
+01016 }
+01017 }
+01018
+01019 <a class="code" href="a03333.html#NLPACS_1_1CRetrieverInstancez1282_1">NLPACS::CRetrieverInstance::snapVector</a>(M);
+01020
+01021 local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a> = M.x;
+01022 local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>.<a class="code" href="a03128.html#NLMISC_1_1CVectoro1">y</a> = M.y;
+01023
+01024 {
+01025 <span class="keywordtype">float</span> fx1024 = local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a> * 1024.0f;
+01026 <span class="keywordtype">float</span> fy1024 = local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a> * 1024.0f;
+01027 <a class="code" href="a04558.html#a10">sint32</a> ix1024 = (<a class="code" href="a04558.html#a10">sint32</a>)floor(fx1024);
+01028 <a class="code" href="a04558.html#a10">sint32</a> iy1024 = (<a class="code" href="a04558.html#a10">sint32</a>)floor(fy1024);
+01029
+01030 <a class="code" href="a04199.html#a6">nlassert</a> ((<span class="keywordtype">float</span>)ix1024 == fx1024);
+01031 <a class="code" href="a04199.html#a6">nlassert</a> ((<span class="keywordtype">float</span>)iy1024 == fy1024);
+01032 }
+01033
+01034 <span class="keywordflow">return</span> moved;
+01035 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1257_22" doxytag="NLPACS::CLocalRetriever::isLoaded" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NLPACS::CLocalRetriever::isLoaded </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Is loaded ?
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00422">422</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00341">_Loaded</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00291">distanceToBorder()</a>, <a class="el" href="a05761.html#l01177">NLPACS::CGlobalRetriever::findCollisionChains()</a>, <a class="el" href="a05761.html#l00275">NLPACS::CGlobalRetriever::getBorders()</a>, <a class="el" href="a05762.html#l00224">NLPACS::CGlobalRetriever::getMaterial()</a>, <a class="el" href="a05761.html#l02421">NLPACS::CGlobalRetriever::getMeanHeight()</a>, <a class="el" href="a05761.html#l01159">NLPACS::CGlobalRetriever::getSurfaceById()</a>, <a class="el" href="a06337.html#l00089">NLPACS::CRetrieverInstance::init()</a>, <a class="el" href="a05762.html#l00248">NLPACS::CGlobalRetriever::isWaterPosition()</a>, <a class="el" href="a05761.html#l00493">NLPACS::CGlobalRetriever::retrievePosition()</a>, <a class="el" href="a05761.html#l01392">NLPACS::CGlobalRetriever::testCollisionWithCollisionChains()</a>, and <a class="el" href="a05761.html#l01649">NLPACS::CGlobalRetriever::testMovementWithCollisionChains()</a>.
+<p>
+<div class="fragment"><pre>00422 { <span class="keywordflow">return</span> <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera12" doxytag="NLPACS::CLocalRetriever::replaceChain" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::replaceChain </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>chainId</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const std::vector&lt; <a class="el" href="a02788.html">CChainReplacement</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>replacement</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01973">1973</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00304">_BorderChains</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05540.html#l00226">NLPACS::CChain::_StartTip</a>, <a class="el" href="a05540.html#l00227">NLPACS::CChain::_StopTip</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05646.html#l01013">border</a>, <a class="el" href="a06334.html#l00081">NLPACS::CRetrievableSurface::CSurfaceLink::Chain</a>, <a class="el" href="a05930.html#l00598">FreeOChains</a>, <a class="el" href="a05539.html#l00199">NLPACS::CChain::make()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a06334.html#l00084">NLPACS::CRetrievableSurface::CSurfaceLink::Surface</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+<div class="fragment"><pre>01974 {
+01975 <span class="comment">// free subchains</span>
+01976 <a class="code" href="a04558.html#a15">uint</a> i, j;
+01977 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chainId]._SubChains.size(); ++i)
+01978 {
+01979 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievero0">FreeOChains</a>.push_back(_Chains[chainId]._SubChains[i]);
+01980 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[_Chains[chainId]._SubChains[i]] = COrderedChain();
+01981 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a>[_Chains[chainId]._SubChains[i]] = COrderedChain3f();
+01982 }
+01983
+01984 <span class="comment">// create new chains in replacement of this chain</span>
+01985
+01986 <span class="keywordflow">for</span> (i=0; i&lt;replacement.size(); ++i)
+01987 {
+01988 vector&lt;CVector&gt; vertices = replacement[i].Vertices;
+01989 <a class="code" href="a04558.html#a14">sint</a> left = replacement[i].Left;
+01990 <a class="code" href="a04558.html#a14">sint</a> right = replacement[i].Right;
+01991
+01992 <span class="keywordflow">if</span> (CChain::isBorderChainId(right))
+01993 {
+01994 <span class="comment">// check border already exists for this particular chain</span>
+01995 <a class="code" href="a04558.html#a10">sint32</a> <a class="code" href="a04223.html#a635">border</a> = CChain::convertBorderChainId(right);
+01996
+01997 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a635">border</a> &lt; (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>.size() &amp;&amp; (chainId != <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>[<a class="code" href="a04223.html#a635">border</a>] || chainId != replacement[i].Chain))
+01998 {
+01999 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"replaceChain(): replacement of a border is forced whereas this border is already used and not replaced!"</span>);
+02000 }
+02001
+02002 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a635">border</a> &gt;= (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>.size())
+02003 {
+02004 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a635">border</a> &gt; (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>.size())
+02005 {
+02006 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"replaceChain(): _BorderChains size increased of more than 1 step, holes may result!"</span>);
+02007 }
+02008
+02009 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>.resize(border+1, 0xffff);
+02010 }
+02011
+02012 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">_BorderChains</a>[<a class="code" href="a04223.html#a635">border</a>] = replacement[i].Chain;
+02013 }
+02014
+02015 <a class="code" href="a04199.html#a6">nlassert</a>(vertices.size() &gt;= 2);
+02016
+02017 <span class="comment">// Remove doubled vertices due to CVector2s snapping</span>
+02018 vector&lt;CVector2s&gt; converts;
+02019
+02020 <span class="keywordflow">for</span> (j=0; j&lt;vertices.size(); ++j)
+02021 converts.push_back(CVector2s(vertices[j]));
+02022
+02023 vector&lt;CVector2s&gt;::iterator next2s = converts.begin(), it2s, prev2s;
+02024 prev2s = next2s; ++next2s;
+02025 it2s = next2s; ++next2s;
+02026
+02027 vector&lt;CVector&gt;::iterator it3f = vertices.begin();
+02028 CVector prev3f = *it3f;
+02029 ++it3f;
+02030
+02031
+02032 <span class="keywordflow">for</span> (; it2s != converts.end() &amp;&amp; next2s != converts.end(); )
+02033 {
+02034 <span class="comment">// if the next point is equal to the previous</span>
+02035 <span class="keywordflow">if</span> (*it2s == *prev2s || *it2s == *next2s)
+02036 {
+02037 <span class="comment">// then remove the next point</span>
+02038 it2s = converts.erase(it2s);
+02039 it3f = vertices.erase(it3f);
+02040
+02041 prev2s = it2s;
+02042 --prev2s;
+02043 next2s = it2s;
+02044 ++next2s;
+02045 }
+02046 <span class="keywordflow">else</span>
+02047 {
+02048 <span class="comment">// else remember the next point, and step to the next...</span>
+02049 ++prev2s;
+02050 ++it2s;
+02051 ++next2s;
+02052 ++it3f;
+02053 prev3f = *it3f;
+02054 }
+02055 }
+02056
+02057 <a class="code" href="a04199.html#a6">nlassert</a>(vertices.size() &gt;= 2);
+02058
+02059 <a class="code" href="a04558.html#a10">sint32</a> newId = replacement[i].Chain;
+02060 <span class="keywordflow">if</span> (newId &gt;= (<a class="code" href="a04558.html#a14">sint</a>)_Chains.size())
+02061 _Chains.resize(newId+1);
+02062
+02063 <span class="comment">//CChain &amp;nchain = _Chains[newId];</span>
+02064
+02065 <span class="keywordflow">if</span> (left&gt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size())
+02066 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"left surface id MUST be id&lt;%d (id=%d)"</span>, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(), left);
+02067 <span class="keywordflow">if</span> (right&gt;(<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size())
+02068 <a class="code" href="a04199.html#a3">nlerror</a> (<span class="stringliteral">"right surface id MUST be id&lt;%d (id=%d)"</span>, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(), right);
+02069
+02070 <span class="comment">// checks if we can build the chain.</span>
+02071 <span class="keywordflow">if</span> (newId &gt; 65535)
+02072 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::addChain(): reached the maximum number of chains"</span>);
+02073
+02074 <span class="comment">//CRetrievableSurface *leftSurface = (left&gt;=0) ? &amp;(_Surfaces[left]) : NULL;</span>
+02075 <span class="comment">//CRetrievableSurface *rightSurface = (right&gt;=0) ? &amp;(_Surfaces[right]) : NULL;</span>
+02076
+02077 CChain &amp;chain = _Chains[newId];
+02078
+02079 chain._StartTip = 0xffff;
+02080 chain._StopTip = 0xffff;
+02081
+02082 <span class="comment">// make the chain and its subchains.</span>
+02083 chain.make(vertices, left, right, _OrderedChains, (<a class="code" href="a04558.html#a9">uint16</a>)newId, _FullOrderedChains, FreeOChains);
+02084 }
+02085
+02086 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++i)
+02087 {
+02088 <span class="comment">// remove old chain and replace by new chains in surface links</span>
+02089 <span class="keywordflow">for</span> (j=0; j&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[i]._Chains.size(); ++j)
+02090 {
+02091 <span class="keywordflow">if</span> (_Surfaces[i]._Chains[j].Chain == (<a class="code" href="a04558.html#a14">sint</a>)chainId)
+02092 {
+02093 _Surfaces[i]._Chains.erase(_Surfaces[i]._Chains.begin()+j);
+02094
+02095 <a class="code" href="a04558.html#a15">uint</a> k;
+02096 <span class="keywordflow">for</span> (k=0; k&lt;replacement.size(); ++k)
+02097 {
+02098 CRetrievableSurface::CSurfaceLink link;
+02099
+02100 link.Chain = replacement[k].Chain;
+02101 link.Surface = (replacement[k].Left == (<a class="code" href="a04558.html#a14">sint</a>)i ? replacement[k].Right : replacement[k].Left);
+02102 _Surfaces[i]._Chains.push_back(link);
+02103 }
+02104
+02105 <span class="keywordflow">break</span>;
+02106 }
+02107 }
+02108
+02109 <span class="comment">// remove old chain and replace by new chains in surface loops</span>
+02110 <span class="keywordflow">for</span> (j=0; j&lt;_Surfaces[i]._Loops.size(); ++j)
+02111 {
+02112 <a class="code" href="a04558.html#a15">uint</a> k;
+02113
+02114 <span class="keywordflow">for</span> (k=0; k&lt;_Surfaces[i]._Loops[j].size(); ++k)
+02115 {
+02116 <span class="keywordflow">if</span> (_Surfaces[i]._Loops[j][k] == chainId)
+02117 {
+02118 _Surfaces[i]._Loops[j].erase(_Surfaces[i]._Loops[j].begin()+k);
+02119 <a class="code" href="a04558.html#a15">uint</a> m;
+02120
+02121 <span class="keywordflow">for</span> (m=0; m&lt;replacement.size(); ++m)
+02122 _Surfaces[i]._Loops[j].insert(_Surfaces[i]._Loops[j].begin()+k+m, replacement[m].Chain);
+02123
+02124 <span class="keywordflow">break</span>;
+02125 }
+02126 }
+02127 }
+02128 }
+02129 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera13" doxytag="NLPACS::CLocalRetriever::retrieveAccuratePosition" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::retrieveAccuratePosition </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03662.html">CVector2s</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>estimated</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>cst</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>onBorder</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Retrieves a position inside the retriever (from the local position), returns true if the position is close to a border.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01238">1238</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05583.html#l00354">NLPACS::CCollisionSurfaceTemp::decSurface()</a>, <a class="el" href="a05583.html#l00287">NLPACS::CCollisionSurfaceTemp::EdgeChainEntries</a>, <a class="el" href="a05540.html#l00154">NLPACS::COrderedChain::getMax()</a>, <a class="el" href="a05385.html#l00087">NLMISC::CAABBox::getMax()</a>, <a class="el" href="a05540.html#l00151">NLPACS::COrderedChain::getMin()</a>, <a class="el" href="a05385.html#l00086">NLMISC::CAABBox::getMin()</a>, <a class="el" href="a05540.html#l00139">NLPACS::COrderedChain::getParentId()</a>, <a class="el" href="a05540.html#l00133">NLPACS::COrderedChain::getVertices()</a>, <a class="el" href="a05583.html#l00338">NLPACS::CCollisionSurfaceTemp::incSurface()</a>, <a class="el" href="a05540.html#l00136">NLPACS::COrderedChain::isForward()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05583.html#l00294">NLPACS::CCollisionSurfaceTemp::PossibleSurfaces</a>, <a class="el" href="a05541.html#l00289">NLPACS::CChainQuad::selectEdges()</a>, <a class="el" href="a05385.html#l00071">NLMISC::CAABBox::setMinMax()</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06679.html#l00177">NLPACS::CVector2s::unpack3f()</a>, <a class="el" href="a06679.html#l00099">NLPACS::CVector2s::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06679.html#l00099">NLPACS::CVector2s::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>.
+<p>
+<div class="fragment"><pre>01239 {
+01240 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+01241 <span class="keywordflow">return</span>;
+01242
+01243 <a class="code" href="a02156.html">CAABBox</a> box;
+01244 CVector estimated = estim.unpack3f();
+01245 <span class="keyword">const</span> <span class="keywordtype">double</span> BorderThreshold = 2.0e-2f;
+01246 box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1902_3">setMinMax</a>(CVector(estimated.x-(<span class="keywordtype">float</span>)BorderThreshold, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a>.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1904_5">getMin</a>().y, 0.0f),
+01247 CVector(estimated.x+(<span class="keywordtype">float</span>)BorderThreshold, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a>.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1904_3">getMax</a>().y, 0.0f));
+01248 <a class="code" href="a04558.html#a15">uint</a> numEdges = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>.selectEdges(box, cst);
+01249
+01250 <a class="code" href="a04558.html#a15">uint</a> ochain, i;
+01251
+01252 onBorder = <span class="keyword">false</span>;
+01253
+01254 cst.PossibleSurfaces.clear();
+01255
+01256 <span class="comment">// WARNING!!</span>
+01257 <span class="comment">// cst.SurfaceLUT is assumed to be 0 filled !!</span>
+01258
+01259 <span class="comment">//nldebug("estim=(%d,%d)", estim.x, estim.y);</span>
+01260
+01261 <span class="comment">// for each ordered chain, checks if the estimated position is between the min and max.</span>
+01262 <span class="keywordflow">for</span> (i=0; i&lt;numEdges; ++i)
+01263 {
+01264 ochain = cst.EdgeChainEntries[i].OChainId;
+01265
+01266 <span class="keyword">const</span> COrderedChain &amp;sub = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[ochain];
+01267 <span class="keyword">const</span> CVector2s &amp;<a class="code" href="a04061.html#a0">min</a> = sub.getMin(),
+01268 &amp;max = sub.getMax();
+01269
+01270 <span class="comment">// checks the position against the min and max of the chain</span>
+01271 <span class="keywordflow">if</span> (estim.x &lt; <a class="code" href="a04061.html#a0">min</a>.x || estim.x &gt; max.x)
+01272 <span class="keywordflow">continue</span>;
+01273
+01274 <span class="keywordtype">bool</span> isUpper;
+01275 <span class="comment">//bool isOnBorder = false;</span>
+01276
+01277 <a class="code" href="a04558.html#a10">sint32</a> left = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[sub.getParentId()].getLeft(),
+01278 right = _Chains[sub.getParentId()].getRight();
+01279
+01280 <span class="keywordflow">if</span> (estim.y &lt; <a class="code" href="a04061.html#a0">min</a>.y)
+01281 {
+01282 <span class="keywordflow">if</span> (estim.x == max.x)
+01283 <span class="keywordflow">continue</span>;
+01284 isUpper = <span class="keyword">false</span>;
+01285 }
+01286 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (estim.y &gt; max.y)
+01287 {
+01288 <span class="keywordflow">if</span> (estim.x == max.x)
+01289 <span class="keywordflow">continue</span>;
+01290 isUpper = <span class="keyword">true</span>;
+01291 }
+01292 <span class="keywordflow">else</span>
+01293 {
+01294 <span class="keyword">const</span> vector&lt;CVector2s&gt; &amp;vertices = sub.getVertices();
+01295 <a class="code" href="a04558.html#a15">uint</a> start = 0, stop = vertices.size()-1;
+01296
+01297 <span class="comment">// then finds the smallest segment of the chain that includes the estimated position.</span>
+01298 <span class="keywordflow">while</span> (stop-start &gt; 1)
+01299 {
+01300 <a class="code" href="a04558.html#a15">uint</a> mid = (start+stop)/2;
+01301
+01302 <span class="keywordflow">if</span> (vertices[mid].x &gt; estim.x)
+01303 stop = mid;
+01304 <span class="keywordflow">else</span>
+01305 start = mid;
+01306 }
+01307
+01308 <span class="comment">// if a vertical edge</span>
+01309 <span class="keywordflow">if</span> (vertices[start].x == vertices[stop].x)
+01310 {
+01311 <span class="comment">// look for maximal bounds</span>
+01312 <span class="keywordflow">while</span> (start &gt; 0 &amp;&amp; vertices[start].x == vertices[start-1].x)
+01313 --start;
+01314
+01315 <span class="keywordflow">while</span> (stop &lt; vertices.size()-1 &amp;&amp; vertices[stop].x == vertices[stop+1].x)
+01316 ++stop;
+01317
+01318 <span class="comment">// if upper or lower the bounds, do nothing</span>
+01319 <span class="keywordflow">if</span> (estim.y &gt; vertices[start].y &amp;&amp; estim.y &gt; vertices[stop].y ||
+01320 estim.y &lt; vertices[start].y &amp;&amp; estim.y &lt; vertices[stop].y)
+01321 <span class="keywordflow">continue</span>;
+01322
+01323 onBorder = <span class="keyword">true</span>;
+01324 <span class="keywordflow">continue</span>;
+01325 }
+01326 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vertices[stop].x == estim.x)
+01327 {
+01328 <span class="comment">// if (yes)</span>
+01329 <span class="keywordflow">continue</span>;
+01330 }
+01331
+01332 <span class="comment">// and then checks if the estimated position is up or down the chain.</span>
+01333
+01334 <span class="comment">// first trivial case (up both tips)</span>
+01335 <span class="keywordflow">if</span> (estim.y &gt; vertices[start].y &amp;&amp; estim.y &gt; vertices[stop].y)
+01336 {
+01337 isUpper = <span class="keyword">true</span>;
+01338 }
+01339 <span class="comment">// second trivial case (down both tips)</span>
+01340 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (estim.y &lt; vertices[start].y &amp;&amp; estim.y &lt; vertices[stop].y)
+01341 {
+01342 isUpper = <span class="keyword">false</span>;
+01343 }
+01344 <span class="comment">// full test...</span>
+01345 <span class="keywordflow">else</span>
+01346 {
+01347 <span class="keyword">const</span> CVector2s &amp;vstart = vertices[start],
+01348 &amp;vstop = vertices[stop];
+01349
+01350 <span class="comment">// this test is somewhat more accurate</span>
+01351 <span class="comment">// no division performed</span>
+01352 <a class="code" href="a04558.html#a10">sint32</a> det = (estim.y-vstart.y)*(vstop.x-vstart.x) - (estim.x-vstart.x)*(vstop.y-vstart.y);
+01353
+01354 isUpper = (det &gt; 0);
+01355
+01356 <span class="keywordflow">if</span> (det == 0)
+01357 onBorder = <span class="keyword">true</span>;
+01358 }
+01359 }
+01360
+01361 <span class="comment">// Depending on the chain is forward, up the position, increase/decrease the surface table...</span>
+01362 <span class="keywordflow">if</span> (sub.isForward())
+01363 {
+01364 <span class="keywordflow">if</span> (isUpper)
+01365 {
+01366 cst.incSurface(left);
+01367 cst.decSurface(right);
+01368 }
+01369 <span class="keywordflow">else</span>
+01370 {
+01371 cst.decSurface(left);
+01372 cst.incSurface(right);
+01373 }
+01374 }
+01375 <span class="keywordflow">else</span>
+01376 {
+01377 <span class="keywordflow">if</span> (isUpper)
+01378 {
+01379 cst.decSurface(left);
+01380 cst.incSurface(right);
+01381 }
+01382 <span class="keywordflow">else</span>
+01383 {
+01384 cst.incSurface(left);
+01385 cst.decSurface(right);
+01386 }
+01387 }
+01388 }
+01389 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera14" doxytag="NLPACS::CLocalRetriever::retrievePosition" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::retrievePosition </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a03128.html">NLMISC::CVector</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>estimated</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>cst</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Retrieves a position inside the retriever (from the local position), returns true if the position is close to a border.
+<p>
+
+<p>
+<dl compact><dt><b><a class="el" href="todo.html#_todo000010">Todo:</a></b></dt><dd>trivial up/down check using bbox.</dd></dl>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01064">1064</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05583.html#l00354">NLPACS::CCollisionSurfaceTemp::decSurface()</a>, <a class="el" href="a05583.html#l00287">NLPACS::CCollisionSurfaceTemp::EdgeChainEntries</a>, <a class="el" href="a05540.html#l00154">NLPACS::COrderedChain::getMax()</a>, <a class="el" href="a05385.html#l00087">NLMISC::CAABBox::getMax()</a>, <a class="el" href="a05540.html#l00151">NLPACS::COrderedChain::getMin()</a>, <a class="el" href="a05385.html#l00086">NLMISC::CAABBox::getMin()</a>, <a class="el" href="a05540.html#l00139">NLPACS::COrderedChain::getParentId()</a>, <a class="el" href="a05540.html#l00133">NLPACS::COrderedChain::getVertices()</a>, <a class="el" href="a05583.html#l00338">NLPACS::CCollisionSurfaceTemp::incSurface()</a>, <a class="el" href="a05540.html#l00136">NLPACS::COrderedChain::isForward()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05583.html#l00294">NLPACS::CCollisionSurfaceTemp::PossibleSurfaces</a>, <a class="el" href="a05541.html#l00289">NLPACS::CChainQuad::selectEdges()</a>, <a class="el" href="a05385.html#l00071">NLMISC::CAABBox::setMinMax()</a>, <a class="el" href="a05981.html#l00097">sint16</a>, <a class="el" href="a05981.html#l00099">sint32</a>, <a class="el" href="a05583.html#l00292">NLPACS::CCollisionSurfaceTemp::SurfaceLUT</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06679.html#l00038">NLPACS::Vector2sAccuracy</a>, <a class="el" href="a06679.html#l00099">NLPACS::CVector2s::x</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, <a class="el" href="a06679.html#l00099">NLPACS::CVector2s::y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>.
+<p>
+Referenced by <a class="el" href="a06337.html#l00387">NLPACS::CRetrieverInstance::retrievePosition()</a>, and <a class="el" href="a05929.html#l01038">testPosition()</a>.
+<p>
+<div class="fragment"><pre>01065 {
+01066 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+01067 <span class="keywordflow">return</span>;
+01068
+01069 <a class="code" href="a02156.html">CAABBox</a> box;
+01070 <span class="keyword">const</span> <span class="keywordtype">double</span> BorderThreshold = 2.0e-2f;
+01071 box.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1902_3">setMinMax</a>(CVector(estimated.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a>-(<span class="keywordtype">float</span>)BorderThreshold, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a>.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1904_5">getMin</a>().y, 0.0f), CVector(estimated.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a>+(<span class="keywordtype">float</span>)BorderThreshold, <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a>.<a class="code" href="a02156.html#NLMISC_1_1CAABBoxz1904_3">getMax</a>().y, 0.0f));
+01072 <a class="code" href="a04558.html#a15">uint</a> numEdges = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>.selectEdges(box, cst);
+01073
+01074 <a class="code" href="a04558.html#a15">uint</a> ochain, i;
+01075 CVector2s estim = CVector2s(estimated);
+01076
+01077 cst.PossibleSurfaces.clear();
+01078
+01079 <span class="comment">// WARNING!!</span>
+01080 <span class="comment">// cst.SurfaceLUT is assumed to be 0 filled !!</span>
+01081
+01082 <span class="comment">//nldebug("estim=(%d,%d)", estim.x, estim.y);</span>
+01083
+01084 <span class="comment">// for each ordered chain, checks if the estimated position is between the min and max.</span>
+01085 <span class="keywordflow">for</span> (i=0; i&lt;numEdges; ++i)
+01086 {
+01087 ochain = cst.EdgeChainEntries[i].OChainId;
+01088
+01089 <span class="keyword">const</span> COrderedChain &amp;sub = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[ochain];
+01090 <span class="keyword">const</span> CVector2s &amp;<a class="code" href="a04061.html#a0">min</a> = sub.getMin(),
+01091 &amp;max = sub.getMax();
+01092
+01093 <span class="comment">// checks the position against the min and max of the chain</span>
+01094 <span class="keywordflow">if</span> (estim.x &lt; <a class="code" href="a04061.html#a0">min</a>.x || estim.x &gt; max.x)
+01095 <span class="keywordflow">continue</span>;
+01096
+01097 <span class="keywordtype">bool</span> isUpper;
+01098 <span class="keywordtype">bool</span> isOnBorder = <span class="keyword">false</span>;
+01099
+01100 <a class="code" href="a04558.html#a10">sint32</a> left = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[sub.getParentId()].getLeft(),
+01101 right = _Chains[sub.getParentId()].getRight();
+01102
+01103 <span class="keywordflow">if</span> (estim.y &lt; <a class="code" href="a04061.html#a0">min</a>.y)
+01104 {
+01105 <span class="keywordflow">if</span> (estim.x == max.x)
+01106 <span class="keywordflow">continue</span>;
+01107 isUpper = <span class="keyword">false</span>;
+01108 <span class="comment">// nlinfo("Box: min(%d,%d) max(%d,%d) forward=%d left=%d right=%d upper=false", min.x, min.y, max.x, max.y, sub.isForward(), left, right);</span>
+01109 }
+01110 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (estim.y &gt; max.y)
+01111 {
+01112 <span class="keywordflow">if</span> (estim.x == max.x)
+01113 <span class="keywordflow">continue</span>;
+01114 isUpper = <span class="keyword">true</span>;
+01115 <span class="comment">// nlinfo("Box: min(%d,%d) max(%d,%d) forward=%d left=%d right=%d upper=true", min.x, min.y, max.x, max.y, sub.isForward(), left, right);</span>
+01116 }
+01117 <span class="keywordflow">else</span>
+01118 {
+01119 <span class="keyword">const</span> vector&lt;CVector2s&gt; &amp;vertices = sub.getVertices();
+01120 <a class="code" href="a04558.html#a15">uint</a> start = 0, stop = vertices.size()-1;
+01121
+01123
+01124 <span class="comment">// then finds the smallest segment of the chain that includes the estimated position.</span>
+01125 <span class="keywordflow">while</span> (stop-start &gt; 1)
+01126 {
+01127 <a class="code" href="a04558.html#a15">uint</a> mid = (start+stop)/2;
+01128
+01129 <span class="keywordflow">if</span> (vertices[mid].x &gt; estim.x)
+01130 stop = mid;
+01131 <span class="keywordflow">else</span>
+01132 start = mid;
+01133 }
+01134
+01135 <span class="comment">// if a vertical edge</span>
+01136 <span class="keywordflow">if</span> (vertices[start].x == vertices[stop].x)
+01137 {
+01138 <span class="comment">// look for maximal bounds</span>
+01139 <span class="keywordflow">while</span> (start &gt; 0 &amp;&amp; vertices[start].x == vertices[start-1].x)
+01140 --start;
+01141
+01142 <span class="keywordflow">while</span> (stop &lt; vertices.size()-1 &amp;&amp; vertices[stop].x == vertices[stop+1].x)
+01143 ++stop;
+01144
+01145 <span class="comment">// if upper or lower the bounds, do nothing</span>
+01146 <span class="keywordflow">if</span> (estim.y &gt; vertices[start].y &amp;&amp; estim.y &gt; vertices[stop].y ||
+01147 estim.y &lt; vertices[start].y &amp;&amp; estim.y &lt; vertices[stop].y)
+01148 <span class="keywordflow">continue</span>;
+01149
+01150 isOnBorder = <span class="keyword">true</span>;
+01151 <span class="keywordflow">if</span> (left &gt;= 0)
+01152 {
+01153 cst.SurfaceLUT[left].FoundCloseEdge = <span class="keyword">true</span>;
+01154 cst.SurfaceLUT[left].OnVerticalEdge = <span class="keyword">true</span>;
+01155 }
+01156 <span class="keywordflow">if</span> (right &gt;= 0)
+01157 {
+01158 cst.SurfaceLUT[right].FoundCloseEdge = <span class="keyword">true</span>;
+01159 cst.SurfaceLUT[right].OnVerticalEdge = <span class="keyword">true</span>;
+01160 }
+01161 <span class="comment">// nlinfo("Edge: start(%d,%d) stop(%d,%d) forward=%d left=%d right=%d border=true", vertices[start].x, vertices[start].y, vertices[stop].x, vertices[stop].y, sub.isForward(), left, right);</span>
+01162 <span class="keywordflow">continue</span>;
+01163 }
+01164 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (vertices[stop].x == estim.x)
+01165 {
+01166 <span class="comment">// if (yes)</span>
+01167 <span class="keywordflow">continue</span>;
+01168 }
+01169
+01170 <span class="comment">// and then checks if the estimated position is up or down the chain.</span>
+01171
+01172 <span class="comment">// first trivial case (up both tips)</span>
+01173 <span class="keywordflow">if</span> (estim.y &gt; vertices[start].y &amp;&amp; estim.y &gt; vertices[stop].y)
+01174 {
+01175 isUpper = <span class="keyword">true</span>;
+01176 <span class="comment">// nlinfo("Edge: start(%d,%d) stop(%d,%d) forward=%d left=%d right=%d upper=true", vertices[start].x, vertices[start].y, vertices[stop].x, vertices[stop].y, sub.isForward(), left, right);</span>
+01177 }
+01178 <span class="comment">// second trivial case (down both tips)</span>
+01179 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (estim.y &lt; vertices[start].y &amp;&amp; estim.y &lt; vertices[stop].y)
+01180 {
+01181 isUpper = <span class="keyword">false</span>;
+01182 <span class="comment">// nlinfo("Edge: start(%d,%d) stop(%d,%d) forward=%d left=%d right=%d upper=false", vertices[start].x, vertices[start].y, vertices[stop].x, vertices[stop].y, sub.isForward(), left, right);</span>
+01183 }
+01184 <span class="comment">// full test...</span>
+01185 <span class="keywordflow">else</span>
+01186 {
+01187 <span class="keyword">const</span> CVector2s &amp;vstart = vertices[start],
+01188 &amp;vstop = vertices[stop];
+01189
+01190 <a class="code" href="a04558.html#a8">sint16</a> intersect = vstart.y + (vstop.y-vstart.y)*(estim.x-vstart.x)/(vstop.x-vstart.x);
+01191
+01192 isUpper = estim.y &gt; intersect;
+01193 isOnBorder = (fabs(estim.y - intersect)&lt;BorderThreshold*<a class="code" href="a05380.html#a15">Vector2sAccuracy</a>);
+01194 <span class="comment">// nlinfo("Edge: start(%d,%d) stop(%d,%d) forward=%d left=%d right=%d upper=%s border=%s", vertices[start].x, vertices[start].y, vertices[stop].x, vertices[stop].y, sub.isForward(), left, right, isUpper ? "true":"false", isOnBorder ? "true":"false");</span>
+01195 }
+01196 }
+01197
+01198 <span class="keywordflow">if</span> (isOnBorder)
+01199 {
+01200 cst.incSurface(left);
+01201 cst.incSurface(right);
+01202 <span class="keywordflow">if</span> (left &gt;= 0) cst.SurfaceLUT[left].FoundCloseEdge = <span class="keyword">true</span>;
+01203 <span class="keywordflow">if</span> (right &gt;= 0) cst.SurfaceLUT[right].FoundCloseEdge = <span class="keyword">true</span>;
+01204 <span class="keywordflow">continue</span>;
+01205 }
+01206
+01207 <span class="comment">// Depending on the chain is forward, up the position, increase/decrease the surface table...</span>
+01208 <span class="keywordflow">if</span> (sub.isForward())
+01209 {
+01210 <span class="keywordflow">if</span> (isUpper)
+01211 {
+01212 cst.incSurface(left);
+01213 cst.decSurface(right);
+01214 }
+01215 <span class="keywordflow">else</span>
+01216 {
+01217 cst.decSurface(left);
+01218 cst.incSurface(right);
+01219 }
+01220 }
+01221 <span class="keywordflow">else</span>
+01222 {
+01223 <span class="keywordflow">if</span> (isUpper)
+01224 {
+01225 cst.decSurface(left);
+01226 cst.incSurface(right);
+01227 }
+01228 <span class="keywordflow">else</span>
+01229 {
+01230 cst.incSurface(left);
+01231 cst.decSurface(right);
+01232 }
+01233 }
+01234 }
+01235 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_11" doxytag="NLPACS::CLocalRetriever::serial" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::serial </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02270.html">NLMISC::IStream</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>f</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Serialises the <a class="el" href="a02787.html">CLocalRetriever</a>.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00895">895</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00301">__Tips</a>, <a class="el" href="a05930.html#l00304">_BorderChains</a>, <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a05930.html#l00324">_ExteriorMesh</a>, <a class="el" href="a05930.html#l00333">_FaceGrid</a>, <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>, <a class="el" href="a05930.html#l00330">_InteriorFaces</a>, <a class="el" href="a05930.html#l00327">_InteriorVertices</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05930.html#l00307">_Topologies</a>, <a class="el" href="a05930.html#l00345">LoadCheckFlag</a>, <a class="el" href="a05380.html#a31a8">NLPACS::NumMaxCreatureModels</a>, <a class="el" href="a06462.html#l00232">NLMISC::IStream::serial()</a>, <a class="el" href="a06462.html#l00324">NLMISC::IStream::serialCont()</a>, <a class="el" href="a06462.html#l00261">NLMISC::IStream::serialEnum()</a>, <a class="el" href="a06461.html#l00266">NLMISC::IStream::serialVersion()</a>, <a class="el" href="a05981.html#l00104">sint</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06336.html#l00094">NLPACS::CRetrieverBank::addRetriever()</a>.
+<p>
+<div class="fragment"><pre>00896 {
+00897 <span class="comment">/*</span>
+00898 <span class="comment"> Version 0:</span>
+00899 <span class="comment"> - base version (with collision info).</span>
+00900 <span class="comment"> Version 1:</span>
+00901 <span class="comment"> - interior vertices and faces, for interior ground snapping</span>
+00902 <span class="comment"> Version 2:</span>
+00903 <span class="comment"> - face grid added.</span>
+00904 <span class="comment"> Version 3:</span>
+00905 <span class="comment"> - identifier added.</span>
+00906 <span class="comment"> Version 4:</span>
+00907 <span class="comment"> - topologies no more in stream (obsolete)</span>
+00908 <span class="comment"> */</span>
+00909 <a class="code" href="a04558.html#a14">sint</a> ver= f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2035_8">serialVersion</a>(4);
+00910
+00911 <span class="keywordflow">if</span> (ver &lt; 4)
+00912 <span class="keywordflow">throw</span> EOlderStream();
+00913
+00914 <a class="code" href="a04558.html#a15">uint</a> i;
+00915 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_Chains);
+00916 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_OrderedChains);
+00917 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_FullOrderedChains);
+00918 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_Surfaces);
+00919 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(__Tips);
+00920 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_BorderChains);
+00921 <span class="keywordflow">if</span> (ver &lt; 4)
+00922 {
+00923 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a05380.html#a31a8">NumMaxCreatureModels</a>; ++i)
+00924 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_Topologies[i]);
+00925 }
+00926 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_ChainQuad);
+00927 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_BBox);
+00928 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama7">serialEnum</a>(_Type);
+00929 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_ExteriorMesh);
+00930
+00931 <span class="comment">// a fix for old versions (with wrong _Type value)</span>
+00932 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a> != CLocalRetriever::Interior) <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a> = CLocalRetriever::Landscape;
+00933
+00934 <span class="keywordflow">if</span> (ver &gt;= 1)
+00935 {
+00936 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_InteriorVertices);
+00937 f.<a class="code" href="a02270.html#NLMISC_1_1IStreamz2033_9">serialCont</a>(_InteriorFaces);
+00938
+00939 }
+00940 <span class="keywordflow">if</span> (ver &gt;= 2)
+00941 {
+00942 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_FaceGrid);
+00943 }
+00944 <span class="keywordflow">if</span> (ver &gt;= 3)
+00945 {
+00946 f.<a class="code" href="a02270.html#NLMISC_1_1IStreama5">serial</a>(_Id);
+00947 }
+00948
+00949 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a> = <span class="keyword">true</span>;
+00950 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievero1">LoadCheckFlag</a> = <span class="keyword">false</span>;
+00951 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_12" doxytag="NLPACS::CLocalRetriever::setBBox" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::setBBox </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02156.html">NLMISC::CAABBox</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>bbox</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sets the bbox of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00486">486</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00486 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">_BBox</a> = bbox; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_13" doxytag="NLPACS::CLocalRetriever::setExteriorMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::setExteriorMesh </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a02492.html">CExteriorMesh</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>em</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sets the exterior mesh.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00483">483</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00324">_ExteriorMesh</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>, and <a class="el" href="a05522.html#l00524">NLPACS::linkExteriorToInterior()</a>.
+<p>
+<div class="fragment"><pre>00483 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a> = em; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_14" doxytag="NLPACS::CLocalRetriever::setFullOrderedChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::setFullOrderedChains </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::vector&lt; <a class="el" href="a03028.html">COrderedChain3f</a> &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>foc</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Adds a chain to the local retriever, using the vertices of the chain, the left and right surfaces id and the edge on which the chain is stuck
+<p>
+Definition at line <a class="el" href="a05930.html#l00532">532</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05930.html#l00289">_FullOrderedChains</a>.
+<p>
+<div class="fragment"><pre>00532 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">_FullOrderedChains</a> = foc; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_15" doxytag="NLPACS::CLocalRetriever::setIdentifier" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::setIdentifier </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const std::string &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Returns the identifier of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00496">496</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+<div class="fragment"><pre>00496 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_2">_Id</a> = <span class="keywordtype">id</span>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_16" doxytag="NLPACS::CLocalRetriever::setType" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::setType </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a>&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>type</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Set the type of the retriever (see EType).
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00480">480</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+References <a class="el" href="a05646.html#l00244">type</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00480 { <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a> = <a class="code" href="a04223.html#a581">type</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera15" doxytag="NLPACS::CLocalRetriever::snapToInteriorGround" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::snapToInteriorGround </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02793.html">ULocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>position</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>snapped</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Snaps on the ground.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01413">1413</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00333">_FaceGrid</a>, <a class="el" href="a05930.html#l00330">_InteriorFaces</a>, <a class="el" href="a05930.html#l00327">_InteriorVertices</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a06605.html#l00051">NLPACS::ULocalPosition::Estimation</a>, <a class="el" href="a06172.html#l00051">NLMISC::CPlane::intersect()</a>, <a class="el" href="a06170.html#l00036">NLMISC::CPlane::make()</a>, <a class="el" href="a06677.html#l00100">NLMISC::CVector2f::normed()</a>, <a class="el" href="a05694.html#l00151">NLPACS::CFaceGrid::select()</a>, <a class="el" href="a06605.html#l00048">NLPACS::ULocalPosition::Surface</a>, <a class="el" href="a05930.html#l00177">NLPACS::CLocalRetriever::CInteriorFace::Surface</a>, <a class="el" href="a05981.html#l00100">uint32</a>, <a class="el" href="a05646.html#l00237">v</a>, <a class="el" href="a06679.html#l00038">NLPACS::Vector2sAccuracy</a>, <a class="el" href="a05930.html#l00176">NLPACS::CLocalRetriever::CInteriorFace::Verts</a>, <a class="el" href="a06677.html#l00052">NLMISC::CVector2f::x</a>, <a class="el" href="a05646.html#l00236">x</a>, <a class="el" href="a06677.html#l00052">NLMISC::CVector2f::y</a>, <a class="el" href="a05646.html#l00236">y</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::z</a>.
+<p>
+Referenced by <a class="el" href="a06337.html#l00387">NLPACS::CRetrieverInstance::retrievePosition()</a>, <a class="el" href="a06337.html#l00507">NLPACS::CRetrieverInstance::snap()</a>, and <a class="el" href="a06337.html#l00500">NLPACS::CRetrieverInstance::snapToInteriorGround()</a>.
+<p>
+<div class="fragment"><pre>01414 {
+01415 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+01416 <span class="keywordflow">return</span>;
+01417
+01418 <span class="comment">// first preselect faces around the (x, y) position (CQuadGrid ?)</span>
+01419 vector&lt;uint32&gt; selection;
+01420 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_1">_FaceGrid</a>.select(position.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>, selection);
+01421
+01422 <span class="comment">// from the preselect faces, look for the only face that belongs to the surface</span>
+01423 <span class="comment">// and that contains the position</span>
+01424 CVector pos = position.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>;
+01425 CVector posh = pos+CVector(0.0f, 0.0f, 1.0f);
+01426 CVector2f pos2d = position.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>;
+01427 <span class="keywordtype">float</span> bestDist = 1.0e10f;
+01428 CVector best;
+01429 vector&lt;uint32&gt;::iterator it;
+01430 snapped = <span class="keyword">false</span>;
+01431 <span class="keywordflow">for</span> (it=selection.begin(); it!=selection.end(); ++it)
+01432 {
+01433 <span class="keyword">const</span> CInteriorFace &amp;f = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">_InteriorFaces</a>[*it];
+01434 <span class="keywordflow">if</span> (f.Surface == (<a class="code" href="a04558.html#a11">uint32</a>)position.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>)
+01435 {
+01436 CVector <a class="code" href="a04223.html#a576">v</a>[3];
+01437 <a class="code" href="a04223.html#a576">v</a>[0] = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_4">_InteriorVertices</a>[f.Verts[0]];
+01438 <a class="code" href="a04223.html#a576">v</a>[1] = _InteriorVertices[f.Verts[1]];
+01439 <a class="code" href="a04223.html#a576">v</a>[2] = _InteriorVertices[f.Verts[2]];
+01440
+01441 CVector2f n;
+01442 <span class="keywordtype">float</span> c; <span class="comment">// 2D cartesian coefficients of line in plane X/Y.</span>
+01443 <span class="comment">// Line p0-p1.</span>
+01444 n = CVector2f(-(v[1].<a class="code" href="a04223.html#a573">y</a>-v[0].<a class="code" href="a04223.html#a573">y</a>), (v[1].<a class="code" href="a04223.html#a572">x</a>-v[0].<a class="code" href="a04223.html#a572">x</a>)).normed();
+01445 c = -(<a class="code" href="a04223.html#a576">v</a>[0].x*n.x + <a class="code" href="a04223.html#a576">v</a>[0].y*n.y);
+01446 <span class="keywordflow">if</span> (n*pos2d + c &lt; -1.0f/<a class="code" href="a05380.html#a15">Vector2sAccuracy</a>) <span class="keywordflow">continue</span>;
+01447 <span class="comment">// Line p1-p2.</span>
+01448 n = CVector2f(-(v[2].y-v[1].y), (v[2].<a class="code" href="a04223.html#a572">x</a>-v[1].<a class="code" href="a04223.html#a572">x</a>)).normed();
+01449 c = -(<a class="code" href="a04223.html#a576">v</a>[1].x*n.x + <a class="code" href="a04223.html#a576">v</a>[1].y*n.y);
+01450 <span class="keywordflow">if</span> (n*pos2d + c &lt; -1.0f/<a class="code" href="a05380.html#a15">Vector2sAccuracy</a>) <span class="keywordflow">continue</span>;
+01451 <span class="comment">// Line p2-p0.</span>
+01452 n = CVector2f(-(v[0].y-v[2].y), (v[0].<a class="code" href="a04223.html#a572">x</a>-v[2].<a class="code" href="a04223.html#a572">x</a>)).normed();
+01453 c = -(<a class="code" href="a04223.html#a576">v</a>[2].x*n.x + <a class="code" href="a04223.html#a576">v</a>[2].y*n.y);
+01454 <span class="keywordflow">if</span> (n*pos2d + c &lt; -1.0f/<a class="code" href="a05380.html#a15">Vector2sAccuracy</a>) <span class="keywordflow">continue</span>;
+01455
+01456 <a class="code" href="a03082.html">CPlane</a> p;
+01457 p.<a class="code" href="a03082.html#NLMISC_1_1CPlanez1990_2">make</a>(v[0], v[1], v[2]);
+01458
+01459 CVector i = p.<a class="code" href="a03082.html#NLMISC_1_1CPlanez1992_5">intersect</a>(pos, posh);
+01460
+01461 <span class="keywordtype">float</span> d = (<span class="keywordtype">float</span>)fabs(pos.z-i.z);
+01462
+01463 <span class="keywordflow">if</span> (d &lt; bestDist)
+01464 {
+01465 bestDist = d;
+01466 best = i;
+01467 }
+01468 }
+01469 }
+01470
+01471 <span class="comment">// and computes the real position on this face</span>
+01472 <span class="keywordflow">if</span> (bestDist &lt; 400.0f)
+01473 {
+01474 snapped = <span class="keyword">true</span>;
+01475 position.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a> = best;
+01476 }
+01477 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_17" doxytag="NLPACS::CLocalRetriever::sortTips" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::sortTips </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Sorts chains references inside the tips. NOT IMPLEMENTED YET.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00775">775</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+<div class="fragment"><pre>00776 {
+00777 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1261_1" doxytag="NLPACS::CLocalRetriever::testCollision" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::testCollision </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>cst</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a02156.html">NLMISC::CAABBox</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>bboxMove</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>const <a class="el" href="a03660.html">NLMISC::CVector2f</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>transBase</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+add possible collisions chains to the temp result. <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>cst</em>&nbsp;</td><td>the temp result to store collision chains. they are appened to cst.CollisionChains. </td></tr>
+ <tr><td valign=top><em>bboxMove</em>&nbsp;</td><td>the bbox which bounds the movement of the entity. </td></tr>
+ <tr><td valign=top><em>transBase</em>&nbsp;</td><td>the vector we use to translate local position of edge.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01807">1807</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00316">_ChainQuad</a>, <a class="el" href="a05930.html#l00324">_ExteriorMesh</a>, <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05582.html#l00068">NLPACS::CCollisionSurfaceTemp::allocEdgeCollideNode()</a>, <a class="el" href="a05583.html#l00299">NLPACS::CCollisionSurfaceTemp::CollisionChains</a>, <a class="el" href="a05583.html#l00287">NLPACS::CCollisionSurfaceTemp::EdgeChainEntries</a>, <a class="el" href="a05583.html#l00128">NLPACS::CEdgeChainEntry::EdgeEnd</a>, <a class="el" href="a05583.html#l00126">NLPACS::CEdgeChainEntry::EdgeStart</a>, <a class="el" href="a05583.html#l00070">NLPACS::CCollisionChain::FirstEdgeCollide</a>, <a class="el" href="a05930.html#l00389">getChains()</a>, <a class="el" href="a05582.html#l00075">NLPACS::CCollisionSurfaceTemp::getEdgeCollideNode()</a>, <a class="el" href="a05693.html#l00133">NLPACS::CExteriorMesh::getLink()</a>, <a class="el" href="a05693.html#l00131">NLPACS::CExteriorMesh::getLinks()</a>, <a class="el" href="a05930.html#l00379">getOrderedChains()</a>, <a class="el" href="a05540.html#l00139">NLPACS::COrderedChain::getParentId()</a>, <a class="el" href="a05540.html#l00133">NLPACS::COrderedChain::getVertices()</a>, <a class="el" href="a05664.html#l00043">NLPACS::CEdgeCollide::make()</a>, <a class="el" href="a05583.html#l00049">NLPACS::CEdgeCollideNode::Next</a>, <a class="el" href="a05583.html#l00124">NLPACS::CEdgeChainEntry::OChainId</a>, <a class="el" href="a05583.html#l00286">NLPACS::CCollisionSurfaceTemp::OChainLUT</a>, <a class="el" href="a05541.html#l00289">NLPACS::CChainQuad::selectEdges()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a05981.html#l00098">uint16</a>, and <a class="el" href="a05981.html#l00100">uint32</a>.
+<p>
+Referenced by <a class="el" href="a05761.html#l01177">NLPACS::CGlobalRetriever::findCollisionChains()</a>.
+<p>
+<div class="fragment"><pre>01808 {
+01809 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+01810 <span class="keywordflow">return</span>;
+01811
+01812 <span class="comment">// H_AUTO(PACS_LR_testCollision);</span>
+01813
+01814 <a class="code" href="a04558.html#a14">sint</a> i;
+01815
+01816 <span class="comment">// 0. select ordered chains in the chainquad.</span>
+01817 <span class="comment">//=====================================</span>
+01818 <span class="comment">// H_BEFORE(PACS_LR_testCol_selEdges);</span>
+01819 <a class="code" href="a04558.html#a14">sint</a> nEce= <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">_ChainQuad</a>.selectEdges(bboxMove, cst);
+01820 <span class="comment">// H_AFTER(PACS_LR_testCol_selEdges);</span>
+01821 <span class="comment">// NB: cst.OChainLUT is assured to be full of 0xFFFF after this call (if was right before).</span>
+01822
+01823
+01824 <span class="comment">// 1. regroup them in chains. build cst.CollisionChains</span>
+01825 <span class="comment">//=====================================</span>
+01826 <span class="comment">// NB: use cst.OChainLUT to look if a Chain has been inserted before.</span>
+01827 <a class="code" href="a04558.html#a9">uint16</a> *chainLUT= cst.OChainLUT;
+01828
+01829 <span class="comment">// bkup where we begin to add chains.</span>
+01830 <a class="code" href="a04558.html#a15">uint</a> firstChainAdded= cst.CollisionChains.size();
+01831
+01832 <span class="comment">// For all edgechain entry.</span>
+01833 <span class="keywordflow">for</span>(i=0;i&lt;nEce;i++)
+01834 {
+01835 CEdgeChainEntry &amp;ece= cst.EdgeChainEntries[i];
+01836 <span class="comment">// this is the ordered chain in the retriever.</span>
+01837 <span class="keyword">const</span> COrderedChain &amp;oChain= this-&gt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_18">getOrderedChains</a>()[ece.OChainId];
+01838 <span class="comment">// this is the id of the chain is the local retriever.</span>
+01839 <a class="code" href="a04558.html#a9">uint16</a> chainId= oChain.getParentId();
+01840
+01841 <span class="comment">// test if edge is interior and points to another instance</span>
+01842 <span class="comment">// \todo Ben: flag interior chains that points to doors to speed up the test</span>
+01843 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">_Type</a> == <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverw0NLPACS_1_1CLocalRetrieverw1">Interior</a> &amp;&amp; CChain::isBorderChainId(this-&gt;getChains()[chainId].getRight()))
+01844 {
+01845 <span class="comment">// then look for a door that match this edge</span>
+01846 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a05373.html#a2">l</a>;
+01847 <span class="keywordflow">for</span> (<a class="code" href="a05373.html#a2">l</a>=0; <a class="code" href="a05373.html#a2">l</a>&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a>.getLinks().size() &amp;&amp; <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a>.getLink(l).ChainId != chainId; ++<a class="code" href="a05373.html#a2">l</a>)
+01848 ;
+01849
+01850 <span class="comment">// if found a door, then leave the edge as is</span>
+01851 <span class="keywordflow">if</span> (<a class="code" href="a05373.html#a2">l</a> &lt; <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">_ExteriorMesh</a>.getLinks().size())
+01852 <span class="keywordflow">continue</span>;
+01853 }
+01854
+01855
+01856 <span class="comment">// add/retrieve the id in cst.CollisionChains.</span>
+01857 <span class="comment">//=================================</span>
+01858 <a class="code" href="a04558.html#a15">uint</a> ccId;
+01859 <span class="comment">// if never added.</span>
+01860 <span class="keywordflow">if</span>(chainLUT[chainId]==0xFFFF)
+01861 {
+01862 <span class="comment">// H_AUTO(PACS_LR_testCol_addToLUT);</span>
+01863 <span class="comment">// add a new CCollisionChain.</span>
+01864 ccId= cst.CollisionChains.size();
+01865 cst.CollisionChains.push_back(CCollisionChain());
+01866 <span class="comment">// Fill it with default.</span>
+01867 cst.CollisionChains[ccId].Tested= <span class="keyword">false</span>;
+01868 cst.CollisionChains[ccId].ExteriorEdge = <span class="keyword">false</span>;
+01869 cst.CollisionChains[ccId].FirstEdgeCollide= 0xFFFFFFFF;
+01870 cst.CollisionChains[ccId].ChainId= chainId;
+01871 <span class="comment">// Fill Left right info.</span>
+01872 cst.CollisionChains[ccId].LeftSurface.SurfaceId= this-&gt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_10">getChains</a>()[chainId].getLeft();
+01873 cst.CollisionChains[ccId].RightSurface.SurfaceId= this-&gt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverz1257_10">getChains</a>()[chainId].getRight();
+01874 <span class="comment">// NB: cst.CollisionChains[ccId].*Surface.RetrieverInstanceId is not filled here because we don't have</span>
+01875 <span class="comment">// this info at this level.</span>
+01876
+01877 <span class="comment">// store this Id in the LUT of chains.</span>
+01878 chainLUT[chainId]= ccId;
+01879 }
+01880 <span class="keywordflow">else</span>
+01881 {
+01882 <span class="comment">// get the id of this collision chain.</span>
+01883 ccId= chainLUT[chainId];
+01884 }
+01885
+01886 <span class="comment">// add edge collide to the list.</span>
+01887 <span class="comment">//=================================</span>
+01888 <span class="comment">// H_BEFORE(PACS_LR_testCol_addToList);</span>
+01889 CCollisionChain &amp;colChain= cst.CollisionChains[ccId];
+01890 <span class="keyword">const</span> std::vector&lt;CVector2s&gt; &amp;oChainVertices= oChain.getVertices();
+01891 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a14">sint</a> edge=ece.EdgeStart; edge&lt;ece.EdgeEnd; edge++)
+01892 {
+01893 CVector2f p0= oChainVertices[edge].unpack();
+01894 CVector2f p1= oChainVertices[edge+1].unpack();
+01895
+01896 <span class="comment">// alloc a new edgeCollide.</span>
+01897 <a class="code" href="a04558.html#a11">uint32</a> ecnId= cst.allocEdgeCollideNode();
+01898 CEdgeCollideNode &amp;ecn= cst.getEdgeCollideNode(ecnId);
+01899
+01900 <span class="comment">// append to the front of the list.</span>
+01901 ecn.Next= colChain.FirstEdgeCollide;
+01902 colChain.FirstEdgeCollide= ecnId;
+01903
+01904 <span class="comment">// build this edge.</span>
+01905 p0+= transBase;
+01906 p1+= transBase;
+01907 ecn.make(p0, p1);
+01908 }
+01909 <span class="comment">// H_AFTER(PACS_LR_testCol_addToList);</span>
+01910 }
+01911
+01912
+01913
+01914 <span class="comment">// 2. Reset LUT to 0xFFFF.</span>
+01915 <span class="comment">//=====================================</span>
+01916
+01917 <span class="comment">// H_BEFORE(PACS_LR_testCol_resetLUT);</span>
+01918 <span class="comment">// for all collisions chains inserted (starting from firstChainAdded), reset LUT.</span>
+01919 <span class="keywordflow">for</span>(i=firstChainAdded; i&lt;(<a class="code" href="a04558.html#a14">sint</a>)cst.CollisionChains.size(); i++)
+01920 {
+01921 <a class="code" href="a04558.html#a15">uint</a> ccId= cst.CollisionChains[i].ChainId;
+01922 chainLUT[ccId]= 0xFFFF;
+01923 }
+01924 <span class="comment">// H_AFTER(PACS_LR_testCol_resetLUT);</span>
+01925 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera16" doxytag="NLPACS::CLocalRetriever::testPosition" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NLPACS::CLocalRetriever::testPosition </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02793.html">ULocalPosition</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>local</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02387.html">CCollisionSurfaceTemp</a> &amp;&nbsp;</td>
+ <td class="mdname" nowrap> <em>cst</em></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"> const</td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Retrieves a position inside the retriever (from the local position), returns true if the position is close to a border.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l01038">1038</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00341">_Loaded</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a06605.html#l00051">NLPACS::ULocalPosition::Estimation</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05583.html#l00294">NLPACS::CCollisionSurfaceTemp::PossibleSurfaces</a>, <a class="el" href="a05929.html#l01064">retrievePosition()</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a06605.html#l00048">NLPACS::ULocalPosition::Surface</a>, <a class="el" href="a05583.html#l00292">NLPACS::CCollisionSurfaceTemp::SurfaceLUT</a>, <a class="el" href="a05981.html#l00105">uint</a>, <a class="el" href="a06673.html#l00051">NLMISC::CVector::x</a>, and <a class="el" href="a06673.html#l00051">NLMISC::CVector::y</a>.
+<p>
+Referenced by <a class="el" href="a05762.html#l00305">NLPACS::CGlobalRetriever::testPosition()</a>.
+<p>
+<div class="fragment"><pre>01039 {
+01040 <span class="keywordflow">if</span> (!<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">_Loaded</a>)
+01041 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01042
+01043 <span class="keywordflow">if</span> (local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a> &lt; 0 || local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a> &gt;= (<a class="code" href="a04558.html#a14">sint</a>)<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size())
+01044 {
+01045 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"PACS: can't test inexistant surface %d"</span>, local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>);
+01046 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01047 }
+01048
+01049 <span class="keywordflow">if</span> (fabs(local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>.<a class="code" href="a03128.html#NLMISC_1_1CVectoro0">x</a>) &gt;= 256.0 || fabs(local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>.<a class="code" href="a03128.html#NLMISC_1_1CVectoro1">y</a>) &gt;= 256.0)
+01050 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+01051
+01052 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrievera14">retrievePosition</a>(local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono0">Estimation</a>, cst);
+01053
+01054 <span class="keywordtype">bool</span> result = (cst.SurfaceLUT[local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>].Counter == 2 || cst.SurfaceLUT[local.<a class="code" href="a02793.html#NLPACS_1_1ULocalPositiono1">Surface</a>].OnVerticalEdge);
+01055
+01056 <a class="code" href="a04558.html#a15">uint</a> i;
+01057 <span class="keywordflow">for</span> (i=0; i&lt;cst.PossibleSurfaces.size(); ++i)
+01058 cst.SurfaceLUT[cst.PossibleSurfaces[i]].reset();
+01059
+01060 <span class="keywordflow">return</span> result;
+01061 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_18" doxytag="NLPACS::CLocalRetriever::translate" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::translate </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03128.html">NLMISC::CVector</a> &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>translation</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Translates the local retriever by the translation vector.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00882">882</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00288">_OrderedChains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00883 {
+00884 <a class="code" href="a04558.html#a15">uint</a> i;
+00885 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>.size(); ++i)
+00886 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">_OrderedChains</a>[i].translate(translation);
+00887 <span class="keywordflow">for</span> (i=0; i&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++i)
+00888 <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[i].translate(translation);
+00889 <span class="comment">/*</span>
+00890 <span class="comment"> for (i=0; i&lt;_Tips.size(); ++i)</span>
+00891 <span class="comment"> _Tips[i].translate(translation);</span>
+00892 <span class="comment">*/</span>
+00893 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievera17" doxytag="NLPACS::CLocalRetriever::unify" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::unify </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00206">206</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00207 {
+00208 <span class="comment">/*</span>
+00209 <span class="comment"> uint i, j;</span>
+00210 <span class="comment"></span>
+00211 <span class="comment"> for (i=0; i&lt;_Chains.size(); ++i)</span>
+00212 <span class="comment"> _Chains[i].unify(_OrderedChains);</span>
+00213 <span class="comment"></span>
+00214 <span class="comment"> for (i=0; i&lt;_Tips.size(); ++i)</span>
+00215 <span class="comment"> {</span>
+00216 <span class="comment"> NLPACS::CLocalRetriever::CTip &amp;tip = _Tips[i];</span>
+00217 <span class="comment"> CVector2s ptip = tip.Point;</span>
+00218 <span class="comment"></span>
+00219 <span class="comment"> for (j=0; j&lt;tip.Chains.size(); ++j)</span>
+00220 <span class="comment"> {</span>
+00221 <span class="comment"> if (tip.Chains[j].Start)</span>
+00222 <span class="comment"> {</span>
+00223 <span class="comment"> if (_Chains[tip.Chains[j].Chain].getStartVector(_OrderedChains) != ptip)</span>
+00224 <span class="comment"> nlwarning("chain %d is not stuck to tip %d", tip.Chains[j].Chain, i);</span>
+00225 <span class="comment"> _Chains[tip.Chains[j].Chain].setStartVector(ptip, _OrderedChains);</span>
+00226 <span class="comment"> }</span>
+00227 <span class="comment"> else</span>
+00228 <span class="comment"> {</span>
+00229 <span class="comment"> if (_Chains[tip.Chains[j].Chain].getStopVector(_OrderedChains) != ptip)</span>
+00230 <span class="comment"> nlwarning("chain %d is not stuck to tip %d", tip.Chains[j].Chain, i);</span>
+00231 <span class="comment"> _Chains[tip.Chains[j].Chain].setStopVector(ptip, _OrderedChains);</span>
+00232 <span class="comment"> }</span>
+00233 <span class="comment"> }</span>
+00234 <span class="comment"> }</span>
+00235 <span class="comment"></span>
+00236 <span class="comment"> _FullOrderedChains.resize(_OrderedChains.size());</span>
+00237 <span class="comment"> for (i=0; i&lt;_OrderedChains.size(); ++i)</span>
+00238 <span class="comment"> _FullOrderedChains[i].unpack(_OrderedChains[i]);</span>
+00239 <span class="comment">*/</span>
+00240 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1259_19" doxytag="NLPACS::CLocalRetriever::updateChainIds" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLPACS::CLocalRetriever::updateChainIds </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Updates surfaces links from the links contained in the chains...
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00797">797</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>.
+<p>
+References <a class="el" href="a05930.html#l00292">_Chains</a>, <a class="el" href="a06334.html#l00137">NLPACS::CRetrievableSurface::_Chains</a>, <a class="el" href="a05930.html#l00295">_Surfaces</a>, <a class="el" href="a05622.html#l00154">nlerror</a>, <a class="el" href="a05622.html#l00135">nlwarning</a>, <a class="el" href="a05981.html#l00099">sint32</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05522.html#l00627">NLPACS::computeRetriever()</a>.
+<p>
+<div class="fragment"><pre>00798 {
+00799 <a class="code" href="a04558.html#a15">uint</a> surf, link;
+00800
+00801 <span class="keywordflow">for</span> (surf=0; surf&lt;<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>.size(); ++surf)
+00802 {
+00803 CRetrievableSurface &amp;surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">_Surfaces</a>[surf];
+00804
+00805 <span class="keywordflow">for</span> (link=0; link&lt;surface._Chains.size(); ++link)
+00806 {
+00807 <a class="code" href="a04558.html#a10">sint32</a> chain = surface._Chains[link].Chain;
+00808
+00809 <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._Left == (<a class="code" href="a04558.html#a10">sint32</a>)surf)
+00810 surface._Chains[link].Surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._Right;
+00811 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._Right == (<a class="code" href="a04558.html#a10">sint32</a>)surf)
+00812 surface._Chains[link].Surface = <a class="code" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">_Chains</a>[chain]._Left;
+00813 <span class="keywordflow">else</span>
+00814 {
+00815 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"in NLPACS::CLocalRetriever::updateEdgesOnSurfaces()"</span>);
+00816 <a class="code" href="a04199.html#a3">nlerror</a>(<span class="stringliteral">"Can't find back point to surface %d on chain %d"</span>, surf, chain);
+00817 }
+00818 }
+00819 }
+00820 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Friends And Related Function Documentation</h2>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievern0" doxytag="NLPACS::CLocalRetriever::CRetrieverInstance" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> friend class <a class="el" href="a03333.html">CRetrieverInstance</a><code> [friend]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00285">285</a> of file <a class="el" href="a05930.html">local_retriever.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp0" doxytag="NLPACS::CLocalRetriever::__Tips" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02794.html">CTip</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp0">NLPACS::CLocalRetriever::__Tips</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The tips making links between different chains.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00301">301</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, and <a class="el" href="a05929.html#l00895">serial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp1" doxytag="NLPACS::CLocalRetriever::_BBox" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02156.html">NLMISC::CAABBox</a> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp1">NLPACS::CLocalRetriever::_BBox</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The bbox of the local retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00298">298</a> of file <a class="el" href="a05930.html">local_retriever.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp2" doxytag="NLPACS::CLocalRetriever::_BorderChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a9">uint16</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp2">NLPACS::CLocalRetriever::_BorderChains</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The chains on the edges of the zone.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00304">304</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00782">findBorderChains()</a>, <a class="el" href="a05930.html#l00396">getBorderChain()</a>, <a class="el" href="a05930.html#l00394">getBorderChains()</a>, <a class="el" href="a05929.html#l01973">replaceChain()</a>, and <a class="el" href="a05929.html#l00895">serial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp3" doxytag="NLPACS::CLocalRetriever::_ChainQuad" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02334.html">CChainQuad</a> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp3">NLPACS::CLocalRetriever::_ChainQuad</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+For collisions, the chainquad.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00316">316</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l01800">computeCollisionChainQuad()</a>, <a class="el" href="a05929.html#l01576">findPath()</a>, <a class="el" href="a05930.html#l00500">getChainQuad()</a>, <a class="el" href="a05929.html#l01238">retrieveAccuratePosition()</a>, <a class="el" href="a05929.html#l01064">retrievePosition()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05929.html#l01807">testCollision()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp4" doxytag="NLPACS::CLocalRetriever::_Chains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02333.html">CChain</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp4">NLPACS::CLocalRetriever::_Chains</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The chains insinde the zone.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00292">292</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00361">addChain()</a>, <a class="el" href="a05929.html#l00714">build3dSurfacePolygons()</a>, <a class="el" href="a05929.html#l00655">buildSurfacePolygons()</a>, <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00456">computeLoopsAndTips()</a>, <a class="el" href="a05929.html#l00822">computeTopologies()</a>, <a class="el" href="a05929.html#l00291">distanceToBorder()</a>, <a class="el" href="a05929.html#l00248">dumpSurface()</a>, <a class="el" href="a05929.html#l00782">findBorderChains()</a>, <a class="el" href="a05929.html#l01576">findPath()</a>, <a class="el" href="a05930.html#l00602">forceBorderChainId()</a>, <a class="el" href="a05930.html#l00391">getChain()</a>, <a class="el" href="a05930.html#l00389">getChains()</a>, <a class="el" href="a05929.html#l00182">getNextChain()</a>, <a class="el" href="a05929.html#l00161">getPreviousChain()</a>, <a class="el" href="a05929.html#l00086">getStartVector()</a>, <a class="el" href="a05929.html#l00092">getStopVector()</a>, <a class="el" href="a05929.html#l00960">insurePosition()</a>, <a class="el" href="a05929.html#l01973">replaceChain()</a>, <a class="el" href="a05929.html#l01238">retrieveAccuratePosition()</a>, <a class="el" href="a05929.html#l01064">retrievePosition()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05929.html#l00797">updateChainIds()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievert0" doxytag="NLPACS::CLocalRetriever::_EdgeTipThreshold" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const float <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievert0">NLPACS::CLocalRetriever::_EdgeTipThreshold</a> = 0.1f<code> [static, protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The tip recognition threshold.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00042">42</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1253_0" doxytag="NLPACS::CLocalRetriever::_ExteriorMesh" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02492.html">CExteriorMesh</a> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_0">NLPACS::CLocalRetriever::_ExteriorMesh</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The exterior mesh, for collisions.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00324">324</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05930.html#l00410">getExteriorMesh()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, <a class="el" href="a05930.html#l00483">setExteriorMesh()</a>, <a class="el" href="a05929.html#l01807">testCollision()</a>, and <a class="el" href="a06337.html#l00635">NLPACS::CRetrieverInstance::testExteriorCollision()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1253_1" doxytag="NLPACS::CLocalRetriever::_FaceGrid" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02497.html">CFaceGrid</a> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_1">NLPACS::CLocalRetriever::_FaceGrid</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The face selection grid.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00333">333</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l01479">getHeight()</a>, <a class="el" href="a05929.html#l01393">initFaceGrid()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05929.html#l01413">snapToInteriorGround()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp5" doxytag="NLPACS::CLocalRetriever::_FullOrderedChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03028.html">COrderedChain3f</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp5">NLPACS::CLocalRetriever::_FullOrderedChains</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00289">289</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00361">addChain()</a>, <a class="el" href="a05929.html#l00714">build3dSurfacePolygons()</a>, <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00248">dumpSurface()</a>, <a class="el" href="a05930.html#l00529">flushFullOrderedChains()</a>, <a class="el" href="a05930.html#l00386">getFullOrderedChain()</a>, <a class="el" href="a05930.html#l00384">getFullOrderedChains()</a>, <a class="el" href="a05929.html#l00086">getStartVector()</a>, <a class="el" href="a05929.html#l00092">getStopVector()</a>, <a class="el" href="a05929.html#l01973">replaceChain()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05930.html#l00532">setFullOrderedChains()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1253_2" doxytag="NLPACS::CLocalRetriever::_Id" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::string <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_2">NLPACS::CLocalRetriever::_Id</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+An human readable identifier of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00336">336</a> of file <a class="el" href="a05930.html">local_retriever.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1253_3" doxytag="NLPACS::CLocalRetriever::_InteriorFaces" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02789.html">CInteriorFace</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_3">NLPACS::CLocalRetriever::_InteriorFaces</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The faces of the collision mesh.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00330">330</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l01935">buildInteriorSurfaceBBoxes()</a>, <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l01479">getHeight()</a>, <a class="el" href="a05930.html#l00416">getInteriorFaces()</a>, <a class="el" href="a05929.html#l01393">initFaceGrid()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05929.html#l01413">snapToInteriorGround()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverz1253_4" doxytag="NLPACS::CLocalRetriever::_InteriorVertices" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03128.html">NLMISC::CVector</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverz1253_4">NLPACS::CLocalRetriever::_InteriorVertices</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The vertices of the collision mesh.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00327">327</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l01935">buildInteriorSurfaceBBoxes()</a>, <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l01479">getHeight()</a>, <a class="el" href="a05930.html#l00413">getInteriorVertices()</a>, <a class="el" href="a05929.html#l01393">initFaceGrid()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05929.html#l01413">snapToInteriorGround()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp6" doxytag="NLPACS::CLocalRetriever::_Loaded" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp6">NLPACS::CLocalRetriever::_Loaded</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Tells if retriever is loaded.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00341">341</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00056">CLocalRetriever()</a>, <a class="el" href="a05930.html#l00425">forceLoaded()</a>, <a class="el" href="a05929.html#l01479">getHeight()</a>, <a class="el" href="a05929.html#l00960">insurePosition()</a>, <a class="el" href="a05930.html#l00422">isLoaded()</a>, <a class="el" href="a05929.html#l01238">retrieveAccuratePosition()</a>, <a class="el" href="a05929.html#l01064">retrievePosition()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, <a class="el" href="a05929.html#l01413">snapToInteriorGround()</a>, <a class="el" href="a05929.html#l01807">testCollision()</a>, and <a class="el" href="a05929.html#l01038">testPosition()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp7" doxytag="NLPACS::CLocalRetriever::_OrderedChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03027.html">COrderedChain</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp7">NLPACS::CLocalRetriever::_OrderedChains</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The chains insinde the zone.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00288">288</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00361">addChain()</a>, <a class="el" href="a05929.html#l00655">buildSurfacePolygons()</a>, <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l01800">computeCollisionChainQuad()</a>, <a class="el" href="a05929.html#l00291">distanceToBorder()</a>, <a class="el" href="a05929.html#l00248">dumpSurface()</a>, <a class="el" href="a05929.html#l01576">findPath()</a>, <a class="el" href="a05930.html#l00381">getOrderedChain()</a>, <a class="el" href="a05930.html#l00379">getOrderedChains()</a>, <a class="el" href="a05929.html#l00960">insurePosition()</a>, <a class="el" href="a05929.html#l01973">replaceChain()</a>, <a class="el" href="a05929.html#l01238">retrieveAccuratePosition()</a>, <a class="el" href="a05929.html#l01064">retrievePosition()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, and <a class="el" href="a05929.html#l00882">translate()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp8" doxytag="NLPACS::CLocalRetriever::_Surfaces" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a03328.html">CRetrievableSurface</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp8">NLPACS::CLocalRetriever::_Surfaces</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The surfaces inside the zone.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00295">295</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00361">addChain()</a>, <a class="el" href="a05929.html#l00320">addSurface()</a>, <a class="el" href="a05929.html#l00714">build3dSurfacePolygons()</a>, <a class="el" href="a05929.html#l01935">buildInteriorSurfaceBBoxes()</a>, <a class="el" href="a05929.html#l00655">buildSurfacePolygons()</a>, <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00456">computeLoopsAndTips()</a>, <a class="el" href="a05929.html#l00822">computeTopologies()</a>, <a class="el" href="a05929.html#l00291">distanceToBorder()</a>, <a class="el" href="a05929.html#l00248">dumpSurface()</a>, <a class="el" href="a05929.html#l01576">findPath()</a>, <a class="el" href="a05929.html#l01479">getHeight()</a>, <a class="el" href="a05929.html#l00182">getNextChain()</a>, <a class="el" href="a05929.html#l00161">getPreviousChain()</a>, <a class="el" href="a05930.html#l00401">getSurface()</a>, <a class="el" href="a05930.html#l00399">getSurfaces()</a>, <a class="el" href="a05929.html#l00960">insurePosition()</a>, <a class="el" href="a05929.html#l01973">replaceChain()</a>, <a class="el" href="a05929.html#l00895">serial()</a>, <a class="el" href="a05929.html#l01038">testPosition()</a>, <a class="el" href="a05929.html#l00882">translate()</a>, and <a class="el" href="a05929.html#l00797">updateChainIds()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievert1" doxytag="NLPACS::CLocalRetriever::_TipThreshold" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const float <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievert1">NLPACS::CLocalRetriever::_TipThreshold</a> = 0.1f<code> [static, protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The tip recognition threshold.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05929.html#l00041">41</a> of file <a class="el" href="a05929.html">local_retriever.cpp</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp9" doxytag="NLPACS::CLocalRetriever::_Topologies" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a02796.html">CTopology</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp9">NLPACS::CLocalRetriever::_Topologies</a>[NumMaxCreatureModels]<code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The topologies within the zone.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00307">307</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00822">computeTopologies()</a>, and <a class="el" href="a05929.html#l00895">serial()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrieverp10" doxytag="NLPACS::CLocalRetriever::_Type" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverw0">EType</a> <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrieverp10">NLPACS::CLocalRetriever::_Type</a><code> [protected]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+The type of the retriever.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00319">319</a> of file <a class="el" href="a05930.html">local_retriever.h</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievero0" doxytag="NLPACS::CLocalRetriever::FreeOChains" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> std::vector&lt;<a class="el" href="a04558.html#a15">uint</a>&gt; <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievero0">NLPACS::CLocalRetriever::FreeOChains</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00598">598</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l01973">replaceChain()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLPACS_1_1CLocalRetrievero1" doxytag="NLPACS::CLocalRetriever::LoadCheckFlag" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02787.html#NLPACS_1_1CLocalRetrievero1">NLPACS::CLocalRetriever::LoadCheckFlag</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05930.html#l00345">345</a> of file <a class="el" href="a05930.html">local_retriever.h</a>.
+<p>
+Referenced by <a class="el" href="a05929.html#l00064">clear()</a>, <a class="el" href="a05929.html#l00056">CLocalRetriever()</a>, and <a class="el" href="a05929.html#l00895">serial()</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a05930.html">local_retriever.h</a><li><a class="el" href="a05929.html">local_retriever.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 14:16:01 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>