{
ClearOsculFlags();
myTol=Tol;
- Standard_Real TolMin=1.e-12;
+ Standard_Real TolMin=0.;//consider all singularities below Tol, not just above 1.e-12 (id23943)
Standard_Boolean OsculSurf = Standard_True;
myBasisSurf = Handle(Geom_Surface)::DownCast(BS->Copy());
myOsculSurf1 = new Geom_HSequenceOfBSplineSurface();
myAlong.SetValue(2,IsQPunctual(BS,V2,GeomAbs_IsoV,TolMin,Tol));
myAlong.SetValue(3,IsQPunctual(BS,U1,GeomAbs_IsoU,TolMin,Tol));
myAlong.SetValue(4,IsQPunctual(BS,U2,GeomAbs_IsoU,TolMin,Tol));
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<myAlong(1)<<endl<<myAlong(2)<<endl<<myAlong(3)<<endl<<myAlong(4)<<endl;
#endif
if (myAlong(1) || myAlong(2) || myAlong(3) || myAlong(4))
{
InitSurf = Handle(Geom_BSplineSurface)::DownCast(myBasisSurf);
}
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"UDEG: "<<InitSurf->UDegree()<<endl;
cout<<"VDEG: "<<InitSurf->VDegree()<<endl;
#endif
OsculSurf = BuildOsculatingSurface(V1,UKnot,VKnot,S,L);
if(!OsculSurf) break;
k++;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"1.k = "<<k<<endl;
#endif
IsQPunc=IsQPunctual(L,V1,GeomAbs_IsoV,0.,Tol);
OsculSurf = BuildOsculatingSurface(V2,UKnot,VKnot,S,L);
if(!OsculSurf) break;
k++;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"2.k = "<<k<<endl;
#endif
IsQPunc=IsQPunctual(L,V2,GeomAbs_IsoV,0.,Tol);
OsculSurf = BuildOsculatingSurface(V2,UKnot,VKnot,S,L);
if(!OsculSurf) break;
k++;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"2.k = "<<k<<endl;
#endif
IsQPunc=IsQPunctual(L,V2,GeomAbs_IsoV,0.,Tol);
OsculSurf = BuildOsculatingSurface(U1,UKnot,VKnot,S,L);
if(!OsculSurf) break;
k++;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"1.k = "<<k<<endl;
#endif
IsQPunc=IsQPunctual(L,U1,GeomAbs_IsoU,0.,Tol);
OsculSurf = BuildOsculatingSurface(U2,UKnot,VKnot,S,L);
if(!OsculSurf) break;
k++;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"2.k = "<<k<<endl;
#endif
IsQPunc=IsQPunctual(L,U2,GeomAbs_IsoU,0.,Tol);
OsculSurf = BuildOsculatingSurface(U2,UKnot,VKnot,S,L);
if(!OsculSurf) break;
k++;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"2.k = "<<k<<endl;
#endif
IsQPunc=IsQPunctual(L,U2,GeomAbs_IsoU,0.,Tol);
{
Standard_Integer i, j;
Standard_Boolean OsculSurf=Standard_True;
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"t = "<<Param<<endl;
cout<<"======================================"<<endl<<endl;
#endif
vdeg = BS->VDegree();
if( (IsAlongU() && vdeg <=1) || (IsAlongV() && udeg <=1))
{
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<" surface osculatrice nulle "<<endl;
#endif
//Standard_ConstructionError::Raise("Geom_OsculatingSurface");
Standard_Integer OscUNumCoeff=0, OscVNumCoeff=0;
if (IsAlongU())
{
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<">>>>>>>>>>> AlongU"<<endl;
#endif
OscUNumCoeff = (Standard_Integer ) udeg + 1;
}
if (IsAlongV())
{
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<">>>>>>>>>>> AlongV"<<endl;
#endif
OscUNumCoeff = (Standard_Integer ) udeg;
Data.UDegree(),
Data.VDegree(),
0, 0);
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout<<"^====================================^"<<endl<<endl;
#endif
D1NormMax=Max(D1NormMax,D1U.Magnitude());
}
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout << " D1NormMax = " << D1NormMax << endl;
#endif
if (D1NormMax >TolMax || D1NormMax < TolMin )
S->D1(Param,T,P,D1U,D1V);
D1NormMax=Max(D1NormMax,D1V.Magnitude());
}
-#ifdef DEB
+#if defined(DEB) && defined(OCCT_DEVELOPMENT)
cout << " D1NormMax = " << D1NormMax << endl;
#endif
if (D1NormMax >TolMax || D1NormMax < TolMin )
// Forcer appel a IsU-VClosed
if (myUCloseVal < 0) IsUClosed();
if (myVCloseVal < 0) IsVClosed();
- //modified by rln during fixing CSR # BUC60035 entity #D231
- Standard_Real du = Min (myUDelt, SurfAdapt.UResolution (preci)),
- dv = Min (myVDelt, SurfAdapt.VResolution (preci));
+ Standard_Real du = 0., dv = 0.;
+ //extension of the surface range is limited to non-offset surfaces as the latter
+ //can throw exception (e.g. Geom_UndefinedValue) when computing value - see id23943
+ if (!mySurf->IsKind (STANDARD_TYPE (Geom_OffsetSurface))) {
+ //modified by rln during fixing CSR # BUC60035 entity #D231
+ du = Min (myUDelt, SurfAdapt.UResolution (preci));
+ dv = Min (myVDelt, SurfAdapt.VResolution (preci));
+ }
myExtSrf = mySurf;
Standard_Real Tol = Precision::PConfusion();
myExtPS.SetFlag (Extrema_ExtFlag_MIN);