# HG changeset patch # User insilmaril # Date 1252501026 0 # Node ID cac93797c58032dca1bb0661fdf2858c067fa420 # Parent 7d67be709091158d00c2f68dc5863892602d991a more fixes for collision detection diff -r 7d67be709091 -r cac93797c580 branchobj.cpp --- a/branchobj.cpp Tue Sep 08 12:15:39 2009 +0000 +++ b/branchobj.cpp Wed Sep 09 12:57:06 2009 +0000 @@ -713,6 +713,19 @@ return bboxTotal; } +ConvexPolygon BranchObj::getBoundingPolygon() +{ + if (treeItem->branchCount()==0) + return MapObj::getBoundingPolygon(); + + QPolygonF p; + p<setStatusTip( "Call test function 2" ); + a->setShortcut (Qt::SHIFT + Qt::Key_T); testMenu->addAction (a); connect( a, SIGNAL( triggered() ), this, SLOT( testFunction2() ) ); diff -r 7d67be709091 -r cac93797c580 mapeditor.cpp --- a/mapeditor.cpp Tue Sep 08 12:15:39 2009 +0000 +++ b/mapeditor.cpp Wed Sep 09 12:57:06 2009 +0000 @@ -562,11 +562,15 @@ // Create list with all bounding polygons QList mapobjects; QList polys; + ConvexPolygon p; QList vectors; QList orgpos; + QStringList headings; //FIXME-3 testing only + Vector v; BranchItem *bi; + BranchItem *bi2; BranchObj *bo; - TreeItem *ri=model->getRootItem(); + BranchItem *ri=model->getRootItem(); for (int i=0;ibranchCount();++i) { bi=ri->getBranchNum (i); @@ -574,11 +578,28 @@ if (bo) { mapobjects.append (bo); - polys.append(bo->getBoundingPolygon()); - polys[i].calcCentroid(); + p=bo->getBoundingPolygon(); + p.calcCentroid(); + polys.append(p); vectors.append (QPointF(0,0)); - orgpos.append (polys[i].at(0)); - } + orgpos.append (p.at(0)); + headings.append (bi->getHeading()); + } + for (int j=0;jbranchCount();++j) + { + bi2=bi->getBranchNum (j); + bo=(BranchObj*)bi2->getLMO(); + if (bo) + { + mapobjects.append (bo); + p=bo->getBoundingPolygon(); + p.calcCentroid(); + polys.append(p); + vectors.append (QPointF(0,0)); + orgpos.append (p.at(0)); + headings.append (bi2->getHeading()); + } + } } // Iterate moving bounding polygons until we have no more collisions @@ -593,25 +614,31 @@ if (polygonCollision (polys.at(i),polys.at(j), QPointF(0,0)).intersect ) { collisions++; - Vector v=polys.at(j).centroid()-polys.at(i).centroid(); + v=polys.at(j).centroid()-polys.at(i).centroid(); // Move also away if centroids are identical if (v.isNull()) { + //cout << "v==0="<