zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    10-tensorflow-tf.concat()
    09-tensorflow-tf.split()
    10-numpy笔记-np.random.randint
    学习网络编程的一些实用技巧和细节
    读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第一部分) 重新学习了 继续学习第二 三部分更加精彩
    对四次挥手中的TIME_WAIT状态的学习
    accept 和 connect API深入 重点accept阻塞和非阻塞问题学习
    几种IO情况的学习和总结 关于 =====阻塞/非阻塞以及同步/异步区别
    tcp头和ip头 图文简介和简要说明
    Nginx 为什么要延迟关闭
  • 原文地址:https://www.cnblogs.com/phoenixdsg/p/6236613.html
Copyright © 2011-2022 走看看