From 08b75b51fee6d8e4aa8aa6f4a6b2163332b57ea6 Mon Sep 17 00:00:00 2001 From: asozinov Date: Fri, 3 May 2024 16:35:14 +0100 Subject: [PATCH] Reload from file --- doc/gui/images/reload_mesh_modif_mesh.png | Bin 0 -> 9565 bytes .../images/reload_mesh_modif_mesh_props.png | Bin 0 -> 22339 bytes doc/gui/images/reload_mesh_orig_mesh.png | Bin 0 -> 10265 bytes doc/gui/images/reload_mesh_result.png | Bin 0 -> 37970 bytes doc/gui/input/reload_mesh_from_file.rst | 41 ++ idl/SMESH_Gen.idl | 54 +++ src/SMESHGUI/SMESHGUI.cxx | 80 +++- src/SMESHGUI/SMESHGUI_Operations.h | 1 + src/SMESHGUI/SMESH_msg_en.ts | 12 + src/SMESHGUI/SMESH_msg_fr.ts | 12 + src/SMESHGUI/SMESH_msg_ja.ts | 12 + src/SMESH_I/SMESH_Gen_i.cxx | 382 ++++++++++++++++++ src/SMESH_I/SMESH_Gen_i.hxx | 26 ++ src/SMESH_SWIG/smeshBuilder.py | 8 + 14 files changed, 626 insertions(+), 2 deletions(-) create mode 100644 doc/gui/images/reload_mesh_modif_mesh.png create mode 100644 doc/gui/images/reload_mesh_modif_mesh_props.png create mode 100644 doc/gui/images/reload_mesh_orig_mesh.png create mode 100644 doc/gui/images/reload_mesh_result.png create mode 100644 doc/gui/input/reload_mesh_from_file.rst diff --git a/doc/gui/images/reload_mesh_modif_mesh.png b/doc/gui/images/reload_mesh_modif_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3a68717b7532c5deba275c21b9b8f98d909412 GIT binary patch literal 9565 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 literal 0 HcmV?d00001 diff --git a/doc/gui/images/reload_mesh_modif_mesh_props.png b/doc/gui/images/reload_mesh_modif_mesh_props.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff677cd00b143951cde40d46c358e4170d95942 GIT binary patch literal 22339 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 XoltqgqE`TXyXlmjlWpAqE5i6$LT$ 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 Xew>y`4)6ie`9K$}9j$6DuHE@B5Hn}$ literal 0 HcmV?d00001 diff --git a/doc/gui/images/reload_mesh_result.png b/doc/gui/images/reload_mesh_result.png new file mode 100644 index 0000000000000000000000000000000000000000..902c9e28af1581ebc5309d443b514c858702de3e GIT binary patch literal 37970 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%0DxMi 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 h9^QYS#VsZJj~1selectedObjects(selected); + + QList< QPair< SMESH::SMESH_IDSource_var, QString > > aMeshList; + QList< QPair< SMESH::SMESH_IDSource_var, QString > >::iterator aMeshIter; + SALOME_ListIteratorOfListIO It(selected); + + // Iterate by all selected + for (; It.More(); It.Next()) + { + Handle(SALOME_InteractiveObject) anIObject = It.Value(); + SMESH::SMESH_IDSource_var aMeshItem = + SMESH::IObjectToInterface(anIObject); + + if (aMeshItem->_is_nil()) { + SUIT_MessageBox::warning(SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_BAD_MESH_SELECTION")); + continue; + } + + SMESH::SMESH_Mesh_var aMeshByIO = SMESH::GetMeshByIO(anIObject); + + SMESH::SelectionProxy aMesh = SMESH::SelectionProxy(aMeshItem); + SMESH::MedInfo anInfo = aMesh.medFileInfo(); + if (!anInfo.isValid()) + continue; + + SMESH::mesh_array_var aMeshes = new SMESH::mesh_array; + { + // Get file path and re-import mesh + QString aPath = anInfo.fileName(); + SMESH::SMESH_Mesh_var aReloadedMesh = SMESHGUI::GetSMESHGen()->ReloadMeshFromFile(aPath.toUtf8().constData(), aMeshByIO); + + QStringList anEntryList; + + _PTR(SObject) aMeshSO = SMESH::FindSObject(aReloadedMesh); + if (aMeshSO) { + anEntryList.append(aMeshSO->GetID().c_str()); + } + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + if (LightApp_Application* anApp = + dynamic_cast(SUIT_Session::session()->activeApplication())) + anApp->browseObjects(anEntryList); + } + + SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(aMeshItem);\ + QString aMeshName = anIObject->getName(); + aMeshList.append(QPair< SMESH::SMESH_IDSource_var, QString >(aMeshItem, aMeshName)); + + } + SMESH::UpdateView(); + } + inline void InverseEntityMode(unsigned int& theOutputMode, unsigned int theMode) { @@ -2691,7 +2759,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ::ImportMeshesFromFile(GetSMESHGen(),theCommandID); break; } - + case SMESHOp::OpReloadFromFile: + { + if (isStudyLocked()) break; + ::ReloadMeshFromFile(theCommandID); + break; + } case SMESHOp::OpFileInformation: { SALOME_ListIO selected; @@ -3484,7 +3557,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case SMESHOp::OpFindElementByPoint: { startOperation( theCommandID ); @@ -4320,6 +4392,7 @@ void SMESHGUI::initialize( CAM_Application* app ) //createSMESHAction( SMESHOp::OpStdInfo, "STD_INFO", "ICON_STD_INFO" ); //createSMESHAction( SMESHOp::OpWhatIs, "WHAT_IS", "ICON_WHAT_IS" ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) createSMESHAction( SMESHOp::OpFindElementByPoint, "FIND_ELEM", "ICON_FIND_ELEM" ); + createSMESHAction( SMESHOp::OpReloadFromFile, "RELOAD_FROM_FILE"); //update createSMESHAction( SMESHOp::OpFreeNode, "FREE_NODE", "ICON_FREE_NODE", 0, true ); createSMESHAction( SMESHOp::OpEqualNode, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true ); @@ -4548,6 +4621,7 @@ void SMESHGUI::initialize( CAM_Application* app ) #endif createMenu( SMESHOp::OpExportGMF, exportId, -1 ); createMenu( SMESHOp::OpExportMESHIO, exportId, -1 ); // formats supported by meshio lib + createMenu( SMESHOp::OpReloadFromFile, fileId, -1 ); createMenu( separator(), fileId, 10 ); createMenu( SMESHOp::OpDelete, editId, -1 ); @@ -4932,6 +5006,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); createPopupItem( SMESHOp::OpMeshInformation, OB, mesh_part ); createPopupItem( SMESHOp::OpFindElementByPoint,OB, mesh_group, "&& selcount=1 && " + hasElems ); + createPopupItem( SMESHOp::OpReloadFromFile, OB, mesh, "&& isImported"); createPopupItem( SMESHOp::OpOverallMeshQuality,OB, mesh_part ); popupMgr()->insert( separator(), -1, 0 ); createPopupItem( SMESHOp::OpCreateGroup, OB, mesh, "&& selcount=1" ); @@ -4995,6 +5070,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpMeshInformation, View, mesh_part ); createPopupItem( SMESHOp::OpOverallMeshQuality, View, mesh_part ); createPopupItem( SMESHOp::OpFindElementByPoint, View, mesh, "&& " + hasElems); + createPopupItem( SMESHOp::OpReloadFromFile, View, mesh_part, "&& isImported"); popupMgr()->insert( separator(), -1, 0 ); createPopupItem( SMESHOp::OpUpdate, OB + " " + View, mesh_part ); diff --git a/src/SMESHGUI/SMESHGUI_Operations.h b/src/SMESHGUI/SMESHGUI_Operations.h index 9b9ee1425..58689219d 100644 --- a/src/SMESHGUI/SMESHGUI_Operations.h +++ b/src/SMESHGUI/SMESHGUI_Operations.h @@ -94,6 +94,7 @@ namespace SMESHOp { OpWhatIs = 2101, // MENU MESH - MESH ELEMENT INFORMATION OpStdInfo = 2102, // MENU MESH - MESH STANDARD INFORMATION OpFindElementByPoint = 2103, // MENU MESH - FIND ELEMENT BY POINT + OpReloadFromFile = 2104, // MENU MESH - RELOAD MESH FROM FILE OpUpdate = 2200, // POPUP MENU - UPDATE // Controls -----------------------//-------------------------------- OpFreeNode = 3000, // MENU CONTROLS - FREE NODES diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 318a047da..6e15a27f6 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -272,6 +272,10 @@ MEN_ADV_INFO Mesh Information + + MEN_RELOAD_FROM_FILE + Reload from file + MEN_ALL All @@ -3332,6 +3336,10 @@ Use Display Entity menu command to show them. STB_ADV_INFO Show base information about the mesh object + + STB_RELOAD_FROM_FILE + Reload original mesh from file + STB_ALL All @@ -4072,6 +4080,10 @@ Use Display Entity menu command to show them. TOP_ADV_INFO Mesh Information + + TOP_RELOAD_FROM_FILE + Reload from file + TOP_ALL All diff --git a/src/SMESHGUI/SMESH_msg_fr.ts b/src/SMESHGUI/SMESH_msg_fr.ts index 4b2af068f..06ec53e42 100644 --- a/src/SMESHGUI/SMESH_msg_fr.ts +++ b/src/SMESHGUI/SMESH_msg_fr.ts @@ -268,6 +268,10 @@ MEN_ADV_INFO Informations sur le maillage + + MEN_RELOAD_FROM_FILE + Reload from file + MEN_ALL Tous @@ -3331,6 +3335,10 @@ Utilisez le menu "Visualiser une entité" pour les afficher. STB_ALL Tous + + STB_RELOAD_FROM_FILE + Reload original mesh from file + STB_AREA Aire @@ -4067,6 +4075,10 @@ Utilisez le menu "Visualiser une entité" pour les afficher. TOP_ADV_INFO Informations sur le maillage + + TOP_RELOAD_FROM_FILE + Reload from file + TOP_ALL Tous diff --git a/src/SMESHGUI/SMESH_msg_ja.ts b/src/SMESHGUI/SMESH_msg_ja.ts index d7706f285..e5f0d3411 100644 --- a/src/SMESHGUI/SMESH_msg_ja.ts +++ b/src/SMESHGUI/SMESH_msg_ja.ts @@ -251,6 +251,10 @@ MEN_ADV_INFO メッシュに関する情報 + + MEN_RELOAD_FROM_FILE + Reload from file + MEN_ALL すべて @@ -2979,6 +2983,10 @@ pip install meshio[all] STB_ADV_INFO メッシュ上の基本的な情報を得る + + STB_RELOAD_FROM_FILE + Reload original mesh from file + STB_ALL すべて @@ -3663,6 +3671,10 @@ pip install meshio[all] TOP_ADV_INFO メッシュに関する情報 + + TOP_RELOAD_FROM_FILE + Reload from file + TOP_ALL すべて diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index 1c78a2526..2257cf708 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -153,6 +153,7 @@ #include #include #include +#include #include #include @@ -1330,6 +1331,60 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateEmptyMesh() return mesh._retn(); } +SMESH::SMESH_Mesh_ptr SMESH_Gen_i::ReloadMeshFromFile(const char* theFileName, + SMESH::SMESH_Mesh_ptr theMesh) +{ + SMESH::mesh_array_var aMeshes = new SMESH::mesh_array; + // Get file path and re-import mesh + QString aPath = QString(theFileName); + QStringList aSplit = aPath.split('.'); + QStringList anEntryList; + + + auto aStudy = getStudyServant(); + + SMESH::SMESH_Mesh_ptr aNewMesh; + + SMESH_Mesh* aMesh = reinterpret_cast (theMesh->GetMeshPtr()); + aMesh->GetMeshDS()->ClearMesh(); + + if (aSplit.last() == "cgns") + { + SMESH::DriverMED_ReadStatus res; + aMeshes = ReloadMeshesFromCGNS(aPath.toUtf8().constData(), theMesh, res); + + aNewMesh = aMeshes[0]; + + } + else if (aSplit.last().contains("stl", Qt::CaseSensitivity::CaseInsensitive)) + { + aNewMesh = ReloadMeshesFromSTL(aPath.toUtf8().constData(), theMesh); + } + else if (aSplit.last().contains("unv", Qt::CaseSensitivity::CaseInsensitive)) + { + aNewMesh = ReloadMeshesFromUNV(aPath.toUtf8().constData(), theMesh); + } + else if (aSplit.last().contains("mesh", Qt::CaseSensitivity::CaseInsensitive)) + { + SMESH::ComputeError_var res; + aNewMesh = ReloadMeshesFromGMF(aPath.toUtf8().constData(), theMesh, true, res.out()); + } + else if (aSplit.last().contains("med", Qt::CaseSensitivity::CaseInsensitive)) + { + SMESH::DriverMED_ReadStatus res; + aMeshes = ReloadMeshesFromMED(aPath.toUtf8().constData(), theMesh, res); + + aNewMesh = aMeshes[0]; + } + else + { + // MeshIO + } + + theMesh = SMESH::SMESH_Mesh::_duplicate(aNewMesh); + return theMesh; +} + namespace { //================================================================================ @@ -1425,6 +1480,36 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName return aMesh._retn(); } +SMESH::SMESH_Mesh_ptr SMESH_Gen_i::ReloadMeshesFromUNV(const char* theFileName, SMESH::SMESH_Mesh_ptr sourceMesh) +{ + Unexpect aCatch(SALOME_SalomeException); + + checkFileReadable(theFileName); + + string aFileName; + // publish mesh in the study + if (CanPublishInStudy(sourceMesh)) { + SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + SALOMEDS::SObject_wrap aSO = PublishMesh(sourceMesh, aFileName.c_str()); + aStudyBuilder->CommitCommand(); + if (!aSO->_is_nil()) { + // Update Python script + TPythonDump(this) << aSO << " = " << this << ".ReloadMeshesFromUNV(r'" << theFileName << "')"; + } + } + + SMESH_Mesh_i* aServant = dynamic_cast(GetServant(sourceMesh).in()); + ASSERT(aServant); + aServant->ImportUNVFile(theFileName); + + // Dump creation of groups + SMESH::ListOfGroups_var groups = aServant->GetGroups(); + + aServant->GetImpl().GetMeshDS()->Modified(); + return sourceMesh; +} + //============================================================================= /*! * SMESH_Gen_i::CreateMeshFromMED @@ -1515,6 +1600,85 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* return aResult._retn(); } +SMESH::mesh_array* SMESH_Gen_i::ReloadMeshesFromMED(const char* theFileName, SMESH::SMESH_Mesh_ptr sourceMesh, SMESH::DriverMED_ReadStatus& theStatus) +{ + checkFileReadable(theFileName); + +#ifdef WIN32 + char bname[_MAX_FNAME]; + _splitpath(theFileName, NULL, NULL, bname, NULL); + string aFileName = bname; +#else + string aFileName = basename(const_cast(theFileName)); +#endif + // Retrieve mesh names from the file + DriverMED_R_SMESHDS_Mesh myReader; + myReader.SetFile(theFileName); + myReader.SetMeshId(-1); + Driver_Mesh::Status aStatus; + list aNames = myReader.GetMeshNames(aStatus); + SMESH::mesh_array_var aResult = new SMESH::mesh_array(); + theStatus = (SMESH::DriverMED_ReadStatus)aStatus; + + { // open a new scope to make aPythonDump die before PythonDump in SMESH_Mesh::GetGroups() + + // Python Dump + TPythonDump aPythonDump(this); + aPythonDump << "(["; + + if (theStatus == SMESH::DRS_OK) + { + SALOMEDS::StudyBuilder_var aStudyBuilder; + aStudyBuilder = getStudyServant()->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + + aResult->length(aNames.size()); + int i = 0; + + // Iterate through all meshes and create mesh objects + for (const std::string& meshName : aNames) + { + // Python Dump + if (i > 0) aPythonDump << ", "; + + // publish mesh in the study + SALOMEDS::SObject_wrap aSO; + if (CanPublishInStudy(sourceMesh)) + aSO = PublishMesh(sourceMesh, meshName.c_str()); + + // Python Dump + if (!aSO->_is_nil()) { + aPythonDump << aSO; + } + else { + aPythonDump << "mesh_" << i; + } + + // Read mesh data (groups are published automatically by ImportMEDFile()) + SMESH_Mesh_i* meshServant = dynamic_cast(GetServant(sourceMesh).in()); + ASSERT(meshServant); + SMESH::DriverMED_ReadStatus status1 = + meshServant->ImportMEDFile(theFileName, meshName.c_str()); + if (status1 > theStatus) + theStatus = status1; + + aResult[i++] = SMESH::SMESH_Mesh::_duplicate(sourceMesh); + meshServant->GetImpl().GetMeshDS()->Modified(); + } + if (!aStudyBuilder->_is_nil()) + aStudyBuilder->CommitCommand(); + } + + // Update Python script + aPythonDump << "], status) = " << this << ".ReloadMeshesFromMED( r'" << theFileName << "' )"; + } + // Dump creation of groups + for (CORBA::ULong i = 0; i < aResult->length(); ++i) + SMESH::ListOfGroups_var groups = aResult[i]->GetGroups(); + + return aResult._retn(); +} + //============================================================================= /*! * SMESH_Gen_i::CreateMeshFromSTL @@ -1556,6 +1720,37 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName return aMesh._retn(); } +SMESH::SMESH_Mesh_ptr SMESH_Gen_i::ReloadMeshesFromSTL(const char* theFileName, SMESH::SMESH_Mesh_ptr sourceMesh) +{ + Unexpect aCatch(SALOME_SalomeException); + checkFileReadable(theFileName); + +#ifdef WIN32 + char bname[_MAX_FNAME]; + _splitpath(theFileName, NULL, NULL, bname, NULL); + string aFileName = bname; +#else + string aFileName = basename(const_cast(theFileName)); +#endif + // publish mesh in the study + if (CanPublishInStudy(sourceMesh)) { + SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + SALOMEDS::SObject_wrap aSO = PublishInStudy(SALOMEDS::SObject::_nil(), sourceMesh, aFileName.c_str()); + aStudyBuilder->CommitCommand(); + if (!aSO->_is_nil()) { + // Update Python script + TPythonDump(this) << aSO << " = " << this << ".ReloadMeshFromSTL(r'" << theFileName << "')"; + } + } + + SMESH_Mesh_i* aServant = dynamic_cast(GetServant(sourceMesh).in()); + ASSERT(aServant); + aServant->ImportSTLFile(theFileName); + aServant->GetImpl().GetMeshDS()->Modified(); + return sourceMesh; +} + //================================================================================ /*! * \brief Create meshes and import data from the CGSN file @@ -1641,6 +1836,85 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char* return aResult._retn(); } +SMESH::mesh_array* SMESH_Gen_i::ReloadMeshesFromCGNS(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh, + SMESH::DriverMED_ReadStatus& theStatus) +{ + Unexpect aCatch(SALOME_SalomeException); + checkFileReadable(theFileName); + + SMESH::mesh_array_var aResult = new SMESH::mesh_array(); + +#ifdef WITH_CGNS + // Retrieve nb meshes from the file + DriverCGNS_Read myReader; + myReader.SetFile(theFileName); + Driver_Mesh::Status aStatus; + int nbMeshes = myReader.GetNbMeshes(aStatus); + theStatus = (SMESH::DriverMED_ReadStatus)aStatus; + + aResult->length(nbMeshes); + + { // open a new scope to make aPythonDump die before PythonDump in SMESH_Mesh::GetGroups() + + // Python Dump + TPythonDump aPythonDump(this); + aPythonDump << "(["; + + if (theStatus == SMESH::DRS_OK) + { + SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + + int i = 0; + + // Iterate through all meshes and create mesh objects + for (; i < nbMeshes; ++i) + { + // Python Dump + if (i > 0) aPythonDump << ", "; + + // create mesh + aResult[i] = SMESH::SMESH_Mesh::_duplicate(sourceMesh); + + // Read mesh data (groups are published automatically by ImportMEDFile()) + SMESH_Mesh_i* meshServant = dynamic_cast(GetServant(sourceMesh).in()); + ASSERT(meshServant); + string meshName; + SMESH::DriverMED_ReadStatus status1 = + meshServant->ImportCGNSFile(theFileName, i, meshName); + if (status1 > theStatus) + theStatus = status1; + + meshServant->GetImpl().GetMeshDS()->Modified(); + // publish mesh in the study + SALOMEDS::SObject_wrap aSO; + if (CanPublishInStudy(sourceMesh)) + aSO = PublishMesh(sourceMesh, meshName.c_str()); + + // Python Dump + if (!aSO->_is_nil()) { + aPythonDump << aSO; + } + else { + aPythonDump << "mesh_" << i; + } + } + aStudyBuilder->CommitCommand(); + } + + aPythonDump << "], status) = " << this << ".ReloadMeshesFromCGNS(r'" << theFileName << "')"; + } + // Dump creation of groups + for (CORBA::ULong i = 0; i < aResult->length(); ++i) + SMESH::ListOfGroups_var groups = aResult[i]->GetGroups(); +#else + THROW_SALOME_CORBA_EXCEPTION("CGNS library is unavailable", SALOME::INTERNAL_ERROR); +#endif + + return aResult._retn(); +} + //================================================================================ /*! * \brief Create a mesh and import data from a GMF file @@ -1683,6 +1957,38 @@ SMESH_Gen_i::CreateMeshesFromGMF( const char* theFileName, return aMesh._retn(); } +SMESH::SMESH_Mesh_ptr SMESH_Gen_i::ReloadMeshesFromGMF(const char* theFileName, SMESH::SMESH_Mesh_ptr sourceMesh, CORBA::Boolean theMakeRequiredGroups, SMESH::ComputeError_out theError) +{ + Unexpect aCatch(SALOME_SalomeException); + checkFileReadable(theFileName); + +#ifdef WIN32 + char bname[_MAX_FNAME]; + _splitpath(theFileName, NULL, NULL, bname, NULL); + string aFileName = bname; +#else + string aFileName = basename(const_cast(theFileName)); +#endif + // publish mesh in the study + if (CanPublishInStudy(sourceMesh)) { + SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + SALOMEDS::SObject_wrap aSO = PublishInStudy(SALOMEDS::SObject::_nil(), sourceMesh, aFileName.c_str()); + aStudyBuilder->CommitCommand(); + if (!aSO->_is_nil()) { + // Update Python script + TPythonDump(this) << "(" << aSO << ", error) = " << this << ".ReloadMeshesFromGMF(r'" + << theFileName << "', " + << theMakeRequiredGroups << " )"; + } + } + SMESH_Mesh_i* aServant = dynamic_cast(GetServant(sourceMesh).in()); + ASSERT(aServant); + theError = aServant->ImportGMFFile(theFileName, theMakeRequiredGroups); + aServant->GetImpl().GetMeshDS()->Modified(); + return sourceMesh; +} + //================================================================================ /*! * \brief Create a mesh and import data from any file supported by meshio library @@ -1769,6 +2075,82 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMESHIO(const char* theFileName, return aResult._retn(); } +SMESH::mesh_array* SMESH_Gen_i::ReloadMeshesFromMESHIO(const char* theFileName, SMESH::SMESH_Mesh_ptr sourceMesh, SMESH::DriverMED_ReadStatus& theStatus) +{ + Unexpect aCatch(SALOME_SalomeException); + checkFileReadable(theFileName); + + MESSAGE("Import part with meshio through an intermediate MED file"); + + // Create an object that holds a temp file name and + // removes the file when goes out of scope. + SMESH_Meshio meshio; + const QString tempFileName = meshio.CreateTempFileName(theFileName); + + // Convert temp file into a target one with meshio command + meshio.Convert(theFileName, tempFileName); + + // We don't need a python dump from SMESH_Gen_i::CreateMeshesFromMED(), so + // we can't use this method as is here. The followed code is an edited part of + // copy pasted CreateMeshesFromMED(). + + // Retrieve mesh names from the file + DriverMED_R_SMESHDS_Mesh myReader; + myReader.SetFile(tempFileName.toStdString()); + myReader.SetMeshId(-1); + Driver_Mesh::Status aStatus; + list aNames = myReader.GetMeshNames(aStatus); + SMESH::mesh_array_var aResult = new SMESH::mesh_array(); + theStatus = (SMESH::DriverMED_ReadStatus)aStatus; + + if (theStatus == SMESH::DRS_OK) + { + SALOMEDS::StudyBuilder_var aStudyBuilder; + aStudyBuilder = getStudyServant()->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + + aResult->length(aNames.size()); + std::vector sobjects; + int i = 0; + + // Iterate through all meshes and create mesh objects + for (const std::string& meshName : aNames) + { + // publish mesh in the study + SALOMEDS::SObject_wrap aSO; + if (CanPublishInStudy(sourceMesh)) + aSO = PublishMesh(sourceMesh, meshName.c_str()); + + // Save SO to use in a python dump + sobjects.emplace_back(aSO); + + // Read mesh data (groups are published automatically by ImportMEDFile()) + SMESH_Mesh_i* meshServant = dynamic_cast(GetServant(sourceMesh).in()); + ASSERT(meshServant); + SMESH::DriverMED_ReadStatus status1 = + meshServant->ImportMEDFile(tempFileName.toUtf8().data(), meshName.c_str()); + if (status1 > theStatus) + theStatus = status1; + + aResult[i++] = SMESH::SMESH_Mesh::_duplicate(sourceMesh); + meshServant->GetImpl().GetMeshDS()->Modified(); + } + + if (!aStudyBuilder->_is_nil()) + aStudyBuilder->CommitCommand(); + + // Python dump + const std::string functionName = std::string(".ReloadMeshesFromMESHIO(r'") + theFileName + "')"; + functionToPythonDump(this, functionName, sobjects); + } + + // Dump creation of groups + for (CORBA::ULong i = 0; i < aResult->length(); ++i) + SMESH::ListOfGroups_var groups = aResult[i]->GetGroups(); + + return aResult._retn(); +} + //============================================================================= /*! * SMESH_Gen_i::IsReadyToCompute diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 1b3af8ad5..a8a247177 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -237,29 +237,55 @@ public: // Create empty mesh SMESH::SMESH_Mesh_ptr CreateEmptyMesh(); + SMESH::SMESH_Mesh_ptr ReloadMeshFromFile( const char* theFileName, + SMESH::SMESH_Mesh_ptr theMesh); + // Create a mesh and import data from an UNV file SMESH::SMESH_Mesh_ptr CreateMeshesFromUNV( const char* theFileName ); + SMESH::SMESH_Mesh_ptr ReloadMeshesFromUNV(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh); + // Create mesh(es) and import data from MED file SMESH::mesh_array* CreateMeshesFromMED( const char* theFileName, SMESH::DriverMED_ReadStatus& theStatus ); + SMESH::mesh_array* ReloadMeshesFromMED(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh, + SMESH::DriverMED_ReadStatus& theStatus); + // Create a mesh and import data from a STL file SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName ); + SMESH::SMESH_Mesh_ptr ReloadMeshesFromSTL(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh); + // Create mesh(es) and import data from CGNS file SMESH::mesh_array* CreateMeshesFromCGNS( const char* theFileName, SMESH::DriverMED_ReadStatus& theStatus ); + SMESH::mesh_array* ReloadMeshesFromCGNS(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh, + SMESH::DriverMED_ReadStatus& theStatus); + // Create a mesh and import data from a GMF file SMESH::SMESH_Mesh_ptr CreateMeshesFromGMF( const char* theFileName, CORBA::Boolean theMakeRequiredGroups, SMESH::ComputeError_out theError); + SMESH::SMESH_Mesh_ptr ReloadMeshesFromGMF(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh, + CORBA::Boolean theMakeRequiredGroups, + SMESH::ComputeError_out theError); + // Create a mesh and import data from any file supported by meshio library SMESH::mesh_array* CreateMeshesFromMESHIO(const char* theFileName, SMESH::DriverMED_ReadStatus& theStatus); + SMESH::mesh_array* ReloadMeshesFromMESHIO(const char* theFileName, + SMESH::SMESH_Mesh_ptr sourceMesh, + SMESH::DriverMED_ReadStatus& theStatus); + // Create dual mesh of a tetrahedron mesh SMESH::SMESH_Mesh_ptr CreateDualMesh(SMESH::SMESH_IDSource_ptr meshPart, const char* meshName, diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 607314411..114c59b4c 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -675,6 +675,14 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ): global notebook notebook = salome_notebook.NoteBook( theIsEnablePublish ) + def ReloadMeshFromFile(self, theFileName, theMesh): + """ + Desc for method, + """ + + aSmeshMesh = SMESH._objref_SMESH_Gen.ReloadMeshFromFile(self,theFileName) + aMesh = Mesh(self, self.geompyD, theFileName, aSmeshMesh) + return aMesh def CreateMeshesFromUNV( self,theFileName ): """ -- 2.39.2