X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_Quadrangle_2D.cxx;h=eab7b283829897b2503dac5f63f1fcaa064e906e;hp=3b8a61bbe665a8084d1c489ebc4b8b2933230394;hb=ef932e4d05a45b9a3034423e30519d15e664f2bc;hpb=bb2c60c2b654843ed9727afde458334b108a26f4 diff --git a/src/SMESH/SMESH_Quadrangle_2D.cxx b/src/SMESH/SMESH_Quadrangle_2D.cxx index 3b8a61bbe..eab7b2838 100644 --- a/src/SMESH/SMESH_Quadrangle_2D.cxx +++ b/src/SMESH/SMESH_Quadrangle_2D.cxx @@ -134,9 +134,8 @@ bool SMESH_Quadrangle_2D::Compute(SMESH_Mesh & aMesh, double v = quad->uv_grid[ij].v; gp_Pnt P = S->Value(u, v); SMDS_MeshNode * node = meshDS->AddNode(P.X(), P.Y(), P.Z()); - int nodeId = node->GetID(); meshDS->SetNodeOnFace(node, F); - quad->uv_grid[ij].nodeId = nodeId; + quad->uv_grid[ij].node = node; // Handle (SMDS_FacePosition) fpos // = new SMDS_FacePosition(theSubMesh->GetId(),i,j); // easier than u,v // node->SetPosition(fpos); @@ -150,11 +149,11 @@ bool SMESH_Quadrangle_2D::Compute(SMESH_Mesh & aMesh, for (int i = 0; i < nbdown - 1; i++) for (int j = 0; j < nbright - 1; j++) // faces { - int a = quad->uv_grid[j * nbdown + i].nodeId; - int b = quad->uv_grid[j * nbdown + i + 1].nodeId; - int c = quad->uv_grid[(j + 1) * nbdown + i + 1].nodeId; - int d = quad->uv_grid[(j + 1) * nbdown + i].nodeId; - int faceId; + const SMDS_MeshNode *a, *b, *c, *d; + a = quad->uv_grid[j * nbdown + i].node; + b = quad->uv_grid[j * nbdown + i + 1].node; + c = quad->uv_grid[(j + 1) * nbdown + i + 1].node; + d = quad->uv_grid[(j + 1) * nbdown + i].node; // if (isQuadForward) faceId = meshDS->AddFace(a,b,c,d); // else faceId = meshDS->AddFace(a,d,c,b); SMDS_MeshFace * face = meshDS->AddFace(a, b, c, d); @@ -392,25 +391,25 @@ void SMESH_Quadrangle_2D::SetNormalizedGrid(SMESH_Mesh & aMesh, for (int i = 0; i < nbdown; i++) { int ij = j * nbdown + i; - uv_grid[ij].nodeId = uv_e0[i].nodeId; + uv_grid[ij].node = uv_e0[i].node; } i = nbdown - 1; for (int j = 0; j < nbright; j++) { int ij = j * nbdown + i; - uv_grid[ij].nodeId = uv_e1[j].nodeId; + uv_grid[ij].node = uv_e1[j].node; } j = nbright - 1; for (int i = 0; i < nbdown; i++) { int ij = j * nbdown + i; - uv_grid[ij].nodeId = uv_e2[i].nodeId; + uv_grid[ij].node = uv_e2[i].node; } i = 0; for (int j = 0; j < nbright; j++) { int ij = j * nbdown + i; - uv_grid[ij].nodeId = uv_e3[j].nodeId; + uv_grid[ij].node = uv_e3[j].node; } // normalized 2d values on grid @@ -489,19 +488,16 @@ UVPtStruct *SMESH_Quadrangle_2D::LoadEdgePoints(SMESH_Mesh & aMesh, TopoDS_Vertex VFirst, VLast; TopExp::Vertices(E, VFirst, VLast); // corresponds to f and l - ASSERT(!VFirst.IsNull()); - SMESH_subMesh *firstSubMesh = aMesh.GetSubMesh(VFirst); - const vector& lidf - = firstSubMesh->GetSubMeshDS()->GetIDNodes(); - int idFirst = lidf[0]; - //SCRUTE(idFirst); + ASSERT(!VFirst.IsNull()); + SMDS_Iterator * lid= + aMesh.GetSubMesh(VFirst)->GetSubMeshDS()->GetNodes(); + const SMDS_MeshNode * idFirst = lid->next(); + delete lid; - ASSERT(!VLast.IsNull()); - SMESH_subMesh *lastSubMesh = aMesh.GetSubMesh(VLast); - const vector & lidl - = lastSubMesh->GetSubMeshDS()->GetIDNodes(); - int idLast = lidl[0]; - //SCRUTE(idLast); + ASSERT(!VLast.IsNull()); + lid=aMesh.GetSubMesh(VLast)->GetSubMeshDS()->GetNodes(); + const SMDS_MeshNode * idLast = lid->next(); + delete lid; // --- edge internal IDNodes (relies on good order storage, not checked) @@ -512,23 +508,19 @@ UVPtStruct *SMESH_Quadrangle_2D::LoadEdgePoints(SMESH_Mesh & aMesh, double f, l; Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, F, f, l); - const vector & indElt - = aMesh.GetSubMesh(E)->GetSubMeshDS()->GetIDNodes(); + map params; + SMDS_Iterator * ite= + aMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes(); - //SCRUTE(nbPoints); - //SCRUTE(indElt.Extent()); - ASSERT(nbPoints == indElt.size()); - - map params; - for (int ite=0; itemore()) { - int nodeId = indElt[ite]; - const SMDS_MeshNode * node = meshDS->FindNode(nodeId); + const SMDS_MeshNode * node = ite->next(); const SMDS_EdgePosition* epos = static_cast(node->GetPosition()); double param = epos->GetUParameter(); - params[param] = nodeId; + params[param] = node; } + delete ite; bool isForward = (((l - f) * (last - first)) > 0); double paramin = 0; @@ -541,18 +533,17 @@ UVPtStruct *SMESH_Quadrangle_2D::LoadEdgePoints(SMESH_Mesh & aMesh, uvslf[0].x = p.X(); uvslf[0].y = p.Y(); uvslf[0].param = f; - uvslf[0].nodeId = idFirst; + uvslf[0].node = idFirst; //MESSAGE("__ f "<::iterator itp = params.begin(); + map < double, const SMDS_MeshNode* >::iterator itp = params.begin(); for (int i = 1; i <= nbPoints; i++) // nbPoints internal { double param = (*itp).first; - int nodeId = (*itp).second; gp_Pnt2d p = C2d->Value(param); uvslf[i].x = p.X(); uvslf[i].y = p.Y(); uvslf[i].param = param; - uvslf[i].nodeId = nodeId; + uvslf[i].node = (*itp).second; //MESSAGE("__ "<::reverse_iterator itp = params.rbegin(); + map < double, const SMDS_MeshNode* >::reverse_iterator itp = params.rbegin(); for (int j = nbPoints; j >= 1; j--) // nbPoints internal { double param = (*itp).first; - int nodeId = (*itp).second; int i = nbPoints + 1 - j; gp_Pnt2d p = C2d->Value(param); uvslf[i].x = p.X(); uvslf[i].y = p.Y(); uvslf[i].param = param; - uvslf[i].nodeId = nodeId; + uvslf[i].node = (*itp).second; //MESSAGE("__ "<