分享

xp->svg:text boundbox

 torony 2016-03-24
void Primitive::getObjectBound(int* x1, int* y1, int* x2, int* y2)
{       
if(!x1||!y1||!x2||!y2) return;
        if (this->isClass(groupClass))
        {
    if (((Group*)this)->getObjectList() != NULL)
                ((Group*)this)->getObjectList()->getObjectBound(x1,y1,x2,y2);
             return;
        }
register PointList *pList= getPtLst();
int minx=0, miny=0, maxx=0, maxy=0;
    if (pList && pList->cnt) 
    {
    Point *pts=pList->list;
int i;
minx=maxx=pts[0].x;
miny=maxy=pts[0].y;
for(i=1;i<pList->cnt;i++)
{
if(minx>pts[i].x)
minx=pts[i].x;
if(maxx<pts[i].x)
maxx=pts[i].x;
if(miny>pts[i].y)
miny=pts[i].y;
if(maxy<pts[i].y)
maxy=pts[i].y;
}
if (transformation)
{
//图形坐标->object的世界坐标
int x=pts[0].x,y=pts[0].y;
transformation->transform(&x,&y);
minx=maxx=x;
miny=maxy=y;
for(i=1;i<pList->cnt;i++)
 {
x = pts[i].x;
y = pts[i].y;
transformation->transform(&x,&y);
if(minx>x)
minx=x;
if(maxx<x)
maxx=x;
if(miny>y)
miny=y;
if(maxy<y)
maxy=y;
}  
/*transformation->transform(&minx,&miny);
transformation->transform(&maxx,&maxy);
*/
}
*x1=minx, *y1=miny, *x2=maxx, *y2=maxy;
//printf("class=%s, minx=%d, miny=%d, maxx=%d, maxy=%d\n", TNDDatabase::getClassName(getClass()), minx, miny, maxx, maxy);
    }
    else
    {
        if( this->isClass(textClass)){
            //这儿是svg导出时才会需要这几行代码,对于绘图包的运行没意义
            ((Text*)this)->getFontBase()->getBoundingBox(NULL, ((Text*)this)->getText(), x1, y1, x2, y2);
            int tmp=*y1;
            *y1=*y2;
            *y2=-tmp;
        }
        else{
        *x1=0;
        *y1=0;
        *x2=0;
        *y2=0;
        }
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多