Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
		}
	}
}