int SkpModel::LoadVertices(){ SUResult res; int out = 0; for (int f=0; f<faces_.size(); f++){ //Form the mesh SUMeshHelperRef mesh = SU_INVALID; res = SUMeshHelperCreate(&mesh, faces_[f]); ErrorHandler(res); // Get number of vertices. size_t num_vertices; res = SUMeshHelperGetNumVertices(mesh, &num_vertices); ErrorHandler(res); //Get vertices. std::vector<SUPoint3D> vertices(num_vertices); res = SUMeshHelperGetVertices(mesh, num_vertices, &vertices[0], &num_vertices); ErrorHandler(res); vertices_.add(vertices); //Get Normals std::vector<SUVector3D> normals(num_vertices); res = SUMeshHelperGetNormals (mesh, num_vertices, &normals[0], &num_vertices); ErrorHandler(res); normals_.add(normals); //Front Texture Coordinates std::vector<SUPoint3D> texture_coords(num_vertices); size_t num_coords; res = SUMeshHelperGetFrontSTQCoords(mesh, num_vertices, &texture_coords[0], &num_coords); ErrorHandler(res); assert(num_coords == num_vertices); stqcoords_front_.add(texture_coords); //Back Texture Coordinates std::vector<SUPoint3D> texture_coords_back(num_vertices); res = SUMeshHelperGetFrontSTQCoords(mesh, num_vertices, &texture_coords_back[0], &num_coords); ErrorHandler(res); assert(num_coords == num_vertices); stqcoords_back_.add(texture_coords_back); SUMeshHelperRelease(&mesh); //*/ /* size_t num_vertices; SUFaceGetNumVertices(faces_[f], &num_vertices); std::vector<SUVertexRef> vertices(num_vertices); SUFaceGetVertices(faces_[f], num_vertices, &vertices[0], &num_vertices); vertices_.add(vertices); */ } return out; }
void ModelWriter::writeFaces(SUFaceRef face, const Transform& t){ SUMeshHelperRef mesh = SU_INVALID; SUMeshHelperCreate(&mesh,face); if(SketchupHelper::getFrontFaceMaterialName(face) == m_CurrentMat) { writeFace(mesh, t, true, SketchupHelper::isFrontFaceTextured(face)); } if(SketchupHelper::getBackFaceMaterialName(face) == m_CurrentMat) { writeFace(mesh, t, false, SketchupHelper::isBackFaceTextured(face)); } }
int SkpModel::Face2AttributeIndices(SUFaceRef face, std::vector<size_t>* vertIdxs, std::vector<size_t>* normalIdxs, std::vector<size_t>* fIdxs){ int out = 0; SUResult res; //Form the mesh SUMeshHelperRef mesh = SU_INVALID; res = SUMeshHelperCreate(&mesh, face); ErrorHandler(res); // Get number of vertices. size_t num_vertices; res = SUMeshHelperGetNumVertices(mesh, &num_vertices); ErrorHandler(res); //Get vertices. std::vector<SUPoint3D> vertices(num_vertices); res = SUMeshHelperGetVertices(mesh, num_vertices, &vertices[0], &num_vertices); ErrorHandler(res); //Get Normals std::vector<SUVector3D> normals(num_vertices); res = SUMeshHelperGetNormals (mesh, num_vertices, &normals[0], &num_vertices); ErrorHandler(res); //Get Front Texture indices std::vector<SUPoint3D> fcoords(num_vertices); res = SUMeshHelperGetFrontSTQCoords(mesh, num_vertices, &fcoords[0], &num_vertices); ErrorHandler(res); SUMeshHelperRelease(&mesh); assert(vertIdxs->size() == num_vertices); for (size_t i =0; i < num_vertices; i++){ vertIdxs->at(i) = vertices_.get_index(vertices[i]); normalIdxs->at(i) = normals_.get_index(normals[i]); fIdxs->at(i) = stqcoords_front_.get_index(fcoords[i]); } return out; }