370{
372
373
374
375
376
378 if (!node_contains_value)
380
381
383 {
387
388
389
390
391
392
393
394
397
398
399
400
401
402
403 if ((seg1->
y <= pt->
y) && (pt->
y < seg2->
y) && (side > 0))
404 {
405 *winding_number = *winding_number + 1;
406 }
407
408
409
410
411
412
413 else if ((seg2->
y <= pt->
y) && (pt->
y < seg1->
y) && (side < 0))
414 {
415 *winding_number = *winding_number - 1;
416 }
417
419 }
420
421 else
422 {
424 {
426
428 return rslt;
429 }
430 }
432}
static int itree_point_on_segment(const POINT2D *seg1, const POINT2D *seg2, const POINT2D *point)
static IntervalTreeResult itree_point_in_ring_recursive(const IntervalTreeNode *node, const POINTARRAY *pa, const POINT2D *pt, int *winding_number)
static double itree_segment_side(const POINT2D *seg1, const POINT2D *seg2, const POINT2D *point)
#define FP_CONTAINS_INCL(A, X, B)
static const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from.
struct IntervalTreeNode * children[ITREE_MAX_NODES]