PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ rect_tree_area_contains_point()

static int rect_tree_area_contains_point ( RECT_NODE node,
const POINT2D pt 
)
static

Definition at line 344 of file lwtree.c.

345{
346 /* Can't do anything with a leaf node, makes no sense */
347 if (rect_node_is_leaf(node))
348 return 0;
349
350 /* Iterate into area until we find ring heads */
351 if (node->i.ring_type == RECT_NODE_RING_NONE)
352 {
353 int i, sum = 0;
354 for (i = 0; i < node->i.num_nodes; i++)
355 sum += rect_tree_area_contains_point(node->i.nodes[i], pt);
356 return sum;
357 }
358 /* See if the ring encloses the point */
359 else
360 {
361 int on_boundary = 0;
362 int edge_crossing_count = rect_tree_ring_contains_point(node, pt, &on_boundary);
363 /* Odd number of crossings => contained */
364 int contained = (edge_crossing_count % 2 == 1);
365 /* External rings return positive containment, interior ones negative, */
366 /* so that a point-in-hole case nets out to zero (contained by both */
367 /* interior and exterior rings. */
369 {
370 return on_boundary ? 0 : -1 * contained;
371 }
372 else
373 {
374 return contained || on_boundary;
375 }
376
377 }
378}
static int rect_tree_ring_contains_point(RECT_NODE *node, const POINT2D *pt, int *on_boundary)
Definition lwtree.c:314
static int rect_tree_area_contains_point(RECT_NODE *node, const POINT2D *pt)
Definition lwtree.c:344
static int rect_node_is_leaf(const RECT_NODE *node)
Definition lwtree.c:31
@ RECT_NODE_RING_INTERIOR
Definition lwtree.h:37
@ RECT_NODE_RING_NONE
Definition lwtree.h:35
struct rect_node * nodes[RECT_NODE_SIZE]
Definition lwtree.h:61
RECT_NODE_RING_TYPE ring_type
Definition lwtree.h:60
RECT_NODE_INTERNAL i
Definition lwtree.h:75

References rect_node::i, RECT_NODE_INTERNAL::nodes, RECT_NODE_INTERNAL::num_nodes, rect_node_is_leaf(), RECT_NODE_RING_INTERIOR, RECT_NODE_RING_NONE, rect_tree_area_contains_point(), rect_tree_ring_contains_point(), and RECT_NODE_INTERNAL::ring_type.

Referenced by rect_tree_area_contains_point(), and rect_tree_contains_point().

Here is the call graph for this function:
Here is the caller graph for this function: