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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkXMLDataWriterHelper.h"
#include "vtkCompositeDataSet.h"
#include "vtkDoubleArray.h"
#include "vtkFieldData.h"
#include "vtkInformation.h"
#include "vtkNew.h"
#include "vtkObjectFactory.h"
#include "vtkXMLDataElement.h"
#include "vtkXMLWriter2.h"
VTK_ABI_NAMESPACE_BEGIN
vtkStandardNewMacro(vtkXMLDataWriterHelper);
vtkCxxSetObjectMacro(vtkXMLDataWriterHelper, Writer, vtkXMLWriter2);
//----------------------------------------------------------------------------
vtkXMLDataWriterHelper::vtkXMLDataWriterHelper()
: Writer(nullptr)
, DataSetVersion{ 0, 0 }
{
}
//----------------------------------------------------------------------------
vtkXMLDataWriterHelper::~vtkXMLDataWriterHelper()
{
this->SetWriter(nullptr);
}
//----------------------------------------------------------------------------
bool vtkXMLDataWriterHelper::OpenFile()
{
assert(this->Writer != nullptr);
this->SetDebug(this->Writer->GetDebug());
this->SetByteOrder(this->Writer->GetByteOrder());
this->SetCompressor(this->Writer->GetCompressor());
this->SetBlockSize(this->Writer->GetBlockSize());
this->SetDataMode(this->Writer->GetDataMode());
this->SetEncodeAppendedData(this->Writer->GetEncodeAppendedData());
this->SetHeaderType(this->Writer->GetHeaderType());
this->SetIdType(this->Writer->GetIdType());
this->SetWriteToOutputString(this->Writer->GetWriteToOutputString());
this->SetFileName(this->Writer->GetFileName());
this->SetWriteTimeValue(this->Writer->GetWriteTimeValue());
return this->Superclass::OpenStream() != 0;
}
//----------------------------------------------------------------------------
bool vtkXMLDataWriterHelper::BeginWriting()
{
return this->Superclass::StartFile() != 0;
}
//----------------------------------------------------------------------------
bool vtkXMLDataWriterHelper::EndWriting()
{
const bool status = (this->Superclass::EndFile() != 0);
this->Superclass::CloseStream();
return status;
}
//----------------------------------------------------------------------------
bool vtkXMLDataWriterHelper::AddGlobalFieldData(vtkCompositeDataSet* input)
{
// We want to avoid using appended data mode as it
// is not supported in meta formats.
int dataMode = this->DataMode;
if (dataMode == vtkXMLWriterBase::Appended)
{
this->DataMode = vtkXMLWriterBase::Binary;
}
auto meta = input->GetInformation();
const bool hasTime = meta->Has(vtkDataObject::DATA_TIME_STEP()) != 0;
auto fieldData = input->GetFieldData();
if ((fieldData && fieldData->GetNumberOfArrays()) || (hasTime && this->GetWriteTimeValue()))
{
vtkNew<vtkFieldData> fieldDataCopy;
fieldDataCopy->ShallowCopy(fieldData);
if (hasTime && this->GetWriteTimeValue())
{
vtkNew<vtkDoubleArray> time;
time->SetNumberOfTuples(1);
time->SetTypedComponent(0, 0, meta->Get(vtkDataObject::DATA_TIME_STEP()));
time->SetName("TimeValue");
fieldDataCopy->AddArray(time);
}
this->WriteFieldDataInline(fieldDataCopy, vtkIndent().GetNextIndent());
}
this->DataMode = dataMode;
return true;
}
//----------------------------------------------------------------------------
bool vtkXMLDataWriterHelper::AddXML(vtkXMLDataElement* xmlElement)
{
if (xmlElement)
{
xmlElement->PrintXML((*this->Stream), vtkIndent().GetNextIndent());
}
return true;
}
//----------------------------------------------------------------------------
void vtkXMLDataWriterHelper::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
}
VTK_ABI_NAMESPACE_END
|