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 );
|
||||
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 );
|
||||
TError err;
|
||||
TSideVector wires = StdMeshers_FaceSide::GetFaceWires( F, theMesh,
|
||||
|
Loading…
Reference in New Issue
Block a user