一直没弄出的小问题,GDI+相关,绘制弧线
部分代码:
//draw small parts
int xCenter = m_rcArea.X + m_rcArea.Width / 2;
int yCenter = m_rcArea.Y + m_rcArea.Height / 2;
int B = m_rcArea.Height / 2;
int A = m_rcArea.Width / 2;
PointF lastPt((REAL)A,0);
REAL lastAngel = 0; //上次累加的角度
REAL angel = 0; //本次角度
REAL totalPer = 0; //累加百分比
REAL totalRadians = 0; //累加弧度
//m_vecUNIT只有一个值和颜色信息
for (unsigned int i = 0 ; i < m_vecUNIT.size() ; ++i)
{
//m_dTotal是整个饼图的值
angel = m_vecUNIT[i]->dPercent * 360 / m_dTotal;
totalPer += m_vecUNIT[i]->dPercent;
if (totalPer >= m_dTotal)
{
return ;
}
totalRadians = totalPer * 2 * PIE / m_dTotal ;
path1.Reset();
path1.AddLine((REAL)xCenter,(REAL)yCenter,(REAL)lastPt.X + (REAL)xCenter,(REAL)lastPt.Y + (REAL)yCenter);
path1.AddArc(m_rcArea,lastAngel, angel);
float endX = (REAL)A * cos(totalRadians) + (REAL)xCenter;
float endY = (REAL)B * sin(totalRadians) + (REAL)yCenter;
path1.AddLine((REAL)A * cos(totalRadians) + (REAL)xCenter,(REAL)B * sin(totalRadians) + (REAL)yCenter,(REAL)xCenter,(REAL)yCenter);
path1.CloseAllFigures();
g.DrawPath(&Pen(m_vecUNIT[i]->crContent),&path1);
BYTE crR = m_vecUNIT[i]->crContent.GetR();
BYTE crG = m_vecUNIT[i]->crContent.GetG();
BYTE crB = m_vecUNIT[i]->crContent.GetB();
// g.FillPath(&LinearGradientBrush(m_rcArea,Color(128,crR,crG ,crB ),Color(255,crR ,crG ,crB ),270,LinearGradientModeBackwardDiagonal),&path1);
lastPt.X = A * cos(totalRadians) ;
lastPt.Y = B * sin(totalRadians) ;
lastAngel = totalPer * 360 / m_dTotal;
}
然后发现所加入的AddArc终点和计算的终点一直不重合。调试了一个下午,发现sin和cos所算的值似乎没问题,但AddArc为什么就是不重合?
相关推荐
C# GDI+绘制矩形圆角
1、圆角枚举与相应组合处理设计 2、GraphicsPath.AddArc方法 3、绘制圆角组合 从以上几点详细论述如何实现绘制矩形圆角
winform自定义控件(gdi+)(23)——c#绘制扇形,圆角矩形,多边形
class Class1 : Control { public Class1() { this.SetStyle(ControlStyles.ResizeRedraw, true);//空间大小改变时,控件会重绘 } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics graphics = this.CreateGraphics(); g
C# GDI+ 简单画图小例子(适合新手)
C# GDI+ 简单画图小例子(适合新手) 如有转载,请注明出处:http://www.cnblogs.com/flydoos/archive/2011/09/22/2184943.html C# GDI+ 简单画图小例子(适合新手) 专门写给新手看的,加了一些人性化的注释,便于新手理解。高手请飘过,嘻嘻。 特别注意:如果你的不是VS2010,那么请到这里下载【Visual Studio 版本互转工具】,转换之后,就能用2005、2008打开2010的东西....下载:http://www.cnblogs.com/flydoos/archive/2011/09/19/2181106.html
VC2008下用GDI+绘制圆形进度条
VC2008下用GDI+绘制圆形进度条,已经封装成类,可根据需要设置进度条的大小、形状,使用起来很方便。
GDI+画圆角矩形(优化)
GDI+画圆角矩形(优化)


