X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Mesh_i.cxx;h=3794e7231bb9467f4280864eb06880a0a6fb84a1;hp=b025573b9b559add0fb7ed705d7ffc70251e04ef;hb=189e207e8943efaec894dbd9a338f77a13df44bd;hpb=ee0738fe562f847342b7723db6fa4488f1865fd2 diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index b025573b9..3794e7231 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -108,7 +108,6 @@ SMESH_Mesh_i::SMESH_Mesh_i( PortableServer::POA_ptr thePOA, CORBA::Long studyId ) : SALOME::GenericObj_i( thePOA ) { - MESSAGE("SMESH_Mesh_i"); _impl = NULL; _gen_i = gen_i; _id = _idGenerator++; @@ -127,8 +126,6 @@ SMESH_Mesh_i::SMESH_Mesh_i( PortableServer::POA_ptr thePOA, SMESH_Mesh_i::~SMESH_Mesh_i() { - MESSAGE("~SMESH_Mesh_i"); - // destroy groups map::iterator itGr; for (itGr = _mapGroups.begin(); itGr != _mapGroups.end(); itGr++) @@ -3286,9 +3283,9 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, ( !geomAssocFields || !geomAssocFields[0] )) return; - std::vector< double > dblVals( meshDS->MaxShapeIndex()+1 ); - std::vector< int > intVals( meshDS->MaxShapeIndex()+1 ); - std::vector< int > subIdsByDim[ 4 ]; + std::vector< std::vector< double > > dblVals; + std::vector< std::vector< int > > intVals; + std::vector< int > subIdsByDim[ 4 ]; const double noneDblValue = 0.; const double noneIntValue = 0; @@ -3328,6 +3325,9 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, for ( size_t iC = 0; iC < comps->length(); ++iC ) fieldWriter.SetCompName( iC, comps[ iC ].in() ); + dblVals.resize( comps->length() ); + intVals.resize( comps->length() ); + // find sub-shape IDs std::vector< int >& subIds = subIdsByDim[ dim ]; @@ -3353,6 +3353,17 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, fieldWriter.SetDtIt( int( stamp ), int( id )); // fill dblVals or intVals + for ( size_t iC = 0; iC < comps->length(); ++iC ) + if ( dataType == GEOM::FDT_Double ) + { + dblVals[ iC ].clear(); + dblVals[ iC ].resize( meshDS->MaxShapeIndex()+1, 0 ); + } + else + { + intVals[ iC ].clear(); + intVals[ iC ].resize( meshDS->MaxShapeIndex()+1, 0 ); + } switch ( dataType ) { case GEOM::FDT_Double: @@ -3360,10 +3371,11 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, GEOM::GEOM_DoubleFieldStep_var dblStep = GEOM::GEOM_DoubleFieldStep::_narrow( step ); if ( dblStep->_is_nil() ) continue; GEOM::ListOfDouble_var vv = dblStep->GetValues(); - if ( vv->length() != subIds.size() ) + if ( vv->length() != subIds.size() * comps->length() ) THROW_SALOME_CORBA_EXCEPTION( METH "BUG: wrong nb subIds", SALOME::INTERNAL_ERROR ); - for ( size_t i = 0; i < vv->length(); ++i ) - dblVals[ subIds[ i ]] = vv[ i ]; + for ( size_t iS = 0, iV = 0; iS < subIds.size(); ++iS ) + for ( size_t iC = 0; iC < comps->length(); ++iC ) + dblVals[ iC ][ subIds[ iS ]] = vv[ iV++ ]; break; } case GEOM::FDT_Int: @@ -3371,10 +3383,11 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, GEOM::GEOM_IntFieldStep_var intStep = GEOM::GEOM_IntFieldStep::_narrow( step ); if ( intStep->_is_nil() ) continue; GEOM::ListOfLong_var vv = intStep->GetValues(); - if ( vv->length() != subIds.size() ) + if ( vv->length() != subIds.size() * comps->length() ) THROW_SALOME_CORBA_EXCEPTION( METH "BUG: wrong nb subIds", SALOME::INTERNAL_ERROR ); - for ( size_t i = 0; i < vv->length(); ++i ) - intVals[ subIds[ i ]] = (int) vv[ i ]; + for ( size_t iS = 0, iV = 0; iS < subIds.size(); ++iS ) + for ( size_t iC = 0; iC < comps->length(); ++iC ) + intVals[ iC ][ subIds[ iS ]] = (int) vv[ iV++ ]; break; } case GEOM::FDT_Bool: @@ -3382,10 +3395,11 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, GEOM::GEOM_BoolFieldStep_var boolStep = GEOM::GEOM_BoolFieldStep::_narrow( step ); if ( boolStep->_is_nil() ) continue; GEOM::short_array_var vv = boolStep->GetValues(); - if ( vv->length() != subIds.size() ) + if ( vv->length() != subIds.size() * comps->length() ) THROW_SALOME_CORBA_EXCEPTION( METH "BUG: wrong nb subIds", SALOME::INTERNAL_ERROR ); - for ( size_t i = 0; i < vv->length(); ++i ) - intVals[ subIds[ i ]] = (int) vv[ i ]; + for ( size_t iS = 0, iV = 0; iS < subIds.size(); ++iS ) + for ( size_t iC = 0; iC < comps->length(); ++iC ) + intVals[ iC ][ subIds[ iS ]] = (int) vv[ iV++ ]; break; } default: continue; @@ -3398,20 +3412,24 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter, { const SMDS_MeshElement* e = elemIt->next(); const int shapeID = e->getshapeId(); - if ( shapeID < 1 || shapeID >= (int) dblVals.size() ) - fieldWriter.AddValue( noneDblValue ); + if ( shapeID < 1 || shapeID >= (int) dblVals[0].size() ) + for ( size_t iC = 0; iC < comps->length(); ++iC ) + fieldWriter.AddValue( noneDblValue ); else - fieldWriter.AddValue( dblVals[ shapeID ]); + for ( size_t iC = 0; iC < comps->length(); ++iC ) + fieldWriter.AddValue( dblVals[ iC ][ shapeID ]); } else while ( elemIt->more() ) { const SMDS_MeshElement* e = elemIt->next(); const int shapeID = e->getshapeId(); - if ( shapeID < 1 || shapeID >= (int) intVals.size() ) - fieldWriter.AddValue( (double) noneIntValue ); + if ( shapeID < 1 || shapeID >= (int) intVals[0].size() ) + for ( size_t iC = 0; iC < comps->length(); ++iC ) + fieldWriter.AddValue( (double) noneIntValue ); else - fieldWriter.AddValue( (double) intVals[ shapeID ]); + for ( size_t iC = 0; iC < comps->length(); ++iC ) + fieldWriter.AddValue( (double) intVals[ iC ][ shapeID ]); } // write a step @@ -4079,7 +4097,7 @@ SMESH::long_array* SMESH_Mesh_i::GetNodesId() SMESH::ElementType SMESH_Mesh_i::GetElementType( const CORBA::Long id, const bool iselem ) throw (SALOME::SALOME_Exception) { - SMESH::ElementType type; + SMESH::ElementType type = SMESH::ALL; SMESH_TRY; if ( _preMeshInfo ) @@ -4227,7 +4245,7 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID, SMESH::ElementType SMESH_Mesh_i::GetSubMeshElementType(const CORBA::Long ShapeID) throw (SALOME::SALOME_Exception) { - SMESH::ElementType type; + SMESH::ElementType type = SMESH::ALL; SMESH_TRY; if ( _preMeshInfo ) @@ -4265,8 +4283,7 @@ CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() _preMeshInfo->FullLoadFromFile(); CORBA::LongLong pointeur = CORBA::LongLong(_impl); - if ( MYDEBUG ) - MESSAGE("CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() "<