void qSRA::loadProfile() const { if (!m_app) { assert(false); return; } //persistent settings (default import path) QSettings settings; settings.beginGroup("qSRA"); QString path = settings.value("importPath", ccFileUtils::defaultDocPath()).toString(); ProfileImportDlg piDlg(m_app->getMainWindow()); piDlg.setDefaultFilename(path); if (!piDlg.exec()) return; QString filename = piDlg.getFilename(); if (filename.isEmpty()) return; //save current import path to persistent settings settings.setValue("importPath",QFileInfo(filename).absolutePath()); //get the user defined global axis int axisDim = piDlg.getAxisDimension(); assert(axisDim >= 0 && axisDim <= 2); //load profile as a (2D) polyline CCVector3 origin(0,0,0); ccPolyline* polyline = ProfileLoader::Load(filename, origin, m_app); if (!polyline) { if (m_app) m_app->dispToConsole(QString("Failed to load file '%1'!").arg(filename),ccMainAppInterface::ERR_CONSOLE_MESSAGE); return; } //DGM: the following works only because the axis is colinear with X, Y or Z! PointCoordinateType heightShift = 0; if (piDlg.absoluteHeightValues()) { heightShift = -origin.u[axisDim]; } //apply a visual transformation to see the polyline in the right place { ccGLMatrix trans; CCVector3 T = origin; T.u[axisDim] += heightShift; trans.setTranslation(T); float* mat = trans.data(); switch (axisDim) { case 0: //X //invert X and Y mat[0] = 0; mat[1] = 1; mat[4] = 1; mat[5] = 0; break; //case 1: //Y case 2: //Z //invert Z and Y mat[5] = 0; mat[6] = 1; mat[9] = 1; mat[10] = 0; break; default: //nothing to do break; } polyline->set2DMode(false); polyline->setGLTransformation(trans); } //set meta-data DistanceMapGenerationTool::SetPoylineOrigin(polyline,origin); DistanceMapGenerationTool::SetPoylineRevolDim(polyline,axisDim); DistanceMapGenerationTool::SetPolylineHeightShift(polyline,heightShift); //default destination container ccHObject* defaultContainer = GetDefaultContainer(m_app); if (defaultContainer) { defaultContainer->addChild(polyline); } m_app->addToDB(polyline,true,false,true); m_app->dispToConsole(QString("[qSRA] File '%1' successfully loaded").arg(filename),ccMainAppInterface::STD_CONSOLE_MESSAGE); }
void qSRA::loadProfile() { assert(m_app); if (!m_app) return; //persistent settings (default import path) QSettings settings; settings.beginGroup("qSRA"); QString path = settings.value("importPath",QApplication::applicationDirPath()).toString(); ProfileImportDlg piDlg(m_app->getMainWindow()); piDlg.setDefaultFilename(path); if (!piDlg.exec()) return; QString filename = piDlg.getFilename(); if (filename.isEmpty()) return; //save current import path to persistent settings settings.setValue("importPath",QFileInfo(filename).absolutePath()); //get the user defined global axis int axisDim = piDlg.getAxisDimension(); //get whether heights are expressed relatively to 0 or to the input center bool ignoreAxisShift = piDlg.ignoreAxisShift(); //load profile as a (2D) polyline ccPolyline* polyline = ProfileLoader::Load(filename,ignoreAxisShift,axisDim,m_app); if (polyline) { //apply a visual transformation to see the polyline in the right place! ccPointCloud* vertices = dynamic_cast<ccPointCloud*>(polyline->getAssociatedCloud()); if (vertices) { const CCVector3d& O = vertices->getGlobalShift(); ccGLMatrix trans; trans.setTranslation(CCVector3::fromArray(O.u)); float* mat = trans.data(); switch(axisDim) { case 0: //X //invert X and Y mat[0] = 0; mat[1] = 1; mat[4] = 1; mat[5] = 0; break; //case 1: //Y case 2: //Z //invert Z and Y mat[5] = 0; mat[6] = 1; mat[9] = 1; mat[10] = 0; break; default: //nothing to do break; } polyline->set2DMode(false); polyline->setGLTransformation(trans); } //add revolution axis as meta-data DistanceMapGenerationTool::SetPoylineAxis(polyline,axisDim); //default destination container ccHObject* defaultContainer = GetDefaultContainer(m_app); if (defaultContainer) defaultContainer->addChild(polyline); m_app->addToDB(polyline,true,false,true); m_app->dispToConsole(QString("[qSRA] File '%1' succesfully loaded").arg(filename),ccMainAppInterface::STD_CONSOLE_MESSAGE); } else { m_app->dispToConsole(QString("Failed to load file '%1'!").arg(filename),ccMainAppInterface::ERR_CONSOLE_MESSAGE); } }