aFirst=aC3D->FirstParameter();
aLast =aC3D->LastParameter();
//
- //Checking extermities first
+ // Checking extermities first
+ // It is necessary to chose the closest bound to the point
+ Standard_Boolean bFirstValid = Standard_False;
+ Standard_Real aFirstDist = Precision::Infinite();
+ //
if (!Precision::IsInfinite(aFirst)) {
gp_Pnt aPCFirst=aC3D->Value(aFirst);
- aDist=aPv.Distance(aPCFirst);
- if (aDist < aTolSum) {
+ aFirstDist = aPv.Distance(aPCFirst);
+ if (aFirstDist < aTolSum) {
+ bFirstValid = Standard_True;
aT=aFirst;
//
- if(aDist > aTolV) {
+ if (aFirstDist > aTolV) {
Extrema_LocateExtPC anExt(aPv, aGAC, aFirst, 1.e-10);
if(anExt.IsDone()) {
}
}
- //
- return Standard_True;
}
}
//
- //if (!Precision::IsInfinite(aFirst)) {
if (!Precision::IsInfinite(aLast)) {
gp_Pnt aPCLast=aC3D->Value(aLast);
aDist=aPv.Distance(aPCLast);
+ if (bFirstValid && (aFirstDist < aDist)) {
+ return Standard_True;
+ }
+ //
if (aDist < aTolSum) {
aT=aLast;
//
return Standard_True;
}
}
+ else if (bFirstValid) {
+ return Standard_True;
+ }
//
GeomAPI_ProjectPointOnCurve& aProjector=ProjPT(aC3D);
aProjector.Perform(aPv);
--- /dev/null
+puts "============"
+puts "OCC27441"
+puts "============"
+puts ""
+###############################
+## The method IntTools_ContextIsVertexOnLine incorrectly computes parameter of the point on the curve
+###############################
+
+restore [locate_data_file bug27428_shapes.brep] b
+explode b
+bsection result b_1 b_2
+set bcheck [bopcheck result]
+puts $bcheck
+if {![regexp {This shape seems to be OK.} $bcheck]} {
+ puts "Error: bopcheck failed"
+}