2016-04-14 6 views
0

stlファイルからメッシュデータを読み込んでウィンドウに表示するには、次のコードがあります。コードは正常に動作します。いくつかのデータ処理を行うために頂点とインデックス配列にアクセスする必要があります。メッシュを変更してレンダリングします。私は、メッシュの三角形を形成する際に、メッシュの頂点の座標とそれらのインデックス番号を持つ配列にどのようにアクセスできるか疑問に思っていました。非常に基本的な手順だと思われますが、私はVTKのwikiで何の答えも見つけられませんでした。VTKのSTLreaderから得られたメッシュの頂点とインデックス配列にアクセスする方法は?

int main (int argc, char *argv[]) 
{ 

    std::string inputFilename = "Scapula.stl"; 

    vtkSmartPointer<vtkSTLReader> reader = 
    vtkSmartPointer<vtkSTLReader>::New(); 
    reader->SetFileName(inputFilename.c_str()); 
    reader->Update(); 

    // Visualize 
    vtkSmartPointer<vtkPolyDataMapper> mapper = 
    vtkSmartPointer<vtkPolyDataMapper>::New(); 
    mapper->SetInputConnection(reader->GetOutputPort()); 

    vtkSmartPointer<vtkActor> actor = 
    vtkSmartPointer<vtkActor>::New(); 
    actor->SetMapper(mapper); 

    vtkSmartPointer<vtkRenderer> renderer = 
    vtkSmartPointer<vtkRenderer>::New(); 
    vtkSmartPointer<vtkRenderWindow> renderWindow = 
    vtkSmartPointer<vtkRenderWindow>::New(); 
    renderWindow->AddRenderer(renderer); 
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 
    vtkSmartPointer<vtkRenderWindowInteractor>::New(); 
    renderWindowInteractor->SetRenderWindow(renderWindow); 

    renderer->AddActor(actor); 
    renderer->SetBackground(.3, .6, .3); // Background color green 

    renderWindow->Render(); 
    renderWindowInteractor->Start(); 

    return EXIT_SUCCESS; 
} 

答えて

1

すべてこの情報はvtkSTLreaderから抽出することができるvtkPolyData内に格納されています。 vertexArrayは、I = 0のため、メッシュの最初のインデックス付き三角形の座標を有する配列である

//Data source 

std::string inputFilename = "reamer.stl"; 

vtkSmartPointer<vtkSTLReader> reader = 
    vtkSmartPointer<vtkSTLReader>::New(); 

reader->SetFileName(inputFilename.c_str()); 

reader->Update(); 

vtkSmartPointer<vtkPolyData> mesh = reader->GetOutput(); 

vtkSmartPointer<vtkPoints> points = mesh->GetPoints(); 

vtkSmartPointer<vtkDataArray> dataArray = points->GetData(); 

vtkIdType numberOfFaces = mesh->GetNumberOfCells(); 

    mesh->GetCellPoints(i, faceIndex); 

    vertexIndex = faceIndex->GetId(0); 

    vertexArray[0] = dataArray->GetComponent(vertexIndex, 0); 

    vertexArray[1] = dataArray->GetComponent(vertexIndex, 1); 

    vertexArray[2] = dataArray->GetComponent(vertexIndex, 2); 

    vertexIndex = faceIndex->GetId(1); 

    vertexArray[3] = dataArray->GetComponent(vertexIndex, 0); 

    vertexArray[4] = dataArray->GetComponent(vertexIndex, 1); 

    vertexArray[5] = dataArray->GetComponent(vertexIndex, 2); 

    vertexIndex = faceIndex->GetId(2); 

    vertexArray[6] = dataArray->GetComponent(vertexIndex, 0); 

    vertexArray[7] = dataArray->GetComponent(vertexIndex, 1); 

    vertexArray[8] = dataArray->GetComponent(vertexIndex, 2); 

:ここでIは、STLファイルに格納されたメッシュの頂点及びインデックスを得ることができる方法です。 iをループして残りの三角形の座標を取得することができます。

+0

この例は私に多くの助けとなりました。ありがとうございました。 1つは、さらに言及することができます:vtkSmartPointer faceIndex = vtkSmartPointer :: New(); – eidelen

関連する問題