mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-04-08 15:17:27 +05:00
0021238: EDF 1817 SMESH: GHS3D on quadratic meshes
enhance IsQuadraticSubMesh() for the mesh w/o shape
This commit is contained in:
parent
8aec90a5df
commit
3fb9c77ac1
@ -123,35 +123,50 @@ bool SMESH_MesherHelper::IsQuadraticSubMesh(const TopoDS_Shape& aSh)
|
|||||||
|
|
||||||
int nbOldLinks = myTLinkNodeMap.size();
|
int nbOldLinks = myTLinkNodeMap.size();
|
||||||
|
|
||||||
TopExp_Explorer exp( aSh, subType );
|
if ( !myMesh->HasShapeToMesh() )
|
||||||
for (; exp.More() && myCreateQuadratic; exp.Next()) {
|
{
|
||||||
if ( SMESHDS_SubMesh * subMesh = meshDS->MeshElements( exp.Current() )) {
|
if (( myCreateQuadratic = myMesh->NbFaces( ORDER_QUADRATIC )))
|
||||||
if ( SMDS_ElemIteratorPtr it = subMesh->GetElements() ) {
|
{
|
||||||
while(it->more()) {
|
SMDS_FaceIteratorPtr fIt = meshDS->facesIterator();
|
||||||
const SMDS_MeshElement* e = it->next();
|
while ( fIt->more() )
|
||||||
if ( e->GetType() != elemType || !e->IsQuadratic() ) {
|
AddTLinks( static_cast< const SMDS_MeshFace* >( fIt->next() ));
|
||||||
myCreateQuadratic = false;
|
}
|
||||||
break;
|
}
|
||||||
}
|
else
|
||||||
else {
|
{
|
||||||
// fill TLinkNodeMap
|
TopExp_Explorer exp( aSh, subType );
|
||||||
switch ( e->NbNodes() ) {
|
TopTools_MapOfShape checkedSubShapes;
|
||||||
case 3:
|
for (; exp.More() && myCreateQuadratic; exp.Next()) {
|
||||||
AddTLinkNode(e->GetNode(0),e->GetNode(1),e->GetNode(2)); break;
|
if ( !checkedSubShapes.Add( exp.Current() ))
|
||||||
case 6:
|
continue; // needed if aSh is compound of solids
|
||||||
AddTLinkNode(e->GetNode(0),e->GetNode(1),e->GetNode(3));
|
if ( SMESHDS_SubMesh * subMesh = meshDS->MeshElements( exp.Current() )) {
|
||||||
AddTLinkNode(e->GetNode(1),e->GetNode(2),e->GetNode(4));
|
if ( SMDS_ElemIteratorPtr it = subMesh->GetElements() ) {
|
||||||
AddTLinkNode(e->GetNode(2),e->GetNode(0),e->GetNode(5)); break;
|
while(it->more()) {
|
||||||
case 8:
|
const SMDS_MeshElement* e = it->next();
|
||||||
AddTLinkNode(e->GetNode(0),e->GetNode(1),e->GetNode(4));
|
if ( e->GetType() != elemType || !e->IsQuadratic() ) {
|
||||||
AddTLinkNode(e->GetNode(1),e->GetNode(2),e->GetNode(5));
|
|
||||||
AddTLinkNode(e->GetNode(2),e->GetNode(3),e->GetNode(6));
|
|
||||||
AddTLinkNode(e->GetNode(3),e->GetNode(0),e->GetNode(7));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
myCreateQuadratic = false;
|
myCreateQuadratic = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// fill TLinkNodeMap
|
||||||
|
switch ( e->NbNodes() ) {
|
||||||
|
case 3:
|
||||||
|
AddTLinkNode(e->GetNode(0),e->GetNode(1),e->GetNode(2)); break;
|
||||||
|
case 6:
|
||||||
|
AddTLinkNode(e->GetNode(0),e->GetNode(1),e->GetNode(3));
|
||||||
|
AddTLinkNode(e->GetNode(1),e->GetNode(2),e->GetNode(4));
|
||||||
|
AddTLinkNode(e->GetNode(2),e->GetNode(0),e->GetNode(5)); break;
|
||||||
|
case 8:
|
||||||
|
AddTLinkNode(e->GetNode(0),e->GetNode(1),e->GetNode(4));
|
||||||
|
AddTLinkNode(e->GetNode(1),e->GetNode(2),e->GetNode(5));
|
||||||
|
AddTLinkNode(e->GetNode(2),e->GetNode(3),e->GetNode(6));
|
||||||
|
AddTLinkNode(e->GetNode(3),e->GetNode(0),e->GetNode(7));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
myCreateQuadratic = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,19 +349,21 @@ void SMESH_MesherHelper::AddTLinks(const SMDS_MeshEdge* edge)
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void SMESH_MesherHelper::AddTLinks(const SMDS_MeshFace* face)
|
void SMESH_MesherHelper::AddTLinks(const SMDS_MeshFace* f)
|
||||||
{
|
{
|
||||||
if ( face->IsQuadratic() )
|
if ( !f->IsPoly() )
|
||||||
{
|
switch ( f->NbNodes() ) {
|
||||||
const int nbLinks = face->NbCornerNodes();
|
case 6:
|
||||||
for ( int i = 0; i < nbLinks; ++i )
|
AddTLinkNode(f->GetNode(0),f->GetNode(1),f->GetNode(3));
|
||||||
{
|
AddTLinkNode(f->GetNode(1),f->GetNode(2),f->GetNode(4));
|
||||||
const SMDS_MeshNode* n1 = face->GetNode( i );
|
AddTLinkNode(f->GetNode(2),f->GetNode(0),f->GetNode(5)); break;
|
||||||
const SMDS_MeshNode* n2 = face->GetNode(( i + 1 ) % nbLinks );
|
case 8:
|
||||||
const SMDS_MeshNode* n12 = face->GetNode( i + nbLinks );
|
AddTLinkNode(f->GetNode(0),f->GetNode(1),f->GetNode(4));
|
||||||
AddTLinkNode( n1, n2, n12 );
|
AddTLinkNode(f->GetNode(1),f->GetNode(2),f->GetNode(5));
|
||||||
|
AddTLinkNode(f->GetNode(2),f->GetNode(3),f->GetNode(6));
|
||||||
|
AddTLinkNode(f->GetNode(3),f->GetNode(0),f->GetNode(7));
|
||||||
|
default:;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user