Пример #1
0
void House::CreateWindow(Vertex &vL, Vertex &vR, double base, double height)
{
	std::vector<Vertex*> front;
	front.push_back(new Vertex(vL.X(), vL.Y(), base));
	front.push_back(new Vertex(vL.X(), vL.Y(), height));
	front.push_back(new Vertex(vR.X(), vR.Y(), height));
	front.push_back(new Vertex(vR.X(), vR.Y(), base));
	
	std::vector<Vertex*> window;
	std::vector<Vertex*>::iterator itv;
	for (itv = front.begin(); itv != front.end(); ++itv)
	{
		window.push_back(new Vertex(*(*itv)));
	}
	Shrink(window, 0.6f);
	
	std::vector<Vertex*>* pan;
	for (int i = 0; i < 4; i++)
	{
		pan = new std::vector<Vertex*>();
		
		pan->push_back(new Vertex(*(front[i])));
		pan->push_back(new Vertex(*(front[(i+1)%4])));
		pan->push_back(new Vertex(*(window[i])));
		pan->push_back(new Vertex(*(window[(i+1)%4])));
		
		faces->push_back(new Face(pan));
	}
}
Пример #2
0
void Street::CreatePlaneStreet()
{
	double height = 0.0f;
	std::vector<Vertex *> vert;
	for (int i = 0; i < 4; i++)
	{
		int u = (i == 2) ? 3 : ((i == 3) ? 2 : i);
		Vertex *tmp = vertices->at(u);
		vert.push_back(new Vertex(tmp->X(), tmp->Y(), height));
	}
	faces->push_back(new Face(new std::vector<Vertex *>(vert)));
	
	// trottoir
	double heightTrot = 0.2f;
	vert.clear();
	for (unsigned int i = 0; i < vertices->size(); i++)
	{
		int u = (i == 2) ? 3 : ((i == 3) ? 2 : i);
		Vertex *tmp = vertices->at(u);
		vert.push_back(new Vertex(tmp->X(), tmp->Y(), heightTrot));
	}
	Shrink(vert, 0.1f);
	faces->push_back(new Face(new std::vector<Vertex *>(vert)));
	
	std::vector<Vertex *> vect;
	for (unsigned int i = 0; i < vertices->size(); i++)
		vect.push_back(new Vertex(vertices->at(i)->X(), vertices->at(i)->Y(), heightTrot));
	Shrink(vect, 0.1f);
	
	for (unsigned int i = 0; i < vect.size(); i++)
	{
		std::vector<Vertex *> *trot = new std::vector<Vertex *>();
		trot->push_back(new Vertex(*vect[i]));
		trot->push_back(new Vertex(vect[i]->X(), 
					   vect[i]->Y(), height));
		trot->push_back(new Vertex(*vect[(i+1)%4]));
		trot->push_back(new Vertex(vect[(i+1)%4]->X(), 
					   vect[(i+1)%4]->Y(), height));
		
		faces->push_back(new Face(trot));
	}
	
	// add tree
	ImportObj tree(TREE_FILE);
	std::vector<Face*>::iterator itf;
	std::vector<Face*> treefaces = tree.GetFaces();
	Vertex *v;
	
	for (itf = treefaces.begin(); itf != treefaces.end(); ++itf)
	{
		v = new Vertex(GravityCenter(*vertices));
		(*itf)->Translate(v->X(), v->Y(), v->Z());
		faces->push_back((*itf));
		delete v;
	}
}
Пример #3
0
bool ShapeList::candidateRemove(Node *n, const Vertex &v)
{
	if(n != NULL && (std::abs(n->Curr->getX() - v.X()) < 1 ||
		std::abs(n->Curr->getY() - v.Y()) < 1))
		{
			return true; //ska tas bort
		}
		else
			return false;
}
Пример #4
0
void Street::CreateTriangleStreet()
{
	assert(vertices->size() == 3);
	
	std::cout << "triangle street" << std::endl;
	double height = 0.2f;
	std::vector<Vertex *> vert;
	for (int i = 0; i < 3; i++)
	{
		Vertex *tmp = vertices->at(i);
		vert.push_back(new Vertex(tmp->X(), tmp->Y(), height));
	}
	
	faces->push_back(new Face(new std::vector<Vertex *>(vert)));
}
Пример #5
0
 // Returns the squared euclidean distance between the two vertices.
 float WingedEdge::computeSqrOffset(Vertex v1,Vertex v2)
 {
  
     Vertex v = v1 - v2;
     return v.X()*v.X() + v.Y()*v.Y() + v.Z() * v.Z();
 }