0026202: Wrong result of chamfer on cylindrical surface: wrong value of chord
authorjgv <jgv@opencascade.com>
Thu, 14 May 2015 14:03:42 +0000 (17:03 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 14 May 2015 14:05:38 +0000 (17:05 +0300)
Test case for issue CR26202

src/ChFiKPart/ChFiKPart_ComputeData_ChPlnCyl.cxx
tests/bugs/modalg_6/bug26202 [new file with mode: 0755]

index 5bc1d39..700e2c8 100644 (file)
@@ -353,15 +353,11 @@ Standard_Boolean ChFiKPart_MakeChamfer(TopOpeBRepDS_DataStructure& DStr,
   gp_Ax3 AxCyl = Cyl.Position();
   // OrCyl is the point on axis of cylinder in the plane normal to the
   // axis containing OrSpine
   gp_Ax3 AxCyl = Cyl.Position();
   // OrCyl is the point on axis of cylinder in the plane normal to the
   // axis containing OrSpine
-  gp_Pnt Loc = AxCyl.Location();
-  gp_Vec LocSp(Loc, OrSpine);
-  gp_XYZ temp = AxCyl.Direction().XYZ();
-  temp = temp.Multiplied(LocSp.XYZ().Multiplied(temp) );
-  OrCyl.SetXYZ( (Loc.XYZ()).Added(temp) );
-//  gp_XYZ temp = AxCyl.Direction().XYZ();
-//  temp = temp.Multiplied( OrSpine.XYZ().Multiplied(temp) );
-//  OrCyl.SetXYZ( (AxCyl.Location().XYZ()).Added(temp) );
-
+  // Project <OrSpine> onto <AxCyl>
+  gp_XYZ AxLoc = AxCyl.Location().XYZ(); //aLine.Location().XYZ();
+  gp_XYZ AxDir = AxCyl.Direction().XYZ();
+  Standard_Real Parameter = (OrSpine.XYZ() - AxLoc) * AxDir;
+  OrCyl.SetXYZ( AxLoc + Parameter * AxDir );
  
   //construction of POnPln
   gp_Vec VecTranslPln,tmp;
  
   //construction of POnPln
   gp_Vec VecTranslPln,tmp;
diff --git a/tests/bugs/modalg_6/bug26202 b/tests/bugs/modalg_6/bug26202
new file mode 100755 (executable)
index 0000000..489b3a7
--- /dev/null
@@ -0,0 +1,40 @@
+puts "============"
+puts "OCC26202"
+puts "============"
+puts ""
+#######################################################################
+# Wrong result of chamfer on cylindrical surface: wrong value of chord
+#######################################################################
+
+restore [locate_data_file bug26202_shell.brep] b
+
+explode b
+explode b_2 e
+
+smallview
+donly b b_2_1
+fit
+xwd $imagedir/${test_image}_1.png
+
+chamf q b b_2_1 b_2 0.02 0.01
+explode q v
+explode b v
+
+donly b_2 q_1 q_5
+fit
+xwd $imagedir/${test_image}_2.png
+
+donly q b b_2 q_1 q_5
+xwd $imagedir/${test_image}_3.png
+
+distmini dd b_2 q_5
+dump dd_val
+#dd_val is 0.013334, but must be 0.02
+
+set info [dump dd_val]
+regexp "\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\* Dump of dd_val \\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\n(\[-0-9*\.+eE\]+)" $info full Length
+
+set expected_Length 0.02
+set tol_abs_Length 1.0e-4
+set tol_rel_Length 0.0001
+checkreal "Length" ${Length} ${expected_Length} ${tol_abs_Length} ${tol_rel_Length}