#include "../BaseMesh.h"
+#include <C2/util/stream_util.h>
+
#include <set>
#include <fstream>
{
Clear();
- in.read( m_Message , MSG_LENGTH );
+ size_t fileSize = util::GetStreamSize(in);
+
+ in.read(m_Message, MSG_LENGTH);
unsigned int NumFaces;
- in.read( (char*)&NumFaces , sizeof(unsigned int) );
+ in.read((char*)&NumFaces , sizeof(unsigned int));
+
+ const size_t expectedBinaryFileSize = NumFaces * 50 + 84;
+
+ if (expectedBinaryFileSize != fileSize)
+ return false;
m_Faces.resize( NumFaces );
- for( size_t i = 0 ; i < NumFaces ; ++i )
+ for (size_t i = 0; i < NumFaces; ++i)
{
char padding[2] = { 0 , 0 };
- in.read( (char*)m_Faces[i].m_Normal.v() , sizeof(float)*3 );
- in.read( (char*)m_Faces[i].m_Verts[0].v() , sizeof(float)*3 );
- in.read( (char*)m_Faces[i].m_Verts[1].v() , sizeof(float)*3 );
- in.read( (char*)m_Faces[i].m_Verts[2].v() , sizeof(float)*3 );
+ StlFace& f = m_Faces[i];
+ in.read( (char*)f.m_Normal.v() , sizeof(float)*3 );
+ in.read( (char*)f.m_Verts[0].v() , sizeof(float)*3 );
+ in.read( (char*)f.m_Verts[1].v() , sizeof(float)*3 );
+ in.read( (char*)f.m_Verts[2].v() , sizeof(float)*3 );
in.read( padding , 2 );
}
if (!IsExistValidAsciiHeader(in))
return false;
+ Clear();
+
in.seekg( 0 , std::ios::beg );
StlFace f;
return top == "solid";
}
-bool StlMesh::Load( std::istream& ist )
+bool StlMesh::Load(std::istream& ist)
{
- if (LoadText(ist))
+ if (LoadBinary(ist))
return true;
- ist.seekg( 0 , std::ios::beg );
+ ist.seekg(0, std::ios::beg);
- if (LoadBinary(ist))
+ if (LoadText(ist))
return true;
return false;