- continue;
- string iorString = GetORB()->object_to_string( myNewMesh );
- int newId = myStudyContext->findId( iorString );
- myStudyContext->mapOldToNew( id, newId );
-
- ::SMESH_Mesh& myLocMesh = myNewMeshImpl->GetImpl();
- SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
-
- // try to find mesh data dataset
- if ( aTopGroup->ExistInternalObject( "Has data" ) ) {
- // load mesh "has data" flag
- aDataset = new HDFdataset( "Has data", aTopGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* strHasData = new char[ size ];
- aDataset->ReadFromDisk( strHasData );
- aDataset->CloseOnDisk();
- if ( strcmp( strHasData, "1") == 0 ) {
- // read mesh data from MED file
- myReader.SetMesh( mySMESHDSMesh );
- myReader.SetMeshId( id );
- myReader.Perform();
- hasData = true;
- }
- }
-
- // try to read and set reference to shape
- GEOM::GEOM_Object_var aShapeObject;
- if ( aTopGroup->ExistInternalObject( "Ref on shape" ) ) {
- // load mesh "Ref on shape" - it's an entry to SObject
- aDataset = new HDFdataset( "Ref on shape", aTopGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* refFromFile = new char[ size ];
- aDataset->ReadFromDisk( refFromFile );
- aDataset->CloseOnDisk();
- if ( strlen( refFromFile ) > 0 ) {
- SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile );
-
- // Make sure GEOM data are loaded first
- //loadGeomData( shapeSO->GetFatherComponent() );
-
- CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
- if ( !CORBA::is_nil( shapeObject ) ) {
- aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
- if ( !aShapeObject->_is_nil() )
- myNewMeshImpl->SetShape( aShapeObject );
- }
- }
- }
-
- // try to get applied algorithms
- if ( aTopGroup->ExistInternalObject( "Applied Algorithms" ) ) {
- aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
- aGroup->OpenOnDisk();
- // get number of applied algorithms
- int aNbSubObjects = aGroup->nInternalObjects();
- if(MYDEBUG) MESSAGE( "VSR - number of applied algos " << aNbSubObjects );
- for ( int j = 0; j < aNbSubObjects; j++ ) {
- char name_dataset[ HDF_NAME_MAX_LEN+1 ];
- aGroup->InternalObjectIndentify( j, name_dataset );
- // check if it is an algorithm
- if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
- aDataset = new HDFdataset( name_dataset, aGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* refFromFile = new char[ size ];
- aDataset->ReadFromDisk( refFromFile );
- aDataset->CloseOnDisk();
-
- // san - it is impossible to recover applied algorithms using their entries within Load() method
-
- //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
- //CORBA::Object_var hypObject = SObjectToObject( hypSO );
- int id = atoi( refFromFile );
- string anIOR = myStudyContext->getIORbyOldId( id );
- if ( !anIOR.empty() ) {
- CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
- if ( !CORBA::is_nil( hypObject ) ) {
- SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
- if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
- myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
- }
- }
- }
- }
- aGroup->CloseOnDisk();
- }
-
- // try to get applied hypotheses
- if ( aTopGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
- aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
- aGroup->OpenOnDisk();
- // get number of applied hypotheses
- int aNbSubObjects = aGroup->nInternalObjects();
- for ( int j = 0; j < aNbSubObjects; j++ ) {
- char name_dataset[ HDF_NAME_MAX_LEN+1 ];
- aGroup->InternalObjectIndentify( j, name_dataset );
- // check if it is a hypothesis
- if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
- aDataset = new HDFdataset( name_dataset, aGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* refFromFile = new char[ size ];
- aDataset->ReadFromDisk( refFromFile );
- aDataset->CloseOnDisk();
-
- // san - it is impossible to recover applied hypotheses using their entries within Load() method
-
- //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
- //CORBA::Object_var hypObject = SObjectToObject( hypSO );
- int id = atoi( refFromFile );
- string anIOR = myStudyContext->getIORbyOldId( id );
- if ( !anIOR.empty() ) {
- CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
- if ( !CORBA::is_nil( hypObject ) ) {
- SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
- if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
- myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
- }
- }
- }
- }
- aGroup->CloseOnDisk();
- }
-
- // --> try to find submeshes containers for each type of submesh
- for ( int j = GetSubMeshOnVertexTag(); j <= GetSubMeshOnCompoundTag(); j++ ) {
- char name_meshgroup[ 30 ];
- if ( j == GetSubMeshOnVertexTag() )
- strcpy( name_meshgroup, "SubMeshes On Vertex" );
- else if ( j == GetSubMeshOnEdgeTag() )
- strcpy( name_meshgroup, "SubMeshes On Edge" );
- else if ( j == GetSubMeshOnWireTag() )
- strcpy( name_meshgroup, "SubMeshes On Wire" );
- else if ( j == GetSubMeshOnFaceTag() )
- strcpy( name_meshgroup, "SubMeshes On Face" );
- else if ( j == GetSubMeshOnShellTag() )
- strcpy( name_meshgroup, "SubMeshes On Shell" );
- else if ( j == GetSubMeshOnSolidTag() )
- strcpy( name_meshgroup, "SubMeshes On Solid" );
- else if ( j == GetSubMeshOnCompoundTag() )
- strcpy( name_meshgroup, "SubMeshes On Compound" );
-
- // try to get submeshes container HDF group
- if ( aTopGroup->ExistInternalObject( name_meshgroup ) ) {
- // open submeshes containers HDF group
- aGroup = new HDFgroup( name_meshgroup, aTopGroup );
- aGroup->OpenOnDisk();
-
- // get number of submeshes
- int aNbSubMeshes = aGroup->nInternalObjects();
- for ( int k = 0; k < aNbSubMeshes; k++ ) {
- // identify submesh
- char name_submeshgroup[ HDF_NAME_MAX_LEN+1 ];
- aGroup->InternalObjectIndentify( k, name_submeshgroup );
- if ( string( name_submeshgroup ).substr( 0, 7 ) == string( "SubMesh" ) ) {
- // --> get submesh id
- int subid = atoi( string( name_submeshgroup ).substr( 7 ).c_str() );
- if ( subid <= 0 )
- continue;
- // open submesh HDF group
- aSubGroup = new HDFgroup( name_submeshgroup, aGroup );
- aSubGroup->OpenOnDisk();
-
- // try to read and set reference to subshape
- GEOM::GEOM_Object_var aSubShapeObject;
- SMESH::SMESH_subMesh_var aSubMesh;
-
- if ( aSubGroup->ExistInternalObject( "Ref on shape" ) ) {
- // load submesh "Ref on shape" - it's an entry to SObject
- aDataset = new HDFdataset( "Ref on shape", aSubGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* refFromFile = new char[ size ];
- aDataset->ReadFromDisk( refFromFile );
- aDataset->CloseOnDisk();
- if ( strlen( refFromFile ) > 0 ) {
- SALOMEDS::SObject_var subShapeSO = myCurrentStudy->FindObjectID( refFromFile );
- CORBA::Object_var subShapeObject = SObjectToObject( subShapeSO );
- if ( !CORBA::is_nil( subShapeObject ) ) {
- aSubShapeObject = GEOM::GEOM_Object::_narrow( subShapeObject );
- if ( !aSubShapeObject->_is_nil() )
- aSubMesh = SMESH::SMESH_subMesh::_duplicate
- ( myNewMeshImpl->createSubMesh( aSubShapeObject ) );
- if ( aSubMesh->_is_nil() )
- continue;
- string iorSubString = GetORB()->object_to_string( aSubMesh );
- int newSubId = myStudyContext->findId( iorSubString );
- myStudyContext->mapOldToNew( subid, newSubId );
- }
- }
- }
-
- if ( aSubMesh->_is_nil() )
- continue;
-
- // VSR: Get submesh data from MED convertor
-// int anInternalSubmeshId = aSubMesh->GetId(); // this is not a persistent ID, it's an internal one computed from sub-shape
-// if (myNewMeshImpl->_mapSubMesh.find(anInternalSubmeshId) != myNewMeshImpl->_mapSubMesh.end()) {
-// if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): loading from MED file submesh with ID = " <<
-// subid << " for subshape # " << anInternalSubmeshId);
-// SMESHDS_SubMesh* aSubMeshDS =
-// myNewMeshImpl->_mapSubMesh[anInternalSubmeshId]->CreateSubMeshDS();
-// if ( !aSubMeshDS ) {
-// if(MYDEBUG) MESSAGE("VSR - SMESH_Gen_i::Load(): FAILED to create a submesh for subshape # " <<
-// anInternalSubmeshId << " in current mesh!");
-// }
-// else
-// myReader.GetSubMesh( aSubMeshDS, subid );
-// }
-
- // try to get applied algorithms
- if ( aSubGroup->ExistInternalObject( "Applied Algorithms" ) ) {
- // open "applied algorithms" HDF group
- aSubSubGroup = new HDFgroup( "Applied Algorithms", aSubGroup );
- aSubSubGroup->OpenOnDisk();
- // get number of applied algorithms
- int aNbSubObjects = aSubSubGroup->nInternalObjects();
- for ( int l = 0; l < aNbSubObjects; l++ ) {
- char name_dataset[ HDF_NAME_MAX_LEN+1 ];
- aSubSubGroup->InternalObjectIndentify( l, name_dataset );
- // check if it is an algorithm
- if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
- aDataset = new HDFdataset( name_dataset, aSubSubGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* refFromFile = new char[ size ];
- aDataset->ReadFromDisk( refFromFile );
- aDataset->CloseOnDisk();
-
- //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
- //CORBA::Object_var hypObject = SObjectToObject( hypSO );
- int id = atoi( refFromFile );
- string anIOR = myStudyContext->getIORbyOldId( id );
- if ( !anIOR.empty() ) {
- CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
- if ( !CORBA::is_nil( hypObject ) ) {
- SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
- if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
- myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
- }
- }
- }
- }
- // close "applied algorithms" HDF group
- aSubSubGroup->CloseOnDisk();
- }
-
- // try to get applied hypotheses
- if ( aSubGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
- // open "applied hypotheses" HDF group
- aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup );
- aSubSubGroup->OpenOnDisk();
- // get number of applied hypotheses
- int aNbSubObjects = aSubSubGroup->nInternalObjects();
- for ( int l = 0; l < aNbSubObjects; l++ ) {
- char name_dataset[ HDF_NAME_MAX_LEN+1 ];
- aSubSubGroup->InternalObjectIndentify( l, name_dataset );
- // check if it is a hypothesis
- if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
- aDataset = new HDFdataset( name_dataset, aSubSubGroup );
- aDataset->OpenOnDisk();
- size = aDataset->GetSize();
- char* refFromFile = new char[ size ];
- aDataset->ReadFromDisk( refFromFile );
- aDataset->CloseOnDisk();
-
- //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
- //CORBA::Object_var hypObject = SObjectToObject( hypSO );
- int id = atoi( refFromFile );
- string anIOR = myStudyContext->getIORbyOldId( id );
- if ( !anIOR.empty() ) {
- CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
- if ( !CORBA::is_nil( hypObject ) ) {
- SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
- if ( !anHyp->_is_nil() && !aShapeObject->_is_nil() )
- myNewMeshImpl->addHypothesis( aSubShapeObject, anHyp );
- }
- }
- }
- }
- // close "applied hypotheses" HDF group
- aSubSubGroup->CloseOnDisk();
- }
-
- // close submesh HDF group
- aSubGroup->CloseOnDisk();
- }
- }
- // close submeshes containers HDF group
- aGroup->CloseOnDisk();
- }
- }
-
- if(hasData) {
- // Read sub-meshes from MED
- if(MYDEBUG) MESSAGE("Create all sub-meshes");
- myReader.CreateAllSubMeshes();
-
-
- // Read node positions on sub-shapes (SMDS_Position)
-
- if ( aTopGroup->ExistInternalObject( "Node Positions" ))
- {
- // There are 5 datasets to read:
- // "Nodes on Edges" - ID of node on edge
- // "Edge positions" - U parameter on node on edge
- // "Nodes on Faces" - ID of node on face
- // "Face U positions" - U parameter of node on face
- // "Face V positions" - V parameter of node on face
- char* aEid_DSName = "Nodes on Edges";
- char* aEu_DSName = "Edge positions";
- char* aFu_DSName = "Face U positions";
- //char* aFid_DSName = "Nodes on Faces";
- //char* aFv_DSName = "Face V positions";
-
- // data to retrieve
- int nbEids = 0, nbFids = 0;
- int *aEids = 0, *aFids = 0;
- double *aEpos = 0, *aFupos = 0, *aFvpos = 0;
-
- // open a group
- aGroup = new HDFgroup( "Node Positions", aTopGroup );
- aGroup->OpenOnDisk();
-
- // loop on 5 data sets
- int aNbObjects = aGroup->nInternalObjects();
- for ( int i = 0; i < aNbObjects; i++ )
- {
- // identify dataset
- char aDSName[ HDF_NAME_MAX_LEN+1 ];
- aGroup->InternalObjectIndentify( i, aDSName );
- // read data
- aDataset = new HDFdataset( aDSName, aGroup );
+ continue;
+ meshGroupList.push_back( make_pair( myNewMeshImpl, aTopGroup ));
+
+ string iorString = GetORB()->object_to_string( myNewMesh );
+ int newId = myStudyContext->findId( iorString );
+ myStudyContext->mapOldToNew( id, newId );
+
+ // ouv : NPAL12872
+ // try to read and set auto color flag
+ char aMeshAutoColorName[ 30 ];
+ sprintf( aMeshAutoColorName, "AutoColorMesh %d", id);
+ if( aTopGroup->ExistInternalObject( aMeshAutoColorName ) )
+ {
+ aDataset = new HDFdataset( aMeshAutoColorName, aTopGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ int* anAutoColor = new int[ size ];
+ aDataset->ReadFromDisk( anAutoColor );
+ aDataset->CloseOnDisk();
+ myNewMeshImpl->SetAutoColor( (bool)anAutoColor[0] );
+ }
+
+ // try to read and set reference to shape
+ GEOM::GEOM_Object_var aShapeObject;
+ if ( aTopGroup->ExistInternalObject( "Ref on shape" ) ) {
+ // load mesh "Ref on shape" - it's an entry to SObject
+ aDataset = new HDFdataset( "Ref on shape", aTopGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ char* refFromFile = new char[ size ];
+ aDataset->ReadFromDisk( refFromFile );
+ aDataset->CloseOnDisk();
+ if ( strlen( refFromFile ) > 0 ) {
+ SALOMEDS::SObject_var shapeSO = myCurrentStudy->FindObjectID( refFromFile );
+
+ // Make sure GEOM data are loaded first
+ //loadGeomData( shapeSO->GetFatherComponent() );
+
+ CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
+ if ( !CORBA::is_nil( shapeObject ) ) {
+ aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
+ if ( !aShapeObject->_is_nil() )
+ myNewMeshImpl->SetShape( aShapeObject );
+ }
+ }
+ }
+
+ // issue 0020693. Restore _isModified flag
+ if( aTopGroup->ExistInternalObject( "_isModified" ) )
+ {
+ aDataset = new HDFdataset( "_isModified", aTopGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ int* isModified = new int[ size ];
+ aDataset->ReadFromDisk( isModified );
+ aDataset->CloseOnDisk();
+ myNewMeshImpl->GetImpl().SetIsModified( bool(*isModified));
+ }
+ }
+ }
+ }
+
+ // As all object that can be referred by hypothesis are created,
+ // we can restore hypothesis data
+
+ list< pair< SMESH_Hypothesis_i*, string > >::iterator hyp_data;
+ for ( hyp_data = hypDataList.begin(); hyp_data != hypDataList.end(); ++hyp_data )
+ {
+ SMESH_Hypothesis_i* hyp = hyp_data->first;
+ string & data = hyp_data->second;
+ hyp->LoadFrom( data.c_str() );
+ }
+
+ // Restore the rest mesh data
+
+ list< pair< SMESH_Mesh_i*, HDFgroup* > >::iterator meshi_group;
+ for ( meshi_group = meshGroupList.begin(); meshi_group != meshGroupList.end(); ++meshi_group )
+ {
+ aTopGroup = meshi_group->second;
+ SMESH_Mesh_i* myNewMeshImpl = meshi_group->first;
+ ::SMESH_Mesh& myLocMesh = myNewMeshImpl->GetImpl();
+ SMESHDS_Mesh* mySMESHDSMesh = myLocMesh.GetMeshDS();
+
+ GEOM::GEOM_Object_var aShapeObject = myNewMeshImpl->GetShapeToMesh();
+ bool hasData = false;
+
+ // get mesh old id
+ string iorString = GetORB()->object_to_string( myNewMeshImpl->_this() );
+ int newId = myStudyContext->findId( iorString );
+ int id = myStudyContext->getOldId( newId );
+
+ // try to find mesh data dataset
+ if ( aTopGroup->ExistInternalObject( "Has data" ) ) {
+ // load mesh "has data" flag
+ aDataset = new HDFdataset( "Has data", aTopGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ char* strHasData = new char[ size ];
+ aDataset->ReadFromDisk( strHasData );
+ aDataset->CloseOnDisk();
+ if ( strcmp( strHasData, "1") == 0 ) {
+ // read mesh data from MED file
+ myReader.SetMesh( mySMESHDSMesh );
+ myReader.SetMeshId( id );
+ myReader.Perform();
+ hasData = true;
+ }
+ }
+
+ // try to get applied algorithms
+ if ( aTopGroup->ExistInternalObject( "Applied Algorithms" ) ) {
+ aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
+ aGroup->OpenOnDisk();
+ // get number of applied algorithms
+ int aNbSubObjects = aGroup->nInternalObjects();
+ if(MYDEBUG) MESSAGE( "VSR - number of applied algos " << aNbSubObjects );
+ for ( int j = 0; j < aNbSubObjects; j++ ) {
+ char name_dataset[ HDF_NAME_MAX_LEN+1 ];
+ aGroup->InternalObjectIndentify( j, name_dataset );
+ // check if it is an algorithm
+ if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
+ aDataset = new HDFdataset( name_dataset, aGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ char* refFromFile = new char[ size ];
+ aDataset->ReadFromDisk( refFromFile );
+ aDataset->CloseOnDisk();
+
+ // san - it is impossible to recover applied algorithms using their entries within Load() method
+
+ //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
+ //CORBA::Object_var hypObject = SObjectToObject( hypSO );
+ int id = atoi( refFromFile );
+ string anIOR = myStudyContext->getIORbyOldId( id );
+ if ( !anIOR.empty() ) {
+ CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
+ if ( !CORBA::is_nil( hypObject ) ) {
+ SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
+ if ( !anHyp->_is_nil() && (!aShapeObject->_is_nil()
+ || !myNewMeshImpl->HasShapeToMesh()) )
+ myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
+ }
+ }
+ }
+ }
+ aGroup->CloseOnDisk();
+ }
+
+ // try to get applied hypotheses
+ if ( aTopGroup->ExistInternalObject( "Applied Hypotheses" ) ) {
+ aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
+ aGroup->OpenOnDisk();
+ // get number of applied hypotheses
+ int aNbSubObjects = aGroup->nInternalObjects();
+ for ( int j = 0; j < aNbSubObjects; j++ ) {
+ char name_dataset[ HDF_NAME_MAX_LEN+1 ];
+ aGroup->InternalObjectIndentify( j, name_dataset );
+ // check if it is a hypothesis
+ if ( string( name_dataset ).substr( 0, 3 ) == string( "Hyp" ) ) {
+ aDataset = new HDFdataset( name_dataset, aGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ char* refFromFile = new char[ size ];
+ aDataset->ReadFromDisk( refFromFile );
+ aDataset->CloseOnDisk();
+
+ // san - it is impossible to recover applied hypotheses using their entries within Load() method
+
+ //SALOMEDS::SObject_var hypSO = myCurrentStudy->FindObjectID( refFromFile );
+ //CORBA::Object_var hypObject = SObjectToObject( hypSO );
+ int id = atoi( refFromFile );
+ string anIOR = myStudyContext->getIORbyOldId( id );
+ if ( !anIOR.empty() ) {
+ CORBA::Object_var hypObject = GetORB()->string_to_object( anIOR.c_str() );
+ if ( !CORBA::is_nil( hypObject ) ) {
+ SMESH::SMESH_Hypothesis_var anHyp = SMESH::SMESH_Hypothesis::_narrow( hypObject );
+ if ( !anHyp->_is_nil() && (!aShapeObject->_is_nil()
+ || !myNewMeshImpl->HasShapeToMesh()) )
+ myNewMeshImpl->addHypothesis( aShapeObject, anHyp );
+ }
+ }
+ }
+ }
+ aGroup->CloseOnDisk();
+ }
+
+ // --> try to find submeshes containers for each type of submesh
+ for ( int j = GetSubMeshOnVertexTag(); j <= GetSubMeshOnCompoundTag(); j++ ) {
+ char name_meshgroup[ 30 ];
+ if ( j == GetSubMeshOnVertexTag() )
+ strcpy( name_meshgroup, "SubMeshes On Vertex" );
+ else if ( j == GetSubMeshOnEdgeTag() )
+ strcpy( name_meshgroup, "SubMeshes On Edge" );
+ else if ( j == GetSubMeshOnWireTag() )
+ strcpy( name_meshgroup, "SubMeshes On Wire" );
+ else if ( j == GetSubMeshOnFaceTag() )
+ strcpy( name_meshgroup, "SubMeshes On Face" );
+ else if ( j == GetSubMeshOnShellTag() )
+ strcpy( name_meshgroup, "SubMeshes On Shell" );
+ else if ( j == GetSubMeshOnSolidTag() )
+ strcpy( name_meshgroup, "SubMeshes On Solid" );
+ else if ( j == GetSubMeshOnCompoundTag() )
+ strcpy( name_meshgroup, "SubMeshes On Compound" );
+
+ // try to get submeshes container HDF group
+ if ( aTopGroup->ExistInternalObject( name_meshgroup ) ) {
+ // open submeshes containers HDF group
+ aGroup = new HDFgroup( name_meshgroup, aTopGroup );
+ aGroup->OpenOnDisk();
+
+ // get number of submeshes
+ int aNbSubMeshes = aGroup->nInternalObjects();
+ for ( int k = 0; k < aNbSubMeshes; k++ ) {
+ // identify submesh
+ char name_submeshgroup[ HDF_NAME_MAX_LEN+1 ];
+ aGroup->InternalObjectIndentify( k, name_submeshgroup );
+ if ( string( name_submeshgroup ).substr( 0, 7 ) == string( "SubMesh" ) ) {
+ // --> get submesh id
+ int subid = atoi( string( name_submeshgroup ).substr( 7 ).c_str() );
+ if ( subid <= 0 )
+ continue;
+ // open submesh HDF group
+ aSubGroup = new HDFgroup( name_submeshgroup, aGroup );
+ aSubGroup->OpenOnDisk();
+
+ // try to read and set reference to subshape
+ GEOM::GEOM_Object_var aSubShapeObject;
+ SMESH::SMESH_subMesh_var aSubMesh;
+
+ if ( aSubGroup->ExistInternalObject( "Ref on shape" ) ) {
+ // load submesh "Ref on shape" - it's an entry to SObject
+ aDataset = new HDFdataset( "Ref on shape", aSubGroup );