2014-10-02 2 views
2

구조화되지 않은 표 형태를 사용하고 있기 때문에 레거시 .vtk 파일을 이진 파일, 바람직하게 .vtu 파일로 변환하고 싶습니다. 은 이렇게하려면 내가 http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/ConvertFilevtk 레거시 파일을 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

여기서 문제는 두 개의 셀 데이터 배열을 모두 포함하는 입력 파일이 스칼라로 표시되어 혼란스러워지고 있다는 것입니다. 따라서이 판독기는 하나의 셀 데이터 배열 만 출력합니다. 필자의 제안은 ParaView, 특히 pvpython 실행 파일을 사용하여 파일을 변환하는 것입니다. 해당 Python 코드는 다음과 같습니다.

from paraview.simple import * 
r = LegacyVTKReader(FileNames=['input.vtk']) 
w = XMLUnstructuredGridWriter() 
w.FileName = 'output.vtu' 
w.UpdatePipeline() 
관련 문제