bool MeshModel::updateMeshInfo() { if (getNumVertices() == 0) { printf("Loaded mesh has no vertices!\n"); return false; } if (getNumFaces() == 0) { printf("Loaded mesh has no faces!\n"); return false; } BBOX b = getActualBBox(); width = b.width(); height = b.height(); center = b.center(); std::map< int , std::map<int,int> > edgeCount; std::set<Vertex> normalVertices; for (auto iter = faces->begin() ; iter != faces->end() ; iter++) { int a = iter->a(); int b = iter->b(); int c = iter->c(); edgeCount[a][b]++; edgeCount[b][a]++; edgeCount[a][c]++; edgeCount[c][a]++; edgeCount[c][b]++; edgeCount[b][c]++; normalVertices.insert(a); normalVertices.insert(b); normalVertices.insert(c); } if (normalVertices.size() != getNumVertices()) { printf("Mesh has standalone vertices, aborting\n"); return false; } for (auto iter = faces->begin() ; iter != faces->end() ; iter++) { int a = iter->a(); int b = iter->b(); int c = iter->c(); if (edgeCount[a][b] == 1) { boundaryVertices->insert(a); boundaryVertices->insert(b); } if (edgeCount[b][c] == 1) { boundaryVertices->insert(b); boundaryVertices->insert(c); } if (edgeCount[a][c] == 1) { boundaryVertices->insert(a); boundaryVertices->insert(c); } } return true; }