return region->rectangle_list;
}
+#ifdef PLY_REGION_ENABLE_TEST
+#include <stdio.h>
+
+#define COVER_SIZE 30
+#define RECTANGLE_COUNT 2
+
+static void
+cover_with_rect(char cover[COVER_SIZE][COVER_SIZE],
+ ply_rectangle_t *rectangle,
+ int mask)
+{
+ int x, y;
+ for (y=0; y<rectangle->height; y++)
+ {
+ for (x=0; x<rectangle->width; x++)
+ {
+ if (rectangle->x + x >= 0 &&
+ rectangle->y + y >= 0 &&
+ rectangle->x + x < COVER_SIZE &&
+ rectangle->y + y < COVER_SIZE)
+ {
+// printf("%d %d\n", rectangle->x, x);
+ if (mask)
+ cover[rectangle->y + y][rectangle->x + x] = mask;
+ else
+ cover[rectangle->y + y][rectangle->x + x]++;
+ }
+ }
+ }
+}
+
+int
+do_test (void)
+{
+ ply_rectangle_t rectangle;
+ char cover[COVER_SIZE][COVER_SIZE];
+ int x, y, i, width, height;
+ ply_region_t *region;
+ ply_list_node_t *node;
+
+ region = ply_region_new ();
+
+
+ for (y = 0; y < COVER_SIZE; y++)
+ {
+ for (x = 0; x < COVER_SIZE; x++)
+ {
+ cover[y][x] = 0;
+ }
+ }
+
+ for (i = 0; i < RECTANGLE_COUNT; i++)
+ {
+ rectangle.x = random() % COVER_SIZE-5;
+ rectangle.y = random() % COVER_SIZE-5;
+ rectangle.width = 1 + random() % 20;
+ rectangle.height = 1 + random() % 20;
+ printf("Adding X=%d Y=%d W=%d H=%d\n", rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+ cover_with_rect(cover, &rectangle, 100); /* 100 means covered by origial squares */
+ ply_region_add_rectangle (region, &rectangle);
+ }
+
+ printf("TO\n");
+ int count = 0;
+
+ ply_list_t *rectangle_list = ply_region_get_rectangle_list (region);
+ for (node = ply_list_get_first_node (rectangle_list);
+ node;
+ node = ply_list_get_next_node (rectangle_list, node))
+ {
+ ply_rectangle_t *small_rectangle = ply_list_node_get_data (node);
+ printf("Processed X=%d Y=%d W=%d H=%d\n", small_rectangle->x, small_rectangle->y, small_rectangle->width, small_rectangle->height);
+ cover_with_rect(cover, small_rectangle, 0);
+ count++;
+ }
+ printf("Rectangles in:%d out:%d\n", RECTANGLE_COUNT, count);
+
+ count=0;
+
+ for (y = 0; y < COVER_SIZE; y++)
+ {
+ printf("%03d ", y);
+ for (x = 0; x < COVER_SIZE; x++)
+ {
+ if (cover[y][x] >= 100)
+ {
+ if (cover[y][x] == 100)
+ {
+ printf("-");
+ count++;
+ }
+ else
+ if (cover[y][x] == 101) printf("O");
+ else
+ {
+ printf("%d", cover[y][x]-101);
+ count++;
+ }
+ }
+ else
+ {
+ if (cover[y][x] == 0) printf("o");
+ else {
+ printf("%d", cover[y][x]);
+ count++;
+ }
+ }
+ }
+ printf("\n");
+ }
+ printf("errors:%d\n", count);
+ return count;
+}
+int
+main (int argc,
+ char **argv)
+{
+ int i;
+ srandom(123);
+ for (i=0; i<100; i++)
+ {
+ if (do_test ()) return 1;
+ }
+ return 0;
+}
+#endif
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */