]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0023043: EDF 10596 GEOM: GetShapesOnShape does not return all shapes expected
authorskv <skv@opencascade.com>
Wed, 15 Apr 2015 11:04:22 +0000 (14:04 +0300)
committerskv <skv@opencascade.com>
Wed, 15 Apr 2015 11:04:22 +0000 (14:04 +0300)
src/GEOMImpl/GEOMImpl_IShapesOperations.cxx

index 2afb575f36f9bb288a3826790e06430d38927ce4..affb64b9c81492c67a5eafd1de99b9f626d8dd3c 100644 (file)
@@ -2787,9 +2787,31 @@ Handle(TColStd_HSequenceOfInteger)
     return aSeqOfIDs;
   }
 
+  // Compute classification tolerance.
+  TopTools_IndexedMapOfShape aMapVtx;
+  Standard_Real              aTol = Precision::Confusion();
+
+  TopExp::MapShapes(aShape, TopAbs_VERTEX, aMapVtx);
+
+  Standard_Integer i;
+  Standard_Integer aNbVtx = aMapVtx.Extent();
+
+  for (i = 1; i <= aNbVtx; ++i) {
+    const TopoDS_Vertex aVtx    = TopoDS::Vertex(aMapVtx.FindKey(i));
+    const Standard_Real aVtxTol = BRep_Tool::Tolerance(aVtx);
+
+    if (aTol < aVtxTol) {
+      aTol = aVtxTol;
+    }
+  }
+
+  // Bound the tolerance value.
+  if (aTol > 0.0001) {
+    aTol = 0.0001;
+  }
+
   // Call algo
   GEOMAlgo_FinderShapeOn2 aFinder;
-  Standard_Real aTol = 0.0001; // default value
 
   Handle(GEOMAlgo_ClsfSolid) aClsfSolid = new GEOMAlgo_ClsfSolid;
   aClsfSolid->SetShape(aCheckShape);