QT/VTK STL模型球体分割@TOC
记录一下,可能以后用的到~~
void VTKApplication::on_pushButton_13_clicked()
{
vtkSmartPointer<vtkPolyData> poly = callback->getPolyData();
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(poly);
actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->VisibilityOn();
actor->GetProperty()->SetColor(0, 1, 1);
ren = vtkSmartPointer<vtkRenderer>::New();
ren->AddActor(actor);
ren->SetBackground(0, 0, 0);
iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renWin = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
renWin->SetInteractor(iren);
ui.widget->SetRenderWindow(renWin);
//iren->SetRenderWindow(renWin);
//iren->Initialize();
//iren->Start();
ui.widget_2->GetRenderWindow()->AddRenderer(ren);
ui.widget_2->GetRenderWindow()->GetInteractor()->Initialize();
ui.widget_2->GetRenderWindow()->GetInteractor()->Start();
ui.widget_2->GetRenderWindow()->Render();
ui.widget_2->update();
}
void VTKApplication::on_pushButton_14_clicked()
{
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
//std::string inputFilename = "nii.stl";
std::string inputFilename = "leftlumen.stl";
vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName(inputFilename.c_str());
reader->Update();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(0, 0, 0);
/*renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
renWin->SetSize(640, 480);
iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);*/
//style = new MouseInteractorHighLightActor(ren, reader->GetOutput());
//style->SetDefaultRenderer(ren);
//iren->SetInteractorStyle(style);
mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(reader->GetOutput());
actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
renderer->AddActor(actor);
renderWindow->AddRenderer(renderer);
renderWindow->SetInteractor(renderWindowInteractor);
ui.widget->SetRenderWindow(renderWindow);
callback = new vtkImageInteractionCallback(renderer, reader->GetOutput());
callback->SetDefaultRenderer(renderer);
renderWindowInteractor->SetInteractorStyle(callback);
/*iren->Initialize();
iren->Render();
iren->Start();*/
ui.widget->GetRenderWindow()->AddRenderer(renderer);
ui.widget->GetRenderWindow()->GetInteractor()->Initialize();
ui.widget->GetRenderWindow()->GetInteractor()->Start();
ui.widget->GetRenderWindow()->Render();
ui.widget->update();
}
virtual void OnLeftButtonDown() override
{
if (model == 1)
{
vtkSmartPointer<vtkPointPicker> picker = vtkSmartPointer<vtkPointPicker>::New();
p = this->GetInteractor()->GetEventPosition();
ren = this->GetDefaultRenderer();
picker->Pick(p[0], p[1], 0, ren);
pos1 = picker->GetPickPosition();
sphere1 = vtkSmartPointer<vtkSphereSource>::New();
sphere1->SetRadius(10);
sphere1->SetThetaResolution(1000);
sphere1->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper1 = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper1->SetInputConnection(sphere1->GetOutputPort());
actor1 = vtkSmartPointer<vtkActor>::New();
actor1->SetMapper(mapper1);
actor1->GetProperty()->SetOpacity(0.5);
if (pos1 != NULL)
actor1->SetPosition(pos1[0], pos1[1], pos1[2]);
actor1->SetVisibility(true);
actor1->VisibilityOn();
ren->AddActor(actor1);
cout << "x = " << pos1[0] << " y = " << pos1[1] << " z = " << pos1[2] << endl;
/*vtkSmartPointer<vtkSphere> sp = vtkSmartPointer<vtkSphere>::New();
sp->SetCenter(pos1[0], pos1[1], pos1[2]);
sp->SetRadius(10);
vtkSmartPointer<vtkClipPolyData> poly = vtkSmartPointer<vtkClipPolyData>::New();
poly->SetClipFunction(sp);
poly->SetInputData(mesh);
poly->GenerateClippedOutputOn();
poly->Update();
teeth = poly->GetClippedOutput();*/
model = 0;
/*mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(teeth);
actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->VisibilityOn();
ren = vtkSmartPointer<vtkRenderer>::New();
ren->AddActor(actor);
ren->SetBackground(0, 0, 0);
renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(ren);
iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
iren->Initialize();
iren->Start();*/
}
else if(model == 2)
{
vtkSmartPointer<vtkPointPicker> picker = vtkSmartPointer<vtkPointPicker>::New();
p = this->GetInteractor()->GetEventPosition();
ren = this->GetDefaultRenderer();
picker->Pick(p[0], p[1], 0, ren);
pos1 = picker->GetPickPosition();
sp = vtkSmartPointer<vtkSphere>::New();
sp->SetCenter(pos1[0], pos1[1], pos1[2]);
sp->SetRadius(10);
vtkSmartPointer<vtkClipPolyData> poly = vtkSmartPointer<vtkClipPolyData>::New();
poly->SetClipFunction(sp);
poly->SetInputData(mesh);
poly->GenerateClippedOutputOn();
poly->Update();
teeth = poly->GetClippedOutput();
if (actor1 != NULL)
actor1->SetPosition(pos1[0], pos1[1], pos1[2]);
}
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
vtkSmartPointer<vtkPolyData> getPolyData()
{
return teeth;
}