mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-03-01 15:25:38 +05:00
[Bug NPAL14335] EDF 344 SMESH : "ERROR : Iterator not implemented " when loading a script
Optimize performance of FindFace() and FindEdge()
This commit is contained in:
parent
943384c960
commit
7cb53eb2a5
@ -1319,10 +1319,20 @@ const SMDS_MeshEdge* SMDS_Mesh::FindEdge(const SMDS_MeshNode * node1,
|
|||||||
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Edge);
|
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Edge);
|
||||||
while(it1->more()) {
|
while(it1->more()) {
|
||||||
const SMDS_MeshElement * e = it1->next();
|
const SMDS_MeshElement * e = it1->next();
|
||||||
if ( e->NbNodes() == 3 &&
|
if ( e->NbNodes() == 3 ) {
|
||||||
e->GetNodeIndex( node2 ) >= 0 &&
|
SMDS_ElemIteratorPtr it2 = e->nodesIterator();
|
||||||
e->GetNodeIndex( node3 ) >= 0 ) {
|
while(it2->more()) {
|
||||||
return static_cast<const SMDS_MeshEdge*>( e );
|
const SMDS_MeshElement* n = it2->next();
|
||||||
|
if( n!=node1 &&
|
||||||
|
n!=node2 &&
|
||||||
|
n!=node3 )
|
||||||
|
{
|
||||||
|
e = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( e )
|
||||||
|
return static_cast<const SMDS_MeshEdge *> (e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1351,13 +1361,23 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
|
|||||||
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
||||||
while(it1->more()) {
|
while(it1->more()) {
|
||||||
const SMDS_MeshElement * e = it1->next();
|
const SMDS_MeshElement * e = it1->next();
|
||||||
if ( e->NbNodes() == 3 &&
|
if ( e->NbNodes() == 3 ) {
|
||||||
e->GetNodeIndex( node2 ) >= 0 &&
|
SMDS_ElemIteratorPtr it2 = e->nodesIterator();
|
||||||
e->GetNodeIndex( node3 ) >= 0 ) {
|
while(it2->more()) {
|
||||||
return static_cast<const SMDS_MeshFace*>( e );
|
const SMDS_MeshElement* n = it2->next();
|
||||||
|
if( n!=node1 &&
|
||||||
|
n!=node2 &&
|
||||||
|
n!=node3 )
|
||||||
|
{
|
||||||
|
e = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
if ( e )
|
||||||
|
return static_cast<const SMDS_MeshFace *> (e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
|
SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
|
||||||
@ -1396,14 +1416,25 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
|
|||||||
if ( !node1 ) return 0;
|
if ( !node1 ) return 0;
|
||||||
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
||||||
while(it1->more()) {
|
while(it1->more()) {
|
||||||
const SMDS_MeshElement* f = it1->next();
|
const SMDS_MeshElement * e = it1->next();
|
||||||
if ( f->NbNodes() == 4 &&
|
if ( e->NbNodes() == 4 ) {
|
||||||
f->GetNodeIndex( node2 ) >= 0 &&
|
SMDS_ElemIteratorPtr it2 = e->nodesIterator();
|
||||||
f->GetNodeIndex( node3 ) >= 0 &&
|
while(it2->more()) {
|
||||||
f->GetNodeIndex( node4 ) >= 0 )
|
const SMDS_MeshElement* n = it2->next();
|
||||||
return static_cast<const SMDS_MeshFace *>( f );
|
if( n!=node1 &&
|
||||||
|
n!=node2 &&
|
||||||
|
n!=node3 &&
|
||||||
|
n!=node4 )
|
||||||
|
{
|
||||||
|
e = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
}
|
||||||
|
if ( e )
|
||||||
|
return static_cast<const SMDS_MeshFace *> (e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
|
SMDS_MeshFace* SMDS_Mesh::FindFaceOrCreate(const SMDS_MeshNode *node1,
|
||||||
@ -1448,16 +1479,27 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
|
|||||||
if ( !node1 ) return 0;
|
if ( !node1 ) return 0;
|
||||||
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
||||||
while(it1->more()) {
|
while(it1->more()) {
|
||||||
const SMDS_MeshElement* f = it1->next();
|
const SMDS_MeshElement * e = it1->next();
|
||||||
if ( f->NbNodes() == 6 &&
|
if ( e->NbNodes() == 6 ) {
|
||||||
f->GetNodeIndex( node2 ) >= 0 &&
|
SMDS_ElemIteratorPtr it2 = e->nodesIterator();
|
||||||
f->GetNodeIndex( node3 ) >= 0 &&
|
while(it2->more()) {
|
||||||
f->GetNodeIndex( node4 ) >= 0 &&
|
const SMDS_MeshElement* n = it2->next();
|
||||||
f->GetNodeIndex( node5 ) >= 0 &&
|
if( n!=node1 &&
|
||||||
f->GetNodeIndex( node6 ) >= 0 )
|
n!=node2 &&
|
||||||
return static_cast<const SMDS_MeshFace *>( f );
|
n!=node3 &&
|
||||||
|
n!=node4 &&
|
||||||
|
n!=node5 &&
|
||||||
|
n!=node6 )
|
||||||
|
{
|
||||||
|
e = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
}
|
||||||
|
if ( e )
|
||||||
|
return static_cast<const SMDS_MeshFace *> (e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1494,18 +1536,29 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
|
|||||||
if ( !node1 ) return 0;
|
if ( !node1 ) return 0;
|
||||||
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
SMDS_ElemIteratorPtr it1 = node1->GetInverseElementIterator(SMDSAbs_Face);
|
||||||
while(it1->more()) {
|
while(it1->more()) {
|
||||||
const SMDS_MeshElement* f = it1->next();
|
const SMDS_MeshElement * e = it1->next();
|
||||||
if ( f->NbNodes() == 8 &&
|
if ( e->NbNodes() == 8 ) {
|
||||||
f->GetNodeIndex( node2 ) >= 0 &&
|
SMDS_ElemIteratorPtr it2 = e->nodesIterator();
|
||||||
f->GetNodeIndex( node3 ) >= 0 &&
|
while(it2->more()) {
|
||||||
f->GetNodeIndex( node4 ) >= 0 &&
|
const SMDS_MeshElement* n = it2->next();
|
||||||
f->GetNodeIndex( node5 ) >= 0 &&
|
if( n!=node1 &&
|
||||||
f->GetNodeIndex( node6 ) >= 0 &&
|
n!=node2 &&
|
||||||
f->GetNodeIndex( node7 ) >= 0 &&
|
n!=node3 &&
|
||||||
f->GetNodeIndex( node8 ) >= 0 )
|
n!=node4 &&
|
||||||
return static_cast<const SMDS_MeshFace *>( f );
|
n!=node5 &&
|
||||||
|
n!=node6 &&
|
||||||
|
n!=node7 &&
|
||||||
|
n!=node8 )
|
||||||
|
{
|
||||||
|
e = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
}
|
||||||
|
if ( e )
|
||||||
|
return static_cast<const SMDS_MeshFace *> (e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1542,12 +1595,15 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace (std::vector<const SMDS_MeshNode *> nod
|
|||||||
while (itF->more()) {
|
while (itF->more()) {
|
||||||
const SMDS_MeshElement* f = itF->next();
|
const SMDS_MeshElement* f = itF->next();
|
||||||
if ( f->NbNodes() == nodes.size() ) {
|
if ( f->NbNodes() == nodes.size() ) {
|
||||||
int ok = true, i = 1;
|
SMDS_ElemIteratorPtr it2 = f->nodesIterator();
|
||||||
while ( ok && i < nodes.size() ) {
|
while(it2->more()) {
|
||||||
ok = ( f->GetNodeIndex( nodes[ i++ ] ) >= 0 );
|
if ( find( nodes.begin(), nodes.end(), it2->next() ) == nodes.end() ) {
|
||||||
|
f = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if ( ok )
|
}
|
||||||
return static_cast<const SMDS_MeshFace *>( f );
|
if ( f )
|
||||||
|
return static_cast<const SMDS_MeshFace *> (f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user