コード例 #1
0
ファイル: drawingTest.c プロジェクト: lfelipev/P1Charts
int main() {
	/**********************************
    * 1 - Criar papel e caneta cairo *
 	**********************************/
 	Drawer * cairo = DrawerInit(800, 600, 0, "result.pdf");

	/****************
 	* 2 - Desenhar *
 	****************/
 	Rectangle base = {0, //x
					  0, //y
					  800, //width
					  600, //height
					  0.0, // borderWidth
					  {1.0, 1.0, 1.0, 1.0},// Color Bg
					  {0.0, 0.0, 0.0, 0.0}// Color border (borderless)
	};
	DrawerDrawRectangle(cairo, base);

 	/*cairo_rectangle (cairo->context, 0, 0, 800, 600);
	cairo_set_source_rgb(cairo->context, 1.0, 1.0, 1.0);
	cairo_fill(cairo->context);*/

	Rectangle rect = {400-100, //x - altura/2
					  300-100, //y - largura/2
					  200, //width
					  200, //height
					  10.0, // borderWidth
					  {1.0, 1.0, 1.0, 1.0}, // Color Bg
					  {0.0, 0.0, 1.0, 1.0} // Color border
	};
	DrawerDrawRectangle(cairo, rect);

	/*cairo_rectangle (cairo->context, 400 - 50, 300 - 50, 100, 100);
	cairo_set_source_rgb(cairo->context, 1.0, 0.0, 0.0);
	cairo_fill_preserve(cairo->context);
 	cairo_set_source_rgba(cairo->context, 1.0, 1.0, 0.0, 1.0);
 	cairo_stroke(cairo->context);*/

 	/*cairo_set_source_rgb(cairo->context, 0.0, 0.0, 0.0);
	cairo_arc (cairo->context, 400, 300, 2, 0, 2* M_PI);
	cairo_fill(cairo->context);*/
	Arc arc = {400, //x
              300, //y
              0, //initAngle
              1*2*M_PI, //endAngle
              50,   //radius
              5.0, // borderWidth
              {1.0, 0.0, 1.0, 1.0}, // Color Bg
              {0.5, 1.0, 1.0, 1.0} // Color border
	};
    DrawerDrawArc(cairo, arc);

	/*************************
 	* 3 - Salvar em arquivo *
 	*************************/
	cairo_surface_write_to_png(cairo->surface, "test.png");

	/******************************
 	* 4 - Deletar caneta e papel *
 	******************************/
    DrawerDestroy(cairo);
	cairo = 0;
	return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: BrunoGeorgevich/P1Charts
void barra(Drawer * drawer, Chart * chart, Rectangle base, float * aux) {//Função que desenha o Gráfico de Barras
	    
		 Color rcolor;//Declarando um parâmetro rcolor do tipo Color
	
	 
		 int i;
		 char str[20] = "";//Declarando uma string vazia

  for(i = 0; chart->content[i] != 0; ++i) {

		 float perc = chart->content[i]->percentage;

		percToText(perc*100.00,str);//Função que transforma as porcentagens em Strings
		randColor(&rcolor);//Função que randomiza os números responsáveis pelas cores

	   Rectangle rect = {

	 		 base.width/9 + (SpaceValue(chart->DatumSize)*base.width/80)*(i), //x
	 		 14*base.height/15, //y
	 		 (11*base.width/15)/chart->DatumSize,//width
	 		-perc*((11*base.height/15)/sort(aux, chart)), //height
	 		 0.0, // borderWidth
	 		{rcolor.r, rcolor.g, rcolor.b, 1.0}, // Color Bg
	 		{1.0,1.0,1.0, 1.0} // Color border
};		
		
		
		
	 	Text text = {
		  	 
	 		 15,//Font Size
			 rect.x+rect.width/2,//X
			 20*base.height/21,//Y
		  	 chart->content[i]->label ,//Label
			 str,//Percentage(String Form)
		  	 1,//BorderWidth
		    i,//Space Legend
			 0,//Space Percentage
			 1*base.width/60,//Coordenada X da porcentagem
			 19*base.height/20 + rect.height,//Coordenada Y da porcentagem
			 1,//Se 1 = Retangulo
			 0,//Se 1 = Arco
			 {0.0,0.0,0.0,1.0},//Color Bg
			 rect.bg,//Color Border
			 rect.bg//Color of Percentage
};
	
		
		  DrawerDrawRectangle(drawer, rect);
		  DrawerDrawText(drawer, text, base);
		  
}
		Axis axisy = {
	 		 
			 1*base.width/15,// Posição x0
	 		 3*base.height/18,// Posição y0
	 		 1*base.width/15,// Posição x
	 		 39*base.height/40,// Posição y
	 		 2,// Largura do Eixo
	 		 {0.0,0.0,0.0,1.0}// Cor do Eixo
};
		Axis axisx = {
	 		 
			 1*base.width/40,// Posição x0
	 		 14*base.height/15,// Posição y0
	 		 14*base.width/15,// Posição x
	 		 14*base.height/15,// Posição y
	 		 2,// Largura do Eixo
	 		 {0.0,0.0,0.0,1.0}// Cor do Eixo
};
		Arrow arrowY = {

	 		 1*base.width/15 - 5,// Posição X da ponta Direita da Seta
	 		 3*base.width/21,// Posição Y da ponta Direita da Seta
	 		 1*base.width/15 + 5,// Posição X da ponta Esquerda da Seta
	 		 3*base.width/21,// Posição Y da ponta Esquerda da Seta
	 		 axisy.x0,// Posição X de intersecção da ponta Direita com a ponta Esquerda
	 		 axisy.y0,// Posição Y de intersecção da ponta Direita com a ponta Esquerda
	 		 2,// Largura da Seta
	 		 axisy.bg//Cor da Seta
};
		Arrow arrowX = {
	 		 
			 21*base.width/23,// Posição X da ponta Direita da Seta
	 		 14*base.height/15 - 5,// Posição Y da ponta Direita da Seta
	 		 21*base.width/23 ,// Posição X da ponta Esquerda da Seta
	 		 14*base.height/15 + 5,// Posição Y da ponta Esquerda da Seta
	 		 axisx.x,// Posição X de intersecção da ponta Direita com a ponta Esquerda
	 		 axisx.y,// Posição Y de intersecção da ponta Direita com a ponta Esquerda
	 		 2,// Largura da Seta
	 		 axisx.bg//Cor da Seta
};
	
	 		 DrawerDrawArrow(drawer, axisy, arrowX);
	 		 DrawerDrawArrow(drawer, axisx, arrowY);
	 		 DrawerDrawAxis(drawer, axisx, base);
	 		 DrawerDrawAxis(drawer, axisy, base);
}		
コード例 #3
0
ファイル: main.c プロジェクト: BrunoGeorgevich/P1Charts
int main(int argc, char *argv[]) {
	 		 if(argc == 2) {//Testando se os parâmetros de entradas são do tipo .json
	 		  char kind[8];
	 		  char  s2[] = {".json"};

	 		  type(argv[1],kind);

	 		  int result = compare(kind, s2);

	 		 if(result != 0) {
	 		  printf("Argumento passado não é do tipo .json!\n");	

	 		  return 0;
	  }
}
	 		 else if(argc > 2) {
	 		  printf("Mais argumentos do que o necessário!\nPor favor, insira somente um argumento do tipo .json!\n");

	 		  return 0;
}	
	 		 else if(argc < 2) {
	 		  printf("Menos argumentos do que o necessário!\nPor favor, insira um argumento do tipo .json!\n");

			  return 0;
}
			  Chart * chart = ChartCreate(argv[1]);
			  Drawer * cairo = DrawerInit(800, 600, chart->fileType, chart->filePath);
	
			  int num_elementos = chart->DatumSize;//Declarando o número de elementos do Datum
	
				 float aux[num_elementos];
				 int cont3;
 
				for(cont3 = 0; cont3 < num_elementos; cont3++) {
					aux[cont3] = chart->content[cont3]->percentage;
				}  			  


		Title title = {
		    
		    30.0,//Fonte do Título
		    chart->chartName,//String que provém o título
		    {0.0,0.0,0.0,1.0}//Cor do Título
};
		Rectangle base = {
		    
		    0, //x
		    0, //y
		    800, //width
		    600, //height
		    0.0, // borderWidth
		   {1.0, 1.0, 1.0, 1.0},// Color Bg
		   {0.0, 0.0, 0.0, 0.0}// Color border (borderless)
};
		
		DrawerDrawRectangle(cairo, base);
		Rectangle baseBg = {
		    
		    10, //x
		    10, //y
		    780, //width
		    580, //height
		    1.0, // borderWidth
		   {0.9,0.9, 0.9, 1.0},// Color Bg
		   {0.3, 0.3, 0.3, 1.0}// Color border (borderless)
};
		DrawerDrawRectangle(cairo, baseBg);
		DrawerDrawTextTitle(cairo, title, base);

		    if(strcmp(chart->chartType,"pizza") == 0) {//Se for Pizza
		     
		     pizza(cairo, chart, base);
	
		   }else if(strcmp(chart->chartType,"bars") == 0){//Se for Barras
		    
			  barra(cairo,chart, base, aux);
}
			  DrawerSave(cairo, chart->fileType, chart->filePath);
			  DrawerDestroy(cairo);

		return 0;
}
コード例 #4
0
ファイル: main.c プロジェクト: BrunoGeorgevich/P1Charts
void pizza(Drawer * drawer, Chart * chart, Rectangle base) {
	Color rcolor;
   float initAngle = 0.0;
	int i;
	char str[20] = "";

  for(i = 0; chart->content[i] != 0; ++i) {

		float perc = chart->content[i]->percentage;
	 
		randColor(&rcolor);//Função que randomiza os números responsáveis pelas cores
		percToText(perc*100,str);//Função que transforma a porcentagem em string

	   Arc arc = {
		
	 		 base.width/3, //x
	 		 base.height/2, //y
	 		 initAngle, //initAngle
	 		 perc*2*M_PI+initAngle, //endAngle
	 		 200,   //radius
	 		 0.5, // borderWidth
	 		 {rcolor.r, rcolor.g, rcolor.b, 1.0}, // Color Bg
	 		 {1.0,1.0,1.0, 1.0} // Color border
};
		
		Rectangle rectPerc = {
			
			 2*base.width/3, //x
	 		 4*base.height/10 + 35*i, //y
	 		 60,//width
	 		 30, //height
	 		 1.0, // borderWidth
	 		 {rcolor.r, rcolor.g, rcolor.b, 1.0}, // Color Bg
	 		 {1.0,1.0,1.0, 1.0}// Color border
};		
		

	 	Text text = {
		  	 
	 		 2*rectPerc.height/3,//Font Size
			 3*base.width/4 ,//X
			 4*base.height/10 + rectPerc.height/2,//Y
		  	 chart->content[i]->label ,//Label
			 str,//Percentage(String Form)
		  	 1.4,//BorderWidth
		    rectPerc.y - 4*base.height/10,//Space Legend
			 -5,//Space Percentage
			 2*base.width/3 + rectPerc.width/4,//Coordenada X da porcentagem
			 4*base.height/10 + rectPerc.height/2,//Coordenada Y da porcentagem
	   	 0,//Se 1 = Retangulo
	       1,//Se 1 = Arco
		  	 {0.0,0.0,0.0,1.0},//Color Bg
		  	 {rcolor.r, rcolor.g, rcolor.b, 1.0},//Color Border
		    {1.0,1.0,1.0,1.0}//Color of Percentage
};
	
	DrawerDrawRectangle(drawer, rectPerc);

		  if(perc == 1.0) {//Se o gráfico de pizza tiver somente um parâmetro (100%), excluir a borda
	      arc.border.a = 0.0;
}
        DrawerDrawArc(drawer, arc);
		  DrawerDrawText(drawer, text, base);
        initAngle += chart->content[i]->percentage*2*M_PI;
		
	}
}