35 #include <QPushButton>
36 #include <QDoubleSpinBox>
37 #include <QVBoxLayout>
38 #include <QHBoxLayout>
48 BaseWidget(parent,
"SoundSpeedConverterWidget",
"Sound Speed Converter"),
49 mScannerSoundSpeed(1540.0),
50 mApplyButton(new QPushButton(
"Apply compensation")),
51 mResetButton(new QPushButton(
"Reset")),
52 mSoundSpeedSpinBox(new QDoubleSpinBox()),
53 mWaterDegreeSpinBox(new QDoubleSpinBox()),
54 mTrackingService(trackingService)
56 QVBoxLayout* vLayout =
new QVBoxLayout(
this);
59 connect(mResetButton, SIGNAL(clicked()),
this, SLOT(resetSlot()));
61 mWaterDegreeSpinBox->setRange(0.0, 50.0);
62 connect(mWaterDegreeSpinBox, SIGNAL(valueChanged(
double)),
this, SLOT(waterDegreeChangedSlot()));
63 mSoundSpeedSpinBox->setRange(1000.0, 2000.0);
64 connect(mSoundSpeedSpinBox, SIGNAL(valueChanged(
double)),
this, SLOT(waterSoundSpeedChangedSlot()));
66 QHBoxLayout* speedLayout =
new QHBoxLayout();
67 speedLayout->addWidget(
new QLabel(
"Water sound speed: "));
68 speedLayout->addWidget(mSoundSpeedSpinBox);
69 speedLayout->addWidget(
new QLabel(
"m/s, or "));
70 speedLayout->addWidget(mWaterDegreeSpinBox);
71 speedLayout->addWidget(
new QLabel(
"C"+QString::fromUtf8(
"\302\260")+
""));
73 QHBoxLayout* buttonLayout =
new QHBoxLayout();
74 buttonLayout->addWidget(mApplyButton);
75 buttonLayout->addWidget(mResetButton);
77 vLayout->addLayout(speedLayout);
78 vLayout->addLayout(buttonLayout);
81 this->updateButtons();
92 "<h3>Speed of sound compensation.</h3>"
93 "<p>Calculates a factor to compensate for the difference in sound of speed which a ultrasound machine expects and the medium you are doing ultrasound on.</p>"
102 reportWarning(
"Don't know which probe to set the sound speed compensation for...");
106 double factor = this->getSoundSpeedCompensationFactor();
107 mProbe->setSoundSpeedCompensationFactor(factor);
110 void SoundSpeedConverterWidget::setToolSlot(
const QString& uid)
112 ToolPtr tool = mTrackingService->getTool(uid);
116 this->setProbe(probe);
119 double SoundSpeedConverterWidget::getSoundSpeedCompensationFactor()
121 return mToSoundSpeed/mScannerSoundSpeed;
124 double SoundSpeedConverterWidget::getWaterSoundSpeed()
126 double waterDegree = mWaterDegreeSpinBox->value();
127 double retval = 1402.40 + 5.01*waterDegree - 0.055*pow(waterDegree, 2) + 0.00022*pow(waterDegree, 3);
132 void SoundSpeedConverterWidget::setProbe(
ProbePtr probe)
135 this->updateButtons();
138 void SoundSpeedConverterWidget::waterSoundSpeedChangedSlot()
140 mToSoundSpeed = mSoundSpeedSpinBox->value();
142 QFont font = mWaterDegreeSpinBox->font();
143 font.setStrikeOut(
true);
144 mWaterDegreeSpinBox->setFont(font);
147 void SoundSpeedConverterWidget::waterDegreeChangedSlot()
149 mToSoundSpeed = this->getWaterSoundSpeed();
151 if(mToSoundSpeed != mSoundSpeedSpinBox->value())
152 mSoundSpeedSpinBox->setValue(mToSoundSpeed);
154 QFont font = mWaterDegreeSpinBox->font();
155 font.setStrikeOut(
false);
156 mWaterDegreeSpinBox->setFont(font);
159 void SoundSpeedConverterWidget::resetSlot()
161 this->setSoundSpeed(mScannerSoundSpeed);
168 void SoundSpeedConverterWidget::setSoundSpeed(
double soundspeed)
170 mSoundSpeedSpinBox->setValue(soundspeed);
173 void SoundSpeedConverterWidget::setWaterDegree(
double degree)
175 mWaterDegreeSpinBox->setValue(degree);
178 void SoundSpeedConverterWidget::updateButtons()
180 mApplyButton->setEnabled(mProbe ?
true :
false);
181 mResetButton->setEnabled(
true);
boost::shared_ptr< class TrackingService > TrackingServicePtr
boost::shared_ptr< Probe > ProbePtr
void activeToolChanged(const QString &uId)
void reportWarning(QString msg)
cxLogicManager_EXPORT TrackingServicePtr trackingService()
boost::shared_ptr< class Tool > ToolPtr