diff --git a/wrap/io_trimesh/export_u3d.h b/wrap/io_trimesh/export_u3d.h index 2b295e04..df04f493 100644 --- a/wrap/io_trimesh/export_u3d.h +++ b/wrap/io_trimesh/export_u3d.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "export_idtf.h" @@ -18,43 +19,61 @@ class ExporterU3D private: #ifdef WIN32 - static void InvokeConverter(const QString& input_idtf,const QString& output_u3d) + static void InvokeConverter(const QString& converter_path,const QString& input_idtf,const QString& output_u3d) { - system(("IDTFConverter.exe -input " + input_idtf + " -output " + output_u3d ).toAscii()); + QProcess p; + + p.start(converter_path + "IDTFConverter.exe -input " + input_idtf + " -output " + output_u3d); + //wait for two minutes + bool t = p.waitForFinished(120000); + p.close(); } #else #ifdef LINUX - static void InvokeConverter(const QString& input_idtf,const QString& output_u3d) + static void InvokeConverter(const char* converter_path,const QString& input_idtf,const QString& output_u3d) { - system(("IDTFConverter.exe -input " + input_idtf + " -output " + output_u3d ).toAscii())); + p.start(converter_path + "IDTFConverter.exe -input " + input_idtf + " -output " + output_u3d); + //wait for two minutes + bool t = p.waitForFinished(120000); + p.close(); } #endif #endif + static void SaveLatex(SaveMeshType& m,const QString& file) + { + Output_File latex(file.toStdString() + ".tex"); + QString u3df = file + ".u3d"; + latex.write(0,"\\\begin{document}"); + latex.write(0,"\\includemovie["); + latex.write(1,"poster,"); + latex.write(1,"toolbar, %same as `controls\'"); + latex.write(1,"label=" + file.toStdString() + ","); + latex.write(1,"text=(" + u3df.toStdString() + "),"); + latex.write(1,"3Daac=60, 3Dcoo=-3.382026195526123 -63.33322525024414 -3.2237343788146973, 3Droo=1.4597717633624103,"); + latex.write(1,"3Dlights=File,"); + latex.write(0,"]{\\linewidth}{\\linewidth}{" + u3df.toStdString() + "}"); + latex.write(0,"\\end{document}"); + } public: - static void Save(SaveMeshType& m,const char* outputfile,const int mask) + static void Save(SaveMeshType& m,const char* outputfile,const int mask,const char* converter_path) { - QDir dir; - - if (!dir.mkdir("__tmp_dir")) return; - else - { - QString curr = QDir::currentPath(); - QString tmp(outputfile); - tmp = "__tmp_dir/" + tmp + ".idtf"; - vcg::tri::io::ExporterIDTF::Save(m,tmp.toAscii(),mask); - QDir::setCurrent("../../code/lib/U3D/Bin/Win32/Release"); - InvokeConverter((curr + "/" + tmp).toAscii(),(curr + "/" + outputfile).toAscii()); - QDir::setCurrent(curr); - dir.remove(tmp.toAscii()); - dir.rmdir("__tmp_dir"); - } - + QString curr = QDir::currentPath(); + QString tmp(QDir::tempPath()); + tmp = tmp + "/" + outputfile + ".idtf"; + vcg::tri::io::ExporterIDTF::Save(m,qPrintable(tmp),mask); + InvokeConverter(converter_path,qPrintable(tmp),qPrintable(curr + "/" + outputfile)); + QDir::setCurrent(curr); + QString lat (outputfile); + QStringList l = lat.split("."); + SaveLatex(m,l[0]); + QDir dir(QDir::tempPath()); + dir.remove(tmp); } };