Exemplo n.º 1
0
void test_plot_wcs1(CuTest* tc) {
	plot_args_t myargs;
	plot_args_t* pargs = &myargs;
	int W, H;
	plotxy_t* xy;
	//plotimage_t* img;


	log_init(LOG_VERB);

	W = H = 5;
	plotstuff_init(pargs);
	plotstuff_set_size(pargs, W, H);
	pargs->outformat = PLOTSTUFF_FORMAT_PNG;
	pargs->outfn = "test-out1.png";
	plotstuff_set_color(pargs, "black");
	plotstuff_run_command(pargs, "fill");
	plotstuff_output(pargs);
	plotstuff_free(pargs);

	// perfectly centered circle.
	plotstuff_init(pargs);
	plotstuff_set_size(pargs, W, H);
	pargs->outformat = PLOTSTUFF_FORMAT_PNG;
	pargs->outfn = "test-out2.png";
	plotstuff_set_color(pargs, "black");
	plotstuff_run_command(pargs, "fill");
	xy = plotstuff_get_config(pargs, "xy");
	plot_xy_vals(xy, 3, 3);
	plotstuff_set_color(pargs, "white");
	plotstuff_set_marker(pargs, "circle");
	plotstuff_set_markersize(pargs, 1);
	plotstuff_run_command(pargs, "xy");
	plotstuff_output(pargs);
	plotstuff_free(pargs);

	// perfectly centered circle.
	plotstuff_init(pargs);
	plotstuff_set_size(pargs, W, H);
	pargs->outformat = PLOTSTUFF_FORMAT_PNG;
	pargs->outfn = "test-out3.png";
	plotstuff_set_color(pargs, "black");
	plotstuff_run_command(pargs, "fill");
	xy = plotstuff_get_config(pargs, "xy");
	plot_xy_vals(xy, 2, 2);
	plot_xy_set_offsets(xy, 0, 0);
	plotstuff_set_color(pargs, "white");
	plotstuff_set_marker(pargs, "circle");
	plotstuff_set_markersize(pargs, 1);
	plotstuff_run_command(pargs, "xy");
	plotstuff_output(pargs);
	plotstuff_free(pargs);

	{
		unsigned char* img;
		int ww, hh;
		int i;

		img = cairoutils_read_png("test-out2.png", &ww, &hh);
		CuAssertPtrNotNull(tc, img);
		CuAssertIntEquals(tc, W, ww);
		CuAssertIntEquals(tc, H, hh);

		printf("image:\n");
		for (i=0; i<W*H; i++) {
			printf("%02x  ", (int)img[i*4]);
			if (i%W == (W-1))
				printf("\n");
		}
		printf("\n");

		/*
		 00  00  00  00  00  
		 00  80  e8  80  00  
		 00  f3  44  f3  00  
		 00  7c  e8  7c  00  
		 00  00  00  00  00  
		 */

	}

}
Exemplo n.º 2
0
static int plot_builtin_command(const char* cmd, const char* cmdargs,
								plot_args_t* pargs, void* baton) {
	if (streq(cmd, "plot_color")) {
		if (parse_color_rgba(cmdargs, pargs->rgba)) {
			ERROR("Failed to parse plot_color: \"%s\"", cmdargs);
			return -1;
		}
	} else if (streq(cmd, "plot_bgcolor")) {
		if (parse_color_rgba(cmdargs, pargs->bg_rgba)) {
			ERROR("Failed to parse plot_bgcolor: \"%s\"", cmdargs);
			return -1;
		}
	} else if (streq(cmd, "plot_fontsize")) {
		pargs->fontsize = atof(cmdargs);
	} else if (streq(cmd, "plot_alpha")) {
		if (plotstuff_set_alpha(pargs, atof(cmdargs))) {
			ERROR("Failed to set alpha");
			return -1;
		}
	} else if (streq(cmd, "plot_op")) {
		if (streq(cmdargs, "add")) {
			pargs->op = CAIRO_OPERATOR_ADD;
		} else if (streq(cmdargs, "reset")) {
			pargs->op = CAIRO_OPERATOR_OVER;
		} else {
			ERROR("Didn't understand op: %s", cmdargs);
			return -1;
		}
	} else if (streq(cmd, "plot_lw")) {
		pargs->lw = atof(cmdargs);
	} else if (streq(cmd, "plot_bglw")) {
		pargs->bg_lw = atof(cmdargs);
	} else if (streq(cmd, "plot_marker")) {
		if (plotstuff_set_marker(pargs, cmdargs)) {
			return -1;
		}
	} else if (streq(cmd, "plot_markersize")) {
		pargs->markersize = atof(cmdargs);
	} else if (streq(cmd, "plot_size")) {
		int W, H;
		if (sscanf(cmdargs, "%i %i", &W, &H) != 2) {
			ERROR("Failed to parse plot_size args \"%s\"", cmdargs);
			return -1;
		}
		plotstuff_set_size(pargs, W, H);
	} else if (streq(cmd, "plot_wcs")) {
		if (plotstuff_set_wcs_file(pargs, cmdargs, 0)) {
			return -1;
		}
	} else if (streq(cmd, "plot_wcs_box")) {
		float ra, dec, width;
		if (sscanf(cmdargs, "%f %f %f", &ra, &dec, &width) != 3) {
			ERROR("Failed to parse plot_wcs_box args \"%s\"", cmdargs);
			return -1;
		}
		if (plotstuff_set_wcs_box(pargs, ra, dec, width)) {
			return -1;
		}
	} else if (streq(cmd, "plot_wcs_setsize")) {
		assert(pargs->wcs);
		plotstuff_set_size_wcs(pargs);
	} else if (streq(cmd, "plot_label_radec")) {
		assert(pargs->wcs);
		double ra, dec;
		int nc;
		const char* label;
		if (sscanf(cmdargs, "%lf %lf %n", &ra, &dec, &nc) != 3) {
			ERROR("Failed to parse plot_label_radec args \"%s\"", cmdargs);
			return -1;
		}
		label = cmdargs + nc;
		return plotstuff_text_radec(pargs, ra, dec, label);
	} else {
		ERROR("Did not understand command: \"%s\"", cmd);
		return -1;
	}
	if (pargs->cairo)
		plotstuff_builtin_apply(pargs->cairo, pargs);
	return 0;
}
Exemplo n.º 3
0
int plotstuff_set_size_wcs(plot_args_t* pargs) {
  assert(pargs->wcs);
  return plotstuff_set_size(pargs, (int)ceil(anwcs_imagew(pargs->wcs)), (int)ceil(anwcs_imageh(pargs->wcs)));
}
Exemplo n.º 4
0
static void makeplot(const char* plotfn, char* bgimgfn, int W, int H,
					 int Nfield, double* fieldpix, double* fieldsigma2s,
					 int Nindex, double* indexpix, int besti, int* theta,
					 double* crpix, int* testperm,
					 double * qc) {
	int i;
	plot_args_t pargs;
	plotimage_t* img;
	cairo_t* cairo;
	int ti;
	logmsg("Creating plot %s\n", plotfn);
	plotstuff_init(&pargs);
	pargs.outformat = PLOTSTUFF_FORMAT_PNG;
	pargs.outfn = plotfn;
	pargs.fontsize = 12;
	if (bgimgfn) {
		img = plotstuff_get_config(&pargs, "image");
		img->format = PLOTSTUFF_FORMAT_JPG;
		plot_image_set_filename(img, bgimgfn);
		plot_image_setsize(&pargs, img);
		plotstuff_run_command(&pargs, "image");
	} else {
		float rgba[4] = {0, 0, 0.1, 1.0};
		plotstuff_set_size(&pargs, W, H);
		//plotstuff_init2(&pargs);
		plotstuff_set_rgba(&pargs, rgba);
		plotstuff_run_command(&pargs, "fill");
	}
	cairo = pargs.cairo;
	// red circles around every field star.
	cairo_set_color(cairo, "gray");
	for (i=0; i<Nfield; i++) {
		cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_CIRCLE,
							   fieldpix[2*i+0], fieldpix[2*i+1],
							   2.0 * sqrt(fieldsigma2s[i]));
		cairo_stroke(cairo);
	}
	// green crosshairs at every index star.
	cairo_set_color(cairo, "green");
	for (i=0; i<Nindex; i++) {
		cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_XCROSSHAIR,
							   indexpix[2*i+0], indexpix[2*i+1], 3);
		cairo_stroke(cairo);
	}
	// thick white circles for corresponding field stars.
	cairo_set_line_width(cairo, 2);
	for (ti=0; ti<=besti; ti++) {
		if (testperm)
			i = testperm[ti];
		else
			i = ti;
		//printf("field %i -> index %i\n", i, theta[i]);
		if (theta[i] < 0)
			continue;
		cairo_set_color(cairo, "white");
		cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_CIRCLE,
							   fieldpix[2*i+0], fieldpix[2*i+1],
							   2.0 * sqrt(fieldsigma2s[i]));
		cairo_stroke(cairo);
		// thick cyan crosshairs for corresponding index stars.
		cairo_set_color(cairo, "cyan");
		cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_XCROSSHAIR,
							   indexpix[2*theta[i]+0],
							   indexpix[2*theta[i]+1],
							   3);
		cairo_stroke(cairo);
	}

	cairo_set_line_width(cairo, 2);

	//for (i=0; i<=besti; i++) {
	for (ti=0; ti<Nfield; ti++) {
		anbool mark = TRUE;
		if (testperm)
			i = testperm[ti];
		else
			i = ti;
		switch (theta[i]) {
		case THETA_DISTRACTOR:
			cairo_set_color(cairo, "red");
			break;
		case THETA_CONFLICT:
			cairo_set_color(cairo, "yellow");
			break;
		case THETA_FILTERED:
			cairo_set_color(cairo, "orange");
			break;
		default:
			if (theta[i] < 0) {
				cairo_set_color(cairo, "gray");
			} else {
				cairo_set_color(cairo, "white");
			}
			mark = FALSE;
		}

		if (mark) {
			cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_CIRCLE,
								   fieldpix[2*i+0], fieldpix[2*i+1],
								   2.0 * sqrt(fieldsigma2s[i]));
			cairo_stroke(cairo);
		}

		if (ti <= MAX(besti, 10)) {
			char label[32];
			sprintf(label, "%i", i);
			plotstuff_text_xy(&pargs, fieldpix[2*i+0], fieldpix[2*i+1], label);
		}
		if (i == besti) {
			cairo_set_line_width(cairo, 1);
		}
	}


	if (crpix) {
		cairo_set_color(cairo, "yellow");
		cairo_set_line_width(cairo, 4);
		cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_CROSSHAIR,
							   crpix[0], crpix[1], 10);
		cairo_stroke(cairo);
	}

	if (qc) {
		cairo_set_color(cairo, "skyblue");
		cairo_set_line_width(cairo, 4);
		cairoutils_draw_marker(cairo, CAIROUTIL_MARKER_CROSSHAIR,
							   qc[0], qc[1], 10);
		cairo_stroke(cairo);
	}

	plotstuff_output(&pargs);
	logmsg("Wrote plot %s\n", plotfn);
}