zoukankan      html  css  js  c++  java
  • Cocos2d-x绘制圆角矩形

    /*
    * @brief        画圆角矩形    
    * @param        origin            矩形开始点
    * @param        destination        矩形结束点
    * @param        radius            圆角半径
    * @param        segments        圆角等份数,等份越多,圆角越平滑
    * @param        bFill            是否填充
    * @param        color            填充颜色
    * @attention        
    */
    void DrawPrimitivesTest::ccDrawRoundRect( Point origin, Point destination, float radius, unsigned int segments, bool bFill, Color4F color)
    {
            //算出1/4圆
        
        const float coef    = 0.5f * (float)M_PI / segments;
        Point * vertices    = new Point[segments + 1];
        Point * thisVertices = vertices;
        for(unsigned int i = 0; i <= segments; ++i, ++thisVertices)
        {
            float rads        = (segments - i)*coef;
            thisVertices->x    = (int)(radius * sinf(rads));
            thisVertices->y    = (int)(radius * cosf(rads));
        }
        //
        Point tagCenter;
        float minX    = MIN(origin.x, destination.x);
        float maxX    = MAX(origin.x, destination.x);
        float minY    = MIN(origin.y, destination.y);
        float maxY    = MAX(origin.y, destination.y);
        
        unsigned int dwPolygonPtMax = (segments + 1) * 4;
        Point * pPolygonPtArr = new Point[dwPolygonPtMax];
        Point * thisPolygonPt = pPolygonPtArr;
        int aa = 0;
        //左上角
        tagCenter.x        = minX + radius;
        tagCenter.y        = maxY - radius;
        thisVertices    = vertices;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, ++thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x - thisVertices->x;
            thisPolygonPt->y    = tagCenter.y + thisVertices->y;
            ++aa;
        }
        //右上角
        tagCenter.x        = maxX - radius;
        tagCenter.y        = maxY - radius;
        thisVertices    = vertices + segments;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, --thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x + thisVertices->x;
            thisPolygonPt->y    = tagCenter.y + thisVertices->y;
            ++aa;
        }
        //右下角
        tagCenter.x        = maxX - radius;
        tagCenter.y        = minY + radius;
        thisVertices    = vertices;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, ++thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x + thisVertices->x;
            thisPolygonPt->y    = tagCenter.y - thisVertices->y;
            ++aa;
        }
        //左下角
        tagCenter.x        = minX + radius;
        tagCenter.y        = minY + radius;
        thisVertices    = vertices + segments;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, --thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x - thisVertices->x;
            thisPolygonPt->y    = tagCenter.y - thisVertices->y;
            ++aa;
        }
        
        if(bFill){
            DrawPrimitives::drawSolidPoly(pPolygonPtArr, dwPolygonPtMax, color);
        }else
        {
            DrawPrimitives::setDrawColor4F(color.r, color.g, color.b, color.a);
            DrawPrimitives::drawPoly(pPolygonPtArr, dwPolygonPtMax, true);
        }
        
        CC_SAFE_DELETE_ARRAY(vertices);
        CC_SAFE_DELETE_ARRAY(pPolygonPtArr);
    }        
  • 相关阅读:
    cgic: CGI的C函数库
    linux下的webserver BOA及CGIC库的使用指南(转帖)
    UDP 收/发 广播包
    winsock 收发广播包
    Linux系统下UDP发送和接收广播消息小例子
    uboot里读sd卡内容
    uboot从SD卡烧写内核和文件系统
    intellij 创建一个文件自动就add到git了,这个怎么取消
    内部类和外部类之间的相互调用
    JDK8的新特性——Lambda表达式
  • 原文地址:https://www.cnblogs.com/leehongee/p/3639623.html
Copyright © 2011-2022 走看看