- if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3], quadIDShift + i ))
- status = storeBadNodeIds( "GmfQuadrilaterals",i, 4, iN[0], iN[1],iN[2], iN[3] );
- }
- }
- /* Read bi-quadratic quadrangles */
- const int quad2IDShift = myMesh->GetMeshInfo().NbElements();
- if ( int nbQuad = GmfStatKwd(meshID, GmfQuadrilateralsQ2))
- {
- GmfGotoKwd(meshID, GmfQuadrilateralsQ2);
- for ( int i = 1; i <= nbQuad; ++i )
- {
- GmfGetLin(meshID, GmfQuadrilateralsQ2,
- &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &iN[6], &iN[7], &iN[8], &ref);
- if ( !myMesh->AddFaceWithID( iN[0],iN[1],iN[2],iN[3],iN[4],iN[5],iN[6],iN[7],iN[8],
- quad2IDShift + i ))
- status = storeBadNodeIds( "GmfQuadrilateralsQ2",i,
- 9, iN[0],iN[1],iN[2],iN[3],iN[4],iN[5],iN[6],iN[7],iN[8] );
+ if ( readQuadNodes )
+ {
+ const std::vector<int>& midN = quadNodesAtQuadrilaterals[ i-1 ];
+ if ( midN.size() == 4 )
+ {
+ if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3],
+ quadIDShift + i ))
+ status = storeBadNodeIds( "GmfQuadrilaterals + GmfExtraVerticesAtQuadrilaterals",i, 8,
+ iN[0], iN[1],iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3]);
+ }
+ else
+ {
+ if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3], midN[4],
+ quadIDShift + i ))
+ status = storeBadNodeIds( "GmfQuadrilaterals + GmfExtraVerticesAtQuadrilaterals",i, 9,
+ iN[0], iN[1],iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3], midN[4]);
+ }
+ }
+ else
+ {
+ if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3], quadIDShift + i ))
+ status = storeBadNodeIds( "GmfQuadrilaterals",i, 4, iN[0], iN[1],iN[2], iN[3] );
+ }