66 QDomNode moving = forest.
getNode(movingData->getUid());
70 if (delta_pre_rMd.
mFixed ==
"")
72 fixed = forest.
getNode(movingData->getParentSpace());
79 "Update Registration using\n"
82 "\tDelta matrix (rMd'=Delta*rMd)\n"
85 .arg(movingData->getUid())
88 this->updateTransform(oldTime, allMovingData, delta_pre_rMd);
98 QString fixedAncestorUid = fixedAncestor.toElement().tagName();
100 QString newFixedSpace = fixedAncestorUid;
103 if (mSource.count(fixedAncestorUid) && mSource[fixedAncestorUid]->getParentSpace()==
"")
105 newFixedSpace = this->generateNewSpaceUid();
107 this->changeParentSpace(oldTime, mSource[fixedAncestorUid], newParentSpace);
110 QString movingBaseUid = movingBase.toElement().tagName();
112 if (mSource.count(movingBaseUid))
114 movingBaseUid = mSource[movingBaseUid]->getParentSpace();
119 this->changeParentSpace(oldTime, allMovingData, movingBaseUid, newParentSpace);
123 QString RegistrationApplicator::generateNewSpaceUid()
const
126 std::map<QString, DataPtr>::const_iterator iter;
127 for (iter = mSource.begin(); iter != mSource.end(); ++iter)
129 QStringList parentList =
qstring_cast(iter->second->getParentSpace()).split(
"_");
130 if (parentList.size() < 2)
132 max = std::max(max, parentList[1].toInt());
138 void RegistrationApplicator::updateTransform(QDateTime oldTime, std::vector<DataPtr> data, RegistrationTransform delta_pre_rMd)
141 for (
unsigned i=0; i<data.size(); ++i)
143 RegistrationTransform newTransform = delta_pre_rMd;
144 newTransform.mValue = delta_pre_rMd.mValue * data[i]->get_rMd();
145 data[i]->get_rMd_History()->updateRegistration(oldTime, newTransform);
147 report(
"Updated registration of data " + data[i]->getName());
151 void RegistrationApplicator::changeParentSpace(QDateTime oldTime, std::vector<DataPtr> data, QString oldParentSpace, ParentSpace newParentSpace)
153 for (
unsigned i=0; i<data.size(); ++i)
155 if (data[i]->getParentSpace() != oldParentSpace)
157 this->changeParentSpace(oldTime, data[i], newParentSpace);
161 void RegistrationApplicator::changeParentSpace(QDateTime oldTime,
DataPtr data, ParentSpace newParentSpace)
163 report(QString(
"Reset parent frame of %1 from [%2] to [%3].")
164 .arg(data->getName())
165 .arg(data->getParentSpace())
166 .arg(newParentSpace.mValue));
168 data->get_rMd_History()->updateParentSpace(oldTime, newParentSpace);
QString qstring_cast(const T &val)
QDomNode getOldestAncestor(QDomNode node)
Definition of a parent space event.
A graph combining Space dependencies between all Data.Relations between coordinate spaces among Data ...
std::vector< DataPtr > getDataFromDescendantsAndSelf(QDomNode node)
boost::shared_ptr< class Data > DataPtr
RegistrationApplicator(const std::map< QString, DataPtr > &source)
virtual void updateRegistration(QDateTime oldTime, RegistrationTransform deltaTransform, DataPtr data)
QDomNode getNode(QString frame)
~RegistrationApplicator()
QDomNode getOldestAncestorNotCommonToRef(QDomNode child, QDomNode ref)