Example #1
0
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));
}