added several instructions to close the stream on file once opened and read is complete
This commit is contained in:
parent
306c334877
commit
017e289d3e
|
@ -238,10 +238,13 @@ namespace vcg {
|
||||||
//if (oi.numFaces == 0)
|
//if (oi.numFaces == 0)
|
||||||
// return E_NO_FACE;
|
// return E_NO_FACE;
|
||||||
|
|
||||||
|
|
||||||
std::ifstream stream(filename);
|
std::ifstream stream(filename);
|
||||||
if (stream.fail())
|
if (stream.fail())
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
return E_CANTOPEN;
|
return E_CANTOPEN;
|
||||||
|
}
|
||||||
std::vector<Material> materials; // materials vector
|
std::vector<Material> materials; // materials vector
|
||||||
std::vector<ObjTexCoord> texCoords; // texture coordinates
|
std::vector<ObjTexCoord> texCoords; // texture coordinates
|
||||||
std::vector<CoordType> normals; // vertex normals
|
std::vector<CoordType> normals; // vertex normals
|
||||||
|
@ -282,13 +285,18 @@ namespace vcg {
|
||||||
|
|
||||||
// callback invocation, abort loading process if the call returns false
|
// callback invocation, abort loading process if the call returns false
|
||||||
if ((cb !=NULL) && (((numTriangles + numVertices)%100)==0) && !(*cb)((100*(numTriangles + numVertices))/numVerticesPlusFaces, loadingStr))
|
if ((cb !=NULL) && (((numTriangles + numVertices)%100)==0) && !(*cb)((100*(numTriangles + numVertices))/numVerticesPlusFaces, loadingStr))
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
return E_ABORTED;
|
return E_ABORTED;
|
||||||
|
}
|
||||||
if (header.compare("v")==0) // vertex
|
if (header.compare("v")==0) // vertex
|
||||||
{
|
{
|
||||||
loadingStr="Vertex Loading";
|
loadingStr="Vertex Loading";
|
||||||
if (numTokens < 4) return E_BAD_VERTEX_STATEMENT;
|
if (numTokens < 4)
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
|
return E_BAD_VERTEX_STATEMENT;
|
||||||
|
}
|
||||||
(*vi).P()[0] = (ScalarType) atof(tokens[1].c_str());
|
(*vi).P()[0] = (ScalarType) atof(tokens[1].c_str());
|
||||||
(*vi).P()[1] = (ScalarType) atof(tokens[2].c_str());
|
(*vi).P()[1] = (ScalarType) atof(tokens[2].c_str());
|
||||||
(*vi).P()[2] = (ScalarType) atof(tokens[3].c_str());
|
(*vi).P()[2] = (ScalarType) atof(tokens[3].c_str());
|
||||||
|
@ -321,8 +329,11 @@ namespace vcg {
|
||||||
{
|
{
|
||||||
loadingStr="Vertex Texture Loading";
|
loadingStr="Vertex Texture Loading";
|
||||||
|
|
||||||
if (numTokens < 3) return E_BAD_VERT_TEX_STATEMENT;
|
if (numTokens < 3)
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
|
return E_BAD_VERT_TEX_STATEMENT;
|
||||||
|
}
|
||||||
ObjTexCoord t;
|
ObjTexCoord t;
|
||||||
t.u = static_cast<float>(atof(tokens[1].c_str()));
|
t.u = static_cast<float>(atof(tokens[1].c_str()));
|
||||||
t.v = static_cast<float>(atof(tokens[2].c_str()));
|
t.v = static_cast<float>(atof(tokens[2].c_str()));
|
||||||
|
@ -334,8 +345,11 @@ namespace vcg {
|
||||||
{
|
{
|
||||||
loadingStr="Vertex Normal Loading";
|
loadingStr="Vertex Normal Loading";
|
||||||
|
|
||||||
if (numTokens != 4) return E_BAD_VERT_NORMAL_STATEMENT;
|
if (numTokens != 4)
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
|
return E_BAD_VERT_NORMAL_STATEMENT;
|
||||||
|
}
|
||||||
CoordType n;
|
CoordType n;
|
||||||
n[0] = (ScalarType) atof(tokens[1].c_str());
|
n[0] = (ScalarType) atof(tokens[1].c_str());
|
||||||
n[1] = (ScalarType) atof(tokens[2].c_str());
|
n[1] = (ScalarType) atof(tokens[2].c_str());
|
||||||
|
@ -354,6 +368,7 @@ namespace vcg {
|
||||||
if(header.compare("q")==0) {
|
if(header.compare("q")==0) {
|
||||||
QuadFlag=true;
|
QuadFlag=true;
|
||||||
if (vertexesPerFace != 4) {
|
if (vertexesPerFace != 4) {
|
||||||
|
stream.close();
|
||||||
return E_LESS_THAN_4_VERT_IN_QUAD;
|
return E_LESS_THAN_4_VERT_IN_QUAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -380,8 +395,10 @@ namespace vcg {
|
||||||
// verifying validity of texture coords indices
|
// verifying validity of texture coords indices
|
||||||
for(int i=0;i<vertexesPerFace;i++)
|
for(int i=0;i<vertexesPerFace;i++)
|
||||||
if(!GoodObjIndex(ff.t[i],oi.numTexCoords))
|
if(!GoodObjIndex(ff.t[i],oi.numTexCoords))
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
return E_BAD_VERT_TEX_INDEX;
|
return E_BAD_VERT_TEX_INDEX;
|
||||||
|
}
|
||||||
ff.tInd=materials[currentMaterialIdx].index;
|
ff.tInd=materials[currentMaterialIdx].index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,15 +414,21 @@ namespace vcg {
|
||||||
|
|
||||||
for(int i=0;i<vertexesPerFace;i++)
|
for(int i=0;i<vertexesPerFace;i++)
|
||||||
if(!GoodObjIndex(ff.v[i],numVertices))
|
if(!GoodObjIndex(ff.v[i],numVertices))
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
return E_BAD_VERT_INDEX;
|
return E_BAD_VERT_INDEX;
|
||||||
|
}
|
||||||
|
|
||||||
if(( oi.mask & vcg::tri::io::Mask::IOM_WEDGNORMAL ) ||
|
if(( oi.mask & vcg::tri::io::Mask::IOM_WEDGNORMAL ) ||
|
||||||
( oi.mask & vcg::tri::io::Mask::IOM_VERTNORMAL ) )
|
( oi.mask & vcg::tri::io::Mask::IOM_VERTNORMAL ) )
|
||||||
{
|
{
|
||||||
// verifying validity of vertex normal indices
|
// verifying validity of vertex normal indices
|
||||||
for(int i=0;i<vertexesPerFace;i++)
|
for(int i=0;i<vertexesPerFace;i++)
|
||||||
if(!GoodObjIndex(ff.n[i],numVNormals)) return E_BAD_VERT_NORMAL_INDEX;
|
if(!GoodObjIndex(ff.n[i],numVNormals))
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
|
return E_BAD_VERT_NORMAL_INDEX;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -652,7 +675,7 @@ namespace vcg {
|
||||||
m.vert[i].C()=vertexColorVector[i];
|
m.vert[i].C()=vertexColorVector[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stream.close();
|
||||||
return result;
|
return result;
|
||||||
} // end of Open
|
} // end of Open
|
||||||
|
|
||||||
|
@ -885,9 +908,13 @@ namespace vcg {
|
||||||
|
|
||||||
static bool LoadMask(const char * filename, Info &oi)
|
static bool LoadMask(const char * filename, Info &oi)
|
||||||
{
|
{
|
||||||
std::ifstream stream(filename);
|
|
||||||
if (stream.fail()) return false;
|
|
||||||
|
|
||||||
|
std::ifstream stream(filename);
|
||||||
|
if (stream.fail())
|
||||||
|
{
|
||||||
|
stream.close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// obtain length of file:
|
// obtain length of file:
|
||||||
stream.seekg (0, std::ios::end);
|
stream.seekg (0, std::ios::end);
|
||||||
int length = stream.tellg();
|
int length = stream.tellg();
|
||||||
|
@ -955,6 +982,8 @@ namespace vcg {
|
||||||
oi.mask |= vcg::tri::io::Mask::IOM_WEDGNORMAL;
|
oi.mask |= vcg::tri::io::Mask::IOM_WEDGNORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stream.close();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue