[Paraview] GL2PS for Paraview - Plugin Problems

Berk Geveci berk.geveci at kitware.com
Sat Mar 1 10:29:13 EST 2008


Hi Sven,

Actually, the "reasoning" behind us not including your patch is that
we have been busy. I suggest putting a feature request in the bug
tracker and attach the patch to it. When someone has some time, he can
test your patch and then make a decision on whether we want to support
postscript output or not. If I recall, gl2ps also supports svg and pdf
which is very nice.

-berk

On 3/1/08, Sven Buijssen <sven.buijssen at uni-dortmund.de> wrote:
> Hi Enkelejda,
>
>
>  > VTK provides the class vtkGL2PSExporter to export a scene as a
>  > PostScript file using GL2PS. This is also very nice to have in Paraview,
>  > as it writes vector PostScript (PS/EPS), and is thus very nice for
>  > publication pics.
>
>
> In August 2007 I posted a patch for the ParaView 3.1.0 source tree adding vector
>  postscript output to Paraview by means of GL2PS. There were no follow-ups to
>  this post on the mailing list, I received a few reactions via personal e-mail. I
>  assume the point of view of the ParaView developers is to not support vector
>  postscript output as many things one can visualise with ParaView can simply not
>  be exported to Postscript with GL2PS. I perfectly understand this argument, in
>  particular as it prevents a lot of bug reports concerning the seemingly broken
>  vector postscript support.
>
>  Nonetheless, I find vector postscript output very useful to have in ParaView
>  (eps format requirements for publications). I ported my patch to the current
>  development distribution (3.3.0, cvs version as of today, QT 4.3.4). It is less
>  well integrated into the code than previously (as the export routines moved from
>  Qt/Core/pqRenderView.cxx to Qt/Core/pqImageUtil.cxx since 3.1.0 and the patch
>  still applies mainly to Qt/Core/pqRenderView.cxx), but it does the job.
>
>  It is not the Plugin approach you pursued, but I hope it helps.
>
>  It is probably a bit too perky to ask for, but it would be great if the patch
>  would make it into the CVS repository, as then there would be a chance that
>  someone with more VTK experience than me would keep it up to date, automatically
>  would disable conflicting drawing options (e.g. "Interpolate Colors") and
>  possibly even add some kind of error handling.
>
>
>  Sven
>
> diff -Nau -r ParaView3.orig/CMake/ParaViewCommon.cmake ParaView3/CMake/ParaViewCommon.cmake
>  --- ParaView3.orig/CMake/ParaViewCommon.cmake   2008-03-01 15:58:31.000000000 +0100
>  +++ ParaView3/CMake/ParaViewCommon.cmake        2008-01-14 13:49:03.000000000 +0100
>  @@ -28,7 +28,7 @@
>   SET(VTK_USE_HYBRID_ISSET ON)
>   SET(VTK_USE_PARALLEL_ISSET ON)
>   SET(VTK_USE_VOLUMERENDERING_ISSET ON)
>  -SET(VTK_USE_GL2PS_ISSET OFF)
>  +SET(VTK_USE_GL2PS_ISSET ON)
>   SET(VTK_USE_ANSI_STDLIB ${PARAVIEW_USE_ANSI_STDLIB})
>   SET(VTK_HEADER_TESTING_PY "${ParaView_SOURCE_DIR}/VTK/Common/Testing/HeaderTesting.py")
>   SET(VTK_PRINT_SELF_CHECK_TCL "${ParaView_SOURCE_DIR}/VTK/Common/Testing/Tcl/PrintSelfCheck.tcl")
>  diff -Nau -r ParaView3.orig/Qt/Components/pqMainWindowCore.cxx ParaView3/Qt/Components/pqMainWindowCore.cxx
>  --- ParaView3.orig/Qt/Components/pqMainWindowCore.cxx   2008-03-01 15:58:31.000000000 +0100
>  +++ ParaView3/Qt/Components/pqMainWindowCore.cxx        2008-03-01 11:16:00.000000000 +0100
>  @@ -1687,6 +1687,11 @@
>    filters += ";;PPM image (*.ppm)";
>    filters += ";;JPG image (*.jpg)";
>    filters += ";;PDF file (*.pdf)";
>  +#ifdef VTK_USE_GL2PS
>  +  filters += ";;Postscript file (*.ps)";
>  +  filters += ";;Encapsulated Postscript file (*.eps)";
>  +  filters += ";;Scalable Vector Graphics file (*.svg)";
>  +#endif
>    filters += ";;All files (*)";
>    pqFileDialog* const file_dialog = new pqFileDialog(NULL,
>      this->Implementation->Parent, tr("Save Screenshot:"), QString(), filters);
>  diff -Nau -r ParaView3.orig/Qt/Core/pqRenderView.cxx ParaView3/Qt/Core/pqRenderView.cxx
>  --- ParaView3.orig/Qt/Core/pqRenderView.cxx     2008-03-01 15:58:31.000000000 +0100
>  +++ ParaView3/Qt/Core/pqRenderView.cxx  2008-01-14 17:53:50.000000000 +0100
>  @@ -54,6 +54,12 @@
>   #include "vtkSMUndoStack.h"
>   #include "vtkTrackballPan.h"
>
>  +#include <vtkToolkits.h>
>  +#ifdef VTK_USE_GL2PS
>  +#include "vtkGL2PSExporter.h"
>  +#include "vtkRenderWindow.h"
>  +#endif
>  +
>   // Qt includes.
>   #include <QFileInfo>
>   #include <QList>
>  @@ -567,6 +573,72 @@
>
>    int error_code = vtkErrorCode::UnknownError;
>    vtkImageData* vtkimage = this->getRenderViewProxy()->CaptureWindow(magnification);
>  +#ifdef VTK_USE_GL2PS
>  +  const QFileInfo file(filename);
>  +  if (file.suffix() == "ps" || file.suffix() == "eps" || file.suffix() == "svg")
>  +  {
>  +      // ParaView 3.1.0 - Variant 1 (works!)
>  +//    vtkGL2PSExporter* psExporter = vtkGL2PSExporter::New();
>  +//    psExporter->SetRenderWindow(this->Internal->RenderModuleProxy->GetRenderWindow());
>  +
>  +      // ParaView 3.1.0 - Variant 2 (works!)
>  +//    vtkSmartPointer< vtkGL2PSExporter > psExporter( vtkGL2PSExporter::New() );
>  +//    psExporter->SetRenderWindow(this->Internal->Viewport->GetRenderWindow());
>  +
>  +      // ParaView 3.3.0
>  +      vtkSmartPointer< vtkGL2PSExporter > psExporter( vtkGL2PSExporter::New() );
>  +      // works, but does not respect magnification requests. Does not make
>  +      // a difference anyway as increasing magnification does not improve
>  +      // rendering resolution in ParaView right now.
>  +      psExporter->SetRenderWindow(this->getRenderViewProxy()->GetRenderWindow());
>  +
>  +      // Enforce maximal smoothing. Not sure whether this makes a difference or
>  +      // is needed at all.
>  +//    vtkRenderWindow *smoothing = vtkRenderWindow::New();
>  +//    smoothing = this->Internal->Viewport->GetRenderWindow();
>  +//    smoothing->LineSmoothingOn();
>  +//    smoothing->PointSmoothingOn ();
>  +//    smoothing->PolygonSmoothingOn ();
>  +
>  +      // Treat filename, it already contains a suffix which needs to be cut off
>  +      QString filename2 = filename;
>  +      if( filename2.endsWith( ".ps" ) || filename2.endsWith( ".PS" ) )
>  +      {
>  +         filename2.chop( 3 );
>  +        psExporter->SetFileFormatToPS();
>  +      }
>  +      if( filename2.endsWith( ".eps" ) || filename2.endsWith( ".EPS" ) )
>  +      {
>  +        filename2.chop( 4 );
>  +        psExporter->SetFileFormatToEPS();
>  +      }
>  +      if( filename2.endsWith( ".svg" ) || filename2.endsWith( ".SVG" ) )
>  +      {
>  +        filename2.chop( 4 );
>  +         psExporter->SetFileFormatToSVG();
>  +      }
>  +
>  +      // Variant 1 (works! Difference to second variant unclear.)
>  +//    psExporter->SetFilePrefix(qPrintable(filename2));
>  +
>  +      // Variant 2 (works! support for unicode?)
>  +      psExporter->SetFilePrefix( filename2.toStdString().c_str() );
>  +
>  +      psExporter->CompressOff();
>  +      psExporter->DrawBackgroundOff();
>  +      psExporter->TextOn();
>  +      psExporter->PS3ShadingOn();
>  +      psExporter->OcclusionCullOn();
>  +      psExporter->SetSortToBSP();
>  +
>  +      psExporter->Write();
>  +      psExporter->Delete();
>  +
>  +      // TODO: add some error checking.
>  +      error_code = vtkErrorCode::NoError;
>  +  }
>  +  else
>  +#endif
>    if (vtkimage)
>      {
>      error_code = pqImageUtil::saveImage(vtkimage, filename);
>
> _______________________________________________
>  ParaView mailing list
>  ParaView at paraview.org
>  http://www.paraview.org/mailman/listinfo/paraview
>
>


More information about the ParaView mailing list