diff --git a/cmake/version.cmake b/cmake/version.cmake index 31f5977..e6b3c37 100644 --- a/cmake/version.cmake +++ b/cmake/version.cmake @@ -3,8 +3,8 @@ # set (QT_VTK_MAJOR_VERSION "8") -set (QT_VTK_MINOR_VERSION "5") -set (QT_VTK_RELEASE_VERSION "1") +set (QT_VTK_MINOR_VERSION "6") +set (QT_VTK_RELEASE_VERSION "0") set (QT_VTK_VERSION ${QT_VTK_MAJOR_VERSION}.${QT_VTK_MINOR_VERSION}.${QT_VTK_RELEASE_VERSION}) diff --git a/src/QtVtk/QtVTKPrintHelper.cpp b/src/QtVtk/QtVTKPrintHelper.cpp index 8c42b12..5ea1bdf 100644 --- a/src/QtVtk/QtVTKPrintHelper.cpp +++ b/src/QtVtk/QtVTKPrintHelper.cpp @@ -4,6 +4,7 @@ // voir fichier /etc/printcap : liste des imprimantes #include +#include #include #include @@ -305,8 +306,7 @@ void QtVTKPrintHelper::printToFile (vtkRenderWindow& window, const string& fileN if ((string::npos == dotPos) || (string::npos == fileName.length ( ) - 1)) { UTF8String error (charset); - error << "Impossibilité de déterminer le format du fichier à " - << "partir de son extension.\n" + error << "Impossibilité de déterminer le format du fichier à partir de son extension.\n" << "Extensions possibles : " << ".ps .eps .jpg .jpeg .bmp .png .pnm .tiff .pdf"; throw Exception (error); @@ -340,36 +340,39 @@ void QtVTKPrintHelper::printToFile (vtkRenderWindow& window, const string& fileN } // EPS ou PDF // V 7.14.7 : on s'assure que la copie du buffer graphique pourra fonctionner, à savoir qu'on fonctionne sur une - // machine aveccarte graphique, ou, à défaut, pas sur une machine virtuelle : + // machine avec carte graphique, ou, à défaut, pas sur une machine virtuelle : static bool first = true; static bool useHard = true; - if (true == first) + if (true == QtVtk::forceSoftwarePrinter) { - const string glVendor ((const char*)glGetString (GL_VENDOR)); // NVIDIA, ATI, Intel, ... - const string glRenderer ((const char*)glGetString (GL_RENDERER)); // Quattro, Mesa DRI Intel, ... - if ((true == glVendor.empty ( )) || (true == glRenderer.empty ( ))) - useHard = false; - if (NULL != strcasestr (glRenderer.c_str ( ), "llvmpipe")) - useHard = false; - if (false == useHard) // Pas de hard détecté, par sécurité on fait une impression offscreen : - cout << "Absence de carte graphique détectée, les impressions dans un fichier seront effectuées en rendu logiciel par sécurité." << endl; - else + if (true == first) { - if (true == MachineData::isVirtualMachine ( )) - { + const string glVendor ((const char*)glGetString (GL_VENDOR)); // NVIDIA, ATI, Intel, ... + const string glRenderer ((const char*)glGetString (GL_RENDERER)); // Quattro, Mesa DRI Intel, ... + if ((true == glVendor.empty ( )) || (true == glRenderer.empty ( ))) useHard = false; - cout << "Machine virtuelle détectée, les impressions dans un fichier seront effectuées en rendu logiciel par sécurité." << endl; - } // if (true == MachineData::isVirtualMachine ( )) - } // else if (false == useHard) - first = false; - } // if (true == first) - - if (false == useHard) + if (NULL != strcasestr (glRenderer.c_str ( ), "llvmpipe")) + useHard = false; + if (false == useHard) // Pas de hard détecté, par sécurité on fait une impression offscreen : + cout << "Absence de carte graphique détectée, les impressions dans un fichier seront effectuées en rendu logiciel par sécurité." << endl; + else + { + if (true == MachineData::isVirtualMachine ( )) + { + useHard = false; + cout << "Machine virtuelle détectée, les impressions dans un fichier seront effectuées en rendu logiciel par sécurité." << endl; + } // if (true == MachineData::isVirtualMachine ( )) + } // else if (false == useHard) + first = false; + } // if (true == first) + } // if (true == QtVtk::forceSoftwarePrinter) + + if ((true == QtVtk::forceSoftwarePrinter) || (false == useHard)) { printToFile (window, fileName, window.GetSize ( )[0], window.GetSize ( )[1]); return; - } // if (false == useHard) - + } // if ((true == QtVtk::forceSoftwarePrinter) || (false == useHard)) + // Impression raster : on passe par un image. vtkWindowToImageFilter* windowToImageFilter = vtkWindowToImageFilter::New ( ); vtkImageWriter* writer = createWriter (fileName); diff --git a/src/QtVtk/QtVtk.cpp b/src/QtVtk/QtVtk.cpp index bff1d64..ca34e50 100644 --- a/src/QtVtk/QtVtk.cpp +++ b/src/QtVtk/QtVtk.cpp @@ -17,6 +17,7 @@ static vtkSmartPointer hardwareSelector; static vtkSmartPointer hardwareSelectionWindow; static vtkSmartPointer hardwareSelectionRenderer; +bool QtVtk::forceSoftwarePrinter = true; // v 8.6.0 QtVtk::QtVtk ( ) @@ -44,8 +45,9 @@ QtVtk::~QtVtk ( ) } // QtVtk::~QtVtk -void QtVtk::initialize ( ) +void QtVtk::initialize (bool softwarePrinter) { + forceSoftwarePrinter = softwarePrinter; // v 8.6.0 // Q_INIT_RESOURCE (QtVtk); /* if (0 != QApplication::desktop ( )) diff --git a/src/QtVtk/public/QtVtk/QtVtk.h b/src/QtVtk/public/QtVtk/QtVtk.h index b89e069..920fea3 100644 --- a/src/QtVtk/public/QtVtk/QtVtk.h +++ b/src/QtVtk/public/QtVtk/QtVtk.h @@ -30,9 +30,12 @@ class QtVtk public : /** - * Initialisation des services.. + * Initialisation des services. + * @param forceSoftwarePrinter : true si on force des impressions n'utilisant pas le buffer de la fenêtre Open GL. Les impressions sont plus lentes et coûteuses + * en mémoire, mais le rendu "hard" dysfonctionne dans certaines configurations, voire peut planter une station ou session de machine virtuelle. Vaut true + * par défaut. */ - static void initialize ( ); + static void initialize (bool forceSoftwarePrinter = true); /** * Arrêts des services. @@ -65,6 +68,14 @@ class QtVtk static vtkRenderer& getHardwareSelectionRenderer ( ); + /** true si on force des impressions n'utilisant pas le buffer de la fenêtre Open GL. Les impressions sont plus lentes et coûteuses + * en mémoire, mais le rendu "hard" dysfonctionne dans certaines configurations, voire peut planter une station ou session de machine virtuelle. + * Vaut true par défaut. + * @since 8.6.0 + */ + static bool forceSoftwarePrinter; + + private : /** diff --git a/versions.txt b/versions.txt index d12a0dd..a9e821f 100644 --- a/versions.txt +++ b/versions.txt @@ -1,5 +1,12 @@ A FAIRE : tester le vtkIntersectionPolyDataFilter de VTK 7, voir si de base il propose les services attendus (Inner, ...). +Version 8.6.0 : 22/11/24 +=============== + +Par défaut les impressions sont toutes faites en rendu soft. En effet, le rendu hard est très dégradé dans des configurations récentes, +et peut planter une session effectuées dans une machine virtuelle. + + Version 8.5.1 : 14/06/24 ===============