From 2cdec6ec506baa5a7777e3c1d6826ff176f9f3e9 Mon Sep 17 00:00:00 2001 From: mpv Date: Thu, 30 Jan 2020 19:18:17 +0300 Subject: [PATCH] Support of python dump in SHAPER STUDY --- src/SMESH_I/SMESH_2smeshpy.cxx | 69 +++++++++++++++++++--------------- src/SMESH_I/SMESH_2smeshpy.hxx | 3 ++ 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index b22af73eb..d126f6b23 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -567,7 +567,8 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod myRemovedObjIDs( theRemovedObjIDs ), myNbFilters( 0 ), myToKeepAllCommands( theToKeepAllCommands ), - myGeomIDNb(0), myGeomIDIndex(-1) + myGeomIDNb(0), myGeomIDIndex(-1), + myShaperIDNb(0), myShaperIDIndex(-1) { // make that GetID() to return TPythonDump::SMESHGenName() GetCreationCmd()->Clear(); @@ -575,30 +576,38 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod GetCreationCmd()->GetString() += "="; // Find 1st digit of study entry by which a GEOM object differs from a SMESH object - if ( !theObjectNames.IsEmpty() ) + if (!theObjectNames.IsEmpty()) { - // find a GEOM entry - _pyID geomID; - SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::getStudyServant()->FindComponent("GEOM"); - if ( geomComp->_is_nil() ) return; - CORBA::String_var entry = geomComp->GetID(); - geomID = entry.in(); - - // find a SMESH entry - _pyID smeshID; - Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString e2n( theObjectNames ); - for ( ; e2n.More() && smeshID.IsEmpty(); e2n.Next() ) - if ( _pyCommand::IsStudyEntry( e2n.Key() )) - smeshID = e2n.Key(); - - // find 1st difference between smeshID and geomID - if ( !geomID.IsEmpty() && !smeshID.IsEmpty() ) - for ( int i = 1; i <= geomID.Length() && i <= smeshID.Length(); ++i ) - if ( geomID.Value( i ) != smeshID.Value( i )) - { - myGeomIDNb = geomID.Value( i ); - myGeomIDIndex = i; - } + // find a GEOM (aPass == 0) and SHAPERSTUDY (aPass == 1) entries + for(int aPass = 0; aPass < 2; aPass++) { + _pyID geomID; + SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::getStudyServant()-> + FindComponent(aPass == 0 ? "GEOM" : "SHAPERSTUDY"); + if (geomComp->_is_nil()) continue; + CORBA::String_var entry = geomComp->GetID(); + geomID = entry.in(); + + // find a SMESH entry + _pyID smeshID; + Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString e2n(theObjectNames); + for (; e2n.More() && smeshID.IsEmpty(); e2n.Next()) + if (_pyCommand::IsStudyEntry(e2n.Key())) + smeshID = e2n.Key(); + + // find 1st difference between smeshID and geomID + if (!geomID.IsEmpty() && !smeshID.IsEmpty()) + for (int i = 1; i <= geomID.Length() && i <= smeshID.Length(); ++i) + if (geomID.Value(i) != smeshID.Value(i)) + { + if (aPass == 0) { + myGeomIDNb = geomID.Value(i); + myGeomIDIndex = i; + } else { + myShaperIDNb = geomID.Value(i); + myShaperIDIndex = i; + } + } + } } } @@ -1680,13 +1689,11 @@ Handle(_pyObject) _pyGen::FindObject( const _pyID& theObjID ) const bool _pyGen::IsGeomObject(const _pyID& theObjID) const { - if ( myGeomIDNb ) - { - return ( myGeomIDIndex <= theObjID.Length() && - int( theObjID.Value( myGeomIDIndex )) == myGeomIDNb && - _pyCommand::IsStudyEntry( theObjID )); - } - return false; + bool isGeom = myGeomIDNb && myGeomIDIndex <= theObjID.Length() && + int( theObjID.Value( myGeomIDIndex )) == myGeomIDNb; + bool isShaper = myShaperIDNb && myShaperIDIndex <= theObjID.Length() && + int( theObjID.Value( myShaperIDIndex )) == myShaperIDNb; + return ((isGeom || isShaper) && _pyCommand::IsStudyEntry( theObjID )); } //================================================================================ diff --git a/src/SMESH_I/SMESH_2smeshpy.hxx b/src/SMESH_I/SMESH_2smeshpy.hxx index 71ecd1445..b7db1557c 100644 --- a/src/SMESH_I/SMESH_2smeshpy.hxx +++ b/src/SMESH_I/SMESH_2smeshpy.hxx @@ -323,7 +323,10 @@ private: Handle(_pyCommand) myLastCommand; int myNbFilters; bool myToKeepAllCommands; + // difference of entry and index of this difference int myGeomIDNb, myGeomIDIndex; + // difference of entry and index of this difference, specific for the SHAPER study + int myShaperIDNb, myShaperIDIndex; std::map< _AString, ExportedMeshData > myFile2ExportedMesh; Handle( _pyHypothesisReader ) myHypReader; -- 2.39.2