Fix bug 11884: BordersAtMulticonnection2D worked incorrect. Also fix FreeEdges functor.

This commit is contained in:
jfa 2006-03-23 07:36:24 +00:00
parent f285075263
commit 085713d32f

View File

@ -1294,60 +1294,58 @@ double MultiConnection2D::GetValue( const TSequenceOfXYZ& P )
double MultiConnection2D::GetValue( long theElementId ) double MultiConnection2D::GetValue( long theElementId )
{ {
TSequenceOfXYZ P;
int aResult = 0; int aResult = 0;
if (GetPoints(theElementId,P)){ const SMDS_MeshElement* aFaceElem = myMesh->FindElement(theElementId);
const SMDS_MeshElement* anFaceElem = myMesh->FindElement( theElementId ); SMDSAbs_ElementType aType = aFaceElem->GetType();
SMDSAbs_ElementType aType = anFaceElem->GetType();
int len = P.size(); switch (aType) {
TColStd_MapOfInteger aMap;
int aResult = 0;
switch (aType){
case SMDSAbs_All:
case SMDSAbs_Node:
case SMDSAbs_Edge:
case SMDSAbs_Face: case SMDSAbs_Face:
if (len == 3){ // triangles {
int Nb[3] = {0,0,0}; int i = 0, len = aFaceElem->NbNodes();
SMDS_ElemIteratorPtr anIter = aFaceElem->nodesIterator();
if (!anIter) break;
int i=0; const SMDS_MeshNode *aNode, *aNode0;
SMDS_ElemIteratorPtr anIter = anFaceElem->nodesIterator(); TColStd_MapOfInteger aMap, aMapPrev;
if ( anIter != 0 ) {
while( anIter->more() ) { for (i = 0; i <= len; i++) {
const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next(); aMapPrev = aMap;
if ( aNode == 0 ){ aMap.Clear();
int aNb = 0;
if (anIter->more()) {
aNode = (SMDS_MeshNode*)anIter->next();
} else {
if (i == len)
aNode = aNode0;
else
break; break;
} }
if (!aNode) break;
if (i == 0) aNode0 = aNode;
SMDS_ElemIteratorPtr anElemIter = aNode->GetInverseElementIterator(); SMDS_ElemIteratorPtr anElemIter = aNode->GetInverseElementIterator();
while( anElemIter->more() ) { while (anElemIter->more()) {
const SMDS_MeshElement* anElem = anElemIter->next(); const SMDS_MeshElement* anElem = anElemIter->next();
if ( anElem != 0 && anElem->GetType() != SMDSAbs_Edge ) { if (anElem != 0 && anElem->GetType() == SMDSAbs_Face) {
int anId = anElem->GetID(); int anId = anElem->GetID();
if ( anIter->more() ) // i.e. first node aMap.Add(anId);
aMap.Add( anId ); if (aMapPrev.Contains(anId)) {
else if ( aMap.Contains( anId ) ){ aNb++;
Nb[i]++;
}
}
else if ( anElem != 0 && anElem->GetType() == SMDSAbs_Edge ) i++;
} }
} }
} }
aResult = Max(aResult, aNb);
aResult = Max(Max(Nb[0],Nb[1]),Nb[2]); }
} }
break; break;
case SMDSAbs_Volume: default:
default: aResult=0; aResult = 0;
} }
} return aResult;
return aResult;//getNbMultiConnection( myMesh, theId );
} }
double MultiConnection2D::GetBadRate( double Value, int /*nbNodes*/ ) const double MultiConnection2D::GetBadRate( double Value, int /*nbNodes*/ ) const
@ -1547,7 +1545,7 @@ bool FreeEdges::IsSatisfy( long theId )
else { else {
anIter = aFace->nodesIterator(); anIter = aFace->nodesIterator();
} }
if ( anIter != 0 ) if ( anIter == 0 )
return false; return false;
int i = 0, nbNodes = aFace->NbNodes(); int i = 0, nbNodes = aFace->NbNodes();