mapeditor.cpp
changeset 793 cac93797c580
parent 792 7d67be709091
child 794 d922fb6ea482
     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