added \usepackage{hyperref} reference

This commit is contained in:
granzuglia 2010-05-04 09:59:38 +00:00
parent b6d2c330f2
commit 9508892e4c
1 changed files with 253 additions and 252 deletions

View File

@ -19,255 +19,256 @@
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * * GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
* for more details. * * for more details. *
* * * *
****************************************************************************/ ****************************************************************************/
#ifndef __VCGLIB_EXPORTERU3D #ifndef __VCGLIB_EXPORTERU3D
#define __VCGLIB_EXPORTERU3D #define __VCGLIB_EXPORTERU3D
#include <cstdlib> #include <cstdlib>
#include <string> #include <string>
#include <QDir> #include <QDir>
#include <QString> #include <QString>
#include <QProcess> #include <QProcess>
#include <vector> #include <vector>
#include <QMessageBox> #include <QMessageBox>
#include "export_idtf.h" #include "export_idtf.h"
#include<vcg/space/point3.h> #include<vcg/space/point3.h>
namespace vcg { namespace vcg {
namespace tri { namespace tri {
namespace io { namespace io {
namespace u3dparametersclasses namespace u3dparametersclasses
{ {
struct IDTFConverterParameters struct IDTFConverterParameters
{ {
const QString _converter_loc; const QString _converter_loc;
const QString _input_file; const QString _input_file;
const QString _output_file; const QString _output_file;
int positionQuality; int positionQuality;
IDTFConverterParameters(const QString& converter_loc,const QString& input_file,const QString& output_file) IDTFConverterParameters(const QString& converter_loc,const QString& input_file,const QString& output_file)
:_converter_loc(converter_loc),_input_file(input_file),_output_file(output_file) :_converter_loc(converter_loc),_input_file(input_file),_output_file(output_file)
{ {
} }
}; };
struct Movie15Parameters struct Movie15Parameters
{ {
Movie15Parameters() Movie15Parameters()
{ {
_campar = NULL; _campar = NULL;
} }
//WARNING: in movie15 y-axis and z-axis has been inverted!!! //WARNING: in movie15 y-axis and z-axis has been inverted!!!
class CameraParameters class CameraParameters
{ {
public: public:
CameraParameters() CameraParameters()
:_cam_fov_angle(0.0f),_cam_roll_angle(0.0f),_obj_to_cam_dir(vcg::Point3f(0.0f,0.0f,0.0f)),_obj_to_cam_dist(0.0f),_obj_bbox_diag(0.0f),_obj_pos(vcg::Point3f(0.0f,0.0f,0.0f)) :_cam_fov_angle(0.0f),_cam_roll_angle(0.0f),_obj_to_cam_dir(vcg::Point3f(0.0f,0.0f,0.0f)),_obj_to_cam_dist(0.0f),_obj_bbox_diag(0.0f),_obj_pos(vcg::Point3f(0.0f,0.0f,0.0f))
{ {
} }
CameraParameters(const vcg::Point3f& mesh_center,const float mesh_bbox_diag) CameraParameters(const vcg::Point3f& mesh_center,const float mesh_bbox_diag)
:_cam_fov_angle(0.0f),_cam_roll_angle(0.0f),_obj_to_cam_dir(vcg::Point3f(0.0f,0.0f,mesh_bbox_diag)),_obj_to_cam_dist(0.0),_obj_pos(mesh_center),_obj_bbox_diag(mesh_bbox_diag) :_cam_fov_angle(0.0f),_cam_roll_angle(0.0f),_obj_to_cam_dir(vcg::Point3f(0.0f,0.0f,mesh_bbox_diag)),_obj_to_cam_dist(0.0),_obj_pos(mesh_center),_obj_bbox_diag(mesh_bbox_diag)
{ {
} }
CameraParameters(const float cam_fov_angle,const float cam_roll_angle, CameraParameters(const float cam_fov_angle,const float cam_roll_angle,
const vcg::Point3f& obj_to_cam_dir,const float obj_to_cam_dist, const vcg::Point3f& obj_to_cam_dir,const float obj_to_cam_dist,
const float obj_bbox_diag, const float obj_bbox_diag,
const vcg::Point3f& obj_pos = vcg::Point3f(0.0f,0.0f,0.0f)) const vcg::Point3f& obj_pos = vcg::Point3f(0.0f,0.0f,0.0f))
:_cam_fov_angle(cam_fov_angle),_cam_roll_angle(cam_roll_angle),_obj_to_cam_dir(obj_to_cam_dir),_obj_to_cam_dist(obj_to_cam_dist),_obj_pos(obj_pos),_obj_bbox_diag(obj_bbox_diag) :_cam_fov_angle(cam_fov_angle),_cam_roll_angle(cam_roll_angle),_obj_to_cam_dir(obj_to_cam_dir),_obj_to_cam_dist(obj_to_cam_dist),_obj_pos(obj_pos),_obj_bbox_diag(obj_bbox_diag)
{ {
} }
float _cam_fov_angle; float _cam_fov_angle;
float _cam_roll_angle; float _cam_roll_angle;
vcg::Point3f _obj_to_cam_dir; vcg::Point3f _obj_to_cam_dir;
float _obj_to_cam_dist; float _obj_to_cam_dist;
vcg::Point3f _obj_pos; vcg::Point3f _obj_pos;
float _obj_bbox_diag; float _obj_bbox_diag;
}; };
CameraParameters* _campar; CameraParameters* _campar;
int positionQuality; int positionQuality;
}; };
} }
template<typename SaveMeshType> template<typename SaveMeshType>
class ExporterU3D class ExporterU3D
{ {
public: public:
enum U3DError enum U3DError
{ {
E_NOERROR, // 0 E_NOERROR, // 0
E_ABORTED_CONVERSION //1 E_ABORTED_CONVERSION //1
}; };
static const char *ErrorMsg(int error) static const char *ErrorMsg(int error)
{ {
static const char * dae_error_msg[] = static const char * dae_error_msg[] =
{ {
"No errors", "No errors",
"Conversion Process From Idtf intermediate file to U3D format aborted" "Conversion Process From Idtf intermediate file to U3D format aborted"
}; };
if(error>1 || error<0) return "Unknown error"; if(error>1 || error<0) return "Unknown error";
else return dae_error_msg[error]; else return dae_error_msg[error];
}; };
static void substituteChar(QString& st,const QChar& ch_remove,const QString& sub) static void substituteChar(QString& st,const QChar& ch_remove,const QString& sub)
{ {
int ii = 0; int ii = 0;
while ((ii = st.indexOf(ch_remove,ii)) != -1) while ((ii = st.indexOf(ch_remove,ii)) != -1)
st = st.replace(ii,1,sub); st = st.replace(ii,1,sub);
} }
private: private:
static int InvokeConverter(const u3dparametersclasses::IDTFConverterParameters& par) static int InvokeConverter(const u3dparametersclasses::IDTFConverterParameters& par)
{ {
QProcess p; QProcess p;
QString convstring = par._converter_loc; QString convstring = par._converter_loc;
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
convstring = "\""+convstring + "\" -en 1 -rzf 0 -pq "+QString::number(par.positionQuality)+" -input \"" + par._input_file + "\" -output \"" + par._output_file +"\""; convstring = "\""+convstring + "\" -en 1 -rzf 0 -pq "+QString::number(par.positionQuality)+" -input \"" + par._input_file + "\" -output \"" + par._output_file +"\"";
#else #else
QString mac_input=par._input_file; QString mac_input=par._input_file;
QString mac_output=par._output_file; QString mac_output=par._output_file;
//mac_input.replace(QString(" "),QString("\\ ")); //mac_input.replace(QString(" "),QString("\\ "));
//mac_output.replace(QString(" "),QString("\\ ")); //mac_output.replace(QString(" "),QString("\\ "));
convstring = convstring + " -en 1 -rzf 0 -pq "+ QString::number(par.positionQuality)+" -input \"" + mac_input + "\" -output \"" + mac_output +"\""; convstring = convstring + " -en 1 -rzf 0 -pq "+ QString::number(par.positionQuality)+" -input \"" + mac_input + "\" -output \"" + mac_output +"\"";
#endif #endif
//QMessageBox::warning(0, QString("Saving Log"), QString("Started conversion executable '%1'").arg(convstring)); //QMessageBox::warning(0, QString("Saving Log"), QString("Started conversion executable '%1'").arg(convstring));
qDebug("Starting converter %s", qPrintable(convstring)); qDebug("Starting converter %s", qPrintable(convstring));
p.setProcessChannelMode(QProcess::MergedChannels); p.setProcessChannelMode(QProcess::MergedChannels);
p.start(convstring); p.start(convstring);
//wait until the task has been completed //wait until the task has been completed
bool t = p.waitForFinished(-1); bool t = p.waitForFinished(-1);
if(!t) QMessageBox::warning(0, QString("Saving Error"), QString("Failed conversion executable '%1'").arg(convstring)); if(!t) QMessageBox::warning(0, QString("Saving Error"), QString("Failed conversion executable '%1'").arg(convstring));
p.close(); p.close();
return (int) t; return (int) t;
} }
static void SaveLatex(SaveMeshType& /*m*/,const QString& file,const u3dparametersclasses::Movie15Parameters& mov_par) static void SaveLatex(SaveMeshType& /*m*/,const QString& file,const u3dparametersclasses::Movie15Parameters& mov_par)
{ {
Output_File latex(file.toStdString() + ".tex"); Output_File latex(file.toStdString() + ".tex");
QString u3df = file + ".u3d"; QString u3df = file + ".u3d";
QStringList file_trim; QStringList file_trim;
QtUtilityFunctions::splitFilePath(u3df,file_trim); QtUtilityFunctions::splitFilePath(u3df,file_trim);
std::string u3d_final = QtUtilityFunctions::fileNameFromTrimmedPath(file_trim).toStdString(); std::string u3d_final = QtUtilityFunctions::fileNameFromTrimmedPath(file_trim).toStdString();
latex.write(0,"\\documentclass[a4paper]{article}"); latex.write(0,"\\documentclass[a4paper]{article}");
latex.write(0,"\\usepackage[3D]{movie15}"); latex.write(0,"\\usepackage[3D]{movie15}");
latex.write(0,"\\usepackage[UKenglish]{babel}"); latex.write(0,"\usepackage{hyperref}");
latex.write(0,"\\begin{document}"); latex.write(0,"\\usepackage[UKenglish]{babel}");
latex.write(0,"\\includemovie["); latex.write(0,"\\begin{document}");
latex.write(1,"poster,"); latex.write(0,"\\includemovie[");
latex.write(1,"toolbar, %same as `controls\'"); latex.write(1,"poster,");
latex.write(1,"toolbar, %same as `controls\'");
QString u3d_text = QString::fromStdString(u3d_final);
substituteChar(u3d_text,QChar('_'),QString("")); QString u3d_text = QString::fromStdString(u3d_final);
latex.write(1,"label=" + u3d_text.toStdString() + ","); substituteChar(u3d_text,QChar('_'),QString(""));
latex.write(1,"text=(" + u3d_text.toStdString() + "),"); latex.write(1,"label=" + u3d_text.toStdString() + ",");
std::string cam_string; latex.write(1,"text=(" + u3d_text.toStdString() + "),");
u3dparametersclasses::Movie15Parameters::CameraParameters* cam = mov_par._campar; std::string cam_string;
if (cam != NULL) u3dparametersclasses::Movie15Parameters::CameraParameters* cam = mov_par._campar;
{ if (cam != NULL)
cam_string = cam_string + "3Daac=" + TextUtility::nmbToStr(cam->_cam_fov_angle) + {
", 3Droll=" + TextUtility::nmbToStr(cam->_cam_roll_angle) + cam_string = cam_string + "3Daac=" + TextUtility::nmbToStr(cam->_cam_fov_angle) +
", 3Dc2c=" + TextUtility::nmbToStr(cam->_obj_to_cam_dir.X()) + " " + TextUtility::nmbToStr(cam->_obj_to_cam_dir.Z()) + " " + TextUtility::nmbToStr(cam->_obj_to_cam_dir.Y()) + ", 3Droll=" + TextUtility::nmbToStr(cam->_cam_roll_angle) +
", 3Droo=" + TextUtility::nmbToStr(cam->_obj_to_cam_dist) + ", 3Dc2c=" + TextUtility::nmbToStr(cam->_obj_to_cam_dir.X()) + " " + TextUtility::nmbToStr(cam->_obj_to_cam_dir.Z()) + " " + TextUtility::nmbToStr(cam->_obj_to_cam_dir.Y()) +
", 3Dcoo=" + TextUtility::nmbToStr(-cam->_obj_pos.X()) + " " + TextUtility::nmbToStr(cam->_obj_pos.Z()) + " " + TextUtility::nmbToStr(cam->_obj_pos.Y()) + ","; ", 3Droo=" + TextUtility::nmbToStr(cam->_obj_to_cam_dist) +
latex.write(1,cam_string); ", 3Dcoo=" + TextUtility::nmbToStr(-cam->_obj_pos.X()) + " " + TextUtility::nmbToStr(cam->_obj_pos.Z()) + " " + TextUtility::nmbToStr(cam->_obj_pos.Y()) + ",";
} latex.write(1,cam_string);
latex.write(1,"3Dlights=CAD,"); }
latex.write(0,"]{\\linewidth}{\\linewidth}{" + u3d_final + "}"); latex.write(1,"3Dlights=CAD,");
latex.write(0,"\\end{document}"); latex.write(0,"]{\\linewidth}{\\linewidth}{" + u3d_final + "}");
} latex.write(0,"\\end{document}");
}
public:
public:
static int Save(SaveMeshType& m,const char* output_file,const char* conv_loc,const u3dparametersclasses::Movie15Parameters& mov_par,const int mask)
{ static int Save(SaveMeshType& m,const char* output_file,const char* conv_loc,const u3dparametersclasses::Movie15Parameters& mov_par,const int mask)
QString curr = QDir::currentPath(); {
QString out(output_file); QString curr = QDir::currentPath();
QStringList out_trim; QString out(output_file);
QtUtilityFunctions::splitFilePath(out,out_trim); QStringList out_trim;
QString tmp(QDir::tempPath()); QtUtilityFunctions::splitFilePath(out,out_trim);
QString tmp(QDir::tempPath());
tmp = tmp + "/" + QtUtilityFunctions::fileNameFromTrimmedPath(out_trim) + ".idtf";
tmp = tmp + "/" + QtUtilityFunctions::fileNameFromTrimmedPath(out_trim) + ".idtf";
QString conv_loc_st(conv_loc);
QString output_file_st(output_file); QString conv_loc_st(conv_loc);
QString output_file_st(output_file);
////if there are textures file that aren't in tga format I have to convert them
////I maintain the converted file name (i.e. file_path + originalname without extension + tga) in mesh.textures but I have to revert to the original ones ////if there are textures file that aren't in tga format I have to convert them
////before the function return. ////I maintain the converted file name (i.e. file_path + originalname without extension + tga) in mesh.textures but I have to revert to the original ones
////before the function return.
//QStringList oldtextname;
//for(unsigned int ii = 0; ii < m.textures.size();++ii) //QStringList oldtextname;
// oldtextname.push_back(m.textures[ii].c_str()); //for(unsigned int ii = 0; ii < m.textures.size();++ii)
// oldtextname.push_back(m.textures[ii].c_str());
////tmp vector to save the tga created files that should be deleted.
//QStringList convfile; ////tmp vector to save the tga created files that should be deleted.
//convertTexturesFiles(m,curr,convfile); //QStringList convfile;
//convertTexturesFiles(m,curr,convfile);
vcg::tri::io::ExporterIDTF<SaveMeshType>::Save(m,qPrintable(tmp),mask);
u3dparametersclasses::IDTFConverterParameters idtfpar(conv_loc_st,tmp,output_file_st); vcg::tri::io::ExporterIDTF<SaveMeshType>::Save(m,qPrintable(tmp),mask);
idtfpar.positionQuality = mov_par.positionQuality; u3dparametersclasses::IDTFConverterParameters idtfpar(conv_loc_st,tmp,output_file_st);
qDebug("conv_loc_st '%s'", qPrintable(conv_loc_st)); idtfpar.positionQuality = mov_par.positionQuality;
qDebug("conv_loc '%s'", conv_loc); qDebug("conv_loc_st '%s'", qPrintable(conv_loc_st));
qDebug("idtfpar._converter_loc '%s'", qPrintable(idtfpar._converter_loc)); qDebug("conv_loc '%s'", conv_loc);
int res = InvokeConverter(idtfpar); qDebug("idtfpar._converter_loc '%s'", qPrintable(idtfpar._converter_loc));
int res = InvokeConverter(idtfpar);
//m.textures.clear();
//for(QStringList::iterator it = oldtextname.begin(); it != oldtextname.end();++it) //m.textures.clear();
// m.textures.push_back(it->toStdString()); //for(QStringList::iterator it = oldtextname.begin(); it != oldtextname.end();++it)
////if some tga files have been created I have to delete them // m.textures.push_back(it->toStdString());
//removeConvertedTexturesFiles(convfile); ////if some tga files have been created I have to delete them
//removeConvertedTexturesFiles(convfile);
QDir::setCurrent(curr);
QString lat (output_file); QDir::setCurrent(curr);
QStringList l = lat.split("."); QString lat (output_file);
SaveLatex(m,l[0],mov_par); QStringList l = lat.split(".");
QDir dir(QDir::tempPath()); SaveLatex(m,l[0],mov_par);
dir.remove(tmp); QDir dir(QDir::tempPath());
dir.remove(tmp);
if (res)
return 0; if (res)
else return 0;
return 1; else
} return 1;
}
static int GetExportMaskCapability()
{ static int GetExportMaskCapability()
int capability = 0; {
int capability = 0;
//vert
//capability |= Mask::IOM_VERTNORMAL; //vert
capability |= vcg::tri::io::Mask::IOM_VERTCOLOR; //capability |= Mask::IOM_VERTNORMAL;
//capability |= vcg::tri::io::Mask::IOM_VERTCOLOR; capability |= vcg::tri::io::Mask::IOM_VERTCOLOR;
//capability |= vcg::tri::io::Mask::IOM_VERTCOLOR;
//face
capability |= vcg::tri::io::Mask::IOM_FACECOLOR; //face
capability |= vcg::tri::io::Mask::IOM_FACECOLOR;
////wedg
capability |= Mask::IOM_WEDGTEXCOORD; ////wedg
//capability |= Mask::IOM_WEDGNORMAL; capability |= Mask::IOM_WEDGTEXCOORD;
//capability |= Mask::IOM_WEDGNORMAL;
return capability;
} return capability;
}
};
};
}
} }
} }
}
#endif
#endif