+ SMESH_Block block;
+ TopTools_IndexedMapOfOrientedShape blockSubShapes;
+ {
+ const TopoDS_Solid& box = srcMesh->PseudoShape();
+ TopoDS_Shell shell = TopoDS::Shell( TopExp_Explorer( box, TopAbs_SHELL ).Current() );
+ TopoDS_Vertex v;
+ block.LoadBlockShapes( shell, v, v, blockSubShapes ); // fill all since operator[] is missing
+ }
+ const SMESH_Block::TShapeID srcFaceBID = SMESH_Block::ID_Fxy0;
+ const SMESH_Block::TShapeID tgtFaceBID = SMESH_Block::ID_Fxy1;
+ vector< int > edgeBID;
+ block.GetFaceEdgesIDs( srcFaceBID, edgeBID ); // u0, u1, 0v, 1v
+ blockSubShapes.Substitute( edgeBID[0], srcWires[0]->Edge(0) );
+ blockSubShapes.Substitute( edgeBID[1], srcWires[0]->Edge(2) );
+ blockSubShapes.Substitute( edgeBID[2], srcWires[0]->Edge(3) );
+ blockSubShapes.Substitute( edgeBID[3], srcWires[0]->Edge(1) );
+ block.GetFaceEdgesIDs( tgtFaceBID, edgeBID ); // u0, u1, 0v, 1v
+ blockSubShapes.Substitute( edgeBID[0], tgtWires[0]->Edge(0) );
+ blockSubShapes.Substitute( edgeBID[1], tgtWires[0]->Edge(2) );
+ blockSubShapes.Substitute( edgeBID[2], tgtWires[0]->Edge(3) );
+ blockSubShapes.Substitute( edgeBID[3], tgtWires[0]->Edge(1) );
+ block.LoadFace( srcFace, srcFaceBID, blockSubShapes );
+ block.LoadFace( tgtFace, tgtFaceBID, blockSubShapes );
+
+ // remember connectivity of new faces in terms of ( node-or-XY )
+
+ typedef std::pair< const SMDS_MeshNode*, gp_XYZ > TNodeOrXY; // node-or-XY
+ typedef std::vector< TNodeOrXY* > TFaceConn; // face connectivity
+ std::vector< TFaceConn > newFacesVec; // connectivity of all faces
+ std::map< const SMDS_MeshNode*, TNodeOrXY > srcNode2tgtNXY; // src node -> node-or-XY
+
+ TAssocTool::TNodeNodeMap::iterator srcN_tgtN;
+ std::map< const SMDS_MeshNode*, TNodeOrXY >::iterator srcN_tgtNXY;
+ std::pair< std::map< const SMDS_MeshNode*, TNodeOrXY >::iterator, bool > n2n_isNew;
+ TNodeOrXY nullNXY( (SMDS_MeshNode*)NULL, gp_XYZ(0,0,0) );
+
+ SMESHDS_SubMesh* srcSubDS = srcMeshDS->MeshElements( srcFace );
+ newFacesVec.resize( srcSubDS->NbElements() );
+ int iFaceSrc = 0;