Пример #1
0
bool Model::loadSTLFromStream(std::fstream &file, SharedArray vertexArray, SharedArray normalsArray)
{
    int bufferSize = 80;
    char buffer[bufferSize];
    if (file.readsome(buffer, bufferSize * sizeof(char)) != bufferSize) {
         return false;
    }

    unsigned int numberOfTriangles = 0;
    if (file.readsome((char *)&numberOfTriangles, sizeof(unsigned int)) != sizeof(unsigned int)) {
        return false;
    }

    vertexArray->resize(numberOfTriangles*9);
    normalsArray->resize(numberOfTriangles*3);

    STLTriangle triangle;
    for(unsigned int i = 0; i < numberOfTriangles; i++){

        if(file.readsome((char *)&triangle.normal, sizeof(float)*3) != sizeof(float)*3){
            return false;
        }

        if(file.readsome((char *)&triangle.vertex, sizeof(float)*9) != sizeof(float)*9){
            return false;
        }

        if(file.readsome((char *)&triangle.attribute, sizeof(unsigned short)) != sizeof(unsigned short)){
            return false;
        }

        for (int i = 0; i < 3; ++i) {

            for (int j = 0; j < 3; ++j) {
                vertexArray->push_back(triangle.vertex[i][j]);
            }

            normalsArray->push_back(triangle.normal[i]);
        }
    }
}