【VTK】繪製Bounding Box
阿新 • • 發佈:2018-12-31
但是這並不是我們要求的bounding box,要畫出bounding box,可以這樣:
#include <iostream> #include <vtkSmartPointer.h> #include <vtkSphereSource.h> #include <vtkActor.h> #include <vtkConeSource.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkPolyDataMapper.h> #include <vtkProperty.h> #include <vtkRenderWindowInteractor.h> #include <vtkLight.h> #include <vtkCamera.h> #include <vtkActor2D.h> #include <vtkOutlineFilter.h> #include <vtkPolyDataNormals.h> using namespace std; int main() { vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New(); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection( cone->GetOutputPort() ); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper( mapper ); // --------------------- start to draw bounding box ------------------------ vtkSmartPointer<vtkPolyDataNormals> normals = vtkSmartPointer<vtkPolyDataNormals>::New(); normals->SetInputConnection( cone->GetOutputPort() ); vtkSmartPointer<vtkOutlineFilter> outlineFilter = vtkSmartPointer<vtkOutlineFilter>::New(); outlineFilter->SetInputConnection( normals->GetOutputPort() ); vtkSmartPointer<vtkPolyDataMapper> outLinemapper = vtkSmartPointer<vtkPolyDataMapper>::New(); outLinemapper->SetInputConnection( outlineFilter->GetOutputPort() ); vtkSmartPointer<vtkActor> outlineActor = vtkSmartPointer<vtkActor>::New(); outlineActor->SetMapper( outLinemapper ); outlineActor->GetProperty()->SetColor( 1,1,1 ); // --------------------- Drawing bounding box end------------------------ vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor( actor ); renderer->AddActor( outlineActor ); renderer->SetBackground( 0, 0, 0 ); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer( renderer ); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow( renderWindow ); renderer->ResetCamera(); renderWindow->Render(); renderWindowInteractor->Start(); return 0; }
獲取bounds的(x, y, z)資料:
double *vtkActor::GetBounds();