- aGroup = new HDFgroup( "Node Positions", aTopGroup );
- aGroup->CreateOnDisk();
-
- // in aGroup, create 5 datasets to contain:
- // "Nodes on Edges" - ID of node on edge
- // "Edge positions" - U parameter on node on edge
- // "Nodes on Faces" - ID of node on face
- // "Face U positions" - U parameter of node on face
- // "Face V positions" - V parameter of node on face
-
- // Find out nb of nodes on edges and faces
- // Collect corresponing sub-meshes
- int nbEdgeNodes = 0, nbFaceNodes = 0;
- list<SMESHDS_SubMesh*> aEdgeSM, aFaceSM;
- // loop on SMESHDS_SubMesh'es
- const map<int,SMESHDS_SubMesh*>& aSubMeshes = mySMESHDSMesh->SubMeshes();
- map<int,SMESHDS_SubMesh*>::const_iterator itSubM ( aSubMeshes.begin() );
- for ( ; itSubM != aSubMeshes.end() ; itSubM++ )
- {
- SMESHDS_SubMesh* aSubMesh = (*itSubM).second;
- if ( aSubMesh->IsComplexSubmesh() )
- continue; // submesh containing other submeshs
- int nbNodes = aSubMesh->NbNodes();
- if ( nbNodes == 0 ) continue;
-
- int aShapeID = (*itSubM).first;
- int aShapeType = mySMESHDSMesh->IndexToShape( aShapeID ).ShapeType();
- // write only SMDS_FacePosition and SMDS_EdgePosition
- switch ( aShapeType ) {
- case TopAbs_FACE:
- nbFaceNodes += nbNodes;
- aFaceSM.push_back( aSubMesh );
- break;
- case TopAbs_EDGE:
- nbEdgeNodes += nbNodes;
- aEdgeSM.push_back( aSubMesh );
- break;
- default:
- continue;
- }
- }
- // Treat positions on edges or faces
- for ( int onFace = 0; onFace < 2; onFace++ )