Exemple #1
0
int main(int argc, char** argv)
{
	img.load("img/4.pgm");
	//img.filterSobel();
	
    initLines(&linesq);
	showLines(&linesq);
	calcRectangles(&linesq, &recsq);
	calcTriangles(&linesq, &triangles);
	showRectangles(&recsq);
	showTriangles(&triangles);
	
	 
	glutInit( &argc, argv );
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
	glutInitWindowSize(1000, 700);
	glutInitWindowPosition(100, 100);
	glutCreateWindow( "Cam" );
	glutDisplayFunc(display);
	//glutMouseFunc(mouseButton); 
	glutKeyboardFunc(keyboard);
	//glutReshapeFunc(resize); 
	initialize(); //init OpenGL state
	glutMainLoop();

    return 0;
}
Exemple #2
0
void recalc()
{
	for(int i = 0; i < recsq.length(); i++)
		((TRectangle*)(recsq.get(i)))->rotate(0,0,PI/30);
	
	for(int i = 0; i < triangles.length(); i++)
		((Triangle*)(triangles.get(i)))->rotate(0,0,PI/30);

	linesq.deleteall();
	getLinesFromFigures(&linesq, &recsq,4);
	getLinesFromFigures(&linesq, &triangles,3);

	linesq.mix();
	figures.deleteall();
	figures2.deleteall();
	calcRectangles(&linesq, &figures);
	calcTriangles(&linesq, &figures2);
	
	for(int i = 0; i < figures.length(); i++)
		((TLine*)figures.get(i))->shift(2,2);
	
	for(int i = 0; i < figures2.length(); i++)
		((TLine*)figures2.get(i))->shift(2,2);
	
}
Exemple #3
0
void GmlModel::calcModelData()
{
	
	myData.clear();
	
	for( int i = 0; i < myStrokes.size(); i++)
	{
		modelData m;
		myData.push_back(m);
	}
	
	calcMaxLen();		// calculate min and max values for rendering nicely
	calcVectors();		// calculate normal vectors from one point to next	
	calcRadius();		// calculate radius at each point
	calcRPoints();		// calculate points defining a circle at each point, rotate in direction of next to create extrusion
	calcEndPoints();
	calcTriangles();
}
Exemple #4
0
void display( void )
{

	
	glClear( GL_COLOR_BUFFER_BIT ); // Очистка экрана

	float col1[3] = {0, 0.7, 1}; // голубой
	float col2[3] = {1, 1, 1}; // белый
	float col3[3] = {1, 0.8, 0.2}; // оранжевый
	float col4[3] = {1, 0.1, 0.3};

	/*
	for(int i = 0; i < recsq.length(); i++)
		drawQuad((TRectangle*)(recsq.get(i)), col1);
	
	for(int i = 0; i < triangles.length(); i++)
		drawTriangle((Triangle*)(triangles.get(i)), col3);
	

	for(int i = 0; i < figures.length(); i++)
		drawQuad((TRectangle*)(figures.get(i)), col2);
	
	for(int i = 0; i < figures2.length(); i++)
		drawTriangle((Triangle*)(figures2.get(i)), col2);
	*/

	double * image;
	double * out;
	int x,y,i,j,n;
	int X = img.getw();  /* x image size */
	int Y = img.geth();  /* y image size */

	image = (double *) malloc( X * Y * sizeof(double) );
	 if( image == NULL )
    {
      fprintf(stderr,"error: not enough memory\n");
      exit(EXIT_FAILURE);
    }
	for(x=0;x<X;x++)
		for(y=0;y<Y;y++)
			image[x+y*X] = img.getpoint(x+1,y+1); /* image(x,y) */
	
	/* LSD call */
	out = lsd(&n,image,X,Y);

	TSafeVector lns;
	//linesq.deleteall();
	int k = 0;
	for(i=0;i<n;i++)
	{
		//for(j=0;j<7;j++)
			//printf("%4.0f ",out[7*i+j]);
		lns.setat(new TLine(out[7*i+0],img.geth()-out[7*i+1],out[7*i+2],img.geth()-out[7*i+3]),k);
		((TLine*)(lns.get(k)))->shift(-img.getw()/2,-img.geth()/2);
		k++;
    }

	img.show();

	for(int i = 0; i < lns.length(); i++)
		drawLine((TLine*)(lns.get(i)), col1);

	calcRectangles(&lns, &figures);
	calcTriangles(&lns, &figures2);

	for(int i = 0; i < figures.length(); i++)
		drawQuad((TRectangle*)(figures.get(i)), col3);
	
	for(int i = 0; i < figures2.length(); i++)
		drawTriangle((Triangle*)(figures2.get(i)), col4);

	glutSwapBuffers();
	
	free( (void *) image );
	free( (void *) out );

	/*
	Sleep(40);
	recalc();
	glutPostRedisplay();
	*/	
}