Advertisement
Guest User

Untitled

a guest
Jun 5th, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 KB | None | 0 0
  1. #include <vtkActor.h>
  2. #include <vtkMultiBlockPLOT3DReader.h>
  3. #include <vtkMultiBlockDataSet.h>
  4. #include <vtkDataSetMapper.h>
  5. #include <vtkDataSet.h>
  6. #include <vtkRenderWindow.h>
  7. #include <vtkRenderWindowInteractor.h>
  8. #include <vtkRenderer.h>
  9. #include <vtkDataSetReader.h>
  10. #include <vtkInteractorStyleTrackballCamera.h>
  11. #include <vtkImplicitPlaneWidget.h>
  12. #include <vtkXMLUnstructuredGridReader.h>
  13. #include <vtkCutter.h>
  14. #include <vtkPlane.h>
  15. #include <vtkWarpScalar.h>
  16. #include <vtkPlaneWidget.h>
  17. #include <vtkWarpVector.h>
  18. #include <vtkDataObject.h>
  19. #include <vtkPointData.h>
  20. #include <vtkDataArray.h>
  21. #include <vtkDataSetAttributes.h>
  22.  
  23. #include <vtkStructuredPoints.h>
  24. #include <vtkStructuredPointsReader.h>
  25. #include <vtkSmartPointer.h>
  26.  
  27. #include <vtkPolyData.h>
  28. #include <vtkPolyDataMapper.h>
  29. #include <vtkProperty.h>
  30.  
  31. #include <vtkGlyph3D.h>
  32.  
  33. #include <vtkSphere.h>
  34. #include <vtkTransform.h>
  35. #include <vtkSphereSource.h>
  36. #include <vtkSphereWidget.h>
  37. #include <vtkSphereRepresentation.h>
  38. #include <vtkCommand.h>
  39.  
  40. #include <vtkConeSource.h>
  41. #include <vtkArrowSource.h>
  42.  
  43. /*class vtkPlaneCallback : public vtkCommand
  44. {
  45. public:
  46. static vtkPlaneCallback *New()
  47. {
  48. return new vtkPlaneCallback;
  49. }
  50.  
  51. virtual void Execute(vtkObject* caller, unsigned long, void*)
  52. {
  53. vtkImplicitPlaneWidget *planeWidget =
  54. reinterpret_cast<vtkImplicitPlaneWidget*>(caller);
  55. vtkPlane*plane = vtkPlane::New();
  56. planeWidget->GetPlane(plane);
  57. cutter->SetCutFunction(plane);
  58. plane->Delete();
  59. }
  60. vtkPlaneCallback() {}
  61. public:
  62. vtkCutter * cutter;
  63. };*/
  64.  
  65. class vtkSphereCallback : public vtkCommand
  66. {
  67. public:
  68. static vtkSphereCallback *New()
  69. {
  70. return new vtkSphereCallback;
  71. }
  72. virtual void Execute(vtkObject *caller, unsigned long, void*)
  73. {
  74. vtkSphereWidget *sphereWidget =
  75. reinterpret_cast<vtkSphereWidget*>(caller);
  76. vtkSphere*sphere = vtkSphere::New();
  77.  
  78. double center[3];
  79. //sphereWidget->GetCenter(center);
  80. sphereWidget->GetSphere(sphere);
  81. cutter->SetCutFunction(sphere);
  82. std::cout << "Center: " << center[0] << " " << center[1] << " " << center[2] << std::endl;
  83. sphere->Delete();
  84. }
  85. vtkSphereCallback() {}
  86. public:
  87. vtkCutter * cutter;
  88. };
  89.  
  90. int main(int argc, char *argv[])
  91. {
  92. /*vtkMultiBlockPLOT3DReader *pl3d = vtkMultiBlockPLOT3DReader::New();
  93. pl3d->SetXYZFileName("D:/Tomas/Studijos/VIzualizavimo Sistemos/Paskaita4/Combuster/combxyz.bin");
  94. pl3d->SetQFileName("D:/Tomas/Studijos/VIzualizavimo Sistemos/Paskaita4/Combuster/combq.bin");
  95. pl3d->SetScalarFunctionNumber(110);
  96. pl3d->Update();*/
  97.  
  98. //nuskaitymas
  99. vtkSmartPointer<vtkStructuredPointsReader> reader = vtkSmartPointer<vtkStructuredPointsReader>::New();
  100. reader->SetFileName("D:/Tomas/Studijos/VIzualizavimo Sistemos/VTK_PROJEKTAS/VisualStudioProject/Models/carotid.vtk");
  101. reader->Update();
  102.  
  103. vtkSmartPointer<vtkDataSetMapper> carotidMapper = vtkSmartPointer<vtkDataSetMapper>::New();
  104. carotidMapper->SetInputConnection(reader->GetOutputPort());
  105. //Create carotid actor
  106. vtkSmartPointer<vtkActor> carotidActor = vtkSmartPointer<vtkActor>::New();
  107. carotidActor->GetProperty()->SetOpacity(0.5);
  108. carotidActor->SetMapper(carotidMapper);
  109.  
  110.  
  111. /*vtkDataSetMapper *mapper = vtkDataSetMapper::New();
  112. mapper->SetInputData(vtkDataSet::SafeDownCast(pl3d->GetOutput()->GetBlock(0)));
  113. vtkActor *actor = vtkActor::New();
  114. actor->SetMapper(mapper);*/
  115. vtkRenderer *renderer = vtkRenderer::New();
  116. vtkRenderWindow *renderWindow = vtkRenderWindow::New();
  117. renderWindow->AddRenderer(renderer);
  118. vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New();
  119. interactor->SetRenderWindow(renderWindow);
  120. vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
  121. interactor->SetInteractorStyle(style);
  122.  
  123. /*vtkSmartPointer<vtkImplicitPlaneWidget> planeWidget = vtkSmartPointer<vtkImplicitPlaneWidget>::New();
  124. planeWidget->SetInteractor(interactor);
  125. planeWidget->SetProp3D(carotidActor);
  126. planeWidget->OutlineTranslationOff();
  127. planeWidget->SetPlaceFactor(1.0);
  128. planeWidget->PlaceWidget();
  129. planeWidget->SetNormal(0, 0, 1); // normal of your target plane
  130. planeWidget->SetOrigin(8, 0, 29); // origin of your target plane
  131. planeWidget->UpdatePlacement();*/
  132.  
  133. vtkSmartPointer<vtkSphereWidget> sphereWidget =
  134. vtkSmartPointer<vtkSphereWidget>::New();
  135. sphereWidget->SetInteractor(interactor);
  136. sphereWidget->SetRepresentationToSurface();
  137.  
  138. vtkSmartPointer<vtkCutter> cutter = vtkSmartPointer<vtkCutter>::New();
  139. cutter->SetInputData(vtkDataSet::SafeDownCast(reader->GetOutput()));
  140. vtkDataSet::SafeDownCast(reader->GetOutput())->Print(std::cout);
  141. vtkPlane *plane = vtkPlane::New();
  142. vtkSphere *sphere = vtkSphere::New();
  143. //planeWidget->GetPlane(plane);
  144. sphereWidget->GetSphere(sphere);
  145. cutter->SetCutFunction(plane);
  146.  
  147. vtkDataSetMapper *cuttermapper = vtkDataSetMapper::New();
  148. cuttermapper->SetInputConnection(cutter->GetOutputPort());
  149.  
  150.  
  151. vtkActor *cutteractor = vtkActor::New();
  152. cutteractor->SetMapper(cuttermapper);
  153.  
  154.  
  155. //vtkSmartPointer<vtkPlaneCallback> planeCallback = vtkSmartPointer<vtkPlaneCallback>::New();
  156. //planeWidget->AddObserver(vtkCommand::EndInteractionEvent, planeCallback);
  157. //planeCallback->cutter = cutter;
  158.  
  159. vtkSmartPointer<vtkSphereCallback> sphereCallback = vtkSmartPointer<vtkSphereCallback>::New();
  160. sphereWidget->AddObserver(vtkCommand::EndInteractionEvent, sphereCallback);
  161. sphereCallback->cutter = cutter;
  162.  
  163. vtkConeSource *cone = vtkConeSource::New();
  164. cone->SetResolution(12);
  165.  
  166. vtkGlyph3D *glyph = vtkGlyph3D::New();
  167. glyph->SetInputConnection(cutter->GetOutputPort());
  168. glyph->SetSourceConnection(cone->GetOutputPort());
  169. glyph->SetVectorModeToUseNormal();
  170. glyph->SetScaleModeToScaleByVector();
  171. glyph->SetScaleFactor(0.25);
  172.  
  173. vtkPolyDataMapper *spikeMapper = vtkPolyDataMapper::New();
  174. spikeMapper->SetInputConnection(glyph->GetOutputPort());
  175.  
  176. vtkActor *spikeActor = vtkActor::New();
  177. spikeActor->SetMapper(spikeMapper);
  178.  
  179. //planeWidget->On();
  180. sphereWidget->SetCenter(130, 110, 25);
  181. sphereWidget->SetRadius(10.0);
  182. sphereWidget->On();
  183.  
  184. //renderer->AddActor(actor);
  185.  
  186. renderer->AddActor(cutteractor);
  187. renderer->AddActor(spikeActor);
  188.  
  189. renderer->AddActor(cutteractor);
  190. renderWindow->SetSize(900, 900);
  191. interactor->Initialize();
  192. interactor->Start();
  193. return EXIT_SUCCESS;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement