示例#1
0
文件: PolyUtil.c 项目: npinto/Polygon
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);
}
示例#2
0
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);
}