IMP 23613: EDF 15565 - Ponctual elements

This commit is contained in:
eap 2018-11-22 21:37:35 +03:00
parent fc9c05a33c
commit baf83bed41
2 changed files with 35 additions and 12 deletions

View File

@ -66,13 +66,17 @@ class MyIterator: public SMDS_ElemIterator
MyIterator(SMDSAbs_ElementType type, const SMESHDS_SubMesh* subMesh) MyIterator(SMDSAbs_ElementType type, const SMESHDS_SubMesh* subMesh)
: myType(type), myElem(0) : myType(type), myElem(0)
{ {
if ( subMesh ) { if ( subMesh )
if ( myType == SMDSAbs_Node ) {
if ( myType == SMDSAbs_Node ||
myType == SMDSAbs_0DElement ||
myType == SMDSAbs_Ball )
myNodeIt = subMesh->GetNodes(); myNodeIt = subMesh->GetNodes();
else { else
myElemIt = subMesh->GetElements(); myElemIt = subMesh->GetElements();
if ( myType != SMDSAbs_Node )
next(); next();
}
} }
} }
bool more() bool more()
@ -85,15 +89,30 @@ class MyIterator: public SMDS_ElemIterator
{ {
if ( myType == SMDSAbs_Node && myNodeIt ) if ( myType == SMDSAbs_Node && myNodeIt )
return myNodeIt->next(); return myNodeIt->next();
const SMDS_MeshElement* res = myElem; const SMDS_MeshElement* res = myElem;
myElem = 0; myElem = 0;
while ( myElemIt && myElemIt->more() ) {
myElem = myElemIt->next(); if ( myElemIt )
if ( myElem && myElem->GetType() == myType ) while ( myElemIt->more() ) {
break; myElem = myElemIt->next();
else if ( myElem && myElem->GetType() == myType )
myElem = 0; break;
} else
myElem = 0;
}
if ( !myElem && myNodeIt ) // look for a 0D element
while ( myNodeIt->more() ) {
const SMDS_MeshNode* n = myNodeIt->next();
if (( myElemIt = n->GetInverseElementIterator( myType )) &&
( myElemIt->more() ))
{
myElem = myElemIt->next();
break;
}
}
return res; return res;
} }
}; };
@ -125,6 +144,10 @@ bool SMESHDS_GroupOnGeom::Contains (const int theID)
bool SMESHDS_GroupOnGeom::Contains (const SMDS_MeshElement* elem) bool SMESHDS_GroupOnGeom::Contains (const SMDS_MeshElement* elem)
{ {
if ( GetType() == SMDSAbs_0DElement ||
GetType() == SMDSAbs_Ball )
return elem ? mySubMesh->Contains( elem->GetNode(0) ) : false;
return mySubMesh->Contains( elem ); return mySubMesh->Contains( elem );
} }

View File

@ -210,7 +210,7 @@ static SMESH::ElementType elementType(GEOM::GEOM_Object_var geom)
{ {
if ( !geom->_is_nil() ) { if ( !geom->_is_nil() ) {
switch ( geom->GetShapeType() ) { switch ( geom->GetShapeType() ) {
case GEOM::VERTEX: return SMESH::NODE; case GEOM::VERTEX: return SMESH::ELEM0D; // NODE; -- 0023613
case GEOM::EDGE: return SMESH::EDGE; case GEOM::EDGE: return SMESH::EDGE;
case GEOM::WIRE: return SMESH::EDGE; case GEOM::WIRE: return SMESH::EDGE;
case GEOM::FACE: return SMESH::FACE; case GEOM::FACE: return SMESH::FACE;