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; } } } |
|