2014-10-02 38 views
2

我想將傳統的.vtk文件轉換爲二進制文件,最好是.vtu文件,因爲我使用的是非結構化網格。 要做到這一點,我從http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/ConvertFile如何將vtk傳統文件轉換爲vtu格式

#include <string> 
#include <vtkSmartPointer.h> 
#include <vtkGenericDataObjectReader.h> 
#include <vtkVersion.h> 
#include <vtkXMLUnstructuredGridWriter.h> 
#include <vtkUnstructuredGrid.h> 

int main(int argc, char *argv[]) 
{ 
    if(argc < 3) 
    { 
    std::cerr << "Required arguments: input.vtk output.vtu" << std::endl; 
    return EXIT_FAILURE; 
    } 

    std::string inputFileName = argv[1]; 
    std::string outputFileName = argv[2]; 

    vtkSmartPointer<vtkGenericDataObjectReader> reader = vtkSmartPointer<vtkGenericDataObjectReader>::New(); 
    reader->SetFileName(inputFileName.c_str()); 
    reader->Update(); 

    vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New(); 
    writer->SetFileName(outputFileName.c_str()); 
    writer->SetInputConnection(reader->GetOutputPort()); 
    writer->Update(); 

    return EXIT_SUCCESS; 
} 

適應了ConvertFile-例子,但,當我用這個轉換我的遺產文件,我第一盤之後失去所有單元數據。在我的傳統文件Scal_1的這個最小的例子是在.vtu文件,但Scal_2不是。

# vtk DataFile Version 3.1 
Lattice Boltzmann data 
ASCII 
DATASET UNSTRUCTURED_GRID 
POINTS 9 INT 
0 0 0 1 0 0 2 0 0 
0 1 0 1 1 0 2 1 0 
0 2 0 1 2 0 2 2 0 

CELLS 4 20 
4 0 1 3 4 
4 1 2 4 5 
4 3 4 6 7 
4 4 5 7 8 

CELL_TYPES 4 
8 8 8 8 

CELL_DATA 4 
SCALARS Scal_1 DOUBLE 
LOOKUP_TABLE default 
1 2 1 0 

SCALARS Scal_2 DOUBLE 
LOOKUP_TABLE default 
1 3 2 1 

我還是vtk的新手。我應該使用另一個讀者或作家嗎?或者是完全錯誤的東西?

回答

2

這裏的問題在於,您選擇的讀者將包含2個單元格數據數組的輸入文件標記爲標量而感到困惑。所以讀者只需輸出一個單元數據數組。我的建議是使用ParaView,特別是pvpython可執行文件來轉換文件。相應的Python代碼看起來像這樣:

from paraview.simple import * 
r = LegacyVTKReader(FileNames=['input.vtk']) 
w = XMLUnstructuredGridWriter() 
w.FileName = 'output.vtu' 
w.UpdatePipeline() 
相關問題