1.1 --- a/mapeditor.cpp Tue Sep 08 12:15:39 2009 +0000
1.2 +++ b/mapeditor.cpp Wed Sep 09 12:57:06 2009 +0000
1.3 @@ -562,11 +562,15 @@
1.4 // Create list with all bounding polygons
1.5 QList <MapObj*> mapobjects;
1.6 QList <ConvexPolygon> polys;
1.7 + ConvexPolygon p;
1.8 QList <Vector> vectors;
1.9 QList <Vector> orgpos;
1.10 + QStringList headings; //FIXME-3 testing only
1.11 + Vector v;
1.12 BranchItem *bi;
1.13 + BranchItem *bi2;
1.14 BranchObj *bo;
1.15 - TreeItem *ri=model->getRootItem();
1.16 + BranchItem *ri=model->getRootItem();
1.17 for (int i=0;i<ri->branchCount();++i)
1.18 {
1.19 bi=ri->getBranchNum (i);
1.20 @@ -574,11 +578,28 @@
1.21 if (bo)
1.22 {
1.23 mapobjects.append (bo);
1.24 - polys.append(bo->getBoundingPolygon());
1.25 - polys[i].calcCentroid();
1.26 + p=bo->getBoundingPolygon();
1.27 + p.calcCentroid();
1.28 + polys.append(p);
1.29 vectors.append (QPointF(0,0));
1.30 - orgpos.append (polys[i].at(0));
1.31 - }
1.32 + orgpos.append (p.at(0));
1.33 + headings.append (bi->getHeading());
1.34 + }
1.35 + for (int j=0;j<bi->branchCount();++j)
1.36 + {
1.37 + bi2=bi->getBranchNum (j);
1.38 + bo=(BranchObj*)bi2->getLMO();
1.39 + if (bo)
1.40 + {
1.41 + mapobjects.append (bo);
1.42 + p=bo->getBoundingPolygon();
1.43 + p.calcCentroid();
1.44 + polys.append(p);
1.45 + vectors.append (QPointF(0,0));
1.46 + orgpos.append (p.at(0));
1.47 + headings.append (bi2->getHeading());
1.48 + }
1.49 + }
1.50 }
1.51
1.52 // Iterate moving bounding polygons until we have no more collisions
1.53 @@ -593,25 +614,31 @@
1.54 if (polygonCollision (polys.at(i),polys.at(j), QPointF(0,0)).intersect )
1.55 {
1.56 collisions++;
1.57 - Vector v=polys.at(j).centroid()-polys.at(i).centroid();
1.58 + v=polys.at(j).centroid()-polys.at(i).centroid();
1.59 // Move also away if centroids are identical
1.60 if (v.isNull())
1.61 {
1.62 + //cout << "v==0="<<polys[i].centroid()<<polys[j].centroid()<<" "<<v<<" "<<headings[i].toStdString()<<" - "<<headings[j].toStdString()<<" ";
1.63 v.setX (rand()%200 -100);
1.64 v.setY (rand()%200 -100);
1.65 + //cout << v;
1.66 }
1.67 v.normalize();
1.68 - cout << "v="<<v<<endl;
1.69 v.scale (2);
1.70 + //cout << " "<<v<<endl;
1.71 vectors[j]=v;
1.72 vectors[i]=v;
1.73 vectors[i].invert();
1.74 - }
1.75 + }
1.76 }
1.77 }
1.78 for (int i=0;i<vectors.size();i++)
1.79 + {
1.80 + //cout << " v="<<vectors[i]<<" "<<headings[i].toStdString()<<endl;
1.81 polys[i].translate (vectors[i]);
1.82 + }
1.83 //cout << "Collisions: "<<collisions<<endl;
1.84 + //collisions=0;
1.85 }
1.86
1.87 // Finally move the real objects and update