1. 程式人生 > 其它 >vtk+四面體構建+線框

vtk+四面體構建+線框

 

 

int main() {
    int i;
    static float x[8][3] = {
        {0,0,0},{1,0,0},{1,1,0},{0,1,0},
        {0,0,1},{1,0,1},{1,1,1},{0,1,1}
    };

    static vtkIdType pts[6][4] = {
        {0,1,2,3},{4,5,6,7},{0,1,5,4},
        {1,2,6,5},{2,3,7,6},{3,0,4,7}
    };
    vtkNew<vtkPolyData> cube;
    vtkNew<vtkPoints> points;
    vtkNew<vtkCellArray> polys;
    vtkNew<vtkFloatArray> scalars;
    vtkNew<vtkCellArray> lines;


    //for (int i = 0; i < 8; i++) points->InsertPoint(i, x[i]);
    //for (int i = 0; i < 6; i++) polys->InsertNextCell(4, pts[i]);
    //for (int i = 0; i < 8; i++) scalars->InsertTuple1(i, i);

    //cube->SetPoints(points);
    //cube->SetPolys(polys);
    ////cube->GetPointData()->SetScalars(scalars);

    //上底
    for (int i = 0; i < 8; i++) points->InsertPoint(i, x[i]);
    lines->InsertNextCell(5);
    for (unsigned long i = 0; i < 4; ++i) {
        lines->InsertCellPoint(i);
    }
    lines->InsertCellPoint(0);
    //下底
    lines->InsertNextCell(5);
    for (unsigned long i = 0; i < 4; ++i) {
        lines->InsertCellPoint(i + 4);
    }
    lines->InsertCellPoint(4);

    //四周
    for (int i = 0; i < 4; i++) {
        lines->InsertNextCell(2);
        lines->InsertCellPoint(i);
        lines->InsertCellPoint(i + 4);
    }

    cube->SetPoints(points);
    cube->SetLines(lines);


    vtkNew<vtkPolyDataMapper> cubeMapper;
    cubeMapper->SetInputData(cube);
    cubeMapper->SetScalarRange(0, 7);
    vtkNew<vtkActor> cubeActor;
    cubeActor->SetMapper(cubeMapper);
    vtkNew<vtkCamera> camera;
    camera->SetPosition(1, 1, 1);
    camera->SetFocalPoint(0, 0, 0);
    vtkNew<vtkRenderer> renderer;
    vtkNew<vtkRenderWindow> renWin;
    renWin->AddRenderer(renderer);
    vtkNew<vtkRenderWindowInteractor> iren;
    iren->SetRenderWindow(renWin);
    renderer->AddActor(cubeActor);
    renderer->SetActiveCamera(camera);
    renderer->ResetCamera();
    renderer->SetBackground(1, 0, 1);
    renWin->SetSize(300, 300);
    renWin->Render();

    iren->Initialize();
    iren->Start();
    return 0;
}