void poly_p_boundingbox(gpc_polygon *p, double *x0, double *x1, double *y0, double *y1) { int i; double X0, X1, Y0, Y1; if (p->num_contours <= 0) { *x0 = *x1 = *y0 = *y1 = 0.0; return; } poly_c_boundingbox(p->contour, x0, x1, y0, y1); for (i=1; i < p->num_contours; i++) { poly_c_boundingbox(p->contour+i, &X0, &X1, &Y0, &Y1); if (X0 < *x0) *x0 = X0; if (X1 > *x1) *x1 = X1; if (Y0 < *y0) *y0 = Y0; if (Y1 > *y1) *y1 = Y1; } }
static PyObject *Polygon_boundingBox(Polygon *self, PyObject *args) { int i=INDEF; double x0, x1, y0, y1; if (! PyArg_ParseTuple(args, "|i", &i)) return Polygon_Raise(ERR_ARG); if (i!=INDEF) { if ((i >= 0) && (i < self->p->num_contours)) poly_c_boundingbox(self->p->contour+i, &x0, &x1, &y0, &y1); else return Polygon_Raise(ERR_IND); } else Polygon_getBoundingBox(self, &x0, &x1, &y0, &y1); return Py_BuildValue("dddd", x0, x1,y0,y1); }
static PyObject *Polygon_aspectRatio(Polygon *self, PyObject *args) { int i=INDEF; double x0, x1, y0, y1; if (! PyArg_ParseTuple(args, "|i", &i)) return Polygon_Raise(ERR_ARG); if (i!=INDEF) { if ((i >= 0) && (i < self->gpc_p->num_contours)) poly_c_boundingbox(self->gpc_p->contour+i, &x0, &x1, &y0, &y1); else return Polygon_Raise(ERR_IND); } else Polygon_getBoundingBox(self, &x0, &x1, &y0, &y1); return Py_BuildValue("d", ((x0 != x1) ? fabs((y1-y0)/(x1-x0)) : 0.0)); }