/*========================================================================= Test of vtkPrincipalAxisTransform Version: $Revision: 1.1 $ Made by Rasmus Paulsen email: rrp@imm.dtu.dk web: www.imm.dtu.dk/~rrp/VTK =========================================================================*/ #include "vtkActor.h" #include "vtkPolyDatamapper.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkSphereSource.h" #include "vtkTransformPolyDataFilter.h" #include "vtkPrincipalAxisTransform.h" #include "vtkGaussPointCloudSource.h" int main( int argc, char *argv[] ) { // create a rendering window and renderer vtkRenderer *ren = vtkRenderer::New(); vtkRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWindow); renWindow->SetSize( 300, 300 ); // Create a Gaussian distributed point cloud vtkGaussPointCloudSource *pcloud = vtkGaussPointCloudSource::New(); pcloud->SetNPoint(1000); pcloud->SetXSdev(2); pcloud->SetYSdev(4); pcloud->SetZSdev(6); pcloud->SetCenter(3, 7, 9); pcloud->Update(); // Find the principal axis of this point cloud vtkPrincipalAxisTransform *trans = vtkPrincipalAxisTransform::New(); trans->SetSource(pcloud->GetOutput()); // Aply the transformation to a sphere // thus depicting the covariance structure of the point cloud vtkSphereSource *sphere = vtkSphereSource::New(); sphere->SetRadius(1.0); sphere->SetThetaResolution(20); sphere->SetPhiResolution(20); vtkTransformPolyDataFilter *filt = vtkTransformPolyDataFilter::New(); filt->SetInput(sphere->GetOutput()); filt->SetTransform(trans); vtkPolyDataMapper *pcloudMapper = vtkPolyDataMapper::New(); pcloudMapper->SetInput(pcloud->GetOutput()); vtkActor *pcloudActor = vtkActor::New(); pcloudActor->SetMapper(pcloudMapper); vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New(); sphereMapper->SetInput(filt->GetOutput()); vtkActor *sphereActor = vtkActor::New(); sphereActor->SetMapper(sphereMapper); sphereActor->GetProperty()->SetColor(0.2000,0.6300,0.7900); ren->AddActor(sphereActor); ren->AddActor(pcloudActor); renWindow->Render(); iren->Start(); ren->Delete(); renWindow->Delete(); iren->Delete(); pcloud->Delete(); pcloudMapper->Delete(); pcloudActor->Delete(); sphere->Delete(); sphereMapper->Delete(); sphereActor->Delete(); trans->Delete(); filt->Delete(); return 0; }