/*!
* SMESH_Gen_i::CheckCompatibility
*
- * Check compatibility of file with MED format being used.
+ * Check compatibility of file with MED format being used, read only.
*/
//================================================================================
CORBA::Boolean SMESH_Gen_i::CheckCompatibility(const char* theFileName)
return MED::CheckCompatibility( theFileName );
}
+//================================================================================
+/*!
+ * SMESH_Gen_i::CheckWriteCompatibility
+ *
+ * Check compatibility of file with MED format being used, for append on write.
+ */
+//================================================================================
+CORBA::Boolean SMESH_Gen_i::CheckWriteCompatibility(const char* theFileName)
+{
+ return MED::CheckCompatibility( theFileName, true );
+}
+
//================================================================================
/*!
* SMESH_Gen_i::GetMeshNames
//================================================================================
SMESH::string_array* SMESH_Gen_i::GetMeshNames(const char* theFileName)
{
+ //MESSAGE("GetMeshNames " << theFileName);
SMESH::string_array_var aResult = new SMESH::string_array();
MED::PWrapper aMed = MED::CrWrapperR( theFileName );
MED::TErr anErr;
MED::TInt aNbMeshes = aMed->GetNbMeshes( &anErr );
+ //MESSAGE("---" << aNbMeshes);
if( anErr >= 0 ) {
aResult->length( aNbMeshes );
for( MED::TInt i = 0; i < aNbMeshes; i++ ) {
myMesh->Load(); // load from study file if not yet done
TPythonDump pd; // not to dump GetGroups()
SMESH::ListOfGroups_var groups = myMesh->GetGroups();
- pd << ""; // to avoid optimizing pd out
for ( CORBA::ULong i = 0; i < groups->length(); ++i )
{
SMESH_GroupBase_i* grImpl = SMESH::DownCast<SMESH_GroupBase_i*>( groups[i]);
}
}
+ // Store file info
+ std::string info = myImpl->FileInfoToString();
+ if ( !info.empty() )
+ {
+ aSize[ 0 ] = info.size();
+ aDataset = new HDFdataset( "file info", aTopGroup, HDF_STRING, aSize, 1 );
+ aDataset->CreateOnDisk();
+ aDataset->WriteOnDisk( (char*) info.data() );
+ aDataset->CloseOnDisk();
+ }
+
// write applied hypotheses if exist
SALOMEDS::SObject_wrap myHypBranch;
found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch.inout() );
myNewMeshImpl->GetImpl().GetMeshDS()->SetPersistentId( *meshPersistentId );
delete [] meshPersistentId;
}
+
+ // Restore file info
+ if ( aTopGroup->ExistInternalObject( "file info" ))
+ {
+ aDataset = new HDFdataset( "file info", aTopGroup );
+ aDataset->OpenOnDisk();
+ size = aDataset->GetSize();
+ std::string info( size, ' ');
+ aDataset->ReadFromDisk( (char*) info.data() );
+ aDataset->CloseOnDisk();
+ myNewMeshImpl->FileInfoFromString( info );
+ }
}
}
} // reading MESHes
CreateGroupServants();
+ _medFileInfo = new SMESH::MedFileInfo();
+ _medFileInfo->fileName = theFileName;
+ _medFileInfo->major = 0;
+ _medFileInfo->minor = 0;
+ _medFileInfo->release = 0;
+ _medFileInfo->fileSize = SMESH_File( theFileName ).size();
+
return ConvertDriverMEDReadStatus(status);
}
+//================================================================================
+/*!
+ * \brief Return string representation of a MED file version comprising nbDigits
+ */
+//================================================================================
+
+char* SMESH_Mesh_i::GetVersionString(CORBA::Long minor, CORBA::Short nbDigits)
+{
+ string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(minor,
+ nbDigits);
+ return CORBA::string_dup( ver.c_str() );
+}
+
//=============================================================================
/*!
* ImportUNVFile
CreateGroupServants();
+ _medFileInfo = new SMESH::MedFileInfo();
+ _medFileInfo->fileName = theFileName;
+ _medFileInfo->major = 0;
+ _medFileInfo->minor = 0;
+ _medFileInfo->release = 0;
+ _medFileInfo->fileSize = SMESH_File( theFileName ).size();
+
SMESH_CATCH( SMESH::throwCorbaException );
return 1;
SALOMEDS::SObject_wrap meshSO = _gen_i->ObjectToSObject( _this() );
_gen_i->SetName( meshSO, name.c_str() );
}
+ _medFileInfo = new SMESH::MedFileInfo();
+ _medFileInfo->fileName = theFileName;
+ _medFileInfo->major = 0;
+ _medFileInfo->minor = 0;
+ _medFileInfo->release = 0;
+ _medFileInfo->fileSize = SMESH_File( theFileName ).size();
SMESH_CATCH( SMESH::throwCorbaException );
error = _impl->GMFToMesh( theFileName, theMakeRequiredGroups );
+ _medFileInfo = new SMESH::MedFileInfo();
+ _medFileInfo->fileName = theFileName;
+ _medFileInfo->major = 0;
+ _medFileInfo->minor = 0;
+ _medFileInfo->release = 0;
+ _medFileInfo->fileSize = SMESH_File( theFileName ).size();
+
SMESH_CATCH( exceptionToComputeError );
#undef SMESH_CAUGHT
#define SMESH_CAUGHT
void SMESH_Mesh_i::ExportMED(const char* file,
CORBA::Boolean auto_groups,
+ CORBA::Long minor,
CORBA::Boolean overwrite,
CORBA::Boolean autoDimension)
throw(SALOME::SALOME_Exception)
{
- //MESSAGE("SMESH::MED_VERSION:"<< theVersion);
+ //MESSAGE("MED minor version: "<< minor);
SMESH_TRY;
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
string aMeshName = prepareMeshNameAndGroups(file, overwrite);
- _impl->ExportMED( file, aMeshName.c_str(), auto_groups, 0, autoDimension );
+ _impl->ExportMED( file, aMeshName.c_str(), auto_groups, minor, 0, autoDimension );
TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportMED( r'"
- << file << "', " << auto_groups << ", "
- << overwrite << ", "
- << autoDimension << " )";
+ << file << "', "
+ << "auto_groups=" <<auto_groups << ", "
+ << "minor=" << minor << ", "
+ << "overwrite=" << overwrite << ", "
+ << "meshPart=None, "
+ << "autoDimension=" << autoDimension << " )";
SMESH_CATCH( SMESH::throwCorbaException );
}
void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
const char* file,
CORBA::Boolean auto_groups,
+ CORBA::Long minor,
CORBA::Boolean overwrite,
CORBA::Boolean autoDimension,
const GEOM::ListOfFields& fields,
const char* geomAssocFields)
throw (SALOME::SALOME_Exception)
{
+ //MESSAGE("MED minor version: "<< minor);
SMESH_TRY;
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
SMESH::DownCast< SMESH_Mesh_i* >( meshPart ))
{
aMeshName = prepareMeshNameAndGroups(file, overwrite);
- _impl->ExportMED( file, aMeshName.c_str(), auto_groups,
+ _impl->ExportMED( file, aMeshName.c_str(), auto_groups, minor,
0, autoDimension, /*addODOnVertices=*/have0dField);
meshDS = _impl->GetMeshDS();
}
}
SMESH_MeshPartDS* partDS = new SMESH_MeshPartDS( meshPart );
- _impl->ExportMED( file, aMeshName.c_str(), auto_groups,
+ _impl->ExportMED( file, aMeshName.c_str(), auto_groups, minor,
partDS, autoDimension, /*addODOnVertices=*/have0dField);
meshDS = tmpDSDeleter._obj = partDS;
}
GEOM::GEOM_BaseObject_var gbo = GEOM::GEOM_BaseObject::_narrow( fields[i] );
goList[i] = gbo;
}
- TPythonDump() << _this() << ".ExportPartToMED( "
- << meshPart << ", r'" << file << "', "
- << auto_groups << ", " << overwrite << ", "
- << autoDimension << ", " << goList
- << ", '" << ( geomAssocFields ? geomAssocFields : "" ) << "'" << " )";
+ TPythonDump() << _this() << ".ExportPartToMED( r'"
+ << file << "', "
+ << "auto_groups=" << auto_groups << ", "
+ << "minor=" << minor << ", "
+ << "overwrite=" << overwrite << ", "
+ << "meshPart=" << meshPart << ", "
+ << "autoDimension=" << autoDimension << ", "
+ << "fields=" << goList << ", geomAssocFields='"
+ << ( geomAssocFields ? geomAssocFields : "" ) << "'" << " )";
SMESH_CATCH( SMESH::throwCorbaException );
}
return res._retn();
}
+ //=======================================================================
+ //function : FileInfoToString
+ //purpose : Persistence of file info
+ //=======================================================================
+
+ std::string SMESH_Mesh_i::FileInfoToString()
+ {
+ std::string s;
+ if ( &_medFileInfo.in() && _medFileInfo->fileName[0] )
+ {
+ s = SMESH_Comment( _medFileInfo->fileSize )
+ << " " << _medFileInfo->major
+ << " " << _medFileInfo->minor
+ << " " << _medFileInfo->release
+ << " " << _medFileInfo->fileName;
+ }
+ return s;
+ }
+
+ //=======================================================================
+ //function : FileInfoFromString
+ //purpose : Persistence of file info
+ //=======================================================================
+
+ void SMESH_Mesh_i::FileInfoFromString(const std::string& info)
+ {
+ std::string size, major, minor, release, fileName;
+ std::istringstream is(info);
+ is >> size >> major >> minor >> release;
+ fileName = info.data() + ( size.size() + 1 +
+ major.size() + 1 +
+ minor.size() + 1 +
+ release.size()+ 1 );
+
+ _medFileInfo = new SMESH::MedFileInfo();
+ _medFileInfo->fileName = fileName.c_str();
+ _medFileInfo->fileSize = atoi( size.c_str() );
+ _medFileInfo->major = atoi( major.c_str() );
+ _medFileInfo->minor = atoi( minor.c_str() );
+ _medFileInfo->release = atoi( release.c_str() );
+ }
+
//=============================================================================
/*!
* \brief Pass names of mesh groups from study to mesh DS