UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-03-13)
tutorial-ultrasonix-qt-grabbing-post-scan.cpp
1 
3 #include <iostream>
4 #include <visp3/ustk_core/usConfig.h>
5 
6 #if (defined(USTK_HAVE_QT5) || defined(USTK_HAVE_VTK_QT)) && (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
7 
8 #include <QApplication>
9 #include <QStringList>
10 #include <QtCore/QThread>
11 
12 #include <visp3/ustk_grabber/usNetworkGrabberPostScan2D.h>
13 
14 #include <visp3/gui/vpDisplayGDI.h>
15 #include <visp3/gui/vpDisplayX.h>
16 
17 int main(int argc, char **argv)
18 {
19  // QT application
20  QApplication app(argc, argv);
21 
23  qtGrabber->connectToServer();
24 
25  // record option
26  if (qApp->arguments().contains(QString("--record"))) {
27  qtGrabber->activateRecording(
28  qApp->arguments().at(qApp->arguments().indexOf(QString("--record")) + 1).toStdString());
29  }
30 
31  // setting acquisition parameters
33  if (qApp->arguments().contains(QString("--probeID"))) {
34  header.probeId = qApp->arguments().at(qApp->arguments().indexOf(QString("--probeID")) + 1).toInt();
35  } else
36  header.probeId = 15; // 4DC7 id = 15 by default
37 
38  if (qApp->arguments().contains(QString("--slotID"))) {
39  header.slotId = qApp->arguments().at(qApp->arguments().indexOf(QString("--slotID")) + 1).toInt();
40  } else
41  header.slotId = 0; // top slot id = 0 by default
42 
43  if (qApp->arguments().contains(QString("--imagingMode"))) {
44  header.imagingMode = qApp->arguments().at(qApp->arguments().indexOf(QString("--imagingMode")) + 1).toInt();
45  } else
46  header.imagingMode = 0; // B-mode = 0 by default
47 
49 
50 // Prepare display
51 #if defined(VISP_HAVE_X11)
52  vpDisplayX *display = NULL;
53 #elif defined(VISP_HAVE_GDI)
54  vpDisplayGDI *display = NULL;
55 #endif
56  bool displayInit = false;
57 
58  bool captureRunning = true;
59 
60  // sending acquisition parameters
61  qtGrabber->initAcquisition(header);
62 
63  // grab a 640*480 post-scan image
64  qtGrabber->setPostScanMode(true);
65  qtGrabber->setPostScanHeigh(480);
66  qtGrabber->setPostScanWidth(640);
67 
68  // set the ultrsound depth to 140 mm
69  qtGrabber->setImageDepth(140);
70 
71  // set the 4DC7 motor on the middle frame
72  qtGrabber->setMotorPosition(37);
73 
74  std::cout << "send update" << std::endl;
75  qtGrabber->sendAcquisitionParameters();
76  std::cout << "end update" << std::endl;
77  qtGrabber->runAcquisition();
78 
79  std::cout << "waiting ultrasound initialisation..." << std::endl;
80 
81  // our local grabbing loop
82  do {
83  grabbedFrame = qtGrabber->acquire();
84 
85  std::cout << "MAIN THREAD received frame No : " << grabbedFrame->getFrameCount() << std::endl;
86 
87  std::cout << *grabbedFrame << std::endl;
88 
89  // init display
90  if (!displayInit && grabbedFrame->getHeight() != 0 && grabbedFrame->getWidth() != 0) {
91 #if defined(VISP_HAVE_X11)
92  display = new vpDisplayX(*grabbedFrame);
93 #elif defined(VISP_HAVE_GDI)
94  display = new vpDisplayGDI(*grabbedFrame);
95 #endif
96  qtGrabber->useVpDisplay(display);
97  displayInit = true;
98  }
99 
100  // processing display
101  if (displayInit) {
102  if (vpDisplay::getClick(*grabbedFrame, false))
103  captureRunning = false;
104  vpDisplay::display(*grabbedFrame);
105  vpDisplay::displayText(*grabbedFrame, 20, 20, std::string("Click to exit..."), vpColor::red);
106  vpDisplay::flush(*grabbedFrame);
107  }
108  } while (captureRunning);
109 
110  qtGrabber->stopAcquisition();
111 
112  if (displayInit) {
113  delete display;
114  }
115 
116  return 0;
117 }
118 
119 #else
120 int main()
121 {
122  std::cout << "You should intall Qt5 (with wigdets and network modules), and display X to run this tutorial"
123  << std::endl;
124  return 0;
125 }
126 
127 #endif
Class to store additionnal informations arriving on the network with ultrasound images grabbed,...
quint32 getFrameCount() const
Specific class to grab post-scan frames from the ultrasound station on the network.
usFrameGrabbedInfo< usImagePostScan2D< unsigned char > > * acquire()
bool initAcquisition(const usNetworkGrabber::usInitHeaderSent &header)
void setPostScanWidth(int postScanWidth)
void setPostScanHeigh(int postScanHeigh)
void setPostScanMode(bool postScanMode)
void setImageDepth(int imageDepth)
void setMotorPosition(int motorPosition)
VISP_EXPORT void display(const usOrientedPlane3D &plane, const vpImage< ImageDataType > &I, const vpHomogeneousMatrix &imageMworld, double Xscale=3000, double Yscale=3000, const vpColor &color=vpColor::green)
Display usOrientedPlane3D.