UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-02-01)
tutorial-ultrasonix-qt-grabbing-pre-scan3D-display.cpp
1 
3 #include <iostream>
4 #include <visp3/ustk_core/usConfig.h>
5 
6 #if defined(VISP_HAVE_MODULE_USTK_GUI) && defined(VISP_HAVE_MODULE_USTK_GRABBER)
7 
8 #include <QApplication>
9 #include <QtCore/QThread>
10 
11 #include <visp3/ustk_grabber/usNetworkGrabberPreScan3D.h>
12 
13 #include <visp3/ustk_core/usImageIo.h>
14 
15 #include <visp3/ustk_gui/us3DSceneWidget.h>
16 #include <visp3/ustk_gui/usVTKConverter.h>
17 
18 int main(int argc, char **argv)
19 {
20  // QT application
21  QApplication app(argc, argv);
22 
24  QThread *grabbingThread = new QThread();
25 
27  qtGrabber->connectToServer();
28 
29  // setting acquisition parameters
31  header.probeId = 15; // 4DC7 id = 15
32  header.slotId = 0; // top slot id = 0
33  header.imagingMode = 0; // B-mode = 0
34 
35  // prepare image;
37 
38  bool captureRunning = true;
39 
40  // sending acquisition parameters
41  qtGrabber->initAcquisition(header);
42 
44  qtGrabber->setFramesPerVolume(25);
45  qtGrabber->setMotorActivation(true);
46  qtGrabber->sendAcquisitionParameters();
47 
49  // pre-compute the importer to save time during the data import in vtk
50  // this importer will switch between the 2 previsous usImages at each iteration
51  vtkSmartPointer<vtkImageData> vtkImage = vtkSmartPointer<vtkImageData>::New();
52 
53  // setup view widget
54  us3DSceneWidget scene;
55 
56  // Send the command to run the acquisition
57  qtGrabber->runAcquisition();
58 
59  // Move the grabber object to another thread, and run it
60  qtGrabber->moveToThread(grabbingThread);
61  grabbingThread->start();
62 
63  bool init = false;
64 
65  // our grabbing loop
66  do {
67  if (qtGrabber->isFirstFrameAvailable()) {
68  grabbedFrame = qtGrabber->acquire();
69 
70  std::cout << "MAIN THREAD received volume No : " << grabbedFrame->getVolumeCount() << std::endl;
71 
72  if (!init) {
73 
74  usVTKConverter::convert(*grabbedFrame, vtkImage);
75 
76  scene.setImageData(vtkImage);
77 
78  double spacing[3];
79  vtkImage->GetSpacing(spacing);
80 
81  vtkSmartPointer<vtkPlane> planeX = vtkSmartPointer<vtkPlane>::New();
82  planeX->SetNormal(1, 0, 0);
83  planeX->SetOrigin(grabbedFrame->getWidth() * spacing[0] / 2.0, 0, 0);
84  vtkSmartPointer<vtkPlane> planeY = vtkSmartPointer<vtkPlane>::New();
85  planeY->SetNormal(0, 1, 0);
86  planeY->SetOrigin(0, grabbedFrame->getHeight() * spacing[1] / 2.0, 0);
87  vtkSmartPointer<vtkPlane> planeZ = vtkSmartPointer<vtkPlane>::New();
88  planeZ->SetNormal(0, 0, 1);
89  planeZ->SetOrigin(0, 0, grabbedFrame->getNumberOfFrames() * spacing[2] / 2.0);
90  scene.setPlanes(planeX, planeY, planeZ);
91 
92  scene.init();
93  scene.show();
94 
95  init = true;
96  } else {
97 
98  usVTKConverter::convert(*grabbedFrame, vtkImage);
99 
100  scene.setImageData(vtkImage);
101  }
102  } else {
103  vpTime::wait(10);
104  }
105  } while (captureRunning);
106 
107  return app.exec();
108 }
109 
110 #else
111 int main()
112 {
113  std::cout << "You should build ustk_gui and ustk_grabber to run this tutorial" << std::endl;
114  return 0;
115 }
116 
117 #endif
Class used to render a 3D vtk scene containing a vtkImageData in a QWidget (based on QVTKWidget).
void setPlanes(vtkPlane *plane1, vtkPlane *plane2, vtkPlane *plane3)
void setImageData(vtkImageData *imageData)
@ US_ANGLE_PITCH_3
8 motor steps per frame = 1.4634 degrees
Specific class to grab pre-scan volumes from the ultrasound station on the network.
usVolumeGrabbedInfo< usImagePreScan3D< unsigned char > > * acquire()
void setFramesPerVolume(int framesPerVolume)
bool initAcquisition(const usNetworkGrabber::usInitHeaderSent &header)
void setStepsPerFrame(usAcquisitionParameters::usMotorStep stepsPerFrame)
void setMotorActivation(bool activateMotor)
static void convert(const usImagePostScan3D< unsigned char > &postScanImage, vtkSmartPointer< vtkImageData > &vtkPostScanImage, vtkSmartPointer< vtkImageImport > importer=NULL)
Class to store additionnal informations arriving on the network with ultrasound volumes grabbed,...
quint32 getVolumeCount() const