X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSHAPERGUI%2FSHAPERGUI_DataModel.cpp;h=4e4046c70d8f038051d05088efbf2cc1e7473567;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=a799ef0444b06d26ca63878f0fad4b4751fe8832;hpb=f9703ea9d3871f4151b5bdc610664882f0bf2e38;p=modules%2Fshaper.git diff --git a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp index a799ef044..4e4046c70 100644 --- a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp +++ b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,10 +12,9 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "SHAPERGUI_DataModel.h" @@ -25,6 +24,7 @@ #include #include +#include #include #include @@ -68,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(); @@ -86,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; @@ -176,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; @@ -187,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); @@ -195,39 +207,41 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy if (aAttr.get()) aAttr->setValue(".py"); - AttributeStringPtr aTypeAttr = aFeature->string(ExchangePlugin_Dump::SELECTION_TYPE_ID()); - if (aTypeAttr.get()) - aTypeAttr->setValue(ExchangePlugin_Dump::TOPOLOGICAL_NAMING_DUMP_ID()); +#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; @@ -235,4 +249,3 @@ bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy } return false; } -