mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
Regression of SMESH_TEST/Grids/smesh/imps7/H5
Fix position of medium nodes that are set to FACE by StdMeshers_Projection_2D, since EDGEs are discreteized later than FACE.
This commit is contained in:
parent
65c45fcb35
commit
adde8edd1b
@ -124,6 +124,38 @@ bool StdMeshers_Projection_1D2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape
|
|||||||
SMESH_MesherHelper helper( theMesh );
|
SMESH_MesherHelper helper( theMesh );
|
||||||
helper.SetSubShape( theShape );
|
helper.SetSubShape( theShape );
|
||||||
|
|
||||||
|
if ( _quadraticMesh )
|
||||||
|
{
|
||||||
|
// 2a) Move some medium nodes from FACE to EDGES. They are on FACE because
|
||||||
|
// EDGEs are discreteized later than FACE, in this case.
|
||||||
|
|
||||||
|
SMESH_MesherHelper posFixer( theMesh );
|
||||||
|
posFixer.ToFixNodeParameters( true );
|
||||||
|
SMDS_ElemIteratorPtr fIt = faceSubMesh->GetElements();
|
||||||
|
vector< const SMDS_MeshNode* > nodes;
|
||||||
|
double dummyU, tol = 1e-7;
|
||||||
|
while ( fIt->more() ) // loop on mesh faces created by StdMeshers_Projection_2D
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* f = fIt->next();
|
||||||
|
//if ( !f->IsQuadratic() ) continue;
|
||||||
|
nodes.assign( SMDS_MeshElement::iterator( f->interlacedNodesElemIterator() ),
|
||||||
|
SMDS_MeshElement::iterator() );
|
||||||
|
nodes.push_back( nodes[0] );
|
||||||
|
for ( size_t i = 2; i < nodes.size(); i += 2 )
|
||||||
|
{
|
||||||
|
pair<int, TopAbs_ShapeEnum> idType = helper.GetMediumPos( nodes[i], nodes[i-2] );
|
||||||
|
if ( idType.second == TopAbs_EDGE &&
|
||||||
|
idType.first != nodes[i-1]->getshapeId() )
|
||||||
|
{
|
||||||
|
faceSubMesh->RemoveNode( nodes[i-1], /*isDeleted=*/false );
|
||||||
|
meshDS->SetNodeOnEdge( (SMDS_MeshNode*) nodes[i-1], idType.first );
|
||||||
|
posFixer.SetSubShape( idType.first );
|
||||||
|
posFixer.CheckNodeU( TopoDS::Edge( posFixer.GetSubShape() ),
|
||||||
|
nodes[i-1], dummyU=0., tol, /*force=*/true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
TopoDS_Face F = TopoDS::Face( theShape );
|
TopoDS_Face F = TopoDS::Face( theShape );
|
||||||
TError err;
|
TError err;
|
||||||
TSideVector wires = StdMeshers_FaceSide::GetFaceWires( F, theMesh,
|
TSideVector wires = StdMeshers_FaceSide::GetFaceWires( F, theMesh,
|
||||||
|
Loading…
Reference in New Issue
Block a user