Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

303 lines
10 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkGL2PSExporter.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkGL2PSExporter - export a scene as a PostScript file using GL2PS.
// .SECTION Description
// vtkGL2PSExporter is a concrete subclass of vtkExporter that writes
// high quality vector PostScript (PS/EPS) or PDF files by using
// GL2PS. GL2PS can be obtained at: http://www.geuz.org/gl2ps/. This
// can be very useful when one requires publication quality pictures.
// This class works best with simple 3D scenes and most 2D plots.
// Please note that GL2PS has its limitations since PostScript is not
// an ideal language to represent complex 3D scenes. However, this
// class does allow one to write mixed vector/raster files by using
// the Write3DPropsAsRasterImage ivar. Please do read the caveats
// section of this documentation.
//
// By default vtkGL2PSExporter generates Encapsulated PostScript (EPS)
// output along with the text in portrait orientation with the
// background color of the window being drawn. The generated output
// is also compressed using zlib. The various other options are set to
// sensible defaults.
//
// The output file format (FileFormat) can be either PostScript (PS),
// Encapsulated PostScript (EPS), PDF or TeX. The file extension is
// generated automatically depending on the FileFormat. The default
// is EPS. When TeX output is chosen, only the text strings in the
// plot are generated and put into a picture environment. One can
// turn on and off the text when generating PS/EPS/PDF files by using
// the Text boolean variable. By default the text is drawn. The
// background color of the renderwindow is drawn by default. To make
// the background white instead use the DrawBackgroundOff function.
// Landscape figures can be generated by using the LandscapeOn
// function. Portrait orientation is used by default. Several of the
// GL2PS options can be set. The names of the ivars for these options
// are similar to the ones that GL2PS provides. Compress,
// SimpleLineOffset, Silent, BestRoot, PS3Shading and OcclusionCull
// are similar to the options provided by GL2PS. Please read the
// function documentation or the GL2PS documentation for more details.
// The ivar Write3DPropsAsRasterImage allows one to generate mixed
// vector/raster images. All the 3D props in the scene will be
// written as a raster image and all 2D actors will be written as
// vector graphic primitives. This makes it possible to handle
// transparency and complex 3D scenes. This ivar is set to Off by
// default. When drawing lines and points the OpenGL point size and
// line width are multiplied by a factor in order to generate
// PostScript lines and points of the right size. The
// Get/SetGlobalPointSizeFactor and Get/SetGlobalLineWidthFactor let
// one customize this ratio. The default value is such that the
// PostScript output looks close to what is seen on screen.
//
// To use this class you need to turn on VTK_USE_GL2PS when
// configuring VTK.
// .SECTION Caveats
// By default (with Write3DPropsAsRasterImage set to Off) exporting
// complex 3D scenes can take a long while and result in huge output
// files. Generating correct vector graphics output for scenes with
// transparency is almost impossible. However, one can set
// Write3DPropsAsRasterImageOn and generate mixed vector/raster files.
// This should work fine with complex scenes along with transparent
// actors.
// .SECTION See Also
// vtkExporter
// .SECTION Thanks
// Thanks to Goodwin Lawlor and Prabhu Ramachandran for this class.
#ifndef __vtkGL2PSExporter_h
#define __vtkGL2PSExporter_h
#include "vtkExporter.h"
class VTK_RENDERING_EXPORT vtkGL2PSExporter : public vtkExporter
{
public:
static vtkGL2PSExporter *New();
vtkTypeRevisionMacro(vtkGL2PSExporter,vtkExporter);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Specify the prefix of the files to write out. The resulting filenames
// will have .ps or .eps or .tex appended to them depending on the
// other options chosen.
vtkSetStringMacro(FilePrefix);
vtkGetStringMacro(FilePrefix);
//BTX
enum OutputFormat
{
PS_FILE,
EPS_FILE,
PDF_FILE,
TEX_FILE
};
//ETX
// Description:
// Specify the format of file to write out. This can be one of:
// PS_FILE, EPS_FILE, PDF_FILE, TEX_FILE. Defaults to EPS_FILE.
// Depending on the option chosen it generates the appropriate file
// (with correct extension) when the Write function is called.
vtkSetClampMacro(FileFormat, int, PS_FILE, TEX_FILE);
vtkGetMacro(FileFormat, int);
void SetFileFormatToPS()
{this->SetFileFormat(PS_FILE);};
void SetFileFormatToEPS()
{this->SetFileFormat(EPS_FILE);};
void SetFileFormatToPDF()
{this->SetFileFormat(PDF_FILE);};
void SetFileFormatToTeX()
{this->SetFileFormat(TEX_FILE);};
char *GetFileFormatAsString();
//BTX
enum SortScheme
{
NO_SORT=0,
SIMPLE_SORT=1,
BSP_SORT=2
};
//ETX
// Description:
// Set the the type of sorting algorithm to order primitives from
// back to front. Successive algorithms are more memory
// intensive. Simple is the default but BSP is perhaps the best.
vtkSetClampMacro(Sort, int, NO_SORT, BSP_SORT);
vtkGetMacro(Sort,int);
void SetSortToOff()
{this->SetSort(NO_SORT);};
void SetSortToSimple()
{this->SetSort(SIMPLE_SORT);};
void SetSortToBSP()
{this->SetSort(BSP_SORT);};
char *GetSortAsString();
// Description:
// Turn on/off compression when generating PostScript or PDF
// output. By default compression is on.
vtkSetMacro(Compress, int);
vtkGetMacro(Compress, int);
vtkBooleanMacro(Compress, int);
// Description:
// Turn on/off drawing the background frame. If off the background
// is treated as white. By default the background is drawn.
vtkSetMacro(DrawBackground, int);
vtkGetMacro(DrawBackground, int);
vtkBooleanMacro(DrawBackground, int);
// Description:
// Turn on/off the GL2PS_SIMPLE_LINE_OFFSET option. When enabled a
// small offset is added in the z-buffer to all the lines in the
// plot. This results in an anti-aliasing like solution. Defaults to
// on.
vtkSetMacro(SimpleLineOffset, int);
vtkGetMacro(SimpleLineOffset, int);
vtkBooleanMacro(SimpleLineOffset, int);
// Description:
// Turn on/off GL2PS messages sent to stderr (GL2PS_SILENT). When
// enabled GL2PS messages are suppressed. Defaults to off.
vtkSetMacro(Silent, int);
vtkGetMacro(Silent, int);
vtkBooleanMacro(Silent, int);
// Description:
// Turn on/off the GL2PS_BEST_ROOT option. When enabled the
// construction of the BSP tree is optimized by choosing the root
// primitives leading to the minimum number of splits. Defaults to
// on.
vtkSetMacro(BestRoot, int);
vtkGetMacro(BestRoot, int);
vtkBooleanMacro(BestRoot, int);
// Description:
// Turn on/off drawing the text. If on (default) the text is drawn.
// If the FileFormat is set to TeX output then a LaTeX picture is
// generated with the text strings. If off text output is
// suppressed.
vtkSetMacro(Text, int);
vtkGetMacro(Text, int);
vtkBooleanMacro(Text, int);
// Description:
// Turn on/off landscape orientation. If off (default) the
// orientation is set to portrait.
vtkSetMacro(Landscape, int);
vtkGetMacro(Landscape, int);
vtkBooleanMacro(Landscape, int);
// Description:
// Turn on/off the GL2PS_PS3_SHADING option. When enabled the
// shfill PostScript level 3 operator is used. Read the GL2PS
// documentation for more details. Defaults to on.
vtkSetMacro(PS3Shading, int);
vtkGetMacro(PS3Shading, int);
vtkBooleanMacro(PS3Shading, int);
// Description:
// Turn on/off culling of occluded polygons (GL2PS_OCCLUSION_CULL).
// When enabled hidden polygons are removed. This reduces file size
// considerably. Defaults to on.
vtkSetMacro(OcclusionCull, int);
vtkGetMacro(OcclusionCull, int);
vtkBooleanMacro(OcclusionCull, int);
// Description:
// Turn on/off writing 3D props as raster images. 2D props are
// rendered using vector graphics primitives. If you have hi-res
// actors and are using transparency you probably need to turn this
// on. Defaults to Off.
vtkSetMacro(Write3DPropsAsRasterImage, int);
vtkGetMacro(Write3DPropsAsRasterImage, int);
vtkBooleanMacro(Write3DPropsAsRasterImage, int);
// Description:
// Set the ratio between the OpenGL PointSize and that used by GL2PS
// to generate PostScript. Defaults to a ratio of 5/7.
static void SetGlobalPointSizeFactor(float val);
static float GetGlobalPointSizeFactor();
// Description:
// Set the ratio between the OpenGL LineWidth and that used by GL2PS
// to generate PostScript. Defaults to a ratio of 5/7.
static void SetGlobalLineWidthFactor(float val);
static float GetGlobalLineWidthFactor();
protected:
vtkGL2PSExporter();
~vtkGL2PSExporter();
void WriteData();
char *FilePrefix;
int FileFormat;
int Sort;
int Compress;
int DrawBackground;
int SimpleLineOffset;
int Silent;
int BestRoot;
int Text;
int Landscape;
int PS3Shading;
int OcclusionCull;
int Write3DPropsAsRasterImage;
private:
vtkGL2PSExporter(const vtkGL2PSExporter&); // Not implemented
void operator=(const vtkGL2PSExporter&); // Not implemented
};
inline char *vtkGL2PSExporter::GetSortAsString(void)
{
if ( this->Sort == NO_SORT )
{
return (char *)"Off";
}
else if ( this->Sort == SIMPLE_SORT )
{
return (char *)"Simple";
}
else
{
return (char *)"BSP";
}
}
inline char *vtkGL2PSExporter::GetFileFormatAsString(void)
{
if ( this->FileFormat == PS_FILE )
{
return (char *)"PS";
}
else if ( this->FileFormat == EPS_FILE )
{
return (char *)"EPS";
}
else if ( this->FileFormat == PDF_FILE )
{
return (char *)"PDF";
}
else
{
return (char *)"TeX";
}
}
#endif