⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdc_pie.c

📁 大国补丁后的nessus2.2.8的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			}		else			{			others[i] = TRUE;			slice_angle I(0,i) = -MAXFLOAT;			}		last += this;		}	}	/* ----- go ahead and start the GIF ----- */	im = gdImageCreate( GIFWIDTH, GIFHEIGHT );	/* --- allocate the requested colors --- */	BGColor   = clrallocate( im, GDCPIE_BGColor );	LineColor = clrallocate( im, GDCPIE_LineColor );	PlotColor = clrallocate( im, GDCPIE_PlotColor );	if( GDCPIE_EdgeColor != GDC_NOCOLOR )	 {	 EdgeColor = clrallocate( im, GDCPIE_EdgeColor );	 if( threeD )	  EdgeColorShd = clrshdallocate( im, GDCPIE_EdgeColor );	 }	/* --- set color for each slice --- */	for( i=0; i<num_points; ++i )		if( GDCPIE_Color )			{			unsigned long	slc_clr = GDCPIE_Color[i];			SliceColor[i]     = clrallocate( im, slc_clr );			if( threeD )			 SliceColorShd[i] = clrshdallocate( im, slc_clr );			}		else			{			SliceColor[i]     = PlotColor;			if( threeD )			 SliceColorShd[i] = clrshdallocate( im, GDCPIE_PlotColor );			}	pscl = (2.0*M_PI)/tot_val;		/* ----- calc: smallest a slice can be ----- */	/* 1/2 circum / num slices per side. */	/*              determined by number of labels that'll fit (height) */	/* scale to user values */	/* ( M_PI / (GIFHEIGHT / (SFONTHGT+1)) ) *//*	min_grphable = tot_val *//*				   ( 2.0 * (float)GIFHEIGHT / (float)(SFONTHGT+1+TFONTHGT+2) );*/	if( threeD )		{		/* draw background shaded pie */		{		float	_rad1 = rad;  /* _WIN32 does not like rad1, using _rad1, instead (jordan) */		for( i=0; i<num_points; ++i )			if( !(others[i]) &&				(!GDCPIE_missing || !GDCPIE_missing[i]) )				{				float	rad = _rad1;				gdImageLine( im, CX(i,1), CY(i,1), IX(i,1,1), IY(i,1,1), SliceColorShd[i] );				gdImageLine( im, CX(i,1), CY(i,1), IX(i,2,1), IY(i,2,1), SliceColorShd[i] );				gdImageArc( im, CX(i,1), CY(i,1),								rad*2, rad*2,								TO_INT_DEG_FLOOR(slice_angle I(1,i))+270,								TO_INT_DEG_CEIL(slice_angle I(2,i))+270,								SliceColorShd[i] );				_rad1 = rad;				rad *= 3.0/4.0;				gdImageFillToBorder( im, IX(i,0,1), IY(i,0,1), SliceColorShd[i], SliceColorShd[i] );				rad = _rad1;				if( GDCPIE_EdgeColor != GDC_NOCOLOR )					{					gdImageLine( im, CX(i,1), CY(i,1), IX(i,1,1), IY(i,1,1), EdgeColorShd );					gdImageLine( im, CX(i,1), CY(i,1), IX(i,2,1), IY(i,2,1), EdgeColorShd );					gdImageArc( im, CX(i,1), CY(i,1), 									rad*2, rad*2,									TO_INT_DEG(slice_angle I(1,i))+270, TO_INT_DEG(slice_angle I(2,i))+270,									EdgeColorShd);					}				}		}		/* fill in connection to foreground pie */		/* this is where we earn our keep */		{		struct tmp_slice_t	#ifdef USE_ALLOCA							*tmp_slice = (struct tmp_slice_t*)alloca ((2*num_points+2) * sizeof (struct tmp_slice_t));#else							tmp_slice[2*num_points+2];#endif		int					t,							num_slice_angles = 0;		for( i=0; i<num_points; ++i )			if( !GDCPIE_missing || !GDCPIE_missing[i] )				{				if( RAD_DIST1(slice_angle I(1,i)) < RAD_DIST2(slice_angle I(0,i)) )					tmp_slice[num_slice_angles].hidden = FALSE;				else					tmp_slice[num_slice_angles].hidden = TRUE;				tmp_slice[num_slice_angles].i       = i;				tmp_slice[num_slice_angles].slice   = slice_angle I(0,i);				tmp_slice[num_slice_angles++].angle = slice_angle I(1,i);				if( RAD_DIST1(slice_angle I(2,i)) < RAD_DIST2(slice_angle I(0,i)) )					tmp_slice[num_slice_angles].hidden = FALSE;				else					tmp_slice[num_slice_angles].hidden = TRUE;				tmp_slice[num_slice_angles].i       = i;				tmp_slice[num_slice_angles].slice   = slice_angle I(0,i);				tmp_slice[num_slice_angles++].angle = slice_angle I(2,i);				/* identify which 2 slices (i) have a tangent parallel to depth angle */				if( slice_angle I(1,i)<MOD_2PI(pie_3D_rad+M_PI_2) && slice_angle I(2,i)>MOD_2PI(pie_3D_rad+M_PI_2) )					{					tmp_slice[num_slice_angles].i       = i;					tmp_slice[num_slice_angles].hidden  = FALSE;					tmp_slice[num_slice_angles].slice   = slice_angle I(0,i);					tmp_slice[num_slice_angles++].angle = MOD_2PI( pie_3D_rad+M_PI_2 );					}				if( slice_angle I(1,i)<MOD_2PI(pie_3D_rad+3.0*M_PI_2) && slice_angle I(2,i)>MOD_2PI(pie_3D_rad+3.0*M_PI_2) )					{					tmp_slice[num_slice_angles].i       = i;					tmp_slice[num_slice_angles].hidden  = FALSE;					tmp_slice[num_slice_angles].slice   = slice_angle I(0,i);					tmp_slice[num_slice_angles++].angle = MOD_2PI( pie_3D_rad+3.0*M_PI_2 );					}				}		qsort( tmp_slice, num_slice_angles, sizeof(struct tmp_slice_t), (int(*)(const void*,const void*))ocmpr);		for( t=0; t<num_slice_angles; ++t )			{			gdPoint	gdp[4];			i = tmp_slice[t].i;			gdp[0].x  = CX(i,0);					gdp[0].y = CY(i,0);			gdp[1].x  = CX(i,1);					gdp[1].y = CY(i,1);			gdp[2].x  = OX(i,tmp_slice[t].angle,1);	gdp[2].y = OY(i,tmp_slice[t].angle,1);			gdp[3].x  = OX(i,tmp_slice[t].angle,0);	gdp[3].y = OY(i,tmp_slice[t].angle,0);			if( !(tmp_slice[t].hidden) )				gdImageFilledPolygon( im, gdp, 4, SliceColorShd[i] );			else				{				rad -= 2.0;										/* no peeking */				gdp[0].x  = OX(i,slice_angle I(0,i),0);	gdp[0].y = OY(i,slice_angle I(0,i),0);				gdp[1].x  = OX(i,slice_angle I(0,i),1);	gdp[1].y = OY(i,slice_angle I(0,i),1);				rad += 2.0;				gdp[2].x  = OX(i,slice_angle I(1,i),1);	gdp[2].y = OY(i,slice_angle I(1,i),1);				gdp[3].x  = OX(i,slice_angle I(1,i),0);	gdp[3].y = OY(i,slice_angle I(1,i),0);				gdImageFilledPolygon( im, gdp, 4, SliceColorShd[i] );				gdp[2].x  = OX(i,slice_angle I(2,i),1);	gdp[2].y = OY(i,slice_angle I(2,i),1);				gdp[3].x  = OX(i,slice_angle I(2,i),0);	gdp[3].y = OY(i,slice_angle I(2,i),0);				gdImageFilledPolygon( im, gdp, 4, SliceColorShd[i] );				}							if( GDCPIE_EdgeColor != GDC_NOCOLOR )				{				gdImageLine( im, CX(i,0), CY(i,0), CX(i,1), CY(i,1), EdgeColorShd );				gdImageLine( im, OX(i,tmp_slice[t].angle,0), OY(i,tmp_slice[t].angle,0),								 OX(i,tmp_slice[t].angle,1), OY(i,tmp_slice[t].angle,1),							 EdgeColorShd );				}			}		}		}	/* ----- pie face ----- */	{	/* float	last = 0.0;*/	  float	_rad1 = rad; /* _WIN32 does not like rad1, using _rad1, instead (jordan) */	for( i=0; i<num_points; ++i )		if( !others[i] &&			(!GDCPIE_missing || !GDCPIE_missing[i]) )			{			float	rad = _rad1;			/* last += val[i];*/			/* EXPLODE_CX_CY( slice_angle[0][i], i );*/			gdImageLine( im, CX(i,0), CY(i,0), IX(i,1,0), IY(i,1,0), SliceColor[i] );			gdImageLine( im, CX(i,0), CY(i,0), IX(i,2,0), IY(i,2,0), SliceColor[i] );			gdImageArc( im, CX(i,0), CY(i,0), 							(int)rad*2, (int)rad*2,							TO_INT_DEG_FLOOR(slice_angle I(1,i))+270,							TO_INT_DEG_CEIL(slice_angle I(2,i))+270,							SliceColor[i] );			_rad1 = rad;			rad *= 3.0/4.0;			gdImageFillToBorder( im, IX(i,0,0), IY(i,0,0), SliceColor[i], SliceColor[i] );			/* catch missed pixels on narrow slices */			gdImageLine( im, CX(i,0), CY(i,0), IX(i,0,0), IY(i,0,0), SliceColor[i] );			rad = _rad1;			if( GDCPIE_EdgeColor != GDC_NOCOLOR )				{				gdImageLine( im, CX(i,0), CY(i,0), IX(i,1,0), IY(i,1,0), EdgeColor );				gdImageLine( im, CX(i,0), CY(i,0), IX(i,2,0), IY(i,2,0), EdgeColor );				gdImageArc( im, CX(i,0), CY(i,0), 								rad*2, rad*2,								TO_INT_DEG(slice_angle I(1,i))+270, TO_INT_DEG(slice_angle I(2,i))+270,								EdgeColor );				}			}	}	if( GDCPIE_title )		{		int	title_len;		cnt_nl( GDCPIE_title, &title_len );		GDCImageStringNL( im,						  &GDC_fontc[GDCPIE_title_size],						  (GIFWIDTH-title_len*GDC_fontc[GDCPIE_title_size].w)/2,						  1,						  GDCPIE_title,						  LineColor,						  GDC_JUSTIFY_CENTER );		}	/* labels */	if( lbl )		{		float	liner = rad;		rad += GDCPIE_label_dist;		for( i=0; i<num_points; ++i )			{			if( !others[i] &&				(!GDCPIE_missing || !GDCPIE_missing[i]) )				{				char	pct_str[1+4+1+1];				int		pct_wdth;				int		lbl_wdth;				short	num_nl = cnt_nl( lbl[i], &lbl_wdth );				int		lblx,  pctx,						lbly,  pcty = 0,						linex, liney;				lbl_wdth *= GDC_fontc[GDCPIE_label_size].w;				sprintf( pct_str,						 (GDCPIE_percent_labels==GDCPIE_PCT_LEFT ||						  GDCPIE_percent_labels==GDCPIE_PCT_RIGHT) &&						 lbl[i]? "(%.0f%%)":								 "%.0f%%",						(val[i]/tot_val) * 100.0 );				pct_wdth = GDCPIE_percent_labels == GDCPIE_PCT_NONE?							0:							strlen(pct_str) * GDC_fontc[GDCPIE_label_size].w;				lbly = (liney = IY(i,0,0))-( num_nl * (1+GDC_fontc[GDCPIE_label_size].h) ) / 2;				lblx = pctx = linex = IX(i,0,0);				if( slice_angle I(0,i) > M_PI )								/* which semicircle */					{					lblx -= lbl_wdth;					pctx = lblx;					++linex;					}				else					--linex;				switch( GDCPIE_percent_labels )					{					case GDCPIE_PCT_LEFT:	if( slice_angle I(0,i) > M_PI )												pctx -= lbl_wdth-1;											else												lblx += pct_wdth+1;											pcty = IY(i,0,0) - ( 1+GDC_fontc[GDCPIE_label_size].h ) / 2;											break;					case GDCPIE_PCT_RIGHT:	if( slice_angle I(0,i) > M_PI )												lblx -= pct_wdth-1;											else												pctx += lbl_wdth+1;											pcty = IY(i,0,0) - ( 1+GDC_fontc[GDCPIE_label_size].h ) / 2;											break;					case GDCPIE_PCT_ABOVE:	lbly += (1+GDC_fontc[GDCPIE_label_size].h) / 2;											pcty = lbly - (GDC_fontc[GDCPIE_label_size].h);											break;					case GDCPIE_PCT_BELOW:	lbly -= (1+GDC_fontc[GDCPIE_label_size].h) / 2;											pcty = lbly + (GDC_fontc[GDCPIE_label_size].h) * num_nl;											break;					case GDCPIE_PCT_NONE:					default:					  ; /* needed for _WIN32 !! */					}				if( GDCPIE_percent_labels != GDCPIE_PCT_NONE )					gdImageString( im,								   GDC_fontc[GDCPIE_label_size].f,								   slice_angle I(0,i) <= M_PI? pctx:															  pctx+lbl_wdth-pct_wdth,								   pcty,								   (u_char*)pct_str,								   LineColor );				if( lbl[i] )					GDCImageStringNL( im,									  &GDC_fontc[GDCPIE_label_size],									  lblx,									  lbly,									  lbl[i],									  LineColor,									  slice_angle I(0,i) <= M_PI? GDC_JUSTIFY_LEFT:																 GDC_JUSTIFY_RIGHT );				if( GDCPIE_label_line )					{					float	rad = liner;					gdImageLine( im, linex, liney, IX(i,0,0), IY(i,0,0), LineColor );					}				}			}		rad -= GDCPIE_label_dist;		}	gdImageGif(im, gif_fptr);	gdImageDestroy(im);	return;}/* $Id: gdc_pie.c,v 1.7 2003/05/21 16:05:37 renaud Exp $ * local variables: * mode: c * tab-width: 4 * fill-column: 120 * end: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -