2016-04-14 16 views
0

Bir stl dosyasından bir örgü verisini okumak ve bir pencerede göstermek için aşağıdaki koda sahibim. Kod iyi çalışıyor; ama bazı veri işlemlerini yapmak için köşe ve dizin dizilerine erişmem gerekiyor; örgü değiştirmek ve daha sonra render. Kafesin köşelerinin koordinatlarına sahip olan dizilere ve kafesin üçgenlerinin oluşturulmasındaki indeks numaralarına erişimin nasıl mümkün olabileceğini merak ediyordum. Çok basit bir adım gibi görünüyor ama VTK'nın wiki'sinde herhangi bir cevap bulamadım.VTL'de STLreader'dan elde edilen bir ağın köşe ve dizin dizisine nasıl erişilir?

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; 
} 

cevap

1

Tüm bu bilgiler vtkSTLreader elde edilebilir vtkPolyData içinde saklanır. vertexArray i = 0 için ağın ilk endeksli üçgenin koordinatlara sahip bir dizidir

//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); 

: Burada bir STL dosyası içinde saklanan bir örgü köşeleri ve endeksleri alabilir bir yöntemdir. Üçgenlerin geri kalanının koordinatlarını almak için i üzerinde dönebilirsiniz.

+0

Bu örnek bana çok yardımcı oldu. Teşekkür ederim. Ayrıca bunlardan bahsedilebilir: vtkSmartPointer faceIndex = vtkSmartPointer :: New(); – eidelen