/* See LICENSE file for copyright and license details. */ #include "common.h" int main(void) { #define P(I) (points[I].x - 0), (points[I].y - 0) /* TODO test drawing outside of raster */ RTGRPBLIB_RASTER *raster; double *image; size_t x, y, i, j, n; size_t width = 40; size_t height = 30; struct { double x, y; } points[] = { #if 0 {20, 5}, {30, 15}, {20, 25}, {10, 15} #elif 1 {20, 5}, {35, 15}, {20, 25}, {5, 15} #elif 1 {5.25, 5.25}, {35.75, 5.25}, {35.75, 25.75}, {5.25, 25.75} #else /* for circular arch*/ {20, 15}, {15, 10}, {100 * M_PI/180, 400 * M_PI/180} #endif }; raster = rtgrpblib_create_raster(width, height); image = calloc(width * height, sizeof(*image)); rtgrpblib_set_draftness(raster, -1); #if 1 n = sizeof(points) / sizeof(*points); for (i = 0; i < n; i++) { j = (i + 1) % n; rtgrpblib_draw_linear_bezier(raster, P(i), P(j)); } #elif 1 rtgrpblib_draw_quadratic_bezier(raster, P(2), P(3), P(0)); rtgrpblib_draw_linear_bezier(raster, P(0), P(2)); #elif 1 rtgrpblib_draw_cubic_bezier(raster, P(0), P(1), P(2), P(3)); rtgrpblib_draw_linear_bezier(raster, P(3), P(0)); #else rtgrpblib_draw_circular_arc(raster, P(0), P(1), P(2)); rtgrpblib_draw_linear_bezier(raster, points[0].x + points[1].x * cos(points[2].y), points[0].y + points[1].y * sin(points[2].y), points[0].x, points[0].y); rtgrpblib_draw_linear_bezier(raster, points[0].x, points[0].y, points[0].x + points[1].x * cos(points[2].x), points[0].y + points[1].y * sin(points[2].x)); #endif rtgrpblib_fill_shapes(image, width, raster); #if 1 printf("\nOutline (area)\n"); for (y = 0; y < height; y++) { for (x = 0; x < width; x++) printf(raster->cells[y * width + x].cell_coverage ? "%+.1lf " : " 0 ", raster->cells[y * width + x].cell_coverage); printf("\n"); } printf("\nOutline (shadow)\n"); for (y = 0; y < height; y++) { for (x = 0; x < width; x++) printf(raster->cells[y * width + x].opposite_coverage ? "%+.1lf " : " 0 ", raster->cells[y * width + x].opposite_coverage); printf("\n"); } printf("\nFill\n"); for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { unsigned val = (unsigned)(image[y * width + x] * 255 + 0.5); printf("%02X ", val - (val == 128)); } printf("\n"); } #else printf("P2\n# %s\n%zu %zu\n255\n", "Note: no gamma correction applied", width, height); for (y = 0; y < height; y++) { for (x = 0; x < width; x++) printf("%i ", (int)(image->cells[y * width + x] * 255 + 0.5)); printf("\n"); } #endif free(raster); free(image); return 0; }