/*========================================================================= Program: Visualization Toolkit Module: vtkXMLStructuredGridWriter.cxx 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. =========================================================================*/ #include "vtkXMLStructuredGridWriter.h" #include "vtkCellData.h" #include "vtkErrorCode.h" #include "vtkInformation.h" #include "vtkObjectFactory.h" #include "vtkPointData.h" #include "vtkStructuredGrid.h" #define vtkXMLOffsetsManager_DoNotInclude #include "vtkXMLOffsetsManager.h" #undef vtkXMLOffsetsManager_DoNotInclude vtkStandardNewMacro(vtkXMLStructuredGridWriter); //---------------------------------------------------------------------------- vtkXMLStructuredGridWriter::vtkXMLStructuredGridWriter() { this->PointsOM = new OffsetsManagerGroup; } //---------------------------------------------------------------------------- vtkXMLStructuredGridWriter::~vtkXMLStructuredGridWriter() { delete this->PointsOM; } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os, indent); } //---------------------------------------------------------------------------- vtkStructuredGrid* vtkXMLStructuredGridWriter::GetInput() { return static_cast(this->Superclass::GetInput()); } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::GetInputExtent(int* extent) { this->GetInput()->GetExtent(extent); } //---------------------------------------------------------------------------- const char* vtkXMLStructuredGridWriter::GetDataSetName() { return "StructuredGrid"; } //---------------------------------------------------------------------------- const char* vtkXMLStructuredGridWriter::GetDefaultFileExtension() { return "vts"; } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::AllocatePositionArrays() { this->Superclass::AllocatePositionArrays(); this->PointsOM->Allocate(this->NumberOfPieces,this->NumberOfTimeSteps); } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::DeletePositionArrays() { this->Superclass::DeletePositionArrays(); } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::WriteAppendedPiece(int index, vtkIndent indent) { this->Superclass::WriteAppendedPiece(index, indent); if (this->ErrorCode == vtkErrorCode::OutOfDiskSpaceError) { return; } this->WritePointsAppended(this->GetInput()->GetPoints(), indent, &this->PointsOM->GetPiece(index)); } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::WriteAppendedPieceData(int index) { // Split progress range by the approximate fractions of data written // by each step in this method. float progressRange[2] = { 0.f, 0.f }; this->GetProgressRange(progressRange); float fractions[3]; this->CalculateSuperclassFraction(fractions); // Set the range of progress for the superclass. this->SetProgressRange(progressRange, 0, fractions); // Let the superclass write its data. this->Superclass::WriteAppendedPieceData(index); if (this->ErrorCode == vtkErrorCode::OutOfDiskSpaceError) { return; } // Set the range of progress for the points array. this->SetProgressRange(progressRange, 1, fractions); // Write the points array. this->WritePointsAppendedData(this->GetInput()->GetPoints(), this->CurrentTimeIndex, &this->PointsOM->GetPiece(index)); } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::WriteInlinePiece(vtkIndent indent) { // Split progress range by the approximate fractions of data written // by each step in this method. float progressRange[2] = { 0.f, 0.f }; this->GetProgressRange(progressRange); float fractions[3]; this->CalculateSuperclassFraction(fractions); // Set the range of progress for the superclass. this->SetProgressRange(progressRange, 0, fractions); // Let the superclass write its data. this->Superclass::WriteInlinePiece(indent); if (this->ErrorCode == vtkErrorCode::OutOfDiskSpaceError) { return; } // Set the range of progress for the points array. this->SetProgressRange(progressRange, 1, fractions); // Write the points array. this->WritePointsInline(this->GetInput()->GetPoints(), indent); } //---------------------------------------------------------------------------- void vtkXMLStructuredGridWriter::CalculateSuperclassFraction(float* fractions) { // The amount of data written by the superclass comes from the // point/cell data arrays. vtkIdType superclassPieceSize = GetNumberOfValues(this->GetInput()); // The total data written includes the points array. vtkIdType totalPieceSize = superclassPieceSize + this->GetInput()->GetNumberOfPoints()*3; if (totalPieceSize == 0) { totalPieceSize = 1; } fractions[0] = 0.0f; fractions[1] = static_cast(superclassPieceSize)/totalPieceSize; fractions[2] = 1.0f; } //---------------------------------------------------------------------------- int vtkXMLStructuredGridWriter::FillInputPortInformation( int, vtkInformation* info) { info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkStructuredGrid"); return 1; }