static void fill_clipped_contour (hidGC gc, PLINE *pl, const BoxType *clip_box) { PLINE *pl_copy; POLYAREA *clip_poly; POLYAREA *piece_poly; POLYAREA *clipped_pieces; POLYAREA *draw_piece; int x; clip_poly = RectPoly (clip_box->X1, clip_box->X2, clip_box->Y1, clip_box->Y2); poly_CopyContour (&pl_copy, pl); piece_poly = poly_Create (); poly_InclContour (piece_poly, pl_copy); x = poly_Boolean_free (piece_poly, clip_poly, &clipped_pieces, PBO_ISECT); if (x != err_ok || clipped_pieces == NULL) return; draw_piece = clipped_pieces; do { /* NB: The polygon won't have any holes in it */ fill_contour (gc, draw_piece->contours); } while ((draw_piece = draw_piece->f) != clipped_pieces); poly_Free (&clipped_pieces); }
/* --------------------------------------------------------------------------- * frees memory used by a polygon */ void FreePolygonMemory (PolygonTypePtr Polygon) { if (Polygon) { MYFREE (Polygon->Points); MYFREE (Polygon->HoleIndex); if (Polygon->Clipped) poly_Free (&Polygon->Clipped); poly_FreeContours (&Polygon->NoHoles); memset (Polygon, 0, sizeof (PolygonType)); } }
/* --------------------------------------------------------------------------- * frees memory used by a polygon */ void FreePolygonMemory (PolygonType *polygon) { if (polygon == NULL) return; free (polygon->Points); free (polygon->HoleIndex); if (polygon->Clipped) poly_Free (&polygon->Clipped); poly_FreeContours (&polygon->NoHoles); memset (polygon, 0, sizeof (PolygonType)); }