vtk多线程简单测试

 vtkMultithreader is a class that provides support for multithreaded execution using sproc() on an SGI, or pthread_create on any platform supporting POSIX threads. This class can be used to execute a single method on multiple threads, or to specify a method per thread.

Examples:
vtkMultiThreader (Examples)
Tests:
vtkMultiThreader (Tests)

 

  1 #ifndef INITIAL_OPENGL
  2 #define INITIAL_OPENGL
  3 #include <vtkAutoInit.h>
  4 VTK_MODULE_INIT(vtkRenderingOpenGL)
  5 VTK_MODULE_INIT(vtkInteractionStyle)
  6 #endif
  7 #include <iostream>
  8 using namespace std;
  9 #include "vtkSmartPointer.h"
 10 
 11 #include "vtkDEMReader.h"
 12 #include "vtkPolyData.h"
 13 #include "vtkPolyDataMapper.h"
 14 #include "vtkActor.h"
 15 #include "vtkRenderer.h"
 16 #include "vtkRenderWindow.h"
 17 #include "vtkRenderWindowInteractor.h"
 18 #include "vtkProperty.h"
 19 #include "vtkCamera.h"
 20 #include "vtkImageDataGeometryFilter.h"
 21 #include "vtkWarpScalar.h"
 22 #include "vtkPolyDataNormals.h"
 23 #include "vtkLODActor.h"
 24 #include "vtkImageData.h"
 25 #include "vtkLookupTable.h"
 26 #include "vtkPoints.h"
 27 #include "vtkCellArray.h"
 28 #include "vtkPolyDataCollection.h"
 29 #include "vtkTriangleFilter.h"
 30 #include "vtkImageResample.h"
 31 #include "vtkHandleWidget.h"
 32 #include "vtkSphereHandleRepresentation.h"
 33 #include "vtkTestUtilities.h"
 34 #include "vtkTesting.h"
 35 #include "vtkAbstractWidget.h"
 36 #include "vtkDataSetWriter.h"
 37 #include "vtkMultiThreader.h"
 38 #include "vtkWarpScalar.h"
 39 
 40 int main(int argc, char*argv[])
 41 {
 42 
 43      //读入海拔高度图.SainteHelens.dem
 44      char* fname = "D:/Qt/VTK6.3.0/vtkExampleModelFiles/SainteHelens.dem";
 45      vtkMultiThreader::SetGlobalMaximumNumberOfThreads(2);
 46 
 47      // Read height field.
 48      //
 49      vtkSmartPointer<vtkDEMReader> demReader = vtkSmartPointer<vtkDEMReader>::New();
 50      demReader->SetFileName(fname);
 51      delete [] fname;
 52 
 53      vtkSmartPointer<vtkImageResample>  resample = vtkSmartPointer<vtkImageResample>::New();
 54      resample->SetInputConnection(demReader->GetOutputPort());
 55      resample->SetDimensionality(2);
 56      resample->SetAxisMagnificationFactor(0,1);
 57      resample->SetAxisMagnificationFactor(1,1);
 58 
 59      // Extract geometry
 60      vtkSmartPointer<vtkImageDataGeometryFilter> surface =  vtkSmartPointer<vtkImageDataGeometryFilter>::New();
 61      surface->SetInputConnection(resample->GetOutputPort());
 62 
 63      // The Dijkistra interpolator will not accept cells that aren't triangles
 64      vtkSmartPointer<vtkTriangleFilter> triangleFilter = vtkSmartPointer<vtkTriangleFilter>::New();
 65      triangleFilter->SetInputConnection( surface->GetOutputPort() );
 66      triangleFilter->Update();
 67 
 68      vtkSmartPointer<vtkWarpScalar> warp = vtkSmartPointer<vtkWarpScalar>::New();
 69      warp->SetInputConnection(triangleFilter->GetOutputPort());
 70      warp->SetScaleFactor(1);
 71      warp->UseNormalOn();
 72      warp->SetNormal(0, 0, 1);
 73      warp->Update();
 74 
 75      // cout << warp->GetOutput()->GetNumberOfCells() << endl;
 76 
 77      // vtkSmartPointer<vtkDataSetWriter> writer = vtkSmartPointer<vtkDataSetWriter>::New();
 78      // writer->SetInputConnection(resample->GetOutputPort());
 79      // writer->SetFileName("foo.vtk");
 80      // writer->Write();
 81 
 82      // Define a LUT mapping for the height field
 83 
 84      double lo = demReader->GetOutput()->GetScalarRange()[0];
 85      double hi = demReader->GetOutput()->GetScalarRange()[1];
 86 
 87      vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New();
 88      lut->SetHueRange(0.6, 0);
 89      lut->SetSaturationRange(1.0, 0);
 90      lut->SetValueRange(0.5, 1.0);
 91 
 92      vtkSmartPointer<vtkPolyDataNormals> normals = vtkSmartPointer<vtkPolyDataNormals>::New();
 93 
 94      vtkSmartPointer<vtkPolyDataMapper> demMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
 95      demMapper->SetInputConnection(warp->GetOutputPort());
 96      demMapper->SetScalarRange(lo, hi);
 97      demMapper->SetLookupTable(lut);
 98 
 99      vtkSmartPointer<vtkActor> demActor = vtkSmartPointer<vtkActor>::New();
100      demActor->SetMapper(demMapper);
101 
102      // Create the RenderWindow, Renderer and the DEM + path actors.
103      vtkSmartPointer<vtkRenderer> ren1 =  vtkSmartPointer<vtkRenderer>::New();
104      vtkSmartPointer<vtkRenderWindow> renWin =  vtkSmartPointer<vtkRenderWindow>::New();
105      renWin->AddRenderer(ren1);
106      vtkSmartPointer<vtkRenderWindowInteractor> iren =
107        vtkSmartPointer<vtkRenderWindowInteractor>::New();
108      iren->SetRenderWindow(renWin);
109 
110      // Add the actors to the renderer, set the background and size
111      ren1->AddActor(demActor);
112      ren1->GetActiveCamera()->SetViewUp(0, 0, 1);
113      ren1->GetActiveCamera()->SetPosition(-99900, -21354, 131801);
114      ren1->GetActiveCamera()->SetFocalPoint(41461, 41461, 2815);
115      ren1->ResetCamera();
116      ren1->ResetCameraClippingRange();
117 
118      // Here comes the surface constrained handle widget stuff.....
119      vtkSmartPointer<vtkHandleWidget> widget = vtkSmartPointer<vtkHandleWidget>::New();
120      widget->SetInteractor(iren);
121      vtkSmartPointer<vtkSphereHandleRepresentation> rep = vtkSmartPointer<vtkSphereHandleRepresentation>::New();
122      widget->SetRepresentation( rep );
123 
124      // Let the surface constrained point-placer be the sole constraint dictating
125      // the placement of handles. Lets not over-constrain it allowing axis
126      // constrained interactions.
127      widget->EnableAxisConstraintOff();
128 
129      // Set some defaults on the handle widget
130      double d[3] = {562532, 5.11396e+06, 2618.62};
131      rep->SetWorldPosition( d );
132      rep->GetProperty()->SetColor( 1.0, 0.0, 0.0 );
133      rep->GetProperty()->SetLineWidth(1.0);
134      rep->GetSelectedProperty()->SetColor( 0.2, 0.0, 1.0 );
135      renWin->Render();
136      iren->Initialize();
137      widget->EnabledOn();
138      renWin->Render();
139      ren1->ResetCamera();
140      ren1->ResetCameraClippingRange();
141      return vtkTesting::InteractorEventLoop(argc, argv, iren);
144     return 0;
145 }
原文地址:https://www.cnblogs.com/phoenixdsg/p/6236613.html