Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
23365: [CEA 1938] Export med from a xao file fails
[modules/smesh.git]
/
src
/
SMESH_I
/
SMESH_Mesh_i.cxx
diff --git
a/src/SMESH_I/SMESH_Mesh_i.cxx
b/src/SMESH_I/SMESH_Mesh_i.cxx
index 060329f4c9c80e2753980654bb25a11481970d43..3794e7231bb9467f4280864eb06880a0a6fb84a1 100644
(file)
--- a/
src/SMESH_I/SMESH_Mesh_i.cxx
+++ b/
src/SMESH_I/SMESH_Mesh_i.cxx
@@
-1,4
+1,4
@@
-// Copyright (C) 2007-201
5
CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-201
6
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
//
// 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 )
{
CORBA::Long studyId )
: SALOME::GenericObj_i( thePOA )
{
- MESSAGE("SMESH_Mesh_i");
_impl = NULL;
_gen_i = gen_i;
_id = _idGenerator++;
_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()
{
SMESH_Mesh_i::~SMESH_Mesh_i()
{
- MESSAGE("~SMESH_Mesh_i");
-
// destroy groups
map<int, SMESH::SMESH_GroupBase_ptr>::iterator itGr;
for (itGr = _mapGroups.begin(); itGr != _mapGroups.end(); itGr++)
// destroy groups
map<int, SMESH::SMESH_GroupBase_ptr>::iterator itGr;
for (itGr = _mapGroups.begin(); itGr != _mapGroups.end(); itGr++)
@@
-293,7
+290,7
@@
void SMESH_Mesh_i::Clear() throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
- _preMeshInfo->Forget
AllData();
+ _preMeshInfo->Forget
OrLoad(); // load in case if !HasShapeToMesh()
try {
_impl->Clear();
try {
_impl->Clear();
@@
-1762,7
+1759,7
@@
SMESH_Mesh_i::CreateDimGroup(const SMESH::ListOfIDSources& theGroups,
while ( nIt->more() )
{
const SMDS_MeshNode* n = nIt->next();
while ( nIt->more() )
{
const SMDS_MeshNode* n = nIt->next();
- if ( n->GetID() >= isNodeInGroups.size() )
+ if ( n->GetID() >=
(int)
isNodeInGroups.size() )
isNodeInGroups.resize( n->GetID() + 1, false );
isNodeInGroups[ n->GetID() ] = true;
}
isNodeInGroups.resize( n->GetID() + 1, false );
isNodeInGroups[ n->GetID() ] = true;
}
@@
-1851,7
+1848,7
@@
void SMESH_Mesh_i::addGeomGroupData(GEOM::GEOM_Object_ptr theGeomObj,
CORBA::String_var entry = groupSO->GetID();
groupData._groupEntry = entry.in();
// indices
CORBA::String_var entry = groupSO->GetID();
groupData._groupEntry = entry.in();
// indices
- for (
int
i = 0; i < ids->length(); ++i )
+ for (
CORBA::ULong
i = 0; i < ids->length(); ++i )
groupData._indices.insert( ids[i] );
// SMESH object
groupData._smeshObject = CORBA::Object::_duplicate( theSmeshObj );
groupData._indices.insert( ids[i] );
// SMESH object
groupData._smeshObject = CORBA::Object::_duplicate( theSmeshObj );
@@
-1904,7
+1901,7
@@
TopoDS_Shape SMESH_Mesh_i::newGroupShape( TGeomGroupData & groupData)
GEOM::GEOM_IGroupOperations_wrap groupOp =
geomGen->GetIGroupOperations( _gen_i->GetCurrentStudyID() );
GEOM::ListOfLong_var ids = groupOp->GetObjects( geomGroup );
GEOM::GEOM_IGroupOperations_wrap groupOp =
geomGen->GetIGroupOperations( _gen_i->GetCurrentStudyID() );
GEOM::ListOfLong_var ids = groupOp->GetObjects( geomGroup );
- for (
int
i = 0; i < ids->length(); ++i )
+ for (
CORBA::ULong
i = 0; i < ids->length(); ++i )
curIndices.insert( ids[i] );
if ( groupData._indices == curIndices )
curIndices.insert( ids[i] );
if ( groupData._indices == curIndices )
@@
-3286,9
+3283,9
@@
void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field& fieldWriter,
( !geomAssocFields || !geomAssocFields[0] ))
return;
( !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;
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() );
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 ];
// 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
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:
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();
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 );
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:
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();
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 );
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:
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();
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 );
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;
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();
{
const SMDS_MeshElement* e = elemIt->next();
const int shapeID = e->getshapeId();
- if ( shapeID < 1 || shapeID >= 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
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();
}
else
while ( elemIt->more() )
{
const SMDS_MeshElement* e = elemIt->next();
const int shapeID = e->getshapeId();
- if ( shapeID < 1 || shapeID >= 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
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
@@
-3765,7
+3783,16
@@
CORBA::Long SMESH_Mesh_i::NbBiQuadQuadrangles()throw(SALOME::SALOME_Exception)
return _impl->NbBiQuadQuadrangles();
}
return _impl->NbBiQuadQuadrangles();
}
-CORBA::Long SMESH_Mesh_i::NbPolygons(SMESH::ElementOrder order) throw(SALOME::SALOME_Exception)
+CORBA::Long SMESH_Mesh_i::NbPolygons() throw(SALOME::SALOME_Exception)
+{
+ Unexpect aCatch(SALOME_SalomeException);
+ if ( _preMeshInfo )
+ return _preMeshInfo->NbPolygons();
+
+ return _impl->NbPolygons();
+}
+
+CORBA::Long SMESH_Mesh_i::NbPolygonsOfOrder(SMESH::ElementOrder order) throw(SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
@@
-4070,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 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 )
SMESH_TRY;
if ( _preMeshInfo )
@@
-4218,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 SMESH_Mesh_i::GetSubMeshElementType(const CORBA::Long ShapeID)
throw (SALOME::SALOME_Exception)
{
- SMESH::ElementType type;
+ SMESH::ElementType type
= SMESH::ALL
;
SMESH_TRY;
if ( _preMeshInfo )
SMESH_TRY;
if ( _preMeshInfo )
@@
-4256,8
+4283,7
@@
CORBA::LongLong SMESH_Mesh_i::GetMeshPtr()
_preMeshInfo->FullLoadFromFile();
CORBA::LongLong pointeur = CORBA::LongLong(_impl);
_preMeshInfo->FullLoadFromFile();
CORBA::LongLong pointeur = CORBA::LongLong(_impl);
- if ( MYDEBUG )
- MESSAGE("CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() "<<pointeur);
+ if ( MYDEBUG ) MESSAGE("CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() "<<pointeur);
return pointeur;
}
return pointeur;
}
@@
-4664,7
+4690,7
@@
SMESH::long_array* SMESH_Mesh_i::GetElemFaceNodes(CORBA::Long elemId,
{
aResult->length( vtool.NbFaceNodes( faceIndex ));
const SMDS_MeshNode** nn = vtool.GetFaceNodes( faceIndex );
{
aResult->length( vtool.NbFaceNodes( faceIndex ));
const SMDS_MeshNode** nn = vtool.GetFaceNodes( faceIndex );
- for (
int
i = 0; i < aResult->length(); ++i )
+ for (
CORBA::ULong
i = 0; i < aResult->length(); ++i )
aResult[ i ] = nn[ i ]->GetID();
}
}
aResult[ i ] = nn[ i ]->GetID();
}
}
@@
-4713,7
+4739,7
@@
CORBA::Long SMESH_Mesh_i::FindElementByNodes(const SMESH::long_array& nodes)
if ( SMESHDS_Mesh* mesh = _impl->GetMeshDS() )
{
vector< const SMDS_MeshNode * > nn( nodes.length() );
if ( SMESHDS_Mesh* mesh = _impl->GetMeshDS() )
{
vector< const SMDS_MeshNode * > nn( nodes.length() );
- for (
int
i = 0; i < nodes.length(); ++i )
+ for (
CORBA::ULong
i = 0; i < nodes.length(); ++i )
if ( !( nn[i] = mesh->FindNode( nodes[i] )))
return elemID;
if ( !( nn[i] = mesh->FindNode( nodes[i] )))
return elemID;
@@
-5102,11
+5128,11
@@
SMESH::string_array* SMESH_Mesh_i::GetLastParameters()
SALOMEDS::Study_var aStudy = gen->GetCurrentStudy();
if ( !aStudy->_is_nil()) {
SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
SALOMEDS::Study_var aStudy = gen->GetCurrentStudy();
if ( !aStudy->_is_nil()) {
SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
- if
(aSections->length() > 0
) {
- SALOMEDS::ListOfStrings aVars = aSections[
aSections->length()-1
];
- aResult->length(
aVars.length()
);
- for
(int i = 0;i < aVars.length();i++
)
- aResult[i] = CORBA::string_dup( aVars[i]);
+ if
( aSections->length() > 0
) {
+ SALOMEDS::ListOfStrings aVars = aSections[
aSections->length() - 1
];
+ aResult->length(
aVars.length()
);
+ for
( CORBA::ULong i = 0;i < aVars.length(); i++
)
+ aResult[i] = CORBA::string_dup( aVars[i]
);
}
}
}
}
}
}
@@
-5132,6
+5158,8
@@
SMESH::array_of_ElementType* SMESH_Mesh_i::GetTypes()
if (_impl->NbVolumes()) types[nbTypes++] = SMESH::VOLUME;
if (_impl->Nb0DElements()) types[nbTypes++] = SMESH::ELEM0D;
if (_impl->NbBalls()) types[nbTypes++] = SMESH::BALL;
if (_impl->NbVolumes()) types[nbTypes++] = SMESH::VOLUME;
if (_impl->Nb0DElements()) types[nbTypes++] = SMESH::ELEM0D;
if (_impl->NbBalls()) types[nbTypes++] = SMESH::BALL;
+ if (_impl->NbNodes() &&
+ nbTypes == 0 ) types[nbTypes++] = SMESH::NODE;
types->length( nbTypes );
return types._retn();
types->length( nbTypes );
return types._retn();
@@
-5396,7
+5424,7
@@
SMDS_ElemIteratorPtr SMESH_Mesh_i::GetElements(SMESH::SMESH_IDSource_ptr theObje
SMESH::ElementType theType)
{
SMDS_ElemIteratorPtr elemIt;
SMESH::ElementType theType)
{
SMDS_ElemIteratorPtr elemIt;
- bool typeOK =
false
;
+ bool typeOK =
( theType == SMESH::ALL )
;
SMDSAbs_ElementType elemType = SMDSAbs_ElementType( theType );
SMESH::SMESH_Mesh_var meshVar = theObject->GetMesh();
SMDSAbs_ElementType elemType = SMDSAbs_ElementType( theType );
SMESH::SMESH_Mesh_var meshVar = theObject->GetMesh();
@@
-5626,7
+5654,7
@@
class SMESH_DimHyp
if ( find( theOther->_hypotheses.begin(), otheEndIt, *hypIt ) != otheEndIt )
nbSame++;
// the submeshes are concurrent if their algorithms has different parameters
if ( find( theOther->_hypotheses.begin(), otheEndIt, *hypIt ) != otheEndIt )
nbSame++;
// the submeshes are concurrent if their algorithms has different parameters
- return nbSame != theOther->_hypotheses.size() - 1;
+ return nbSame !=
(int)
theOther->_hypotheses.size() - 1;
}
// Return true if algorithm of this SMESH_DimHyp is used if no
}
// Return true if algorithm of this SMESH_DimHyp is used if no
@@
-6059,14
+6087,14
@@
SMESH_MeshPartDS::SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart):
SMESH::array_of_ElementType_var types = meshPart->GetTypes();
if ( types->length() == 1 && types[0] == SMESH::NODE ) // group of nodes
{
SMESH::array_of_ElementType_var types = meshPart->GetTypes();
if ( types->length() == 1 && types[0] == SMESH::NODE ) // group of nodes
{
- for (
int i=0; i < anIDs->length(); i++
)
- if ( const SMDS_MeshNode * n = _meshDS->FindNode(
anIDs[i]
))
+ for (
CORBA::ULong i=0; i < anIDs->length(); i++
)
+ if ( const SMDS_MeshNode * n = _meshDS->FindNode(
anIDs[i]
))
if ( _elements[ SMDSAbs_Node ].insert( n ).second )
tmpInfo.Add( n );
}
else
{
if ( _elements[ SMDSAbs_Node ].insert( n ).second )
tmpInfo.Add( n );
}
else
{
- for (
int i=0; i < anIDs->length(); i++
)
+ for (
CORBA::ULong i=0; i < anIDs->length(); i++
)
if ( const SMDS_MeshElement * e = _meshDS->FindElement(anIDs[i]))
if ( _elements[ e->GetType() ].insert( e ).second )
{
if ( const SMDS_MeshElement * e = _meshDS->FindElement(anIDs[i]))
if ( _elements[ e->GetType() ].insert( e ).second )
{