You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
4.7 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkArrayDataWriter.h
-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------
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 vtkArrayDataWriter
* @brief Serialize vtkArrayData to a file or stream.
*
*
* vtkArrayDataWriter serializes vtkArrayData using a text-based
* format that is human-readable and easily parsed (default option). The
* WriteBinary array option can be used to serialize the vtkArrayData
* using a binary format that is optimized for rapid throughput.
*
* vtkArrayDataWriter can be used in two distinct ways: first, it can be used as a
* normal pipeline filter, which writes its inputs to a file. Alternatively, static
* methods are provided for writing vtkArrayData instances to files or arbitrary c++
* streams.
*
* Inputs:
* Input port 0: (required) vtkArrayData object.
*
* Output Format:
* See http://www.kitware.com/InfovisWiki/index.php/N-Way_Array_File_Formats for
* details on how vtkArrayDataWriter encodes data.
*
* @sa
* vtkArrayDataReader
*
* @par Thanks:
* Developed by Timothy M. Shead (tshead@sandia.gov) at Sandia National Laboratories.
*/
#ifndef vtkArrayDataWriter_h
#define vtkArrayDataWriter_h
#include "vtkIOCoreModule.h" // For export macro
#include "vtkStdString.h" // For string API
#include "vtkWriter.h"
class vtkArrayData;
class VTKIOCORE_EXPORT vtkArrayDataWriter : public vtkWriter
{
public:
static vtkArrayDataWriter* New();
vtkTypeMacro(vtkArrayDataWriter, vtkWriter);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* Get / set the filename where data will be stored (when used as a filter).
*/
vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName);
//@}
//@{
/**
* Get / set whether data will be written in binary format (when used as a filter).
*/
vtkSetMacro(Binary, vtkTypeBool);
vtkGetMacro(Binary, vtkTypeBool);
vtkBooleanMacro(Binary, vtkTypeBool);
//@}
/**
* The output string. This is only set when WriteToOutputString is set.
*/
virtual vtkStdString GetOutputString() { return this->OutputString; }
//@{
/**
* Whether to output to a string instead of to a file, which is the default.
*/
vtkSetMacro(WriteToOutputString, bool);
vtkGetMacro(WriteToOutputString, bool);
vtkBooleanMacro(WriteToOutputString, bool);
//@}
int Write() override; // This is necessary to get Write() wrapped for scripting languages.
/**
* Writes input port 0 data to a file, using an arbitrary filename and binary flag.
*/
bool Write(const vtkStdString& FileName, bool WriteBinary = false);
/**
* Write an arbitrary array to a file, without using the pipeline.
*/
static bool Write(vtkArrayData* array, const vtkStdString& file_name, bool WriteBinary = false);
/**
* Write input port 0 data to an arbitrary stream. Note: streams should always be opened in
* binary mode, to prevent problems reading files on Windows.
*/
bool Write(ostream& stream, bool WriteBinary = false);
/**
* Write arbitrary data to a stream without using the pipeline. Note: streams should always
* be opened in binary mode, to prevent problems reading files on Windows.
*/
static bool Write(vtkArrayData* array, ostream& stream, bool WriteBinary = false);
/**
* Write input port 0 data to a string. Note that the WriteBinary argument is not
* optional in order to not clash with the inherited Write() method.
*/
vtkStdString Write(bool WriteBinary);
/**
* Write arbitrary data to a string without using the pipeline.
*/
static vtkStdString Write(vtkArrayData* array, bool WriteBinary = false);
protected:
vtkArrayDataWriter();
~vtkArrayDataWriter() override;
int FillInputPortInformation(int port, vtkInformation* info) override;
void WriteData() override;
char* FileName;
vtkTypeBool Binary;
bool WriteToOutputString;
vtkStdString OutputString;
private:
vtkArrayDataWriter(const vtkArrayDataWriter&) = delete;
void operator=(const vtkArrayDataWriter&) = delete;
};
#endif