int SkpModel::LoadFaces(){ int out = 0; SUResult res; for (int i=0; i<entities_.size(); i++){ size_t num_faces; SUEntitiesGetNumFaces(entities_[i], &num_faces); if (num_faces > 0){ std::vector<SUFaceRef> faces(num_faces); res = SUEntitiesGetFaces(entities_[i], num_faces, &faces[0], &num_faces); if (res != SU_ERROR_NONE) std::cout << "Error in loading faces \n"; for (int j=0; j<faces.size(); j++) faces_.push_back(faces[j]); /* std::cout << num_faces << "\n"; SUMeshHelperRef mesh = SU_INVALID; std::cout << "Here \n"; res = SUMeshHelperCreate(&mesh, faces[0]); size_t num_vertices; SUMeshHelperGetNumVertices(mesh, &num_vertices); SUMeshHelperRelease(&mesh); */ } } return out; }
void ModelWriter::visitFaces(SUEntitiesRef ents, VisitorFunc func, bool recursive, Transform transform) { size_t count =0; SUEntitiesGetNumFaces(ents,&count); vector<SUFaceRef> faces(count); SUEntitiesGetFaces(ents,count,faces.data(),&count); for(int i=0; i < count; i++){ (*this.*func)(faces[i], transform); } SUEntitiesGetNumGroups(ents,&count); vector<SUGroupRef> groups(count); SUEntitiesGetGroups(ents,count,groups.data(),&count); for(int i=0; i < count; i++){ SUEntitiesRef ents2 = SU_INVALID; SUGroupGetEntities(groups[i],&ents2); Transform t; SUGroupGetTransform(groups[i], (SUTransformation*)&t); visitFaces(ents2,func,true, transform * t); } if(recursive) { SUEntitiesGetNumInstances(ents,&count); vector<SUComponentInstanceRef> instances(count); SUEntitiesGetInstances(ents,count,instances.data(),&count); for(int i=0; i < count; i++){ Transform t; SUComponentDefinitionRef def = SU_INVALID; SUEntitiesRef ents2 = SU_INVALID; SUComponentInstanceGetTransform(instances[i],(SUTransformation*)&t); SUComponentInstanceGetDefinition(instances[i],&def); SUComponentDefinitionGetEntities(def,&ents2); visitFaces(ents2,func,true, transform * t); } } }