35 #include <QStringList>
53 object->mSelf = retval;
54 retval->initProbeXmlConfigParser(xml);
55 retval->initConfigId();
67 for (std::map<QString, VideoSourcePtr>::iterator iter=mSource.begin(); iter!=mSource.end(); ++iter)
68 retval << iter->first;
78 if (mSource.count(uid))
79 return mSource.find(uid)->second;
80 return mSource.begin()->second;
89 if (mProbeData.count(uid))
90 retval = mProbeData.find(uid)->second;
91 else if (mProbeData.count(
"default"))
92 retval = mProbeData.find(
"default")->second;
94 retval = mProbeData.begin()->second;
110 QDomDocument doc = dataNode.ownerDocument();
111 dataNode.toElement().setAttribute(
"config", mConfigurationId);
116 if (dataNode.isNull())
118 QString cfg = dataNode.toElement().attribute(
"config");
126 if (!this->hasRtSource())
127 return QStringList();
130 QStringList configIdList;
131 QStringList rtSourceList = mXml->getRtSourceList(this->getInstrumentScannerId(), this->getInstrumentId());
132 for (
int i = 0; i < rtSourceList.size(); ++i)
133 configIdList << mXml->getConfigIdList(this->getInstrumentScannerId(), this->getInstrumentId(), rtSourceList[i]);
148 return mConfigurationId;
153 if (!this->hasRtSource())
157 return retval.join(
":");
162 this->setConfigId(uid);
167 void ProbeImpl::applyConfig()
169 this->updateProbeSector();
170 this->updateTemporalCalibration();
177 mOverrideTemporalCalibration =
true;
178 mTemporalCalibration = val;
179 for (std::map<QString, ProbeDefinition>::iterator iter=mProbeData.begin(); iter!=mProbeData.end(); ++iter)
180 iter->second.setTemporalCalibration(mTemporalCalibration);
185 if(
similar(mSoundSpeedCompensationFactor, factor))
187 mSoundSpeedCompensationFactor = factor;
188 for (std::map<QString, ProbeDefinition>::iterator iter=mProbeData.begin(); iter!=mProbeData.end(); ++iter)
189 iter->second.applySoundSpeedCompensationFactor(mSoundSpeedCompensationFactor);
195 if (probeSector.
getUid().isEmpty())
196 probeSector.
setUid(mActiveUid);
198 mProbeData[probeSector.
getUid()] = probeSector;
209 if (mSource.count(source->getUid()))
216 if (oldAdapter && (source==oldAdapter->getBaseSource()))
221 mSource[source->getUid()].reset(
new ProbeAdapterRTSource(source->getUid(), mSelf.lock(), source));
231 if (!mSource.count(source->getUid()))
234 mSource.erase(source->getUid());
235 mProbeData.erase(source->getUid());
275 mXml->saveCurrentConfig(config);
281 QString configId = configurationId;
282 if (configId.isEmpty())
283 configId = mConfigurationId;
286 return QString(
"Digital");
288 return this->findRtSource(configId);
291 QString ProbeImpl::findRtSource(QString configId)
const
293 QStringList rtSourceList = mXml->getRtSourceList(this->getInstrumentScannerId(), this->getInstrumentId());
296 if(configId.isEmpty() && !rtSourceList.empty())
297 return rtSourceList.at(0);
301 for (
int i = 0; i < rtSourceList.size(); ++i)
303 QStringList configIdList;
304 configIdList << mXml->getConfigIdList(this->getInstrumentScannerId(), this->getInstrumentId(), rtSourceList[i]);
305 if(configIdList.contains(configId))
307 if(!retval.isEmpty())
308 reportWarning(QString(
"Config id is not unique: %1. Scanner %2, probe: %3. Occurring in RT source: %4 and %5").
309 arg(configId).arg(this->getInstrumentScannerId()).arg(this->getInstrumentId()).arg(rtSourceList[i]).arg(retval));
310 retval = rtSourceList[i];
316 ProbeImpl::ProbeImpl(QString instrumentUid, QString scannerUid) :
317 mInstrumentUid(instrumentUid),
318 mScannerUid(scannerUid),
319 mSoundSpeedCompensationFactor(1.0),
320 mOverrideTemporalCalibration(false),
321 mTemporalCalibration(0.0)
323 ProbeDefinition probeData;
324 mProbeData[probeData.getUid()] = probeData;
325 mActiveUid = probeData.getUid();
338 void ProbeImpl::initConfigId()
341 if (!configs.isEmpty())
346 "scanner=[%1] instrument=[%2].\n"
347 "Check that your %3 file contains entries\n"
348 "<USScanner> <Name>%1</Name> ... <USProbe> <Name>%2</Name>").arg(mScannerUid).arg(mInstrumentUid).arg(mXml->getFileName()));
354 if (mConfig.
mConfigId != this->getConfigId())
366 if(this->hasRtSource())
367 config = mXml->getConfiguration(mScannerUid, mInstrumentUid, this->
getRtSourceName(uid), uid);
373 QString ProbeImpl::getInstrumentId()
const
375 return mInstrumentUid;
378 QString ProbeImpl::getInstrumentScannerId()
const
383 bool ProbeImpl::hasRtSource()
const
388 void ProbeImpl::setConfigId(QString uid)
390 mConfigurationId = uid;
393 void ProbeImpl::updateProbeSector()
395 if(this->isValidConfigId() && !this->
getProbeData().getUseDigitalVideo())
397 ProbeDefinition probeSector = this->createProbeSector();
402 bool ProbeImpl::isValidConfigId()
408 ProbeDefinition ProbeImpl::createProbeSector()
412 probeSector.setUid(mActiveUid);
416 void ProbeImpl::updateTemporalCalibration()
418 if (mOverrideTemporalCalibration)
< a easy-to-work-with struct for a specific xml configuration
ProbeXmlConfigParser::Configuration getConfiguration()
virtual void saveCurrentConfig(QString uid, QString name)
save current config to disk under ids (uid,name).
ProbeXmlConfigParser::Configuration createConfigurationFromProbeData(ProbeXmlConfigParser::Configuration basis, ProbeDefinition data)
#define CX_ASSERT(statement)
virtual void removeCurrentConfig()
remove the current config from disk
virtual void setActiveStream(QString uid)
virtual VideoSourcePtr getRTSource(QString uid="active") const
Return a VideoSource for the given uid. Use 'active' to get the default stream.
QString mRtSource
realtime source
VideoSource that applies the parameters from a Probe to the VideoSource.
QString getRtSourceName(QString configurationId="") const
virtual QString getConfigName(QString uid)
virtual void setTemporalCalibration(double val)
virtual QString getActiveStream() const
virtual void parseXml(QDomNode &dataNode)
virtual QString getConfigurationPath() const
virtual ProbeSectorPtr getSector(QString uid="active")
virtual void removeRTSource(VideoSourcePtr source)
bool similar(const DoubleBoundingBox3D &a, const DoubleBoundingBox3D &b, double tol)
void videoSourceAdded(VideoSourcePtr source)
virtual void setProbeSector(ProbeDefinition probeSector)
virtual void applyNewConfigurationWithId(QString uid)
void reportWarning(QString msg)
QString mConfigId
config id
Implementation of abstract interface ProbeXmlConfigParser Interface to ProbeCalibConfigs.xml.
boost::shared_ptr< class VideoSource > VideoSourcePtr
boost::shared_ptr< ProbeXmlConfigParser > ProbeXmlConfigParserPtr
void sectorChanged()
< Return a ProbeSectorPtr for the given uid. Use 'active' to get the default.
virtual QString getConfigId() const
QString mUsScanner
scanner
boost::shared_ptr< class ProbeSector > ProbeSectorPtr
Definition of characteristics for an Ultrasound Probe Sector.
virtual ProbeDefinition getProbeData(QString uid="active") const
Return a ProbeData for the given uid. Use 'active' to get the default.
void activeConfigChanged()
static QString getRootConfigPath()
return path to root config folder. May be replaced with getExistingConfigPath()
virtual void setSoundSpeedCompensationFactor(double val)
virtual QStringList getAvailableVideoSources()
Return a list of all available video source. The default is one with uid=='active'.
static ProbeImplPtr New(QString instrumentUid, QString scannerUid, ProbeXmlConfigParserPtr xml=ProbeXmlConfigParserPtr())
QString mName
Name of config set.
virtual QStringList getConfigIdList() const
virtual bool isValid() const
bool getUseDigitalVideo() const
virtual void addXml(QDomNode &dataNode)
Utility functions for drawing an US Probe sector.
boost::shared_ptr< class ProbeImpl > ProbeImplPtr
boost::shared_ptr< ProbeAdapterRTSource > ProbeAdapterRTSourcePtr
ProbeDefinition createProbeDataFromConfiguration(ProbeXmlConfigParser::Configuration config)
virtual void setRTSource(VideoSourcePtr source)