int poly_p_point_inside(gpc_polygon *p, double x, double y){ int i, inSolid = 0, inHole = 0; for(i=0; i< p->num_contours; i++) { /* loop over solid contours */ if (p->hole[i] == 0) { inSolid = poly_c_point_inside(p->contour + i, x, y); if (inSolid == -1) return inSolid; /* error */ if (inSolid > 0) break; } } if (inSolid == 0) return 0; for(i=0; i < p->num_contours; i++) { /* loop over holes */ if (p->hole[i] == 1) { inHole = poly_c_point_inside(p->contour + i, x, y); if (inHole == -1) return inHole; /* error */ if (inHole > 0) break; } } return ((inHole > 0) ? 0 : 1); }
static PyObject *Polygon_isInside(Polygon *self, PyObject *args) { int i=INDEF, r=0; double x, y; if (! PyArg_ParseTuple(args, "dd|i", &x, &y, &i)) return Polygon_Raise(ERR_ARG); if (i!=INDEF) { if ((i >= 0) && (i < self->p->num_contours)) { if ((r = poly_c_point_inside(self->p->contour+i, x, y)) == -1) return Polygon_Raise(ERR_INV); } else return Polygon_Raise(ERR_IND); } else { if ((r = poly_p_point_inside(self->p, x, y)) == -1) return Polygon_Raise(ERR_INV); } return Py_BuildValue("i", r); }