X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSHAPERGUI%2FSHAPERGUI_DataModel.cpp;h=a8856b26ddaf8d409a251f534d63dddb062ca753;hb=refs%2Fheads%2FCR35150;hp=b08f83b80c5742281ea38b9927e328fda5f22d81;hpb=7ab44ec6bb4f64ee9c31ffe42c1e410dde78016c;p=modules%2Fshaper.git diff --git a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp index b08f83b80..a8856b26d 100644 --- a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp +++ b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -67,7 +68,6 @@ bool SHAPERGUI_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStr LightApp_Study* aStudy = dynamic_cast( myModule->application()->activeStudy() ); QString aNewTmpDir = aStudy->GetTmpDir("", false).c_str(); - bool isDone = true; QDir aDir(aTmpDir); QStringList aFiles = aDir.entryList(QDir::Files); QStringList::const_iterator anIt = aFiles.begin(), aLast = aFiles.end(); @@ -85,6 +85,9 @@ bool SHAPERGUI_DataModel::open(const QString& thePath, CAM_Study* theStudy, QStr bool SHAPERGUI_DataModel::save(QStringList& theFiles) { + // Publish to study before saving of the data model + myModule->publishToStudy(); + LightApp_DataModel::save( theFiles ); XGUI_Workshop* aWorkShop = myModule->workshop(); std::list aFileNames; @@ -175,10 +178,20 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy if (!aStudy) return false; + myModule->publishToStudy(); + std::shared_ptr aDoc = ModelAPI_Session::get()->activeDocument(); ModelAPI_Session::get()->startOperation(ExchangePlugin_Dump::ID()); FeaturePtr aFeature = aDoc->addFeature(ExchangePlugin_Dump::ID()); if (aFeature.get()) { + // keep path to the true dumping directory for external files dumping + AttributeStringPtr aAttr = aFeature->string(ExchangePlugin_Dump::DUMP_DIR_ID()); + if (aAttr.get()) { + QString aDirPath = QFileInfo(thePath).path(); + aAttr->setValue(aDirPath.toStdString()); + } + + // tmp path to write the script std::string aTmpDir = aStudy->GetTmpDir(thePath.toStdString().c_str(), isMultiFile); std::string aFileName = aTmpDir + DUMP_NAME; @@ -186,7 +199,7 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy QFile::remove(aFileName.c_str()); } - AttributeStringPtr aAttr = aFeature->string(ExchangePlugin_Dump::FILE_PATH_ID()); + aAttr = aFeature->string(ExchangePlugin_Dump::FILE_PATH_ID()); if (aAttr.get()) aAttr->setValue(aFileName); @@ -194,35 +207,41 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy if (aAttr.get()) aAttr->setValue(".py"); +#ifdef HAVE_SALOME + aFeature->boolean(ExchangePlugin_Dump::EXPORT_VARIABLES_ID())->setValue(true); +#endif + ModelAPI_Session::get()->finishOperation(); if (QFile::exists(aFileName.c_str())) { - if (isMultiFile) { - QFile aInFile(aFileName.c_str()); - if (!aInFile.open(QIODevice::ReadOnly | QIODevice::Text)) - return false; - QTextStream aText(&aInFile); - QString aTrace(aText.readAll()); - aInFile.close(); + QFile aInFile(aFileName.c_str()); + if (!aInFile.open(QIODevice::ReadOnly | QIODevice::Text)) + return false; + QTextStream aText(&aInFile); + QString aTrace(aText.readAll()); + aInFile.close(); + if (isMultiFile) { QStringList aBuffer; - aBuffer.push_back(QString("def RebuildData( theStudy ):")); + aBuffer.push_back(QString("def RebuildData():")); QStringList aList(aTrace.split("\n")); foreach(QString aStr, aList) { QString s = " " + aStr; aBuffer.push_back(s); } aTrace = aBuffer.join("\n"); + } - QFile aOutFile(aFileName.c_str()); - if (!aOutFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) - return false; + QFile aOutFile(aFileName.c_str()); + // binary for SALOME, issue 16931 + if (!aOutFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + return false; + + QTextStream aOut(&aOutFile); + aOut << aTrace << "\n"; + aOut.flush(); + aOutFile.close(); - QTextStream aOut(&aOutFile); - aOut << aTrace.toStdString().c_str() << "\n"; - aOut.flush(); - aOutFile.close(); - } theListOfFiles.append(aTmpDir.c_str()); theListOfFiles.append(DUMP_NAME); return true; @@ -230,4 +249,3 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy } return false; } -