mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-16 01:24:36 +00:00
improved error report
minor bug fix
This commit is contained in:
parent
980faa04c9
commit
8935a67aa7
@ -29,7 +29,6 @@ typedef typename SaveMeshType::FacePointer FacePointer;
|
||||
typedef typename SaveMeshType::VertexIterator VertexIterator;
|
||||
typedef typename SaveMeshType::FaceIterator FaceIterator;
|
||||
|
||||
|
||||
static int Save(SaveMeshType &m, const char * filename, bool binary, CallBackPos *cb=0) {
|
||||
return Save(m,filename, Mask::IOM_ALL, binary, cb);
|
||||
}
|
||||
@ -46,8 +45,7 @@ static int Save(SaveMeshType &mm, const char * filename, int savemask, bool bin
|
||||
|
||||
FILE *fout = fopen(filename,"wb");
|
||||
if(fout==NULL) {
|
||||
//pi.status=::vcg::ply::E_CANTOPEN;
|
||||
//return ::vcg::ply::E_CANTOPEN;
|
||||
return E_CANTOPEN;
|
||||
}
|
||||
|
||||
QTime tt; tt.start(); //debug
|
||||
@ -77,8 +75,8 @@ static int Save(SaveMeshType &mm, const char * filename, int savemask, bool bin
|
||||
int incr = m.fn/cbStep, i=0;
|
||||
for(i=0; i<m.fn; i++) {
|
||||
fprintf(fout,"3 ");//\n");
|
||||
if(i%incr == 0)
|
||||
cb(++cbValue, "Exporting face topology");
|
||||
if(i%incr == 0)
|
||||
cb(++cbValue, "Exporting face topology");
|
||||
}
|
||||
fprintf(fout,"\n");
|
||||
fprintf(fout,"]\n[\n");
|
||||
@ -88,18 +86,18 @@ static int Save(SaveMeshType &mm, const char * filename, int savemask, bool bin
|
||||
//second step: index of vertex for face
|
||||
UpdateFlags<SaveMeshType>::VertexClearV(m);
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0)
|
||||
cb(++cbValue, "Exporting index of verteces");
|
||||
if(i%incr == 0)
|
||||
cb(++cbValue, "Exporting index of verteces");
|
||||
for(int j=0; j<3; ++j) {
|
||||
int indexOfVertex = (*fi).V(j) - &(m.vert[0]);
|
||||
fprintf(fout,"%i ",indexOfVertex);
|
||||
//if it's the first visit, set visited bit
|
||||
if(!(*fi).V(j)->IsV()) {
|
||||
(*fi).V(j)->SetV();
|
||||
fprintf(fout,"%i ",indexOfVertex);
|
||||
//if it's the first visit, set visited bit
|
||||
if(!(*fi).V(j)->IsV()) {
|
||||
(*fi).V(j)->SetV();
|
||||
}
|
||||
}
|
||||
}
|
||||
//fprintf(fout,"\n");
|
||||
fprintf(fout," ");
|
||||
//fprintf(fout,"\n");
|
||||
fprintf(fout," ");
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("coords %i",tt.elapsed());
|
||||
@ -113,9 +111,9 @@ static int Save(SaveMeshType &mm, const char * filename, int savemask, bool bin
|
||||
for(VertexIterator vi=m.vert.begin(); vi!=m.vert.end(); ++vi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex coordinates");
|
||||
if(vi->IsV()) {
|
||||
Point3f p = mat * vi->P();
|
||||
fprintf(fout,"%g %g %g ",p[0],p[1],p[2]);
|
||||
}
|
||||
Point3f p = mat * vi->P();
|
||||
fprintf(fout,"%g %g %g ",p[0],p[1],p[2]);
|
||||
}
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("coords %i",tt.elapsed());
|
||||
@ -125,111 +123,92 @@ static int Save(SaveMeshType &mm, const char * filename, int savemask, bool bin
|
||||
if(HasPerVertexNormal(m) && (savemask & Mask::IOM_VERTNORMAL)) {
|
||||
fprintf(fout,"\"N\"\n[\n");
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex normals");
|
||||
//for each face, foreach vertex write normal
|
||||
for(int j=0; j<3; ++j) {
|
||||
Point3f n = mat * (*fi).V(j)->N(); //transform normal too
|
||||
fprintf(fout,"%g %g %g ",n[0],n[1],n[2]);
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex normals");
|
||||
//for each face, foreach vertex write normal
|
||||
for(int j=0; j<3; ++j) {
|
||||
Point3f n = mat * (*fi).V(j)->N(); //transform normal too
|
||||
fprintf(fout,"%g %g %g ",n[0],n[1],n[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("normal %i",tt.elapsed());
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("normal %i",tt.elapsed());
|
||||
}
|
||||
cbValue = (++step)*cbStep; i=0;
|
||||
|
||||
//fifth step: vertex color (ignore face color?)
|
||||
if(m.HasPerVertexColor() && (savemask & Mask::IOM_VERTCOLOR)) {
|
||||
fprintf(fout,"\"Cs\"\n[\n");
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex colors");
|
||||
//for each face, foreach vertex write color
|
||||
for(int j=0; j<3; ++j) {
|
||||
Color4b &c=(*fi).V(j)->C();
|
||||
fprintf(fout,"%g %g %g ",float(c[0])/255,float(c[1])/255,float(c[2])/255);
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex colors");
|
||||
//for each face, foreach vertex write color
|
||||
for(int j=0; j<3; ++j) {
|
||||
Color4b &c=(*fi).V(j)->C();
|
||||
fprintf(fout,"%g %g %g ",float(c[0])/255,float(c[1])/255,float(c[2])/255);
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("color %i",tt.elapsed());
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("color %i",tt.elapsed());
|
||||
}
|
||||
cbValue = (++step)*cbStep; i=0;
|
||||
|
||||
//sixth step: texture coordinates (for edge)
|
||||
if((HasPerVertexTexCoord(m) && (savemask & Mask::IOM_VERTTEXCOORD)) ||
|
||||
(HasPerWedgeTexCoord(m) && (savemask & Mask::IOM_WEDGTEXCOORD))) {
|
||||
fprintf(fout,"\"st\"\n[\n"); i=0;
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
fprintf(fout,"\"st\"\n[\n"); i=0;
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex/edge texture coordinates");
|
||||
//for each face, foreach vertex write uv coord
|
||||
for(int j=0; j<3; ++j) {
|
||||
fprintf(fout,"%g %g ",(*fi).WT(j).U() , 1.0 - (*fi).WT(j).V()); //v origin axis is up
|
||||
//for each face, foreach vertex write uv coord
|
||||
for(int j=0; j<3; ++j) {
|
||||
fprintf(fout,"%g %g ",(*fi).WT(j).U() , 1.0 - (*fi).WT(j).V()); //v origin axis is up
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("texcoords %i",tt.elapsed());
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("texcoords %i",tt.elapsed());
|
||||
}
|
||||
cbValue = (++step)*cbStep; i=0;
|
||||
|
||||
//seventh step: vertex quality
|
||||
if(HasPerVertexQuality(m) && (savemask & Mask::IOM_VERTQUALITY)) {
|
||||
fprintf(fout,"\"Q\"\n[\n"); i=0;
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex quality");
|
||||
//for each face, foreach vertex write its quality
|
||||
for(int j=0; j<3; ++j) {
|
||||
fprintf(fout,"%g ",(*fi).V(j)->Q());
|
||||
}
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("quality %i",tt.elapsed());
|
||||
fprintf(fout,"\"Q\"\n[\n"); i=0;
|
||||
for(FaceIterator fi=m.face.begin(); fi!=m.face.end(); ++fi, ++i) {
|
||||
if(i%incr == 0) cb(++cbValue, "Exporting vertex quality");
|
||||
//for each face, foreach vertex write its quality
|
||||
for(int j=0; j<3; ++j) {
|
||||
fprintf(fout,"%g ",(*fi).V(j)->Q());
|
||||
}
|
||||
}
|
||||
fprintf(fout,"\n]\n");
|
||||
qDebug("quality %i",tt.elapsed());
|
||||
}
|
||||
cb(100, "Exporting completed");
|
||||
fclose(fout);
|
||||
|
||||
return 0;
|
||||
return RibError::E_NOERROR;
|
||||
}
|
||||
|
||||
static const char *ErrorMsg(int error)
|
||||
{/*
|
||||
static std::vector<std::string> ply_error_msg;
|
||||
if(ply_error_msg.empty())
|
||||
{
|
||||
ply_error_msg.resize(PlyInfo::E_MAXPLYINFOERRORS );
|
||||
ply_error_msg[ply::E_NOERROR ]="No errors";
|
||||
ply_error_msg[ply::E_CANTOPEN ]="Can't open file";
|
||||
ply_error_msg[ply::E_NOTHEADER ]="Header not found";
|
||||
ply_error_msg[ply::E_UNESPECTEDEOF ]="Eof in header";
|
||||
ply_error_msg[ply::E_NOFORMAT ]="Format not found";
|
||||
ply_error_msg[ply::E_SYNTAX ]="Syntax error on header";
|
||||
ply_error_msg[ply::E_PROPOUTOFELEMENT]="Property without element";
|
||||
ply_error_msg[ply::E_BADTYPENAME ]="Bad type name";
|
||||
ply_error_msg[ply::E_ELEMNOTFOUND ]="Element not found";
|
||||
ply_error_msg[ply::E_PROPNOTFOUND ]="Property not found";
|
||||
ply_error_msg[ply::E_BADTYPE ]="Bad type on addtoread";
|
||||
ply_error_msg[ply::E_INCOMPATIBLETYPE]="Incompatible type";
|
||||
ply_error_msg[ply::E_BADCAST ]="Bad cast";
|
||||
|
||||
ply_error_msg[PlyInfo::E_NO_VERTEX ]="No vertex field found";
|
||||
ply_error_msg[PlyInfo::E_NO_FACE ]="No face field found";
|
||||
ply_error_msg[PlyInfo::E_SHORTFILE ]="Unespected eof";
|
||||
ply_error_msg[PlyInfo::E_NO_3VERTINFACE ]="Face with more than 3 vertices";
|
||||
ply_error_msg[PlyInfo::E_BAD_VERT_INDEX ]="Bad vertex index in face";
|
||||
ply_error_msg[PlyInfo::E_NO_6TCOORD ]="Face with no 6 texture coordinates";
|
||||
ply_error_msg[PlyInfo::E_DIFFER_COLORS ]="Number of color differ from vertices";
|
||||
}
|
||||
*/
|
||||
static const char * dae_error_msg[] =
|
||||
{
|
||||
"No errors"
|
||||
};
|
||||
|
||||
if(error>0 || error<0) return "Unknown error";
|
||||
else return dae_error_msg[error];
|
||||
|
||||
|
||||
enum RibError {
|
||||
E_NOERROR, // 0
|
||||
// Errors of open(..)
|
||||
E_CANTOPEN, // 1
|
||||
E_MAXRIBERRORS
|
||||
};
|
||||
|
||||
static int GetExportMaskCapability()
|
||||
static const char *ErrorMsg(int error) {
|
||||
static std::vector<std::string> rib_error_msg;
|
||||
if(rib_error_msg.empty())
|
||||
{
|
||||
rib_error_msg.resize(E_MAXRIBERRORS);
|
||||
rib_error_msg[E_NOERROR ]="No errors";
|
||||
rib_error_msg[E_CANTOPEN ]="Can't open file";
|
||||
}
|
||||
|
||||
if(error > E_MAXRIBERRORS || error < 0)
|
||||
return "Unknown error";
|
||||
else
|
||||
return rib_error_msg[error].c_str();
|
||||
};
|
||||
|
||||
static int GetExportMaskCapability() {
|
||||
int capability = 0;
|
||||
capability |= vcg::tri::io::Mask::IOM_VERTCOORD ;
|
||||
//capability |= vcg::tri::io::Mask::IOM_VERTFLAGS ;
|
||||
|
||||
@ -324,17 +324,17 @@ bool FilterHighQualityRender::applyFilter(QAction *filter, MeshModel &m, RichPar
|
||||
//every time the render process write a message, receive a signal
|
||||
worldBeginRendered = 1; lastCb = 0;
|
||||
qDebug("number of world begin found: %i",numOfWorldBegin);
|
||||
connect(&renderProcess, SIGNAL(readyReadStandardOutput()),this, SLOT(updateOutputProcess()));
|
||||
connect(&renderProcess, SIGNAL(readyReadStandardError()),this, SLOT(errSgn()));
|
||||
connect(&renderProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(updateOutputProcess()));
|
||||
connect(&renderProcess, SIGNAL(readyReadStandardError()) , this, SLOT(errSgn()));
|
||||
cb(0, "Rendering image with Aqsis");
|
||||
#if !defined(NO_RENDERING)
|
||||
renderProcess.start(toRun);
|
||||
renderProcess.start(toRun);
|
||||
if (!renderProcess.waitForFinished(-1)) {
|
||||
this->errorMessage = "An error occured in Aqsis";
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
disconnect(&renderProcess, SIGNAL(readyReadStandardOutput()),this, SLOT(updateOutputProcess()));
|
||||
disconnect(&renderProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(updateOutputProcess()));
|
||||
//if process Aqsis is stopped, no image are created
|
||||
qDebug("aqsis process finished");
|
||||
|
||||
@ -369,10 +369,10 @@ bool FilterHighQualityRender::applyFilter(QAction *filter, MeshModel &m, RichPar
|
||||
}
|
||||
|
||||
qDebug("end: %i",tt.elapsed());
|
||||
Log(GLLogStream::FILTER,"Successfully created high quality image");
|
||||
//Log(GLLogStream::FILTER,"Aqsis has rendered image successfully");
|
||||
cb(100, qPrintable("Created " + QString::number(imagesRendered.size())+" images"));
|
||||
|
||||
Log(GLLogStream::FILTER,"Successfully created high quality image");
|
||||
//Log(GLLogStream::FILTER,"Aqsis has rendered image successfully");
|
||||
|
||||
//run piqls with rendered image
|
||||
if(par.getBool("ShowResult")) {
|
||||
QProcess piqslProcess;
|
||||
|
||||
@ -94,20 +94,18 @@ private:
|
||||
int numberOfDummies, numOfObject;
|
||||
struct ObjValues {
|
||||
vcg::Matrix44f objectMatrix;
|
||||
float objectBound[6]; // xmin, xmax, ymin, ymax, zmin, zmax
|
||||
QStringList objectShader;
|
||||
QString objectId;
|
||||
QString objectDisplacementbound;
|
||||
float objectBound[6]; // xmin, xmax, ymin, ymax, zmin, zmax
|
||||
QStringList objectShader;
|
||||
QString objectId;
|
||||
QString objectDisplacementbound;
|
||||
};
|
||||
bool makeScene(MeshModel &m, QStringList* textureList, RichParameterSet &par, QString templatePath, QString destDirString, QStringList* shaderDirs, QStringList* textureDirs, QStringList* proceduralDirs, QStringList* imagesRendered);
|
||||
QString parseObject(RibFileStack* files, QString destDir, int currentFrame, MeshModel &m, RichParameterSet &par, QStringList* textureList);
|
||||
int convertObject(FILE* fout, QString destDir, MeshModel &m, RichParameterSet &par, QStringList* textureList, ObjValues* dummyValues);
|
||||
bool convertObject(FILE* fout, QString destDir, MeshModel &m, RichParameterSet &par, QStringList* textureList, ObjValues* dummyValues);
|
||||
int makeAnimation(FILE* fout, int numOfFrame, vcg::Matrix44f initialCamera, QStringList frameDeclaration, QString imageName);
|
||||
int writeMatrix(FILE* fout, vcg::Matrix44f matrix, bool transposed = true);
|
||||
//QString readArray(RibFileStack* files,QString arrayString = "");
|
||||
vcg::Matrix44f getMatrix(QString matrixString);
|
||||
enum searchType{ ERR, ARCHIVE, SHADER, TEXTURE, PROCEDURAL };
|
||||
//QStringList readSearchPath(RibFileStack* files,QString line, int* type);
|
||||
int writeMatrix(FILE* fout, const vcg::Matrix44f* matrix, bool transposed = true);
|
||||
vcg::Matrix44f getMatrix(const QString* matrixString) const;
|
||||
enum searchType{ ERR, ARCHIVE, SHADER, TEXTURE, PROCEDURAL };
|
||||
QStringList readSearchPath(const QStringList* token, int* type);
|
||||
};
|
||||
|
||||
|
||||
@ -24,7 +24,8 @@ bool FilterHighQualityRender::makeScene(MeshModel &m,
|
||||
FILE* fout;
|
||||
fout = fopen(qPrintable(destDirString + QDir::separator() + mainFileName()),"wb");
|
||||
if(fout==NULL) {
|
||||
|
||||
this->errorMessage = "Impossible to create file: " + destDirString + QDir::separator() + mainFileName();
|
||||
return false;
|
||||
}
|
||||
qDebug("Starting to write rib file into %s",qPrintable(destDirString + QDir::separator() + mainFileName()));
|
||||
|
||||
@ -73,8 +74,7 @@ bool FilterHighQualityRender::makeScene(MeshModel &m,
|
||||
*textureDirs = dirList;
|
||||
break;
|
||||
case FilterHighQualityRender::PROCEDURAL:
|
||||
*proceduralDirs = dirList;
|
||||
|
||||
*proceduralDirs = dirList;
|
||||
break;
|
||||
case FilterHighQualityRender::ERR:
|
||||
//ignore: maybe an error or another searchpath type (not in RISpec3.2)
|
||||
@ -98,7 +98,10 @@ bool FilterHighQualityRender::makeScene(MeshModel &m,
|
||||
case ribParser::FRAMEBEGIN:
|
||||
{
|
||||
QStringList token = ribParser::splitStatement(&line);
|
||||
currentFrame = token[1].toInt(); //no check on cast
|
||||
bool isNum;
|
||||
int i = token[1].toInt(&isNum);
|
||||
if(isNum)
|
||||
currentFrame = i;
|
||||
if(currentFrame == 1) { //questo è casino con animazioni
|
||||
if(numOfFrames > 0)
|
||||
isFrameDeclaration = true;
|
||||
@ -145,8 +148,7 @@ bool FilterHighQualityRender::makeScene(MeshModel &m,
|
||||
{
|
||||
//transformation camera
|
||||
if(numOfFrames > 0) {
|
||||
//line = readArray(&files,line); ////
|
||||
transfCamera = getMatrix(line);
|
||||
transfCamera = getMatrix(&line);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -170,6 +172,9 @@ bool FilterHighQualityRender::makeScene(MeshModel &m,
|
||||
fprintf(fout,"ReadArchive \"world.rib\"\n");
|
||||
fout = fopen(qPrintable(filename),"wb");
|
||||
if(fout == NULL) {
|
||||
this->errorMessage = "Impossible to create file: " + filename;
|
||||
fclose(fmain);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -192,8 +197,12 @@ bool FilterHighQualityRender::makeScene(MeshModel &m,
|
||||
QString filename = parseObject(&files, destDirString, currentFrame, m, par, textureList);
|
||||
qDebug("fuori: %s",qPrintable(filename));
|
||||
writeLine = false;
|
||||
if(filename == "") { //error in parseObject
|
||||
fclose(fmain);
|
||||
return false;
|
||||
}
|
||||
fprintf(fout,"ReadArchive \"%s\"\n",qPrintable(filename));
|
||||
break;
|
||||
break;
|
||||
}
|
||||
case ribParser::NOMORESTATEMENT:
|
||||
{
|
||||
@ -219,6 +228,8 @@ QString FilterHighQualityRender::parseObject(RibFileStack* files, QString destDi
|
||||
QString name = "object" + QString::number(numOfObject) + ".rib";
|
||||
FILE* fout = fopen(qPrintable(destDirString + QDir::separator() + name),"wb");
|
||||
if(fout == NULL) {
|
||||
this->errorMessage = "Impossible to create file: " + destDirString + QDir::separator() + name;
|
||||
return "";
|
||||
}
|
||||
qDebug("parse object");
|
||||
//if it's a dummy object, i need the the follow value:
|
||||
@ -255,7 +266,7 @@ QString FilterHighQualityRender::parseObject(RibFileStack* files, QString destDi
|
||||
}
|
||||
case ribParser::TRANSFORM:
|
||||
{
|
||||
current->objectMatrix = getMatrix(line);
|
||||
current->objectMatrix = getMatrix(&line);
|
||||
break;
|
||||
}
|
||||
case ribParser::BOUND:
|
||||
@ -317,7 +328,9 @@ QString FilterHighQualityRender::parseObject(RibFileStack* files, QString destDi
|
||||
}
|
||||
fclose(fout);
|
||||
|
||||
if(isDummy) {
|
||||
if(!isDummy)
|
||||
numOfObject++;
|
||||
else {
|
||||
qDebug("Found dummy object");
|
||||
//delete the previous file
|
||||
QDir tmp = QDir(destDirString);
|
||||
@ -327,18 +340,20 @@ QString FilterHighQualityRender::parseObject(RibFileStack* files, QString destDi
|
||||
numberOfDummies++;
|
||||
FILE *fmesh = fopen(qPrintable(destDirString + QDir::separator() + name),"wb");
|
||||
if(fmesh==NULL) {
|
||||
this->errorMessage = "Impossible to create the file: " + destDirString + QDir::separator() + name;
|
||||
return "";
|
||||
}
|
||||
convertObject(fmesh, destDirString, m, par, textureList, current);
|
||||
fclose(fmesh);
|
||||
}
|
||||
else
|
||||
numOfObject++;
|
||||
bool res = convertObject(fmesh, destDirString, m, par, textureList, current);
|
||||
fclose(fmesh);
|
||||
if(!res)
|
||||
return "";
|
||||
}
|
||||
delete current;
|
||||
return name;
|
||||
}
|
||||
|
||||
//write on a opened file the attribute of object entity
|
||||
int FilterHighQualityRender::convertObject(FILE* fout, QString destDir, MeshModel &m, RichParameterSet &par, QStringList* textureList, ObjValues* dummyValues)
|
||||
bool FilterHighQualityRender::convertObject(FILE* fout, QString destDir, MeshModel &m, RichParameterSet &par, QStringList* textureList, ObjValues* dummyValues)
|
||||
{
|
||||
fprintf(fout,"AttributeBegin\n");
|
||||
//name
|
||||
@ -397,7 +412,7 @@ int FilterHighQualityRender::convertObject(FILE* fout, QString destDir, MeshMode
|
||||
|
||||
vcg::Matrix44f result = templateMatrix * alignMatrix * scaleMatrix * translateBBMatrix;
|
||||
//write transformation matrix (after transpose it)
|
||||
writeMatrix(fout,result);
|
||||
writeMatrix(fout, &result);
|
||||
QString bound = "Bound";
|
||||
for(int i=0; i<6; i++)
|
||||
bound += " " + QString::number(dummyValues->objectBound[i]);
|
||||
@ -434,11 +449,18 @@ int FilterHighQualityRender::convertObject(FILE* fout, QString destDir, MeshMode
|
||||
//make the conversion only once
|
||||
convertedGeometry = true;
|
||||
QString geometryDest = destDir + QDir::separator() + filename;
|
||||
vcg::tri::io::ExporterRIB<CMeshO>::Save(m.cm, qPrintable(geometryDest), vcg::tri::io::Mask::IOM_ALL, false, cb);
|
||||
Log(GLLogStream::FILTER,"Successfully converted mesh");
|
||||
int res = vcg::tri::io::ExporterRIB<CMeshO>::Save(m.cm, qPrintable(geometryDest), vcg::tri::io::Mask::IOM_ALL, false, cb);
|
||||
if(res != vcg::tri::io::ExporterRIB<CMeshO>::E_NOERROR) {
|
||||
fclose(fout);
|
||||
this->errorMessage = QString(vcg::tri::io::ExporterRIB<CMeshO>::ErrorMsg(res));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
Log(GLLogStream::FILTER,"Successfully converted mesh");
|
||||
}
|
||||
fprintf(fout,"AttributeEnd\n");
|
||||
return 0; //errors...
|
||||
fclose(fout);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -470,7 +492,7 @@ int FilterHighQualityRender::makeAnimation(FILE* fout, int numOfFrame,vcg::Matri
|
||||
float rot = float(360*(frame-1)/numOfFrame);
|
||||
result = result.SetRotateDeg(rot,vcg::Point3f(0.0,0.0,1.0));
|
||||
result = transfCamera * result;
|
||||
writeMatrix(fout,result);
|
||||
writeMatrix(fout, &result);
|
||||
fprintf(fout,"ReadArchive \"world.rib\"\nFrameEnd\n");
|
||||
}
|
||||
return 0; //errors
|
||||
@ -501,20 +523,20 @@ QStringList FilterHighQualityRender::readSearchPath(const QStringList* token, in
|
||||
}
|
||||
|
||||
//write a vcg::Matrix44f to file
|
||||
int FilterHighQualityRender::writeMatrix(FILE* fout, vcg::Matrix44f matrix, bool transposed) {
|
||||
int FilterHighQualityRender::writeMatrix(FILE* fout, const vcg::Matrix44f* matrix, bool transposed) {
|
||||
fprintf(fout,"Transform [ ");
|
||||
for(int i = 0; i<4; i++)
|
||||
for(int j = 0; j<4; j++)
|
||||
fprintf(fout,"%f ",(transposed)? matrix.ElementAt(j,i) : matrix.ElementAt(i,j));
|
||||
fprintf(fout,"%f ",(transposed)? matrix->ElementAt(j,i) : matrix->ElementAt(i,j));
|
||||
fprintf(fout,"]\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//get a vcg::Matrix44f from line (and transpose it)
|
||||
vcg::Matrix44f FilterHighQualityRender::getMatrix(QString matrixString) {
|
||||
vcg::Matrix44f FilterHighQualityRender::getMatrix(const QString* matrixString) const {
|
||||
float t[16];
|
||||
int k=0;
|
||||
QStringList list = matrixString.split(' ');
|
||||
QStringList list = matrixString->split(' ');
|
||||
for(int i=0; i<list.size(); i++) {
|
||||
if(list[i].trimmed().contains('[') || list[i].trimmed().contains(']')) {
|
||||
list[i] = list[i].remove('[');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user