void ofxPoly2Tri::doTriangulation(vector<p2t::Point*> bound) { CDT *cdt = new CDT(bound); vector<p2t::Point*> cdtPoints; if (steinerpoints.size()>0) { //ADD POINTS for (int i=0;i<steinerpoints.size();++i) { p2t::Point *point = new p2t::Point(steinerpoints[i].x,steinerpoints[i].y); cdtPoints.push_back(point); cdt->AddPoint(point); } } vector<p2t::Point*> cdtHolePoints; if (holes.size()>0) { //ADD HOLES for (int i=0;i<holes.size();++i) { vector<p2t::Point*> hole; vector<ofPoint>holepoints = holes[i].getVertices(); for (int i=0;i<holepoints.size();++i) { p2t::Point *p = new p2t::Point(); p->set(holepoints[i].x, holepoints[i].y); cdtHolePoints.push_back(p); hole.push_back(p); } cdt->AddHole(hole); } } cdt->Triangulate(); if (bUseVboMesh) { vboMesh.clear(); vboMesh.setUsage(GL_DYNAMIC_DRAW); vboMesh.setMode(OF_PRIMITIVE_TRIANGLES); for (int i = 0; i < cdt->GetTriangles().size(); i++){ p2t::Triangle *ortriangle = cdt->GetTriangles()[i]; if (ortriangle->IsInterior()) { vboMesh.addVertex(ofVec3f(ortriangle->GetPoint(0)->x,ortriangle->GetPoint(0)->y,0)); vboMesh.addVertex(ofVec3f(ortriangle->GetPoint(1)->x,ortriangle->GetPoint(1)->y,0)); vboMesh.addVertex(ofVec3f(ortriangle->GetPoint(2)->x,ortriangle->GetPoint(2)->y,0)); float val =ofRandom(220,255); vboMesh.addColor(ofColor(val,val,val)); vboMesh.addColor(ofColor(val,val,val)); vboMesh.addColor(ofColor(val,val,val)); vboMesh.addNormal(ofVec3f(0,0,1)); vboMesh.addNormal(ofVec3f(0,0,1)); vboMesh.addNormal(ofVec3f(0,0,1)); float xval = ((ortriangle->GetPoint(0)->x+scalex)/(scalex*2))*512; float yval = ((ortriangle->GetPoint(0)->y+scaley)/(scaley*2))*512; float xvala = ((ortriangle->GetPoint(1)->x+scalex)/(scalex*2))*512; float yvala = ((ortriangle->GetPoint(1)->y+scaley)/(scaley*2))*512; float xvalb = ((ortriangle->GetPoint(2)->x+scalex)/(scalex*2))*512; float yvalb = ((ortriangle->GetPoint(2)->y+scaley)/(scaley*2))*512; vboMesh.addTexCoord(ofVec2f(xval,yval)); vboMesh.addTexCoord(ofVec2f(xvala,yvala)); vboMesh.addTexCoord(ofVec2f(xvalb,yvalb)); } } } else { triangulatedMesh.clear(); triangulatedMesh.setMode(OF_PRIMITIVE_TRIANGLES); for (int i = 0; i < cdt->GetTriangles().size(); i++){ p2t::Triangle *ortriangle = cdt->GetTriangles()[i]; if (ortriangle->IsInterior()) { //ofColor randomColor = ofColor(ofRandom(255),ofRandom(255),ofRandom(255)); triangulatedMesh.addVertex(ofVec3f(ortriangle->GetPoint(0)->x,ortriangle->GetPoint(0)->y)); triangulatedMesh.addVertex(ofVec3f(ortriangle->GetPoint(1)->x,ortriangle->GetPoint(1)->y)); triangulatedMesh.addVertex(ofVec3f(ortriangle->GetPoint(2)->x,ortriangle->GetPoint(2)->y)); float val =ofRandom(220,255); triangulatedMesh.addColor(ofColor(val,val,val)); triangulatedMesh.addColor(ofColor(val,val,val)); triangulatedMesh.addColor(ofColor(val,val,val)); triangulatedMesh.addNormal(ofVec3f(0,0,1)); triangulatedMesh.addNormal(ofVec3f(0,0,1)); triangulatedMesh.addNormal(ofVec3f(0,0,1)); float xval = ((ortriangle->GetPoint(0)->x+scalex)/(scalex*2))*512; float yval = ((ortriangle->GetPoint(0)->y+scaley)/(scaley*2))*512; float xvala = ((ortriangle->GetPoint(1)->x+scalex)/(scalex*2))*512; float yvala = ((ortriangle->GetPoint(1)->y+scaley)/(scaley*2))*512; float xvalb = ((ortriangle->GetPoint(2)->x+scalex)/(scalex*2))*512; float yvalb = ((ortriangle->GetPoint(2)->y+scaley)/(scaley*2))*512; triangulatedMesh.addTexCoord(ofVec2f(xval,yval)); triangulatedMesh.addTexCoord(ofVec2f(xvala,yvala)); triangulatedMesh.addTexCoord(ofVec2f(xvalb,yvalb)); } } } //free the memory again for (vector<p2t::Point*>::iterator it = cdtPoints.begin(); it != cdtPoints.end(); ++it) { delete *it; } for (vector<p2t::Point*>::iterator it = cdtHolePoints.begin(); it != cdtHolePoints.end(); ++it) { delete *it; } delete cdt; cdt=NULL; }