From c9c3641b2318b5a0d2ec01de846406afbbb707bf Mon Sep 17 00:00:00 2001 From: Tim Dwyer Date: Mon, 17 Jul 2006 04:23:39 +0000 Subject: remove overlaps between connected components (bzr r1425) --- src/libcola/connected_components.cpp | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/libcola/connected_components.cpp') diff --git a/src/libcola/connected_components.cpp b/src/libcola/connected_components.cpp index 5eb9d07ab..f626649cd 100644 --- a/src/libcola/connected_components.cpp +++ b/src/libcola/connected_components.cpp @@ -1,8 +1,35 @@ #include #include "cola.h" +#include using namespace std; namespace cola { + Component::~Component() { + for(unsigned i=0;imoveCentreX(rects[i]->getCentreX()+x); + rects[i]->moveCentreY(rects[i]->getCentreY()+y); + } + } + Rectangle* Component::getBoundingBox() { + double llx=DBL_MAX, lly=DBL_MAX, urx=-DBL_MAX, ury=-DBL_MAX; + for(unsigned i=0;igetMinX()); + lly=min(lly,rects[i]->getMinY()); + urx=max(urx,rects[i]->getMaxX()); + ury=max(ury,rects[i]->getMaxY()); + } + printf("Bounding Box=(%f,%f,%f,%f)\n",llx,urx,lly,ury); + return new Rectangle(llx,urx,lly,ury); + } + namespace ccomponents { struct Node { unsigned id; @@ -81,5 +108,22 @@ namespace cola { new SimpleConstraint(u.second,v.second,c->gap)); } } + void separateComponents(const vector &components) { + unsigned n=components.size(); + Rectangle* bbs[n]; + double origX[n], origY[n]; + for(unsigned i=0;igetBoundingBox(); + origX[i]=bbs[i]->getCentreX(); + origY[i]=bbs[i]->getCentreY(); + } + removeRectangleOverlap(n,bbs,0,0); + for(unsigned i=0;imoveRectangles( + bbs[i]->getCentreX()-origX[i], + bbs[i]->getCentreY()-origY[i]); + delete bbs[i]; + } + } } // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 -- cgit v1.2.3