mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-12 00:29:17 +05:00
23365: [CEA 1938] Export med from a xao file fails
Support multiple components
This commit is contained in:
parent
eef0bf5cc7
commit
189e207e89
@ -3283,8 +3283,8 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
( !geomAssocFields || !geomAssocFields[0] ))
|
( !geomAssocFields || !geomAssocFields[0] ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::vector< double > dblVals( meshDS->MaxShapeIndex()+1 );
|
std::vector< std::vector< double > > dblVals;
|
||||||
std::vector< int > intVals( meshDS->MaxShapeIndex()+1 );
|
std::vector< std::vector< int > > intVals;
|
||||||
std::vector< int > subIdsByDim[ 4 ];
|
std::vector< int > subIdsByDim[ 4 ];
|
||||||
const double noneDblValue = 0.;
|
const double noneDblValue = 0.;
|
||||||
const double noneIntValue = 0;
|
const double noneIntValue = 0;
|
||||||
@ -3325,6 +3325,9 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
fieldWriter.SetCompName( iC, comps[ iC ].in() );
|
fieldWriter.SetCompName( iC, comps[ iC ].in() );
|
||||||
|
|
||||||
|
dblVals.resize( comps->length() );
|
||||||
|
intVals.resize( comps->length() );
|
||||||
|
|
||||||
// find sub-shape IDs
|
// find sub-shape IDs
|
||||||
|
|
||||||
std::vector< int >& subIds = subIdsByDim[ dim ];
|
std::vector< int >& subIds = subIdsByDim[ dim ];
|
||||||
@ -3350,6 +3353,17 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
fieldWriter.SetDtIt( int( stamp ), int( id ));
|
fieldWriter.SetDtIt( int( stamp ), int( id ));
|
||||||
|
|
||||||
// fill dblVals or intVals
|
// 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 )
|
switch ( dataType )
|
||||||
{
|
{
|
||||||
case GEOM::FDT_Double:
|
case GEOM::FDT_Double:
|
||||||
@ -3357,10 +3371,11 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
GEOM::GEOM_DoubleFieldStep_var dblStep = GEOM::GEOM_DoubleFieldStep::_narrow( step );
|
GEOM::GEOM_DoubleFieldStep_var dblStep = GEOM::GEOM_DoubleFieldStep::_narrow( step );
|
||||||
if ( dblStep->_is_nil() ) continue;
|
if ( dblStep->_is_nil() ) continue;
|
||||||
GEOM::ListOfDouble_var vv = dblStep->GetValues();
|
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 );
|
THROW_SALOME_CORBA_EXCEPTION( METH "BUG: wrong nb subIds", SALOME::INTERNAL_ERROR );
|
||||||
for ( size_t i = 0; i < vv->length(); ++i )
|
for ( size_t iS = 0, iV = 0; iS < subIds.size(); ++iS )
|
||||||
dblVals[ subIds[ i ]] = vv[ i ];
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
|
dblVals[ iC ][ subIds[ iS ]] = vv[ iV++ ];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GEOM::FDT_Int:
|
case GEOM::FDT_Int:
|
||||||
@ -3368,10 +3383,11 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
GEOM::GEOM_IntFieldStep_var intStep = GEOM::GEOM_IntFieldStep::_narrow( step );
|
GEOM::GEOM_IntFieldStep_var intStep = GEOM::GEOM_IntFieldStep::_narrow( step );
|
||||||
if ( intStep->_is_nil() ) continue;
|
if ( intStep->_is_nil() ) continue;
|
||||||
GEOM::ListOfLong_var vv = intStep->GetValues();
|
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 );
|
THROW_SALOME_CORBA_EXCEPTION( METH "BUG: wrong nb subIds", SALOME::INTERNAL_ERROR );
|
||||||
for ( size_t i = 0; i < vv->length(); ++i )
|
for ( size_t iS = 0, iV = 0; iS < subIds.size(); ++iS )
|
||||||
intVals[ subIds[ i ]] = (int) vv[ i ];
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
|
intVals[ iC ][ subIds[ iS ]] = (int) vv[ iV++ ];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GEOM::FDT_Bool:
|
case GEOM::FDT_Bool:
|
||||||
@ -3379,10 +3395,11 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
GEOM::GEOM_BoolFieldStep_var boolStep = GEOM::GEOM_BoolFieldStep::_narrow( step );
|
GEOM::GEOM_BoolFieldStep_var boolStep = GEOM::GEOM_BoolFieldStep::_narrow( step );
|
||||||
if ( boolStep->_is_nil() ) continue;
|
if ( boolStep->_is_nil() ) continue;
|
||||||
GEOM::short_array_var vv = boolStep->GetValues();
|
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 );
|
THROW_SALOME_CORBA_EXCEPTION( METH "BUG: wrong nb subIds", SALOME::INTERNAL_ERROR );
|
||||||
for ( size_t i = 0; i < vv->length(); ++i )
|
for ( size_t iS = 0, iV = 0; iS < subIds.size(); ++iS )
|
||||||
intVals[ subIds[ i ]] = (int) vv[ i ];
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
|
intVals[ iC ][ subIds[ iS ]] = (int) vv[ iV++ ];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: continue;
|
default: continue;
|
||||||
@ -3395,20 +3412,24 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
|
|||||||
{
|
{
|
||||||
const SMDS_MeshElement* e = elemIt->next();
|
const SMDS_MeshElement* e = elemIt->next();
|
||||||
const int shapeID = e->getshapeId();
|
const int shapeID = e->getshapeId();
|
||||||
if ( shapeID < 1 || shapeID >= (int) dblVals.size() )
|
if ( shapeID < 1 || shapeID >= (int) dblVals[0].size() )
|
||||||
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
fieldWriter.AddValue( noneDblValue );
|
fieldWriter.AddValue( noneDblValue );
|
||||||
else
|
else
|
||||||
fieldWriter.AddValue( dblVals[ shapeID ]);
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
|
fieldWriter.AddValue( dblVals[ iC ][ shapeID ]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
while ( elemIt->more() )
|
while ( elemIt->more() )
|
||||||
{
|
{
|
||||||
const SMDS_MeshElement* e = elemIt->next();
|
const SMDS_MeshElement* e = elemIt->next();
|
||||||
const int shapeID = e->getshapeId();
|
const int shapeID = e->getshapeId();
|
||||||
if ( shapeID < 1 || shapeID >= (int) intVals.size() )
|
if ( shapeID < 1 || shapeID >= (int) intVals[0].size() )
|
||||||
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
fieldWriter.AddValue( (double) noneIntValue );
|
fieldWriter.AddValue( (double) noneIntValue );
|
||||||
else
|
else
|
||||||
fieldWriter.AddValue( (double) intVals[ shapeID ]);
|
for ( size_t iC = 0; iC < comps->length(); ++iC )
|
||||||
|
fieldWriter.AddValue( (double) intVals[ iC ][ shapeID ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// write a step
|
// write a step
|
||||||
|
Loading…
Reference in New Issue
Block a user