void Persistance::importDat(){ QString title = "Import from OpenRDK SPQR ..."; QString filesType = "OpenRDK SPQR Poses File (*.dat)";\ QString folder = QSettings().value(SETTING_NAME_ID_DAT_PATH).toString(); QString path = QFileDialog::getOpenFileName(this, title, folder, filesType); if(path.isEmpty()){ qDebug() << "choosed no file to import"; return; } //caching the last path QSettings * settings = new QSettings(); settings->setValue(SETTING_NAME_ID_DAT_PATH, path); settings->sync(); delete settings; /////// READ FILE QFile file(path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug() << "ERROR: file not imported."; showMessage("Error: Could not access the file. The document has not been imported."); return; } QTextStream in(&file); model->getPoses()->clear(); std::vector<Pose *> poses; int numPoses = in.readLine().trimmed().toInt(); int numLine = 0; in.readLine(); while ((numLine < (numPoses)) && !in.atEnd()){ //fill times Pose * pose = new Pose(model); pose->setTime(in.readLine().trimmed().toDouble()); poses.push_back(pose); numLine++; } numLine = 0; while ((numLine < (numPoses)) && !in.atEnd()){ //fill joints in.readLine(); this->tempMapReset(); for(int j = 0; (j<22) && !in.atEnd(); j++){ QStringList joint = in.readLine().trimmed().split(" "); QString value = joint.at(1); qDebug() << "RAD-str:" << value; #ifdef DAT_CONVERTION_RAD_TO_DEG_ENABLED double rad = joint.at(1).toDouble(); qDebug() << "RAD-double:" << rad; double deg = rad*180/3.14159265; qDebug() << "DEG-double:" << deg; value = QString::number(deg,'f', 2); qDebug() << "DEG-str:" << value; #endif datJointsTemp[joint.at(0)] = value; } Pose * pose = poses.at(numLine); DatJoints::iterator it = datJointsTemp.begin(); //for each datJointsOrder for(unsigned int i = 0; i < datJointsOrder.size(); i++){ //line.append(" ").append((*it).second); pose->setJoint((*it).first.toLower(),(*it).second.toDouble()); it++; } numLine++; } //read joints //TODO remove the getPoses call. call a direct method model->getPoses()->clear(); for(unsigned int i = 0; i< poses.size(); i++){ model->addPose(poses.at(i)); } //TODO: put guard on parsing failed file.close(); /////// END READ FILE qDebug() << "IMPORTED: " << path; getController()->showStatusMessage(QString("Imported from ").append(path)); }