void meshOperation::getHalf( mesh & m, mesh & target, tuple3f direction, float dist ) { vector<int> usedVertices; vector<tuple3i> faces; vector<tuple3f> vertices; for(unsigned int i = 0; i < m.faces.size(); i++){ if(((tuple3f) m.vertices[m.faces[i].a]).dot(direction)>dist || ((tuple3f) m.vertices[m.faces[i].b]).dot(direction)>dist|| ((tuple3f) m.vertices[m.faces[i].c]).dot(direction)>dist){ usedVertices.push_back(m.faces[i].a); usedVertices.push_back(m.faces[i].b); usedVertices.push_back(m.faces[i].c); faces.push_back(m.faces[i]); } } vector<int>::iterator it; // using default comparison (operator <): std::sort (usedVertices.begin(), usedVertices.end()); usedVertices.erase(std::unique(usedVertices.begin(), usedVertices.end()), usedVertices.end()); int k; for(unsigned int i = 0; i < faces.size(); i++){ k= (std::find(usedVertices.begin(), usedVertices.end(), faces[i].a)-usedVertices.begin()); faces[i].a = k; k= (std::find(usedVertices.begin(), usedVertices.end(), faces[i].b)-usedVertices.begin()); faces[i].b = k; k= (std::find(usedVertices.begin(), usedVertices.end(), faces[i].c)-usedVertices.begin()); faces[i].c = k; } for(unsigned int i = 0; i < usedVertices.size(); i++){ vertices.push_back(m.vertices[usedVertices[i]]); } target.reset(vertices,faces); }