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;
}