diff --git a/src/fgt/filter_hqrender/filter_hqrender.cpp b/src/fgt/filter_hqrender/filter_hqrender.cpp index 4c2905604..f3ae36b69 100644 --- a/src/fgt/filter_hqrender/filter_hqrender.cpp +++ b/src/fgt/filter_hqrender/filter_hqrender.cpp @@ -113,7 +113,7 @@ void FilterHighQualityRender::initParameterSet(QAction *action, MeshModel &m, Ri this->errorMessage = "No template scene has been found in \"render_template\" directory"; qDebug(qPrintable(this->errorMessage)); } - parlst.addParam(new RichEnum("scene",0,templates,"Select scene")); + parlst.addParam(new RichEnum("scene",0,templates,"Select scene")); // ******Ë il nome dell'immagine, ma poi va copiata nella cartella della mesh...****** parlst.addParam(new RichString("ImageName", "default.tiff", "Name of output image")); @@ -230,7 +230,8 @@ bool FilterHighQualityRender::applyFilter(QAction *filter, MeshModel &m, RichPar } //3. se attive, prima di "world begin" va messo il MAKETEXTURE ;) - + convertedGeometry = false; //if the mesh is already converted + int currentFrame = 0; //reading cycle while(!files.isEmpty()) { @@ -239,20 +240,33 @@ bool FilterHighQualityRender::applyFilter(QAction *filter, MeshModel &m, RichPar //the ReadArchive and Option SearchPath "String Archive" statement are already handled QStringList token = line.split(' '); - //add "MakeTexture" statement to create the texure + + + //add "MakeTexture" statement to create the texure, but only before frame one // ********* forse aqsis ha un exe che crea le texture..... ********** (pixie sì) - if(token[0].trimmed() == "FrameBegin" && token[1].trimmed() == "1") { - foreach(QString textureName, textureList) { - QString makeTexture("MakeTexture \"" + getFileNameFromPath(&textureName,false) + ".tiff" + "\" \"" + getFileNameFromPath(&textureName, false) + ".tx\" \"periodic\" \"periodic\" \"gaussian\" 1 1"); - fprintf(fout,"%s\n",qPrintable(makeTexture)); + if(token[0].trimmed() == "FrameBegin") { + currentFrame = token[1].trimmed().toInt(); //no check on cast + if(currentFrame == 1) { + foreach(QString textureName, textureList) { + QString makeTexture("MakeTexture \"" + getFileNameFromPath(&textureName,false) + ".tiff" + "\" \"" + getFileNameFromPath(&textureName, false) + ".tx\" \"periodic\" \"periodic\" \"gaussian\" 1 1"); + fprintf(fout,"%s\n",qPrintable(makeTexture)); + } } } //change the output image file name if(token[0].trimmed() == "Display") { - //if is there more frame? - //////il + viene messo soltanto su framebuffer e non su file (o viceversa :D) - line = token[0] + " \"+" + par.getString("ImageName") + "\" " + token[2] + " " + token[3]; + line = token[0] + " \""; + if(token[2].trimmed() == "\"file\"") + line += "+"; + if(currentFrame == 1) + line += par.getString("ImageName"); + else { + QString imageName = par.getString("ImageName"); + imageName = getFileNameFromPath(&imageName,false); + line += imageName + QString::number(currentFrame) + ".tiff"; + } + line += "\" " + token[2] + " " + token[3]; for(int i = 4; iisEmpty() && c!=0) { + QString line = files->topNextLine(); + QStringList token = line.split(' '); + + if(token[0].trimmed() == "AttributeBegin") + ++c; + if(token[0].trimmed() == "AttributeEnd") + --c; + } + return 0; //errors... +} + + +//write on a opened file the attribute of object entity +int FilterHighQualityRender::convertObject(RibFileStack* files, FILE* fout, QString destDir, MeshModel &m, RichParameterSet &par, QStringList* textureList) { float scale = 1.0; vcg::Matrix44f templateMatrix = vcg::Matrix44f::Identity(); @@ -463,7 +507,7 @@ int FilterHighQualityRender::convertGeometry(RibFileStack* files, FILE* fout, QS for(int i = 0; i<4; i++) for(int j = 0; j<4; j++) fprintf(fout,"%f ",result.ElementAt(j,i)); //traspose - //write bounding box (not modified) + //write bounding box (not modified) /////VA MODIFICATO IL BB SE NON SCALO????? fprintf(fout,"]\n%s\n",qPrintable(line)); } @@ -505,9 +549,11 @@ int FilterHighQualityRender::convertGeometry(RibFileStack* files, FILE* fout, QS if(token[0].trimmed() == "PointsPolygons") { QString filename = "geometry.rib"; fprintf(fout,"ReadArchive \"%s\"", qPrintable(filename)); - QString geometryDest = destDir + QDir::separator() + filename; - - vcg::tri::io::ExporterRIB::Save(m.cm, qPrintable(geometryDest), vcg::tri::io::Mask::IOM_ALL, scale, false); + if(!convertedGeometry) { + convertedGeometry = true; + QString geometryDest = destDir + QDir::separator() + filename; + vcg::tri::io::ExporterRIB::Save(m.cm, qPrintable(geometryDest), vcg::tri::io::Mask::IOM_ALL, scale, false); + } } @@ -517,8 +563,8 @@ int FilterHighQualityRender::convertGeometry(RibFileStack* files, FILE* fout, QS } } //ignore the geometry of dummy object defined in the template - //until end of file or number of statement "AttributeEnd" is equal to c (?) - return 0; + //until end of file or number of statement "AttributeEnd" is equal to c + return 0; //errors... } QString FilterHighQualityRender::getDirFromPath(QString* path) { diff --git a/src/fgt/filter_hqrender/filter_hqrender.h b/src/fgt/filter_hqrender/filter_hqrender.h index 60f84980f..f2256cb15 100644 --- a/src/fgt/filter_hqrender/filter_hqrender.h +++ b/src/fgt/filter_hqrender/filter_hqrender.h @@ -34,8 +34,10 @@ private: QStringList templates; bool delRibFiles; QStringList alignValue; + bool convertedGeometry; - int convertGeometry(RibFileStack* files, FILE* fout, QString destDir, MeshModel &m, RichParameterSet &, QStringList* textureList); + int convertObject(RibFileStack* files, FILE* fout, QString destDir, MeshModel &m, RichParameterSet &, QStringList* textureList); + int ignoreObject(RibFileStack* files); QString getDirFromPath(QString* path); QString getFileNameFromPath(QString* path, bool type = true); };