]> OCCT Git - occt.git/commitdiff
#fix cone
authorVitaut Tryputsin <vitaut.tryputsin@opencascade.com>
Wed, 31 Jul 2024 14:33:12 +0000 (17:33 +0300)
committermzernova <mzernova@opencascade.com>
Fri, 6 Sep 2024 10:50:35 +0000 (11:50 +0100)
src/StdSelect/StdSelect_BRepSelectionTool.cxx

index bcf81e6917b9451dab78782824733dcdfda16ba4..7add5462b8b4df87a22ff7eb2eff60bb7fcde74b 100644 (file)
@@ -61,6 +61,7 @@
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Wire.hxx>
+#include <iostream>
 
 #define BVH_PRIMITIVE_LIMIT 800000
 
@@ -649,14 +650,14 @@ Standard_Boolean StdSelect_BRepSelectionTool::GetSensitiveForFace (const TopoDS_
         }
         else
         {
-          aRad1 = aCircles.First().Radius();
-          aRad2 = aCircles.Last().Radius();
           aHeight = aCircles.First().Location().Distance (aCircles.Last().Location());
-
-          const gp_Pnt aPos = aCircles.First().Location();
-          const gp_Dir aDirection (aCircles.Last().Location().XYZ() - aPos.XYZ());
-
-          aTrsf.SetTransformation (gp_Ax3(aPos, aDirection), gp::XOY());
+          const gp_Circ& aFirstCircle = aCircles.First();
+          const gp_Circ& aLastCircle = aCircles.Last();
+          const gp_Circ& aSmallerCircle = (aFirstCircle.Radius() < aLastCircle.Radius()) ? aFirstCircle : aLastCircle;
+          const gp_Circ& aLargerCircle = (aFirstCircle.Radius() > aLastCircle.Radius()) ? aFirstCircle : aLastCircle;
+          aRad1 = aSmallerCircle.Radius();
+          aRad2 = aLargerCircle.Radius();
+          aTrsf.SetTranslationPart(aSmallerCircle.Location().XYZ());
         }
 
         Handle(Select3D_SensitiveCylinder) aSensSCyl = new Select3D_SensitiveCylinder (theOwner, aRad1, aRad2, aHeight, aTrsf, true);