<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>Chipmunk2D Pro API Reference: cpSpatialIndex</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Chipmunk2D Pro API Reference
 <span id="projectnumber">7.0.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Properties</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> |
<a href="#typedef-members">Typedefs</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">cpSpatialIndex</div> </div>
</div><!--header-->
<div class="contents">
<p>Spatial indexes are data structures that are used to accelerate collision detection and spatial queries.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcp_spatial_index_class.html">cpSpatialIndexClass</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gafbecd34bd436d4a56200b7a542d94fc1"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structcp_b_b.html">cpBB</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> )(void *obj)</td></tr>
<tr class="memdesc:gafbecd34bd436d4a56200b7a542d94fc1"><td class="mdescLeft"> </td><td class="mdescRight">Spatial index bounding box callback function type. <a href="#gafbecd34bd436d4a56200b7a542d94fc1">More...</a><br/></td></tr>
<tr class="separator:gafbecd34bd436d4a56200b7a542d94fc1"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf46e9eeecddefacab2be48aadd5d1a1d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf46e9eeecddefacab2be48aadd5d1a1d"></a>
typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaf46e9eeecddefacab2be48aadd5d1a1d">cpSpatialIndexIteratorFunc</a> )(void *obj, void *data)</td></tr>
<tr class="memdesc:gaf46e9eeecddefacab2be48aadd5d1a1d"><td class="mdescLeft"> </td><td class="mdescRight">Spatial index/object iterator callback function type. <br/></td></tr>
<tr class="separator:gaf46e9eeecddefacab2be48aadd5d1a1d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gabae0973b116930107a597a81b2ca32bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabae0973b116930107a597a81b2ca32bf"></a>
typedef <a class="el" href="group__basic_types.html#ga89d4043ca0567e947aaca19cf9600df5">cpCollisionID</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gabae0973b116930107a597a81b2ca32bf">cpSpatialIndexQueryFunc</a> )(void *obj1, void *obj2, <a class="el" href="group__basic_types.html#ga89d4043ca0567e947aaca19cf9600df5">cpCollisionID</a> id, void *data)</td></tr>
<tr class="memdesc:gabae0973b116930107a597a81b2ca32bf"><td class="mdescLeft"> </td><td class="mdescRight">Spatial query callback function type. <br/></td></tr>
<tr class="separator:gabae0973b116930107a597a81b2ca32bf"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga60396867350f1f81025575e825ec852f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga60396867350f1f81025575e825ec852f"></a>
typedef <a class="el" href="group__basic_types.html#gac1ed65573e035bf892505768c852d8d3">cpFloat</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga60396867350f1f81025575e825ec852f">cpSpatialIndexSegmentQueryFunc</a> )(void *obj1, void *obj2, void *data)</td></tr>
<tr class="memdesc:ga60396867350f1f81025575e825ec852f"><td class="mdescLeft"> </td><td class="mdescRight">Spatial segment query callback function type. <br/></td></tr>
<tr class="separator:ga60396867350f1f81025575e825ec852f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaa256addb4f65c6846dfc306ef62a3988"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structcp_vect.html">cpVect</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaa256addb4f65c6846dfc306ef62a3988">cpBBTreeVelocityFunc</a> )(void *obj)</td></tr>
<tr class="memdesc:gaa256addb4f65c6846dfc306ef62a3988"><td class="mdescLeft"> </td><td class="mdescRight">Bounding box tree velocity callback function. <a href="#gaa256addb4f65c6846dfc306ef62a3988">More...</a><br/></td></tr>
<tr class="separator:gaa256addb4f65c6846dfc306ef62a3988"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2ac528e9008a2ab964d77fb33ab3daa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2ac528e9008a2ab964d77fb33ab3daa2"></a>
CP_EXPORT cpSpaceHash * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga2ac528e9008a2ab964d77fb33ab3daa2">cpSpaceHashAlloc</a> (void)</td></tr>
<tr class="memdesc:ga2ac528e9008a2ab964d77fb33ab3daa2"><td class="mdescLeft"> </td><td class="mdescRight">Allocate a spatial hash. <br/></td></tr>
<tr class="separator:ga2ac528e9008a2ab964d77fb33ab3daa2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf9acc339ae248b5e1ecfd91633f23aba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf9acc339ae248b5e1ecfd91633f23aba"></a>
CP_EXPORT cpSpatialIndex * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaf9acc339ae248b5e1ecfd91633f23aba">cpSpaceHashInit</a> (cpSpaceHash *hash, <a class="el" href="group__basic_types.html#gac1ed65573e035bf892505768c852d8d3">cpFloat</a> celldim, int numcells, <a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> bbfunc, cpSpatialIndex *staticIndex)</td></tr>
<tr class="memdesc:gaf9acc339ae248b5e1ecfd91633f23aba"><td class="mdescLeft"> </td><td class="mdescRight">Initialize a spatial hash. <br/></td></tr>
<tr class="separator:gaf9acc339ae248b5e1ecfd91633f23aba"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga3d96bf4bb199157b9a107345dd3d3ae7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3d96bf4bb199157b9a107345dd3d3ae7"></a>
CP_EXPORT cpSpatialIndex * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga3d96bf4bb199157b9a107345dd3d3ae7">cpSpaceHashNew</a> (<a class="el" href="group__basic_types.html#gac1ed65573e035bf892505768c852d8d3">cpFloat</a> celldim, int cells, <a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> bbfunc, cpSpatialIndex *staticIndex)</td></tr>
<tr class="memdesc:ga3d96bf4bb199157b9a107345dd3d3ae7"><td class="mdescLeft"> </td><td class="mdescRight">Allocate and initialize a spatial hash. <br/></td></tr>
<tr class="separator:ga3d96bf4bb199157b9a107345dd3d3ae7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gac6ac718f3e9509abc2c01d256d4217a5"><td class="memItemLeft" align="right" valign="top">CP_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gac6ac718f3e9509abc2c01d256d4217a5">cpSpaceHashResize</a> (cpSpaceHash *hash, <a class="el" href="group__basic_types.html#gac1ed65573e035bf892505768c852d8d3">cpFloat</a> celldim, int numcells)</td></tr>
<tr class="memdesc:gac6ac718f3e9509abc2c01d256d4217a5"><td class="mdescLeft"> </td><td class="mdescRight">Change the cell dimensions and table size of the spatial hash to tune it. <a href="#gac6ac718f3e9509abc2c01d256d4217a5">More...</a><br/></td></tr>
<tr class="separator:gac6ac718f3e9509abc2c01d256d4217a5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaae40a748ead4cadb9cc03b32947d37cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaae40a748ead4cadb9cc03b32947d37cc"></a>
CP_EXPORT cpBBTree * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaae40a748ead4cadb9cc03b32947d37cc">cpBBTreeAlloc</a> (void)</td></tr>
<tr class="memdesc:gaae40a748ead4cadb9cc03b32947d37cc"><td class="mdescLeft"> </td><td class="mdescRight">Allocate a bounding box tree. <br/></td></tr>
<tr class="separator:gaae40a748ead4cadb9cc03b32947d37cc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gabf7967b5736584641f59a0ecc60ed5a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabf7967b5736584641f59a0ecc60ed5a0"></a>
CP_EXPORT cpSpatialIndex * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gabf7967b5736584641f59a0ecc60ed5a0">cpBBTreeInit</a> (cpBBTree *tree, <a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> bbfunc, cpSpatialIndex *staticIndex)</td></tr>
<tr class="memdesc:gabf7967b5736584641f59a0ecc60ed5a0"><td class="mdescLeft"> </td><td class="mdescRight">Initialize a bounding box tree. <br/></td></tr>
<tr class="separator:gabf7967b5736584641f59a0ecc60ed5a0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga644b5ce154690f88cbdb84f9315ba317"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga644b5ce154690f88cbdb84f9315ba317"></a>
CP_EXPORT cpSpatialIndex * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga644b5ce154690f88cbdb84f9315ba317">cpBBTreeNew</a> (<a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> bbfunc, cpSpatialIndex *staticIndex)</td></tr>
<tr class="memdesc:ga644b5ce154690f88cbdb84f9315ba317"><td class="mdescLeft"> </td><td class="mdescRight">Allocate and initialize a bounding box tree. <br/></td></tr>
<tr class="separator:ga644b5ce154690f88cbdb84f9315ba317"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gab7b59516c70b93b7fb6d185c64bce301"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab7b59516c70b93b7fb6d185c64bce301"></a>
CP_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gab7b59516c70b93b7fb6d185c64bce301">cpBBTreeOptimize</a> (cpSpatialIndex *index)</td></tr>
<tr class="memdesc:gab7b59516c70b93b7fb6d185c64bce301"><td class="mdescLeft"> </td><td class="mdescRight">Perform a static top down optimization of the tree. <br/></td></tr>
<tr class="separator:gab7b59516c70b93b7fb6d185c64bce301"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga5be19704958930441d558dfaeb2e83d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5be19704958930441d558dfaeb2e83d5"></a>
CP_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga5be19704958930441d558dfaeb2e83d5">cpBBTreeSetVelocityFunc</a> (cpSpatialIndex *index, <a class="el" href="group__cp_spatial_index.html#gaa256addb4f65c6846dfc306ef62a3988">cpBBTreeVelocityFunc</a> func)</td></tr>
<tr class="memdesc:ga5be19704958930441d558dfaeb2e83d5"><td class="mdescLeft"> </td><td class="mdescRight">Set the velocity function for the bounding box tree to enable temporal coherence. <br/></td></tr>
<tr class="separator:ga5be19704958930441d558dfaeb2e83d5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gada77f0bd84294d6ab654d39597a5cc2e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gada77f0bd84294d6ab654d39597a5cc2e"></a>
CP_EXPORT cpSweep1D * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gada77f0bd84294d6ab654d39597a5cc2e">cpSweep1DAlloc</a> (void)</td></tr>
<tr class="memdesc:gada77f0bd84294d6ab654d39597a5cc2e"><td class="mdescLeft"> </td><td class="mdescRight">Allocate a 1D sort and sweep broadphase. <br/></td></tr>
<tr class="separator:gada77f0bd84294d6ab654d39597a5cc2e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga595f1c8880863a897ebab17f725a7259"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga595f1c8880863a897ebab17f725a7259"></a>
CP_EXPORT cpSpatialIndex * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga595f1c8880863a897ebab17f725a7259">cpSweep1DInit</a> (cpSweep1D *sweep, <a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> bbfunc, cpSpatialIndex *staticIndex)</td></tr>
<tr class="memdesc:ga595f1c8880863a897ebab17f725a7259"><td class="mdescLeft"> </td><td class="mdescRight">Initialize a 1D sort and sweep broadphase. <br/></td></tr>
<tr class="separator:ga595f1c8880863a897ebab17f725a7259"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf4552114a532071f64ab4a182cca8c1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf4552114a532071f64ab4a182cca8c1f"></a>
CP_EXPORT cpSpatialIndex * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaf4552114a532071f64ab4a182cca8c1f">cpSweep1DNew</a> (<a class="el" href="group__cp_spatial_index.html#gafbecd34bd436d4a56200b7a542d94fc1">cpSpatialIndexBBFunc</a> bbfunc, cpSpatialIndex *staticIndex)</td></tr>
<tr class="memdesc:gaf4552114a532071f64ab4a182cca8c1f"><td class="mdescLeft"> </td><td class="mdescRight">Allocate and initialize a 1D sort and sweep broadphase. <br/></td></tr>
<tr class="separator:gaf4552114a532071f64ab4a182cca8c1f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga13a62ecd13b6dbee7d4c8ae056e0f86f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga13a62ecd13b6dbee7d4c8ae056e0f86f"></a>
void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga13a62ecd13b6dbee7d4c8ae056e0f86f">cpSpatialIndexFree</a> (cpSpatialIndex *index)</td></tr>
<tr class="memdesc:ga13a62ecd13b6dbee7d4c8ae056e0f86f"><td class="mdescLeft"> </td><td class="mdescRight">Destroy and free a spatial index. <br/></td></tr>
<tr class="separator:ga13a62ecd13b6dbee7d4c8ae056e0f86f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga8abb667968f231b2f87c7273d4b0e533"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8abb667968f231b2f87c7273d4b0e533"></a>
void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga8abb667968f231b2f87c7273d4b0e533">cpSpatialIndexCollideStatic</a> (cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, <a class="el" href="group__cp_spatial_index.html#gabae0973b116930107a597a81b2ca32bf">cpSpatialIndexQueryFunc</a> func, void *data)</td></tr>
<tr class="memdesc:ga8abb667968f231b2f87c7273d4b0e533"><td class="mdescLeft"> </td><td class="mdescRight">Collide the objects in <code>dynamicIndex</code> against the objects in <code>staticIndex</code> using the query callback function. <br/></td></tr>
<tr class="separator:ga8abb667968f231b2f87c7273d4b0e533"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga93050241206687a408b3fda47a3043b5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga93050241206687a408b3fda47a3043b5"></a>
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga93050241206687a408b3fda47a3043b5">cpSpatialIndexDestroy</a> (cpSpatialIndex *index)</td></tr>
<tr class="memdesc:ga93050241206687a408b3fda47a3043b5"><td class="mdescLeft"> </td><td class="mdescRight">Destroy a spatial index. <br/></td></tr>
<tr class="separator:ga93050241206687a408b3fda47a3043b5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga6df52a5b71eb17a3eefd95f6fee50523"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6df52a5b71eb17a3eefd95f6fee50523"></a>
static int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga6df52a5b71eb17a3eefd95f6fee50523">cpSpatialIndexCount</a> (cpSpatialIndex *index)</td></tr>
<tr class="memdesc:ga6df52a5b71eb17a3eefd95f6fee50523"><td class="mdescLeft"> </td><td class="mdescRight">Get the number of objects in the spatial index. <br/></td></tr>
<tr class="separator:ga6df52a5b71eb17a3eefd95f6fee50523"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf26a213bc18ecac3eb75fbffcd799516"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf26a213bc18ecac3eb75fbffcd799516"></a>
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaf26a213bc18ecac3eb75fbffcd799516">cpSpatialIndexEach</a> (cpSpatialIndex *index, <a class="el" href="group__cp_spatial_index.html#gaf46e9eeecddefacab2be48aadd5d1a1d">cpSpatialIndexIteratorFunc</a> func, void *data)</td></tr>
<tr class="memdesc:gaf26a213bc18ecac3eb75fbffcd799516"><td class="mdescLeft"> </td><td class="mdescRight">Iterate the objects in the spatial index. <code>func</code> will be called once for each object. <br/></td></tr>
<tr class="separator:gaf26a213bc18ecac3eb75fbffcd799516"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gabe87290682030b3de790eb99d515cc37"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="group__basic_types.html#gabc5e752c48f3449ca26ef413ecbd647e">cpBool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gabe87290682030b3de790eb99d515cc37">cpSpatialIndexContains</a> (cpSpatialIndex *index, void *obj, <a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> hashid)</td></tr>
<tr class="memdesc:gabe87290682030b3de790eb99d515cc37"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if the spatial index contains the given object. <a href="#gabe87290682030b3de790eb99d515cc37">More...</a><br/></td></tr>
<tr class="separator:gabe87290682030b3de790eb99d515cc37"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga64e1fb8e5d80db41daa3f7a2868f6cf5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga64e1fb8e5d80db41daa3f7a2868f6cf5">cpSpatialIndexInsert</a> (cpSpatialIndex *index, void *obj, <a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> hashid)</td></tr>
<tr class="memdesc:ga64e1fb8e5d80db41daa3f7a2868f6cf5"><td class="mdescLeft"> </td><td class="mdescRight">Add an object to a spatial index. <a href="#ga64e1fb8e5d80db41daa3f7a2868f6cf5">More...</a><br/></td></tr>
<tr class="separator:ga64e1fb8e5d80db41daa3f7a2868f6cf5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga3c57a5ea8af5d34ed253a410641eabd2"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga3c57a5ea8af5d34ed253a410641eabd2">cpSpatialIndexRemove</a> (cpSpatialIndex *index, void *obj, <a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> hashid)</td></tr>
<tr class="memdesc:ga3c57a5ea8af5d34ed253a410641eabd2"><td class="mdescLeft"> </td><td class="mdescRight">Remove an object from a spatial index. <a href="#ga3c57a5ea8af5d34ed253a410641eabd2">More...</a><br/></td></tr>
<tr class="separator:ga3c57a5ea8af5d34ed253a410641eabd2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga53a63b28ddc23833125af07f50824810"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga53a63b28ddc23833125af07f50824810"></a>
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga53a63b28ddc23833125af07f50824810">cpSpatialIndexReindex</a> (cpSpatialIndex *index)</td></tr>
<tr class="memdesc:ga53a63b28ddc23833125af07f50824810"><td class="mdescLeft"> </td><td class="mdescRight">Perform a full reindex of a spatial index. <br/></td></tr>
<tr class="separator:ga53a63b28ddc23833125af07f50824810"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2e1fdebe1cbc9271a387523f8835d56a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2e1fdebe1cbc9271a387523f8835d56a"></a>
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga2e1fdebe1cbc9271a387523f8835d56a">cpSpatialIndexReindexObject</a> (cpSpatialIndex *index, void *obj, <a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> hashid)</td></tr>
<tr class="memdesc:ga2e1fdebe1cbc9271a387523f8835d56a"><td class="mdescLeft"> </td><td class="mdescRight">Reindex a single object in the spatial index. <br/></td></tr>
<tr class="separator:ga2e1fdebe1cbc9271a387523f8835d56a"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaa812bf1ff2bfa9a0fcafc537be23e4a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa812bf1ff2bfa9a0fcafc537be23e4a0"></a>
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gaa812bf1ff2bfa9a0fcafc537be23e4a0">cpSpatialIndexQuery</a> (cpSpatialIndex *index, void *obj, <a class="el" href="structcp_b_b.html">cpBB</a> bb, <a class="el" href="group__cp_spatial_index.html#gabae0973b116930107a597a81b2ca32bf">cpSpatialIndexQueryFunc</a> func, void *data)</td></tr>
<tr class="memdesc:gaa812bf1ff2bfa9a0fcafc537be23e4a0"><td class="mdescLeft"> </td><td class="mdescRight">Perform a rectangle query against the spatial index, calling <code>func</code> for each potential match. <br/></td></tr>
<tr class="separator:gaa812bf1ff2bfa9a0fcafc537be23e4a0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gae66f56fe8f12be66c696776d0430f18e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae66f56fe8f12be66c696776d0430f18e"></a>
static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#gae66f56fe8f12be66c696776d0430f18e">cpSpatialIndexSegmentQuery</a> (cpSpatialIndex *index, void *obj, <a class="el" href="structcp_vect.html">cpVect</a> a, <a class="el" href="structcp_vect.html">cpVect</a> b, <a class="el" href="group__basic_types.html#gac1ed65573e035bf892505768c852d8d3">cpFloat</a> t_exit, <a class="el" href="group__cp_spatial_index.html#ga60396867350f1f81025575e825ec852f">cpSpatialIndexSegmentQueryFunc</a> func, void *data)</td></tr>
<tr class="memdesc:gae66f56fe8f12be66c696776d0430f18e"><td class="mdescLeft"> </td><td class="mdescRight">Perform a segment query against the spatial index, calling <code>func</code> for each potential match. <br/></td></tr>
<tr class="separator:gae66f56fe8f12be66c696776d0430f18e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga04f6ebfd6288fbf058c116c033ae9eae"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__cp_spatial_index.html#ga04f6ebfd6288fbf058c116c033ae9eae">cpSpatialIndexReindexQuery</a> (cpSpatialIndex *index, <a class="el" href="group__cp_spatial_index.html#gabae0973b116930107a597a81b2ca32bf">cpSpatialIndexQueryFunc</a> func, void *data)</td></tr>
<tr class="memdesc:ga04f6ebfd6288fbf058c116c033ae9eae"><td class="mdescLeft"> </td><td class="mdescRight">Simultaneously reindex and find all colliding objects. <a href="#ga04f6ebfd6288fbf058c116c033ae9eae">More...</a><br/></td></tr>
<tr class="separator:ga04f6ebfd6288fbf058c116c033ae9eae"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Spatial indexes are data structures that are used to accelerate collision detection and spatial queries. </p>
<p>Chipmunk provides a number of spatial index algorithms to pick from and they are programmed in a generic way so that you can use them for holding more than just <a class="el" href="structcp_shape.html">cpShape</a> structs.</p>
<p>It works by using <code>void</code> pointers to the objects you add and using a callback to ask your code for bounding boxes when it needs them. Several types of queries can be performed an index as well as reindexing and full collision information. All communication to the spatial indexes is performed through callback functions.</p>
<p>Spatial indexes should be treated as opaque structs. This meanns you shouldn't be reading any of the struct fields. </p>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="gaa256addb4f65c6846dfc306ef62a3988"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structcp_vect.html">cpVect</a>(* cpBBTreeVelocityFunc)(void *obj)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Bounding box tree velocity callback function. </p>
<p>This function should return an estimate for the object's velocity. </p>
</div>
</div>
<a class="anchor" id="gafbecd34bd436d4a56200b7a542d94fc1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structcp_b_b.html">cpBB</a>(* cpSpatialIndexBBFunc)(void *obj)</td>
</tr>
</table>
</div><div class="memdoc">
<p>Spatial index bounding box callback function type. </p>
<p>The spatial index calls this function and passes you a pointer to an object you added when it needs to get the bounding box associated with that object. </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gac6ac718f3e9509abc2c01d256d4217a5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">CP_EXPORT void cpSpaceHashResize </td>
<td>(</td>
<td class="paramtype">cpSpaceHash * </td>
<td class="paramname"><em>hash</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__basic_types.html#gac1ed65573e035bf892505768c852d8d3">cpFloat</a> </td>
<td class="paramname"><em>celldim</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numcells</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Change the cell dimensions and table size of the spatial hash to tune it. </p>
<p>The cell dimensions should roughly match the average size of your objects and the table size should be ~10 larger than the number of objects inserted. Some trial and error is required to find the optimum numbers for efficiency. </p>
</div>
</div>
<a class="anchor" id="gabe87290682030b3de790eb99d515cc37"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="group__basic_types.html#gabc5e752c48f3449ca26ef413ecbd647e">cpBool</a> cpSpatialIndexContains </td>
<td>(</td>
<td class="paramtype">cpSpatialIndex * </td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>obj</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> </td>
<td class="paramname"><em>hashid</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if the spatial index contains the given object. </p>
<p>Most spatial indexes use hashed storage, so you must provide a hash value too. </p>
</div>
</div>
<a class="anchor" id="ga64e1fb8e5d80db41daa3f7a2868f6cf5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void cpSpatialIndexInsert </td>
<td>(</td>
<td class="paramtype">cpSpatialIndex * </td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>obj</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> </td>
<td class="paramname"><em>hashid</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Add an object to a spatial index. </p>
<p>Most spatial indexes use hashed storage, so you must provide a hash value too. </p>
</div>
</div>
<a class="anchor" id="ga04f6ebfd6288fbf058c116c033ae9eae"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void cpSpatialIndexReindexQuery </td>
<td>(</td>
<td class="paramtype">cpSpatialIndex * </td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__cp_spatial_index.html#gabae0973b116930107a597a81b2ca32bf">cpSpatialIndexQueryFunc</a> </td>
<td class="paramname"><em>func</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>data</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Simultaneously reindex and find all colliding objects. </p>
<p><code>func</code> will be called once for each potentially overlapping pair of objects found. If the spatial index was initialized with a static index, it will collide it's objects against that as well. </p>
</div>
</div>
<a class="anchor" id="ga3c57a5ea8af5d34ed253a410641eabd2"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void cpSpatialIndexRemove </td>
<td>(</td>
<td class="paramtype">cpSpatialIndex * </td>
<td class="paramname"><em>index</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>obj</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__basic_types.html#gae7eb4775a9f43914a15553ca65a048f4">cpHashValue</a> </td>
<td class="paramname"><em>hashid</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Remove an object from a spatial index. </p>
<p>Most spatial indexes use hashed storage, so you must provide a hash value too. </p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jul 2 2015 11:28:11 for Chipmunk2D Pro API Reference by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3.1
</small></address>
</body>
</html>