From 967a64d215e520780ad9298d2b28272c5d713c54 Mon Sep 17 00:00:00 2001 From: vsv Date: Mon, 5 Sep 2016 16:54:23 +0300 Subject: [PATCH] Issue #1713: Provide Dump for Shaper module --- src/SHAPERGUI/CMakeLists.txt | 1 + src/SHAPERGUI/SHAPERGUI_DataModel.cpp | 68 +++++++++++++++++++++++++++ src/SHAPERGUI/SHAPERGUI_DataModel.h | 3 ++ 3 files changed, 72 insertions(+) diff --git a/src/SHAPERGUI/CMakeLists.txt b/src/SHAPERGUI/CMakeLists.txt index a7546df0b..cc819f8b6 100644 --- a/src/SHAPERGUI/CMakeLists.txt +++ b/src/SHAPERGUI/CMakeLists.txt @@ -53,6 +53,7 @@ INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/XGUI ${PROJECT_SOURCE_DIR}/src/ModelAPI ${PROJECT_SOURCE_DIR}/src/GeomAPI ${PROJECT_SOURCE_DIR}/src/Config + ${PROJECT_SOURCE_DIR}/src/ExchangePlugin ${SALOME_GUI_INCLUDE} ${SALOME_KERNEL_INCLUDE} ${CAS_INCLUDE_DIRS} diff --git a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp index df6a6ae3f..ac9a06edc 100644 --- a/src/SHAPERGUI/SHAPERGUI_DataModel.cpp +++ b/src/SHAPERGUI/SHAPERGUI_DataModel.cpp @@ -6,6 +6,8 @@ #include #include +#include +#include #include #include @@ -15,6 +17,10 @@ #include #include +#include + +#define DUMP_NAME "shaper_dump.py" + SHAPERGUI_DataModel::SHAPERGUI_DataModel(SHAPERGUI* theModule) : LightApp_DataModel(theModule), myStudyPath(""), myModule(theModule) @@ -153,3 +159,65 @@ void SHAPERGUI_DataModel::removeDirectory(const QString& theDirectoryName) Qtx::rmDir(theDirectoryName); } +bool SHAPERGUI_DataModel::dumpPython(const QString& thePath, CAM_Study* theStudy, + bool isMultiFile, QStringList& theListOfFiles) +{ + LightApp_Study* aStudy = dynamic_cast(theStudy); + if (!aStudy) + return false; + + 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()) { + std::string aTmpDir = aStudy->GetTmpDir(thePath.toStdString().c_str(), isMultiFile); + std::string aFileName = aTmpDir + DUMP_NAME; + + if (QFile::exists(aFileName.c_str())) { + QFile::remove(aFileName.c_str()); + } + + AttributeStringPtr aAttr = aFeature->string(ExchangePlugin_Dump::FILE_PATH_ID()); + if (aAttr.get()) + aAttr->setValue(aFileName); + + aAttr = aFeature->string(ExchangePlugin_Dump::FILE_FORMAT_ID()); + if (aAttr.get()) + aAttr->setValue(".py"); + 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(); + + QStringList aBuffer; + aBuffer.push_back(QString("def RebuildData( theStudy ):")); + 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; + + QTextStream aOut(&aOutFile); + aOut << aTrace.toStdString().c_str() << "\n"; + aOut.flush(); + aOutFile.close(); + } + theListOfFiles.append(aTmpDir.c_str()); + theListOfFiles.append(DUMP_NAME); + return true; + } + } + return false; +} + diff --git a/src/SHAPERGUI/SHAPERGUI_DataModel.h b/src/SHAPERGUI/SHAPERGUI_DataModel.h index 2383f832b..5672caae7 100644 --- a/src/SHAPERGUI/SHAPERGUI_DataModel.h +++ b/src/SHAPERGUI/SHAPERGUI_DataModel.h @@ -61,6 +61,9 @@ class SHAPERGUI_EXPORT SHAPERGUI_DataModel : public LightApp_DataModel /// \param theStudy a current study virtual void update(LightApp_DataObject* theObj = 0, LightApp_Study* theStudy = 0); + /// Redefinition of virtual method: include the module dump in the common SALOME dump + virtual bool dumpPython( const QString&, CAM_Study*, bool, QStringList& ); + protected: /** * Removes the directory with content if it exists -- 2.39.2