예제 #1
0
파일: mesg.c 프로젝트: 99years/plan9
static void
difcolumns(Lextok *n, char *tr, int v, int j, Queue *q)
{	extern int pno;

	if (j == 0)
	{	Buf[0] = '\0';
		channm(n);
		strcat(Buf, (strncmp(tr, "Sen", 3))?"?":"!");
	} else
		strcat(Buf, ",");
	if (tr[0] == '[') strcat(Buf, "[");
	sr_buf(v, q->fld_width[j] == MTYPE);
	if (j == q->nflds - 1)
	{	int cnr;
		if (s_trail) cnr = pno; else cnr = X?X->pid - Have_claim:0;
		if (tr[0] == '[') strcat(Buf, "]");
		pstext(cnr, Buf);
	}
}
예제 #2
0
파일: volume.cpp 프로젝트: Xylaant/Projects
void displist() {
	int x, y;
	double z;
	double x_min, x_max, y_min, y_max, z_min, z_max;

	double a_in, a_out, a;

	int xa_win, ya_win;

#define SCRDATA(a,x,y) a[(x)+(y)* xa_win]

	struct Shade c, cs, cs_in, cs_out, cs_o;

	double xv, yv, zv;

	xa_win = ya_win = act;

	std::unique_ptr<float[]> sr_buf(new float[xa_win * ya_win]);
	std::unique_ptr<float[]> sg_buf(new float[xa_win * ya_win]);
	std::unique_ptr<float[]> sb_buf(new float[xa_win * ya_win]);

	/* Note, once rotation is possible, the
	 following code is no longer alpha simple loop */
	InterDepth(&x_min, &x_max, &y_min, &y_max, &z_min, &z_max);

#if 0
	glNewList(VOL_DATA,GL_COMPILE);
	{
		glBegin(GL_LINE_LOOP);
		{
			glColor3f(1.0,1.0,1.0);
			glVertex2d(x_min,y_min);
			glVertex2d(x_min,y_max);
			glVertex2d(x_max,y_max);
			glVertex2d(x_max,y_min);

		}
		glEnd();
	}
	glEndList();
	return;
#endif
	x_min += xa;
	x_max += xa;
	y_min += ya;
	y_max += ya;

	if (x_min < 0 || x_max > xa_win || y_min < 0 || y_max > ya_win) {
		printf("ERROR!\n");
		printf("x:%f,%f\n", x_min, x_max);
		printf("y:%f,%f\n", y_min, y_max);
		exit(-10);
	}

	for (y = y_min; y < y_max; y++) {
		for (x = x_min; x < x_max; x++) {
			cs_in.red = 0;
			cs_in.green = 0;
			cs_in.blue = 0;
			cs_in.alpha = 0;
			a_in = 0;
#if 0
			printf("(%f,%f)(%d,%d)\n",(double)(x-xa) * x_size/xa_win,
					(double)(y-ya) * vol_data.size_y()/ya_win,x,y);
#endif

			for (z = z_min; z < z_max; z++) {

				xv = (double) (x - xa) * (vol_data.size_x() - 1) / x_win;
				yv = (double) (y - ya) * (vol_data.size_y() - 1) / y_win;
				zv = (double) (z) * (vol_data.size_z() - 1) / z_win;

				c = GetCR(xv, yv, zv);

				/*		  if (c.alpha > 0)
				 {
				 printf("(%d,%d,%d):(%1.1f,%1.1f,%1.1f,%1.1f)\n",
				 x,y,z,c.red,c.green,c.blue,c.alpha);

				 }*/

				cs.red = c.red * c.alpha;
				cs.green = c.green * c.alpha;
				cs.blue = c.blue * c.alpha;
				a = c.alpha;

				cs_o.red = cs.red * (1 - a_in);
				cs_o.green = cs.green * (1 - a_in);
				cs_o.blue = cs.blue * (1 - a_in);

				cs_out = AddSh(cs_in, cs_o);
				a_out = a_in + a * (1 - a_in);
				a_in = a_out;
				cs_in = cs_out;

				if (a_out == 1) {

					break;
				}

			}
			cs.red = 0;
			cs.green = 0;
			cs.blue = 0;
			a = 1;

			cs_o.red = cs.red * (1 - a_in);
			cs_o.green = cs.green * (1 - a_in);
			cs_o.blue = cs.blue * (1 - a_in);

			cs_out = AddSh(cs_in, cs_o);

			a_out = a_in + a * (1 - a_in);

			if (a_out > 0) {
				c.red = cs_out.red / a_out;
				c.green = cs_out.green / a_out;
				c.blue = cs_out.blue / a_out;
			} else {
				c.red = 0;
				c.green = 0;
				c.blue = 0;
			}
			/*     printf("(%d,%d):(%1.1f,%1.1f,%1.1f)\n",x,y,c.red,c.green,c.blue);*/

			SCRDATA(sr_buf,x,y)=c.red;
			SCRDATA(sg_buf,x,y)=c.green;
			SCRDATA(sb_buf,x,y)=c.blue;

		}

	}
	printf("Data complete \n");
	glNewList(VOL_DATA, GL_COMPILE);
	{
		int xx, yy;
		for (y = ((int) y_min) + 1; y < y_max; y++) {
			yy = y - ya;
			glBegin(GL_QUAD_STRIP);
			{
				for (x = x_min; x < x_max; x++) {
					xx = x - xa;

					glColor3f(SCRDATA(sr_buf,x,y-1),
					SCRDATA(sg_buf,x,y-1),
					SCRDATA(sb_buf,x,y-1));

					glVertex2d(xx, yy - 1);
#if 0
					printf("(%d,%d)(%d,%d)\n",xx,yy-1,x,y-1);
#endif

					glColor3f(SCRDATA(sr_buf,x,y),
					SCRDATA(sg_buf,x,y),
					SCRDATA(sb_buf,x,y));
					glVertex2d(xx, yy);

				}
			}
			glEnd();
		}
	}
	glEndList();

}
예제 #3
0
파일: mesg.c 프로젝트: 99years/plan9
void
sr_mesg(FILE *fd, int v, int j)
{	Buf[0] ='\0';
	sr_buf(v, j);
	fprintf(fd, Buf);
}