1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkXMLCompositeDataSetWriterHelper.h
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.
=========================================================================*/
/**
* @class vtkXMLCompositeDataSetWriterHelper
* @brief a helper class used by vtkXMLWriter2 subclasses that write composite
* datasets.
*
* vtkXMLCompositeDataSetWriterHelper is a helper class intended to be used by
* subclasses of vtkXMLWriter2 that want to write composite datasets. It
* consolidates the logic to write individual datasets for leaf nodes into
* separate files.
*/
#ifndef vtkXMLCompositeDataSetWriterHelper_h
#define vtkXMLCompositeDataSetWriterHelper_h
#include "vtkIOParallelXMLModule.h" // For export macro
#include "vtkObject.h"
#include "vtkSmartPointer.h" // for vtkSmartPointer
#include <map> // for std::map
#include <string> // for std::string
VTK_ABI_NAMESPACE_BEGIN
class vtkXMLWriterBase;
class vtkDataObject;
class VTKIOPARALLELXML_EXPORT vtkXMLCompositeDataSetWriterHelper : public vtkObject
{
public:
static vtkXMLCompositeDataSetWriterHelper* New();
vtkTypeMacro(vtkXMLCompositeDataSetWriterHelper, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@{
/**
* Get/Set the writer using this helper. This is reference counted. So caller
* should avoid cycles explicitly.
*/
void SetWriter(vtkXMLWriterBase* writer);
vtkGetObjectMacro(Writer, vtkXMLWriterBase);
///@}
/**
* Write a specific dataset to a file. The dataset cannot be a composite
* dataset. The implementation uses `vtkXMLDataObjectWriter` to find a writer
* to use. Internally, writers are cached and will be reused when same type of
* data is being written out multiple times.
*
* The filename is created using the `path` and `prefix`. The prefix is
* extended with a `.<ext>` where the `<ext>` is dictated by the writer used.
* `vtkXMLWriterBase::GetDefaultFileExtension` is used to obtain the
* extension to use for the file written out.
*
* On success, returns `<prefix>.<ext>`, otherwise an empty string is
* returned.
*/
std::string WriteDataSet(const std::string& path, const std::string& prefix, vtkDataObject* data);
protected:
vtkXMLCompositeDataSetWriterHelper();
~vtkXMLCompositeDataSetWriterHelper() override;
/**
* Method to obtain a writer for the given data type. Either a new writer is
* created or one from the cache may be used.
*/
vtkXMLWriterBase* GetWriter(int dataType);
private:
vtkXMLCompositeDataSetWriterHelper(const vtkXMLCompositeDataSetWriterHelper&) = delete;
void operator=(const vtkXMLCompositeDataSetWriterHelper&) = delete;
std::map<int, vtkSmartPointer<vtkXMLWriterBase>> WriterCache;
vtkXMLWriterBase* Writer;
};
VTK_ABI_NAMESPACE_END
#endif
|