From 853a60bf940ec1a02c6b56970f91b6ebd49748f7 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 18 May 2010 13:42:25 +0000 Subject: [PATCH] 0020656: EDF 883 SMESH: A face is badly meshed with BlSurf - Netgen1D2D is OK * Check if blsurf vertex tag corresponds to a geom vertex id as there are same vertex tags for points on geom vertices, points of enforced vertices and points of attracted vertices --- src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx index 6994719..b627a7c 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx @@ -1242,15 +1242,18 @@ bool BLSURFPlugin_BLSURF::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) mesh_get_vertex_coordinates(msh, iv, xyz); mesh_get_vertex_tag(msh, iv, &tag); // Issue 0020656. Use vertex coordinates - // GDD: commented because enforced vertices - // are badly taken into account - //if ( tag ) { - // gp_Pnt p = BRep_Tool::Pnt( TopoDS::Vertex(pmap(tag))); - // xyz[0] = p.X(); xyz[1] = p.Y(); xyz[2] = p.Z(); - //} + if ( tag > 0 && tag <= pmap.Extent() ) { + TopoDS_Vertex v = TopoDS::Vertex(pmap(tag)); + double tol = BRep_Tool::Tolerance( v ); + gp_Pnt p = BRep_Tool::Pnt( v ); + if ( p.IsEqual( gp_Pnt( xyz[0], xyz[1], xyz[2]), 2*tol)) + xyz[0] = p.X(), xyz[1] = p.Y(), xyz[2] = p.Z(); + else + tag = 0; // enforced or attracted vertex + } nodes[iv] = meshDS->AddNode(xyz[0], xyz[1], xyz[2]); // internal point are tagged to zero - if(tag){ + if(tag > 0 && tag <= pmap.Extent() ){ meshDS->SetNodeOnVertex(nodes[iv], TopoDS::Vertex(pmap(tag))); tags[iv] = false; } else { -- 2.39.2