绘制云气泡

来源:互联网 发布:js 输入数字和小数点 编辑:程序博客网 时间:2024/04/30 06:47

云气泡

/*

绘制云气泡

Canvas 绘制画板

Rect 绘制范围,绘制完毕后返回客户区域

Size 气泡大小

bDraw 是否绘制,false只是计算客户区域大小

成功返回0,失败返回-1

*/

 

int DrawCloud(TCanvas* Canvas, TRect& Rect, TColor Color, int Size, bool bDraw)
{
    vector<int> szbuf;
    size_t      index;

    Rect.left += Size;
    Rect.top  += Size;
    Rect.right  -=Size;
    Rect.bottom -=Size;
    if(Rect.right<Rect.Left)return -1;
    if(Rect.bottom<Rect.Top)return -1;
    if(!bDraw)return 0;

    int px = Rect.left;
    int py = Rect.top;

    randomize();
    index = 0;
    Canvas->Brush->Color = Color;
    Canvas->Pen->Color = Color;
    for(; px < Rect.right; )
    {
        if(index==szbuf.size())szbuf.push_back(Size/4+random(Size/4*3));
        int n = Rect.right-px;
        if(szbuf[index] < n)
        {
            Canvas->Ellipse(px-szbuf[index], py-szbuf[index],
                px+szbuf[index], py+szbuf[index]);
            px += szbuf[index];
            ++index;
        }
        else
        {
            Canvas->Ellipse(px-n, py-n, px+n, py+n);
            px += n;
        }
    }
    for(; py < Rect.bottom; )
    {
        if(index==szbuf.size())szbuf.push_back(Size/4+random(Size/4*3));
        int n = Rect.bottom-py;
        if(szbuf[index] < n)
        {
            Canvas->Ellipse(px-szbuf[index], py-szbuf[index],
                px+szbuf[index], py+szbuf[index]);
            py += szbuf[index];
            ++index;
        }
        else
        {
            Canvas->Ellipse(px-n, py-n, px+n, py+n);
            py += n;
        }
    }

    for(; px > Rect.left; )
    {
        if(index==szbuf.size())szbuf.push_back(Size/4+random(Size/4*3));
        int n = -Rect.left + px;
        if(szbuf[index] < n)
        {
            Canvas->Ellipse(px-szbuf[index], py-szbuf[index],
                px+szbuf[index], py+szbuf[index]);
            px -= szbuf[index];
            ++index;
        }
        else
        {
            Canvas->Ellipse(px-n, py-n, px+n, py+n);
            px -= n;
        }
    }

    for(; py > Rect.top; )
    {
        if(index==szbuf.size())szbuf.push_back(Size/4+random(Size/4*3));
        int n = -Rect.top+py;
        if(szbuf[index] < n)
        {
            Canvas->Ellipse(px-szbuf[index], py-szbuf[index],
                px+szbuf[index], py+szbuf[index]);
            py -= szbuf[index];
            ++index;
        }
        else
        {
            Canvas->Ellipse(px-n, py-n, px+n, py+n);
            py -= n;
        }
    }
    Canvas->FillRect(Rect);
    return 0;
}