--- /dev/null
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/drv/BRepBlend/BRepBlend_Walking_0.cxx OCCT-6.8.0_SRC-patch/drv/BRepBlend/BRepBlend_Walking_0.cxx
+--- OCCT-6.8.0_SRC/drv/BRepBlend/BRepBlend_Walking_0.cxx 2014-11-11 17:53:30.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/drv/BRepBlend/BRepBlend_Walking_0.cxx 2015-01-16 14:33:41.000000000 +0300
+@@ -22,6 +22,7 @@
+ #include <Blend_Point.hxx>
+ #include <Blend_Function.hxx>
+ #include <Blend_FuncInv.hxx>
++#include <ChFiDS_HElSpine.hxx>
+ #include <gp_Pnt2d.hxx>
+ #include <IntSurf_Transition.hxx>
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/AIS_InteractiveContext.hxx OCCT-6.8.0_SRC-patch/inc/AIS_InteractiveContext.hxx
+--- OCCT-6.8.0_SRC/inc/AIS_InteractiveContext.hxx 2014-11-11 17:54:39.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/AIS_InteractiveContext.hxx 2015-01-16 14:34:51.000000000 +0300
+@@ -239,13 +239,6 @@
+ //! Local Context opened.
+ Standard_EXPORT Standard_Boolean KeepTemporary (const Handle(AIS_InteractiveObject)& anIObj, const Standard_Integer InWhichLocal = -1) ;
+
+- //! Removes the interactive object aniobj from all viewers.
+- //! If a local context is open and if updateviewer equals
+- //! Standard_False, the presentation of the Interactive
+- //! Object activates the selection mode; the object is
+- //! displayed but no viewer will be updated.
+- Standard_EXPORT void Clear (const Handle(AIS_InteractiveObject)& aniobj, const Standard_Boolean updateviewer = Standard_True) ;
+-
+ //! Empties the graphic presentation of the mode
+ //! indexed by aMode.
+ //! If a local context is open and if updateviewer equals
+@@ -1633,6 +1626,12 @@
+ Standard_EXPORT void InitAttributes() ;
+
+ Standard_EXPORT Standard_Integer PurgeViewer (const Handle(V3d_Viewer)& Vwr) ;
++
++ //! UNKNOWN
++ Standard_EXPORT void redisplayPrsModes (const Handle(AIS_InteractiveObject)& theIObj, const Standard_Boolean theToUpdateViewer = Standard_True) ;
++
++ //! UNKNOWN
++ Standard_EXPORT void redisplayPrsRecModes (const Handle(AIS_InteractiveObject)& theIObj, const Standard_Boolean theToUpdateViewer = Standard_True) ;
+
+ AIS_DataMapOfIOStatus myObjects;
+ Handle(SelectMgr_SelectionManager) mgrSelector;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Blend_Walking_1.gxx OCCT-6.8.0_SRC-patch/inc/Blend_Walking_1.gxx
+--- OCCT-6.8.0_SRC/inc/Blend_Walking_1.gxx 2014-11-11 17:46:43.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/Blend_Walking_1.gxx 2015-01-16 12:59:38.000000000 +0300
+@@ -56,6 +56,7 @@
+
+ void Blend_Walking::Perform(Blend_Function& Func,
+ Blend_FuncInv& FuncInv,
++ const Handle(ChFiDS_HElSpine)& HGuide,
+ const Standard_Real Pdep,
+ const Standard_Real Pmax,
+ const Standard_Real MaxStep,
+@@ -154,7 +155,7 @@
+ }
+ }
+
+- InternalPerform(Func,FuncInv,Pmax);
++ InternalPerform(Func,FuncInv,HGuide,Pmax);
+
+ done = Standard_True;
+ }
+@@ -461,7 +462,8 @@
+ previousP.ParametersOnS1(sol(1),sol(2));
+ previousP.ParametersOnS2(sol(3),sol(4));
+
+- InternalPerform(Func,FuncInv,P);
++ Handle(ChFiDS_HElSpine) anHGuide;
++ InternalPerform(Func,FuncInv,anHGuide,P);
+ return Standard_True;
+ }
+
+@@ -502,7 +504,8 @@
+ if(OnS1) clasonS1 = Standard_False;
+ else clasonS2 = Standard_False;
+
+- InternalPerform(Func,FuncInv,P);
++ Handle(ChFiDS_HElSpine) anHGuide;
++ InternalPerform(Func,FuncInv,anHGuide,P);
+
+ clasonS1 = Standard_True;
+ clasonS2 = Standard_True;
+@@ -548,7 +551,8 @@
+ previousP.ParametersOnS1(sol(1),sol(2));
+ previousP.ParametersOnS2(sol(3),sol(4));
+
+- InternalPerform(Func,FuncInv,Pmin);
++ Handle(ChFiDS_HElSpine) anHGuide;
++ InternalPerform(Func,FuncInv,anHGuide,Pmin);
+
+ iscomplete = Standard_True;
+ return Standard_True;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Blend_Walking_4.gxx OCCT-6.8.0_SRC-patch/inc/Blend_Walking_4.gxx
+--- OCCT-6.8.0_SRC/inc/Blend_Walking_4.gxx 2014-11-11 17:46:43.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/Blend_Walking_4.gxx 2015-01-16 12:59:38.000000000 +0300
+@@ -12,6 +12,8 @@
+ // Alternatively, this file may be used under the terms of Open CASCADE
+ // commercial license or contractual agreement.
+
++#include <gce_MakePln.hxx>
++
+ static void evalpinit(math_Vector& parinit,
+ const Blend_Point& previousP,
+ const Standard_Real parprec,
+@@ -65,6 +67,7 @@
+
+ void Blend_Walking::InternalPerform(Blend_Function& Func,
+ Blend_FuncInv& FuncInv,
++ const Handle(ChFiDS_HElSpine)& HGuide,
+ const Standard_Real Bound)
+ {
+
+@@ -251,12 +254,64 @@
+ // avec les surfaces periodiques.
+ State = Blend_OnRst12;
+ param = (w1+w2)/2;
++ gp_Pnt Pnt1, Pnt2;
+ p2d = TheArcTool::Value(recdomain1->Value(),solrst1(1));
+ sol(1) = p2d.X();
+ sol(2) = p2d.Y();
++ Pnt1 = TheSurfaceTool::Value(surf1,sol(1),sol(2));
+ p2d = TheArcTool::Value(recdomain2->Value(),solrst2(1));
+ sol(3) = p2d.X();
+ sol(4) = p2d.Y();
++ Pnt2 = TheSurfaceTool::Value(surf2,sol(3),sol(4));
++ if (!HGuide.IsNull())
++ {
++ const Standard_Real TolProd = 1.e-5;
++ Standard_Real SavedParams [2];
++ Standard_Boolean SameDirs [2] = {Standard_False, Standard_False};
++ ChFiDS_ElSpine& theElSpine = HGuide->ChangeCurve();
++ SavedParams[0] = theElSpine.GetSavedFirstParameter();
++ SavedParams[1] = theElSpine.GetSavedLastParameter();
++ for (Standard_Integer ind = 0; ind < 2; ind++)
++ {
++ if (!Precision::IsInfinite(SavedParams[ind]))
++ {
++ //Check the original first and last parameters of guide curve
++ //for equality to found parameter <param>:
++ //check equality of tangent to guide curve and
++ //normal to plane built on 3 points:
++ //point on guide curve and points on restrictions of adjacent
++ //surfaces.
++ gp_Pnt Pnt0;
++ gp_Vec Dir0;
++ HGuide->D1(SavedParams[ind], Pnt0, Dir0);
++ Standard_Real Length = Dir0.Magnitude();
++ if (Length <= gp::Resolution())
++ continue;
++ Dir0 /= Length;
++ gce_MakePln PlaneBuilder(Pnt0, Pnt1, Pnt2);
++ if (!PlaneBuilder.IsDone())
++ continue;
++ gp_Pln thePlane = PlaneBuilder.Value();
++ gp_Dir DirPlane = thePlane.Axis().Direction();
++ gp_Vec theProd = Dir0 ^ DirPlane;
++ Standard_Real ProdMod = theProd.Magnitude();
++ if (ProdMod <= TolProd)
++ SameDirs[ind] = Standard_True;
++ }
++ }
++ Standard_Real theParam = Precision::Infinite();
++ //Choose the closest parameter
++ if (SameDirs[0] && SameDirs[1])
++ theParam = (Abs(param - SavedParams[0]) < Abs(param - SavedParams[1]))?
++ SavedParams[0] : SavedParams[1];
++ else if (SameDirs[0])
++ theParam = SavedParams[0];
++ else if (SameDirs[1])
++ theParam = SavedParams[1];
++
++ if (!Precision::IsInfinite(theParam))
++ param = theParam;
++ }
+ }
+ else if (recad1) {
+ // sol sur 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/BRepBlend_Walking.hxx OCCT-6.8.0_SRC-patch/inc/BRepBlend_Walking.hxx
+--- OCCT-6.8.0_SRC/inc/BRepBlend_Walking.hxx 2014-11-11 17:53:30.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/BRepBlend_Walking.hxx 2015-01-16 14:33:41.000000000 +0300
+@@ -22,6 +22,7 @@
+ #include <Handle_Adaptor2d_HCurve2d.hxx>
+ #include <Handle_Adaptor3d_HCurve.hxx>
+ #include <Standard_Integer.hxx>
++#include <Handle_ChFiDS_HElSpine.hxx>
+ #include <TopAbs_State.hxx>
+ #include <Blend_Status.hxx>
+ class BRepBlend_Line;
+@@ -41,6 +42,7 @@
+ class Blend_Point;
+ class Blend_Function;
+ class Blend_FuncInv;
++class ChFiDS_HElSpine;
+ class gp_Pnt2d;
+ class IntSurf_Transition;
+
+@@ -59,7 +61,7 @@
+
+ Standard_EXPORT void AddSingularPoint (const Blend_Point& P) ;
+
+- Standard_EXPORT void Perform (Blend_Function& F, Blend_FuncInv& FInv, const Standard_Real Pdep, const Standard_Real Pmax, const Standard_Real MaxStep, const Standard_Real TolGuide, const math_Vector& Soldep, const Standard_Real Tolesp, const Standard_Real Fleche, const Standard_Boolean Appro = Standard_False) ;
++ Standard_EXPORT void Perform (Blend_Function& F, Blend_FuncInv& FInv, const Handle(ChFiDS_HElSpine)& HGuide, const Standard_Real Pdep, const Standard_Real Pmax, const Standard_Real MaxStep, const Standard_Real TolGuide, const math_Vector& Soldep, const Standard_Real Tolesp, const Standard_Real Fleche, const Standard_Boolean Appro = Standard_False) ;
+
+ Standard_EXPORT Standard_Boolean PerformFirstSection (Blend_Function& F, const Standard_Real Pdep, math_Vector& ParDep, const Standard_Real Tolesp, const Standard_Real TolGuide, TopAbs_State& Pos1, TopAbs_State& Pos2) ;
+
+@@ -99,7 +101,7 @@
+ private:
+
+
+- Standard_EXPORT void InternalPerform (Blend_Function& F, Blend_FuncInv& FInv, const Standard_Real Bound) ;
++ Standard_EXPORT void InternalPerform (Blend_Function& F, Blend_FuncInv& FInv, const Handle(ChFiDS_HElSpine)& HGuide, const Standard_Real Bound) ;
+
+ Standard_EXPORT Standard_Integer ArcToRecadre (const Standard_Boolean OnFirst, const math_Vector& Sol, const Standard_Integer PrevIndex, gp_Pnt2d& lpt2d, gp_Pnt2d& pt2d, Standard_Real& ponarc) ;
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/ChFiDS_ElSpine.hxx OCCT-6.8.0_SRC-patch/inc/ChFiDS_ElSpine.hxx
+--- OCCT-6.8.0_SRC/inc/ChFiDS_ElSpine.hxx 2014-11-11 17:53:46.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/ChFiDS_ElSpine.hxx 2015-01-16 14:33:58.000000000 +0300
+@@ -56,6 +56,10 @@
+
+ Standard_EXPORT virtual Standard_Real LastParameter() const;
+
++ Standard_EXPORT Standard_Real GetSavedFirstParameter() const;
++
++ Standard_EXPORT Standard_Real GetSavedLastParameter() const;
++
+ Standard_EXPORT GeomAbs_Shape Continuity() const;
+
+ Standard_EXPORT Standard_Integer NbIntervals (const GeomAbs_Shape S) ;
+@@ -91,6 +95,10 @@
+
+ Standard_EXPORT void LastParameter (const Standard_Real P) ;
+
++ Standard_EXPORT void SaveFirstParameter() ;
++
++ Standard_EXPORT void SaveLastParameter() ;
++
+ Standard_EXPORT void SetOrigin (const Standard_Real O) ;
+
+ Standard_EXPORT void FirstPointAndTgt (gp_Pnt& P, gp_Vec& T) const;
+@@ -149,6 +157,8 @@
+ Standard_Real plast;
+ Standard_Real period;
+ Standard_Boolean periodic;
++ Standard_Real pfirstsav;
++ Standard_Real plastsav;
+
+
+ };
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Graphic3d_GraphicDriver.hxx OCCT-6.8.0_SRC-patch/inc/Graphic3d_GraphicDriver.hxx
+--- OCCT-6.8.0_SRC/inc/Graphic3d_GraphicDriver.hxx 2014-11-11 17:54:46.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/Graphic3d_GraphicDriver.hxx 2015-01-16 14:34:57.000000000 +0300
+@@ -130,9 +130,6 @@
+ //! call_togl_setvisualisation
+ Standard_EXPORT virtual void SetVisualisation (const Graphic3d_CView& ACView) = 0;
+
+- //! call_togl_transparency
+- Standard_EXPORT virtual void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag) = 0;
+-
+ //! call_togl_view
+ Standard_EXPORT virtual Standard_Boolean View (Graphic3d_CView& ACView) = 0;
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntPatch_ImpImpIntersection_4.gxx OCCT-6.8.0_SRC-patch/inc/IntPatch_ImpImpIntersection_4.gxx
+--- OCCT-6.8.0_SRC/inc/IntPatch_ImpImpIntersection_4.gxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/IntPatch_ImpImpIntersection_4.gxx 2015-01-16 13:01:24.000000000 +0300
+@@ -1151,6 +1151,7 @@
+ const Standard_Real theUlSurf1,
+ const Standard_Real thePeriodOfSurf1,
+ const Handle(IntSurf_LineOn2S)& theLine,
++ const Standard_Real theTol3D,
+ const Standard_Real theTol2D,
+ const Standard_Boolean theFlForce)
+ {
+@@ -1177,6 +1178,32 @@
+ thePntOnSurf2.X(), thePntOnSurf2.Y());
+ }
+
++ const Standard_Integer aNbPnts = theLine->NbPoints();
++ if(aNbPnts > 0)
++ {
++ Standard_Real aUl = 0.0, aVl = 0.0;
++ const IntSurf_PntOn2S aPlast = theLine->Value(aNbPnts);
++ if(isTheReverse)
++ aPlast.ParametersOnS2(aUl, aVl);
++ else
++ aPlast.ParametersOnS1(aUl, aVl);
++
++ if(anUpar <= aUl)
++ {//Parameter value will be always increased.
++ return Standard_False;
++ }
++
++ //theTol2D is minimal step along parameter changed.
++ //Therefore, if we apply this minimal step two
++ //neighbour points will be always "same". Consequently,
++ //we should reduce tolerance for IsSame checking.
++ const Standard_Real aDTol = 1.0-Epsilon(1.0);
++ if(aPnt.IsSame(aPlast, theTol3D*aDTol, theTol2D*aDTol))
++ {
++ theLine->RemovePoint(aNbPnts);
++ }
++ }
++
+ theLine->Add(aPnt);
+ return Standard_True;
+ }
+@@ -1191,6 +1218,7 @@
+ const stCoeffsValue& theCoeffs,
+ const Bnd_Box2d& theUVSurf1,
+ const Bnd_Box2d& theUVSurf2,
++ const Standard_Real theTol3D,
+ const Standard_Real theTol2D,
+ const Standard_Real thePeriod,
+ const Standard_Real theNulValue,
+@@ -1281,7 +1309,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(), theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1313,7 +1341,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(),theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1346,7 +1374,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(), theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1376,7 +1404,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(), theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1545,7 +1573,8 @@
+ {
+ Standard_Real &a = theU1crit[i],
+ &b = theU1crit[i-1];
+- if(Abs(a - b) < theTol2D)
++ const Standard_Real aRemain = fmod(Abs(a - b), thePeriod); // >= 0, because Abs(a - b) >= 0
++ if((Abs(a - b) < theTol2D) || (aRemain < theTol2D) || (Abs(aRemain - thePeriod) < theTol2D))
+ {
+ a = (a + b)/2.0;
+ b = Precision::Infinite();
+@@ -1817,6 +1846,7 @@
+ Standard_Boolean isAddedIntoWL1 = Standard_False, isAddedIntoWL2 = Standard_False;
+
+ Standard_Real anUf = aU1f[aCurInterval], anUl = aU1l[aCurInterval];
++ const Standard_Boolean isDeltaPeriod = IsEqual(anUl-anUf, aPeriod);
+
+ //Inscribe and sort critical points
+ InscribeAndSortArray(anU1crit, aNbCritPointsMax, anUf, anUl, theTol2D, aPeriod);
+@@ -1830,6 +1860,8 @@
+ Handle(IntPatch_WLine) aWLine2 = new IntPatch_WLine(aL2S2, Standard_False);
+
+ Standard_Integer aWL1FindStatus = 0, aWL2FindStatus = 0;
++ Standard_Boolean isAddingWL1Enabled = Standard_True,
++ isAddingWL2Enabled = Standard_True;
+
+ Standard_Real anU1 = anUf;
+
+@@ -1845,6 +1877,23 @@
+
+ while(anU1 <= anUl)
+ {
++ if(isDeltaPeriod)
++ {
++ if(IsEqual(anU1, anUl))
++ {
++ //if isAddedIntoWL* == TRUE WLine contains only one point
++ //(which was end point of previous WLine). If we will
++ //add point found on the current step WLine will contain only
++ //two points. At that both these points will be equal to the
++ //points found earlier. Therefore, new WLine will repeat
++ //already existing WLine. Consequently, it is necessary
++ //to forbid building new line in this case.
++
++ isAddingWL1Enabled = !isAddedIntoWL1;
++ isAddingWL2Enabled = !isAddedIntoWL2;
++ }
++ }
++
+ for(Standard_Integer i = 0; i < aNbCritPointsMax; i++)
+ {
+ if((anU1 - anU1crit[i])*aCriticalDelta[i] < 0.0)
+@@ -1995,123 +2044,129 @@
+ isFirst = Standard_False;
+ }
+
+- if( ((aUSurf2f-aU21) <= theTol2D) &&
+- ((aU21-aUSurf2l) <= theTol2D) &&
+- ((aVSurf1f - aV11) <= theTol2D) &&
+- ((aV11 - aVSurf1l) <= theTol2D) &&
+- ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
++ if(isAddingWL1Enabled)
+ {
+- Standard_Boolean isForce = Standard_False;
+- if(!aWL1FindStatus)
++ if( ((aUSurf2f-aU21) <= theTol2D) &&
++ ((aU21-aUSurf2l) <= theTol2D) &&
++ ((aVSurf1f - aV11) <= theTol2D) &&
++ ((aV11 - aVSurf1l) <= theTol2D) &&
++ ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+-
+- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ Standard_Boolean isForce = Standard_False;
++ if(!aWL1FindStatus)
+ {
+- isForce = Standard_True;
+- }
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU21, aV11, aV11Prev,
+- aV21, aV21Prev, isTheReverse,
+- 1.0, isForce, isFound1, isFound2);
++ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ {
++ isForce = Standard_True;
++ }
++
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU21, aV11, aV11Prev,
++ aV21, aV21Prev, isTheReverse,
++ 1.0, isForce, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- {
+- aWL1FindStatus = 1;
++ if(isFound1 || isFound2)
++ {
++ aWL1FindStatus = 1;
++ }
+ }
+- }
+
+- if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
+- {
+- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+- gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
+- aUSurf1f, aUSurf1l, aPeriod,
+- aWLine1->Curve(), theTol2D, isForce))
++ if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
+ {
+- if(!aWL1FindStatus)
++ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
++ gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
++ aUSurf1f, aUSurf1l, aPeriod,
++ aWLine1->Curve(), theTol3D, theTol2D, isForce))
+ {
+- aWL1FindStatus = 1;
++ if(!aWL1FindStatus)
++ {
++ aWL1FindStatus = 1;
++ }
+ }
+ }
+ }
+- }
+- else
+- {
+- if(aWL1FindStatus == 1)
++ else
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
++ if(aWL1FindStatus == 1)
++ {
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU21, aV11, aV11Prev,
+- aV21, aV21Prev, isTheReverse,
+- 1.0, Standard_False, isFound1, isFound2);
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU21, aV11, aV11Prev,
++ aV21, aV21Prev, isTheReverse,
++ 1.0, Standard_False, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- aWL1FindStatus = 2; //start a new line
++ if(isFound1 || isFound2)
++ aWL1FindStatus = 2; //start a new line
++ }
+ }
+ }
+-
+- if( ((aUSurf2f-aU22) <= theTol2D) &&
+- ((aU22-aUSurf2l) <= theTol2D) &&
+- ((aVSurf1f - aV12) <= theTol2D) &&
+- ((aV12 - aVSurf1l) <= theTol2D) &&
+- ((aVSurf2f - aV22) <= theTol2D) &&
+- ((aV22 - aVSurf2l) <= theTol2D))
++
++ if(isAddingWL2Enabled)
+ {
+- Standard_Boolean isForce = Standard_False;
+-
+- if(!aWL2FindStatus)
++ if( ((aUSurf2f-aU22) <= theTol2D) &&
++ ((aU22-aUSurf2l) <= theTol2D) &&
++ ((aVSurf1f - aV12) <= theTol2D) &&
++ ((aV12 - aVSurf1l) <= theTol2D) &&
++ ((aVSurf2f - aV22) <= theTol2D) &&
++ ((aV22 - aVSurf2l) <= theTol2D))
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
++ Standard_Boolean isForce = Standard_False;
+
+- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ if(!aWL2FindStatus)
+ {
+- isForce = Standard_True;
+- }
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU22, aV12, aV12Prev,
+- aV22, aV22Prev, isTheReverse,
+- -1.0, isForce, isFound1, isFound2);
++ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ {
++ isForce = Standard_True;
++ }
++
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU22, aV12, aV12Prev,
++ aV22, aV22Prev, isTheReverse,
++ -1.0, isForce, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- {
+- aWL2FindStatus = 1;
++ if(isFound1 || isFound2)
++ {
++ aWL2FindStatus = 1;
++ }
+ }
+- }
+
+- if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
+- {
+- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+- gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
+- aUSurf1f, aUSurf1l, aPeriod,
+- aWLine2->Curve(), theTol2D, isForce))
++ if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
+ {
+- if(!aWL2FindStatus)
++ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
++ gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
++ aUSurf1f, aUSurf1l, aPeriod,
++ aWLine2->Curve(), theTol3D, theTol2D, isForce))
+ {
+- aWL2FindStatus = 1;
++ if(!aWL2FindStatus)
++ {
++ aWL2FindStatus = 1;
++ }
+ }
+ }
+ }
+- }
+- else
+- {
+- if(aWL2FindStatus == 1)
++ else
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
++ if(aWL2FindStatus == 1)
++ {
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU22, aV12, aV12Prev,
+- aV22, aV22Prev, isTheReverse,
+- -1.0, Standard_False, isFound1, isFound2);
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU22, aV12, aV12Prev,
++ aV22, aV22Prev, isTheReverse,
++ -1.0, Standard_False, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- aWL2FindStatus = 2; //start a new line
++ if(isFound1 || isFound2)
++ aWL2FindStatus = 2; //start a new line
++ }
+ }
+ }
+
+@@ -2237,15 +2292,29 @@
+ }
+ else if(aWLine1->NbPnts() > 1)
+ {
+- isTheEmpty = Standard_False;
+- isAddedIntoWL1 = Standard_True;
++ Standard_Boolean isGood = Standard_True;
++
++ if(aWLine1->NbPnts() == 2)
++ {
++ const IntSurf_PntOn2S& aPf = aWLine1->Point(1);
++ const IntSurf_PntOn2S& aPl = aWLine1->Point(2);
+
+- SeekAdditionalPoints(theQuad1, theQuad2, aWLine1->Curve(),
+- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
+- theTol2D, aPeriod, 1.0, isTheReverse);
++ if(aPf.IsSame(aPl, Precision::Confusion()))
++ isGood = Standard_False;
++ }
+
+- aWLine1->ComputeVertexParameters(theTol3D);
+- theSlin.Append(aWLine1);
++ if(isGood)
++ {
++ isTheEmpty = Standard_False;
++ isAddedIntoWL1 = Standard_True;
++
++ SeekAdditionalPoints( theQuad1, theQuad2, aWLine1->Curve(),
++ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
++ theTol2D, aPeriod, 1.0, isTheReverse);
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++ theSlin.Append(aWLine1);
++ }
+ }
+ else
+ {
+@@ -2267,15 +2336,28 @@
+ }
+ else if(aWLine2->NbPnts() > 1)
+ {
+- isTheEmpty = Standard_False;
+- isAddedIntoWL2 = Standard_True;
++ Standard_Boolean isGood = Standard_True;
++ if(aWLine2->NbPnts() == 2)
++ {
++ const IntSurf_PntOn2S& aPf = aWLine2->Point(1);
++ const IntSurf_PntOn2S& aPl = aWLine2->Point(2);
++
++ if(aPf.IsSame(aPl, Precision::Confusion()))
++ isGood = Standard_False;
++ }
+
+- SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
+- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
+- theTol2D, aPeriod, -1.0, isTheReverse);
++ if(isGood)
++ {
++ isTheEmpty = Standard_False;
++ isAddedIntoWL2 = Standard_True;
+
+- aWLine2->ComputeVertexParameters(theTol3D);
+- theSlin.Append(aWLine2);
++ SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
++ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
++ theTol2D, aPeriod, -1.0, isTheReverse);
++
++ aWLine2->ComputeVertexParameters(theTol3D);
++ theSlin.Append(aWLine2);
++ }
+ }
+ else
+ {
+@@ -2284,6 +2366,203 @@
+ }
+ }
+
++ if(theSlin.Length() > 0)
++ {
++ for(Standard_Integer aNumOfLine = 2; aNumOfLine <= theSlin.Length(); aNumOfLine++)
++ {
++ const Handle(IntPatch_WLine)& aWLine = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine));
++
++ const IntSurf_PntOn2S& aPntFWL = aWLine->Point(1);
++
++ Standard_Real aU1 = 0.0, aU2 = 0.0, aV1 = 0.0, aV2 = 0.0;
++ aPntFWL.Parameters(aU1, aV1, aU2, aV2);
++
++ if( IsEqual(aU1, 0.0) || IsEqual(aU1, aPeriod))
++ {
++ theSlin.Exchange(1, aNumOfLine);
++ break;
++ }
++ }
++
++ for(Standard_Integer aNumOfLine1 = 1; aNumOfLine1 <= theSlin.Length(); aNumOfLine1++)
++ {
++ const Handle(IntPatch_WLine)& aWLine1 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine1));
++
++ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
++ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
++ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
++
++ for(Standard_Integer aNPt = 1; aNPt <= theSPnt.Length(); aNPt++)
++ {
++ const IntSurf_PntOn2S aPntCur = theSPnt.Value(aNPt).PntOn2S();
++
++ if( aPntCur.IsSame(aPntFWL1, Precision::Confusion()) ||
++ aPntCur.IsSame(aPntLWL1, Precision::Confusion()))
++ {
++ theSPnt.Remove(aNPt);
++ aNPt--;
++ }
++ }
++
++ Standard_Boolean hasBeenRemoved = Standard_False;
++ for(Standard_Integer aNumOfLine2 = aNumOfLine1 + 1; aNumOfLine2 <= theSlin.Length(); aNumOfLine2++)
++ {
++ const Handle(IntPatch_WLine)& aWLine2 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine2));
++
++ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
++ const Standard_Integer aNbPntsWL2 = aWLine2->NbPnts();
++
++ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
++ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
++
++ const IntSurf_PntOn2S& aPntFWL2 = aWLine2->Point(1);
++ const IntSurf_PntOn2S& aPntLWL2 = aWLine2->Point(aNbPntsWL2);
++
++ if(aPntFWL1.IsSame(aPntFWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->InsertBefore(1, aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++
++ if(aPntFWL1.IsSame(aPntLWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->InsertBefore(1, aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++
++ if(aPntLWL1.IsSame(aPntFWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->Add(aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++
++ if(aPntLWL1.IsSame(aPntLWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->Add(aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++ }
++
++ if(hasBeenRemoved)
++ aNumOfLine1--;
++
++ //aWLine1->ComputeVertexParameters(theTol3D);
++ }
++ }//if(theSlin.Length() > 0)
++
++
+ return Standard_True;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntPatch_WLine.hxx OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.hxx
+--- OCCT-6.8.0_SRC/inc/IntPatch_WLine.hxx 2014-11-11 17:54:07.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.hxx 2015-01-16 14:34:19.000000000 +0300
+@@ -138,6 +138,12 @@
+
+ Standard_EXPORT const Handle(Adaptor2d_HCurve2d)& GetArcOnS2() const;
+
++ Standard_EXPORT void ClearVertexes() ;
++
++ Standard_EXPORT void RemoveVertex (const Standard_Integer theIndex) ;
++
++ Standard_EXPORT void InsertVertexBefore (const Standard_Integer theIndex, const IntPatch_Point& thePnt) ;
++
+ Standard_EXPORT void Dump() const;
+
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntPatch_WLine.lxx OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.lxx
+--- OCCT-6.8.0_SRC/inc/IntPatch_WLine.lxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.lxx 2015-01-16 12:59:50.000000000 +0300
+@@ -97,3 +97,27 @@
+ {
+ return svtx(Index);
+ }
++
++inline void IntPatch_WLine::ClearVertexes()
++{
++ svtx.Clear();
++}
++
++inline void IntPatch_WLine::RemoveVertex(const Standard_Integer theIndex)
++{
++ if((theIndex < 1) || (theIndex > NbVertex()))
++ Standard_OutOfRange::Raise("Cannot delete not existing vertex");
++ svtx.Remove(theIndex);
++}
++
++inline void IntPatch_WLine::InsertVertexBefore( const Standard_Integer theIndex,
++ const IntPatch_Point& thePnt)
++{
++ const Standard_Integer aNbVertexes = NbVertex();
++ Standard_Integer anIndex = Max(theIndex, 1);
++
++ if(anIndex > aNbVertexes)
++ svtx.Append(thePnt);
++ else
++ svtx.InsertBefore(theIndex, thePnt);
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntSurf_PntOn2S.hxx OCCT-6.8.0_SRC-patch/inc/IntSurf_PntOn2S.hxx
+--- OCCT-6.8.0_SRC/inc/IntSurf_PntOn2S.hxx 2014-11-11 17:54:10.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/IntSurf_PntOn2S.hxx 2015-01-16 14:34:22.000000000 +0300
+@@ -60,6 +60,11 @@
+
+ //! Returns the parameters of the point on both surfaces.
+ void Parameters (Standard_Real& U1, Standard_Real& V1, Standard_Real& U2, Standard_Real& V2) const;
++
++ //! Returns TRUE if 2D- and 3D-coordinates of theOterPoint are equal to
++ //! corresponding coordinates of me (with given tolerance).
++ //! If theTol2D == 0.0 we will compare 3D-points only.
++ Standard_EXPORT Standard_Boolean IsSame (const IntSurf_PntOn2S& theOterPoint, const Standard_Real theTol3D = 0.0, const Standard_Real theTol2D = 0.0) const;
+
+
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/OpenGl_GraphicDriver.hxx OCCT-6.8.0_SRC-patch/inc/OpenGl_GraphicDriver.hxx
+--- OCCT-6.8.0_SRC/inc/OpenGl_GraphicDriver.hxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/OpenGl_GraphicDriver.hxx 2015-01-16 13:01:24.000000000 +0300
+@@ -167,7 +167,6 @@
+ Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
+ Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
+ Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
+- Standard_EXPORT void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
+ Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
+ Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
+ Standard_EXPORT void ZBufferTriedronSetup (const Quantity_NameOfColor XColor = Quantity_NOC_RED, const Quantity_NameOfColor YColor = Quantity_NOC_GREEN, const Quantity_NameOfColor ZColor = Quantity_NOC_BLUE1, const Standard_Real SizeRatio = 0.8, const Standard_Real AxisDiametr = 0.05, const Standard_Integer NbFacettes = 12);
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/OpenGl_Workspace.hxx OCCT-6.8.0_SRC-patch/inc/OpenGl_Workspace.hxx
+--- OCCT-6.8.0_SRC/inc/OpenGl_Workspace.hxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/OpenGl_Workspace.hxx 2015-01-16 13:01:24.000000000 +0300
+@@ -184,7 +184,6 @@
+ Image_PixMap& theImage,
+ const Graphic3d_BufferType& theBufferType);
+
+- void UseTransparency (const Standard_Boolean theFlag);
+ Standard_Boolean& UseZBuffer() { return myUseZBuffer; }
+ Standard_Boolean& UseDepthTest() { return myUseDepthTest; }
+ Standard_Boolean& UseGLLight() { return myUseGLLight; }
+@@ -671,7 +670,6 @@
+ Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
+ Standard_Boolean myBackBufferRestored;
+ Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
+- Standard_Boolean myUseTransparency;
+ Standard_Boolean myUseZBuffer;
+ Standard_Boolean myUseDepthTest;
+ Standard_Boolean myUseGLLight;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/ShapeFix_Shape.hxx OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.hxx
+--- OCCT-6.8.0_SRC/inc/ShapeFix_Shape.hxx 2014-11-11 17:54:25.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.hxx 2015-01-16 14:34:37.000000000 +0300
+@@ -116,6 +116,10 @@
+ //! Returns (modifiable) the mode for applying
+ //! ShapeFix::FixVertexPosition before all fixes, by default False.
+ Standard_Integer& FixVertexPositionMode() ;
++
++ //! Returns (modifiable) the mode for fixing tolerances of vertices on whole shape
++ //! after performing all fixes
++ Standard_Integer& FixVertexTolMode() ;
+
+
+
+@@ -139,6 +143,7 @@
+ Standard_Integer myFixWireMode;
+ Standard_Integer myFixSameParameterMode;
+ Standard_Integer myFixVertexPositionMode;
++ Standard_Integer myFixVertexTolMode;
+ Standard_Integer myStatus;
+
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/ShapeFix_Shape.lxx OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.lxx
+--- OCCT-6.8.0_SRC/inc/ShapeFix_Shape.lxx 2014-11-11 17:47:05.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.lxx 2015-01-16 13:00:03.000000000 +0300
+@@ -122,3 +122,13 @@
+ {
+ return myFixVertexPositionMode;
+ }
++
++//=======================================================================
++//function : FixVertexTolMode
++//purpose :
++//=======================================================================
++
++inline Standard_Integer& ShapeFix_Shape::FixVertexTolMode()
++{
++ return myFixVertexTolMode;
++}
+\ No newline at end of file
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/V3d_View.hxx OCCT-6.8.0_SRC-patch/inc/V3d_View.hxx
+--- OCCT-6.8.0_SRC/inc/V3d_View.hxx 2014-11-11 17:54:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/V3d_View.hxx 2015-01-16 14:35:09.000000000 +0300
+@@ -308,9 +308,6 @@
+ //! Returns TRUE when the light is active in this view.
+ Standard_EXPORT Standard_Boolean IsActiveLight (const Handle(V3d_Light)& aLight) const;
+
+- //! Activate/Deactivate the transparency in this view.
+- Standard_EXPORT void SetTransparency (const Standard_Boolean AnActivity = Standard_False) ;
+-
+ //! sets the immediate update mode and returns the previous one.
+ Standard_EXPORT Standard_Boolean SetImmediateUpdate (const Standard_Boolean theImmediateUpdate) ;
+
+@@ -704,9 +701,6 @@
+
+ Standard_EXPORT Handle(Graphic3d_TextureEnv) TextureEnv() const;
+
+- //! Returns the transparency activity.
+- Standard_EXPORT Standard_Boolean Transparency() const;
+-
+ //! Returns the current visualisation mode.
+ Standard_EXPORT V3d_TypeOfVisualization Visualization() const;
+
+@@ -1075,7 +1069,6 @@
+ TColStd_Array2OfReal MyTrsf;
+ Handle(Graphic3d_Structure) MyGridEchoStructure;
+ Handle(Graphic3d_Group) MyGridEchoGroup;
+- Standard_Boolean MyTransparencyFlag;
+ Graphic3d_Vector myXscreenAxis;
+ Graphic3d_Vector myYscreenAxis;
+ Graphic3d_Vector myZscreenAxis;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Visual3d_View.hxx OCCT-6.8.0_SRC-patch/inc/Visual3d_View.hxx
+--- OCCT-6.8.0_SRC/inc/Visual3d_View.hxx 2014-11-11 17:54:59.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/Visual3d_View.hxx 2015-01-16 14:35:10.000000000 +0300
+@@ -478,11 +478,6 @@
+ //! Warning: Works only under Windows.
+ Standard_EXPORT Standard_Boolean Print (const Aspect_Handle hPrnDC, const Standard_Boolean showBackground, const Standard_CString filename, const Aspect_PrintAlgo printAlgorithm = Aspect_PA_STRETCH, const Standard_Real theScaleFactor = 1.0) const;
+
+- //! if <AFlag> is Standard_True then the transparency
+- //! is managed in the view <me>.
+- //! Default Standard_False
+- Standard_EXPORT void SetTransparency (const Standard_Boolean AFlag) ;
+-
+ //! Returns Standard_True if the ZBuffer is activated
+ //! in the view <me> and Standard_False if not.
+ Standard_EXPORT Standard_Boolean ZBufferIsActivated() const;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Visual3d_ViewManager.hxx OCCT-6.8.0_SRC-patch/inc/Visual3d_ViewManager.hxx
+--- OCCT-6.8.0_SRC/inc/Visual3d_ViewManager.hxx 2014-11-11 17:54:59.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/inc/Visual3d_ViewManager.hxx 2015-01-16 14:35:10.000000000 +0300
+@@ -200,16 +200,6 @@
+ //! if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
+ Standard_EXPORT void ReCompute (const Handle(Graphic3d_Structure)& AStructure, const Handle(Graphic3d_DataStructureManager)& AProjector) ;
+
+- //! Returns Standard_True if the transparency
+- //! is activated in all activated views.
+- //! Default Standard_False
+- Standard_EXPORT Standard_Boolean Transparency() const;
+-
+- //! if <AFlag> is Standard_True then the transparency
+- //! is managed.
+- //! Default Standard_False
+- Standard_EXPORT void SetTransparency (const Standard_Boolean AFlag) ;
+-
+ //! Returns Standard_True if the zbuffer activity
+ //! is managed automatically.
+ //! Default Standard_False
+@@ -251,7 +241,6 @@
+ Aspect_GenId MyViewGenId;
+ Handle(Graphic3d_GraphicDriver) MyGraphicDriver;
+ Standard_Boolean MyZBufferAuto;
+- Standard_Boolean MyTransparency;
+ TColStd_MapOfInteger myLayerIds;
+ TColStd_SequenceOfInteger myLayerSeq;
+ Visual3d_MapOfZLayerSettings myMapOfZLayerSettings;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/samples/qt/VoxelDemo/src/Viewer.cpp OCCT-6.8.0_SRC-patch/samples/qt/VoxelDemo/src/Viewer.cpp
+--- OCCT-6.8.0_SRC/samples/qt/VoxelDemo/src/Viewer.cpp 2014-11-11 17:46:38.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/samples/qt/VoxelDemo/src/Viewer.cpp 2015-01-16 12:59:32.000000000 +0300
+@@ -51,7 +51,6 @@
+
+ myView->MustBeResized();
+ myView->SetSurfaceDetail(V3d_TEX_NONE);
+- myView->SetTransparency(Standard_True);
+ myView->SetSize(10000.0);
+ myView->SetZSize(10000.0);
+ myView->SetViewMappingDefault();
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cdl OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cdl
+--- OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cdl 2014-11-11 17:46:38.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cdl 2015-01-16 13:01:23.000000000 +0300
+@@ -268,15 +268,6 @@
+ -- inWhichLocal gives the local context in which anIObj
+ -- is displayed. By default, the index -1 refers to the last
+ -- Local Context opened.
+-
+- Clear(me : mutable;
+- aniobj : InteractiveObject from AIS;
+- updateviewer : Boolean from Standard = Standard_True);
+----Purpose: Removes the interactive object aniobj from all viewers.
+--- If a local context is open and if updateviewer equals
+--- Standard_False, the presentation of the Interactive
+--- Object activates the selection mode; the object is
+--- displayed but no viewer will be updated.
+
+ ClearPrs( me :mutable;
+ aniobj : InteractiveObject from AIS;
+@@ -2046,6 +2037,16 @@
+ PurgeViewer(me:mutable;Vwr:Viewer from V3d)
+ returns Integer from Standard is static private;
+
++ redisplayPrsModes (me : mutable;
++ theIObj : InteractiveObject from AIS;
++ theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
++ ---Purpose: UNKNOWN
++
++ redisplayPrsRecModes (me : mutable;
++ theIObj : InteractiveObject from AIS;
++ theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
++ ---Purpose: UNKNOWN
++
+ fields
+
+ myObjects : DataMapOfIOStatus from AIS;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cxx OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cxx
+--- OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cxx 2014-11-11 17:46:38.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cxx 2015-01-16 13:01:23.000000000 +0300
+@@ -16,27 +16,6 @@
+
+ // Modified by XAB & Serguei Dec 97 (angle &deviation coeffts)
+
+-#define BUC60577 //GG_101099 Enable to compute correctly
+-// transparency with more than one object in the view.
+-
+-#define BUC60632 //GG 15/03/00 Add protection on SetDisplayMode()
+-// method, compute only authorized presentation.
+-
+-#define BUC60688 //GG 25/05/00 Add SetSensitivity() methods.
+-
+-#define BUC60722 //GG 04/09/00 Always enable viewer update when erasing something
+-
+-#define IMP051001 //GG Adds SetZDetected() and ZDetected() methods
+-
+-#define OCC172 //SAV clear static map before destroying context.
+-
+-#define OCC204 //SAV 26/02/02 : pass <updateviewer> flag to
+-// AddOrRemoveCurrentObject method from ClearGlobal.
+-
+-#define OCC4373 //SAN 10/11/03 : improve display mode management in
+-// Display( IO, updateviewer ) and
+-// SetDisplayMode( IO, mode, updateviewer ) methods
+-
+ #include <AIS_InteractiveContext.ixx>
+
+ //#include <AIS_DataMapIteratorOfDataMapOfInteractiveInteger.hxx>
+@@ -71,28 +50,6 @@
+
+ #include <AIS_ListIteratorOfListOfInteractive.hxx>
+
+-// In the method GetDefModes() the returned value of the selection mode
+-// is always equal to 0 if it is -1.
+-#define BUC61051
+-
+-// The local context is closed the method ::ResetOriginalState() sets the selection mode equal to 0
+-// in spite of the selection mode of the interactive object in Natural Point.
+-#define OCC166
+-
+-static Standard_Boolean AISDebugModeOn()
+-{
+-// static OSD_Environment aisdb("AISDEBUGMODE");
+-// return !aisdb.Value().IsEmpty();
+- static Standard_Integer isDebugMode(-1);
+- if (isDebugMode < 0) {
+- isDebugMode = 1;
+- OSD_Environment aisdb("AISDEBUGMODE");
+- if (aisdb.Value().IsEmpty())
+- isDebugMode = 0;
+- }
+- return (isDebugMode != 0);
+-}
+-
+ namespace
+ {
+ static volatile Standard_Integer THE_AIS_INDEX_SEL = 0;
+@@ -109,7 +66,7 @@
+ return TCollection_AsciiString ("AIS_CurContext_")
+ + TCollection_AsciiString (Standard_Atomic_Increment (&THE_AIS_INDEX_CUR));
+ }
+-};
++}
+
+ //=======================================================================
+ //function : AIS_InteractiveContext
+@@ -131,9 +88,7 @@
+ mySubIntensity(Quantity_NOC_GRAY40),
+ myDisplayMode(0),
+ myCurLocalIndex(0),
+-#ifdef IMP051001
+ myZDetectionFlag(0),
+-#endif
+ myIsAutoActivateSelMode( Standard_True )
+ {
+ InitAttributes();
+@@ -141,31 +96,30 @@
+
+ void AIS_InteractiveContext::Delete() const
+ {
+- //Clear the static current selection. Else the memory
+- //is not release
++ // clear the static current selection
+ AIS_Selection::ClearCurrentSelection();
+-#ifdef OCC172
++
+ // to avoid an exception
+- if ( AIS_Selection::Find( mySelectionName.ToCString() ) )
+- AIS_Selection::Remove( mySelectionName.ToCString() );
++ if (AIS_Selection::Find (mySelectionName.ToCString()))
++ {
++ AIS_Selection::Remove (mySelectionName.ToCString());
++ }
+
+ // to avoid an exception
+- if ( AIS_Selection::Find( myCurrentName.ToCString() ) )
+- AIS_Selection::Remove( myCurrentName.ToCString() );
++ if (AIS_Selection::Find (myCurrentName.ToCString()))
++ {
++ AIS_Selection::Remove (myCurrentName.ToCString());
++ }
+
+ // let's remove one reference explicitly. this operation's supposed to
+ // be performed when mgrSelector will be destroyed but anyway...
+- mgrSelector->Remove( myMainSel );
+-#endif
+- AIS_ListOfInteractive aList;
+-
+- AIS_DataMapIteratorOfDataMapOfIOStatus anIt(myObjects);
++ mgrSelector->Remove (myMainSel);
++
+ Handle(AIS_InteractiveContext) aNullContext;
+- for(; anIt.More() ; anIt.Next())
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
+ {
+- Handle(AIS_InteractiveObject) anObj = anIt.Key();
+- anObj->SetContext(aNullContext);
+-
++ Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
++ anObj->SetContext (aNullContext);
+ }
+ MMgt_TShared::Delete();
+ }
+@@ -209,494 +163,466 @@
+
+ //=======================================================================
+ //function : DisplayedObjects
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::DisplayedObjects(AIS_ListOfInteractive& aListOfIO,
+- const Standard_Boolean OnlyFromNeutral) const
++void AIS_InteractiveContext::DisplayedObjects (AIS_ListOfInteractive& theListOfIO,
++ const Standard_Boolean theOnlyFromNeutral) const
+ {
+-#ifdef OCCT_DEBUG
+- cout<<"AIS_IC::DisplayedObjects"<<endl;
+-#endif
+-
+- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
+- if(!HasOpenedContext() || OnlyFromNeutral){
+- for(;It.More();It.Next()){
+- if(It.Value()->GraphicStatus()==AIS_DS_Displayed)
+- aListOfIO.Append(It.Key());
+- }
+- }
+- else{
+- TColStd_MapOfTransient theMap;
+- // neutral point
+- for(;It.More();It.Next()){
+- if(It.Value()->GraphicStatus()==AIS_DS_Displayed)
+- theMap.Add(It.Key());
+- }
+-
+- //parse all local contexts...
+-#ifdef OCCT_DEBUG
+- cout<<"\tFrom Neutral Point : "<<theMap.Extent()<<endl;
+- Standard_Integer NbDisp;
+- for(AIS_DataMapIteratorOfDataMapOfILC it1(myLocalContexts);it1.More();it1.Next()){
+- const Handle(AIS_LocalContext)& LC = it1.Value();
+- NbDisp = LC->DisplayedObjects(theMap);
+- cout<<"\tIn Local Context "<<it1.Key()<<" : "<<NbDisp<<endl;
+- }
+-#endif
+- Handle(AIS_InteractiveObject) curIO;
+- Handle(Standard_Transient) Tr;
+- for(TColStd_MapIteratorOfMapOfTransient it2(theMap);it2.More();it2.Next()){
+- Tr = it2.Key();
+- curIO = *((Handle(AIS_InteractiveObject)*) &Tr);
+- aListOfIO.Append(curIO);
++ if (!HasOpenedContext()
++ || theOnlyFromNeutral)
++ {
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ if (anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed)
++ {
++ theListOfIO.Append (anObjIter.Key());
+ }
+ }
++ return;
++ }
++
++ // neutral point
++ TColStd_MapOfTransient aDispMap;
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ if (anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed)
++ {
++ aDispMap.Add (anObjIter.Key());
++ }
++ }
++
++ // parse all local contexts...
++ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
++ {
++ const Handle(AIS_LocalContext)& aLocCtx = aCtxIter.Value();
++ aLocCtx->DisplayedObjects (aDispMap);
++ }
++
++ Handle(AIS_InteractiveObject) anObj;
++ for (TColStd_MapIteratorOfMapOfTransient aDispMapIter (aDispMap); aDispMapIter.More(); aDispMapIter.Next())
++ {
++ const Handle(Standard_Transient)& aTransient = aDispMapIter.Key();
++ anObj = *((Handle(AIS_InteractiveObject)* )&aTransient);
++ theListOfIO.Append (anObj);
++ }
+ }
++
+ //=======================================================================
+ //function : DisplayedObjects
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::DisplayedObjects(const AIS_KindOfInteractive TheKind,
+- const Standard_Integer TheSign,
+- AIS_ListOfInteractive& aListOfIO,
+- const Standard_Boolean /*OnlyFromNeutral*/) const
++void AIS_InteractiveContext::DisplayedObjects (const AIS_KindOfInteractive theKind,
++ const Standard_Integer theSign,
++ AIS_ListOfInteractive& theListOfIO,
++ const Standard_Boolean /*OnlyFromNeutral*/) const
+ {
+- ObjectsByDisplayStatus( TheKind, TheSign, AIS_DS_Displayed, aListOfIO );
++ ObjectsByDisplayStatus (theKind, theSign, AIS_DS_Displayed, theListOfIO);
+ }
+
+ //=======================================================================
+ //function : ErasedObjects
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::ErasedObjects(AIS_ListOfInteractive& theListOfIO) const
++void AIS_InteractiveContext::ErasedObjects (AIS_ListOfInteractive& theListOfIO) const
+ {
+- ObjectsByDisplayStatus( AIS_DS_Erased, theListOfIO );
++ ObjectsByDisplayStatus (AIS_DS_Erased, theListOfIO);
+ }
+
+ //=======================================================================
+ //function : ErasedObjects
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::ErasedObjects(const AIS_KindOfInteractive TheKind,
+- const Standard_Integer TheSign,
+- AIS_ListOfInteractive& theListOfIO) const
++void AIS_InteractiveContext::ErasedObjects (const AIS_KindOfInteractive theKind,
++ const Standard_Integer theSign,
++ AIS_ListOfInteractive& theListOfIO) const
+ {
+- ObjectsByDisplayStatus( TheKind, TheSign, AIS_DS_Erased, theListOfIO );
++ ObjectsByDisplayStatus (theKind, theSign, AIS_DS_Erased, theListOfIO);
+ }
+
+ //=======================================================================
+ //function : ObjectsByDisplayStatus
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::ObjectsByDisplayStatus(const AIS_DisplayStatus theStatus,
+- AIS_ListOfInteractive& theListOfIO) const
++void AIS_InteractiveContext::ObjectsByDisplayStatus (const AIS_DisplayStatus theStatus,
++ AIS_ListOfInteractive& theListOfIO) const
+ {
+- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
+- for(;It.More();It.Next()){
+- if(It.Value()->GraphicStatus() == theStatus)
+- theListOfIO.Append(It.Key());
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ if (anObjIter.Value()->GraphicStatus() == theStatus)
++ {
++ theListOfIO.Append (anObjIter.Key());
++ }
+ }
+ }
+
+ //=======================================================================
+ //function : ObjectsByDisplayStatus
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::ObjectsByDisplayStatus (const AIS_KindOfInteractive theKind,
++ const Standard_Integer theSign,
++ const AIS_DisplayStatus theStatus,
++ AIS_ListOfInteractive& theListOfIO) const
++{
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ if (anObjIter.Value()->GraphicStatus() != theStatus
++ || anObjIter.Key()->Type() != theKind)
++ {
++ continue;
++ }
+
+-void AIS_InteractiveContext::ObjectsByDisplayStatus(const AIS_KindOfInteractive TheKind,
+- const Standard_Integer TheSign,
+- const AIS_DisplayStatus theStatus,
+- AIS_ListOfInteractive& theListOfIO) const
+-{
+- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
+- for(;It.More();It.Next()){
+- if(It.Value()->GraphicStatus()==theStatus){
+- if(It.Key()->Type()==TheKind){
+- if(TheSign ==-1)
+- theListOfIO.Append(It.Key());
+- else{
+- if(It.Key()->Signature()==TheSign)
+- theListOfIO.Append(It.Key());
+- }
+- }
++ if (theSign == -1
++ || anObjIter.Key()->Signature() == theSign)
++ {
++ theListOfIO.Append (anObjIter.Key());
+ }
+ }
+ }
+
+ //=======================================================================
+ //function : ObjectsInside
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::ObjectsInside (AIS_ListOfInteractive& theListOfIO,
++ const AIS_KindOfInteractive theKind,
++ const Standard_Integer theSign) const
++{
++ if (theKind == AIS_KOI_None
++ && theSign == -1)
++ {
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ theListOfIO.Append (anObjIter.Key());
++ }
++ return;
++ }
+
+-void AIS_InteractiveContext::ObjectsInside(AIS_ListOfInteractive& aListOfIO,
+- const AIS_KindOfInteractive TheKind,
+- const Standard_Integer TheSign) const
+-{
+- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
+- if(TheKind==AIS_KOI_None && TheSign ==-1){
+- for(;It.More();It.Next()){
+- aListOfIO.Append(It.Key());
+- }
+- }
+- else{
+- for(;It.More();It.Next()){
+- if(It.Key()->Type()==TheKind){
+- if(TheSign ==-1)
+- aListOfIO.Append(It.Key());
+- else{
+- if(It.Key()->Signature()==TheSign)
+- aListOfIO.Append(It.Key());
+- }
+- }
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ if (anObjIter.Key()->Type() != theKind)
++ {
++ continue;
++ }
++
++ if (theSign == -1
++ || anObjIter.Key()->Signature() == theSign)
++ {
++ theListOfIO.Append (anObjIter.Key());
+ }
+ }
+ }
+
+ //=======================================================================
+ //function : Display
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::Display (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++
++ Standard_Integer aDispMode = 0, aHiMod = -1, aSelMode = -1;
++ GetDefModes (theIObj, aDispMode, aHiMod, aSelMode);
+
+-void AIS_InteractiveContext::Display(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer )
++ Display (theIObj, aDispMode, myIsAutoActivateSelMode ? aSelMode : -1,
++ theToUpdateViewer, theIObj->AcceptShapeDecomposition());
++}
++
++//=======================================================================
++//function : Display
++//purpose :
++//=======================================================================
++void AIS_InteractiveContext::Display (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer theDispMode,
++ const Standard_Integer theSelectionMode,
++ const Standard_Boolean theToUpdateViewer,
++ const Standard_Boolean theToAllowDecomposition)
+ {
+- if(anIObj.IsNull()) return;
+-
+- Standard_Integer DispMode,HiMod,SelMode;
+-
+- GetDefModes(anIObj,DispMode,HiMod,SelMode);
+-
+- Handle (AIS_InteractiveContext) aThis = this;
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(aThis);
+-
+- //NO LOCAL CONTEXT OPEN
+- if(!HasOpenedContext()) {
+-#ifndef OCC4373
+- // SAN : Do not return here. Perform advanced display mode analysis a bit later...
+- if(IsDisplayed(anIObj)) return;
+-#endif
+-
+- // it did not yet exist
+- if(!myObjects.IsBound(anIObj)){
+-
+- Handle(AIS_GlobalStatus) STATUS=
+-#ifdef OCC166
+- new AIS_GlobalStatus(AIS_DS_Displayed,DispMode,SelMode);
+-#else
+- new AIS_GlobalStatus(AIS_DS_Displayed,DispMode,0);
+-#endif
+- myObjects.Bind (anIObj,STATUS);
+- myMainPM->Display(anIObj,DispMode);
+- if( myIsAutoActivateSelMode )
+- {
+- if(!mgrSelector->Contains(anIObj))
+- mgrSelector->Load(anIObj);
+- mgrSelector->Activate(anIObj,SelMode,myMainSel);
+- }
+-
+- if(updateviewer) myMainVwr->Update();
+- }
+- // it is somewhere else...
+- else {
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+- // ENDCLE
+- if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
+- {
+- // SAN : erase presentations for all display modes different from <DispMode>;
+- // then make sure <DispMode> is displayed and maybe highlighted;
+- // Finally, activate selection mode <SelMode> if not yet activated.
+- TColStd_ListOfInteger aModesToRemove;
+- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
+- for(;ItL.More();ItL.Next()){
+-
+- Standard_Integer OldMode = ItL.Value();
+-
+- if(OldMode!=DispMode){
+- aModesToRemove.Append(OldMode);
+- if(myMainPM->IsHighlighted(anIObj,OldMode))
+- myMainPM->Unhighlight(anIObj,OldMode);
+- myMainPM->Erase(anIObj,OldMode);
+- }
+- }
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- for(ItL.Initialize(aModesToRemove);ItL.More();ItL.Next())
+- STATUS->RemoveDisplayMode(ItL.Value());
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+- if(!STATUS->IsDModeIn(DispMode))
+- STATUS->AddDisplayMode(DispMode);
++ if (HasOpenedContext())
++ {
++ myLocalContexts (myCurLocalIndex)->Display (theIObj, theDispMode, theToAllowDecomposition, theSelectionMode);
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
++ return;
++ }
+
+- myMainPM->Display(anIObj,DispMode);
+- if (STATUS->GraphicStatus() == AIS_DS_Erased)
+- {
+- STATUS->SetGraphicStatus(AIS_DS_Displayed);
+- }
+- if(STATUS->IsHilighted()){
+- myMainPM->Highlight(anIObj,HiMod);
+- }
+- if( myIsAutoActivateSelMode )
+- {
+- if(!mgrSelector->Contains(anIObj))
+- mgrSelector->Load(anIObj);
+- if(!mgrSelector->IsActivated(anIObj,SelMode))
+- mgrSelector->Activate(anIObj,SelMode,myMainSel);
+- }
++ if (!myObjects.IsBound (theIObj))
++ {
++ Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
++ myObjects.Bind (theIObj, aStatus);
++ myMainPM->Display(theIObj, theDispMode);
++ if (theSelectionMode != -1)
++ {
++ if (!mgrSelector->Contains (theIObj))
++ {
++ mgrSelector->Load (theIObj);
+ }
+- }
+-
+- if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
+- myMainVwr->Viewer()->SetTransparency(Standard_True);
+- if(updateviewer) myMainVwr->Update();
++ mgrSelector->Activate (theIObj, theSelectionMode, myMainSel);
++ }
+ }
+-
+- // LOCAL CONTEXT OPEN
+ else
+ {
+- myLocalContexts(myCurLocalIndex)->Display(anIObj,DispMode,anIObj->AcceptShapeDecomposition(),SelMode);
+-
+- if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
+- myMainVwr->Viewer()->SetTransparency(Standard_True);
+-
+-
+- if(updateviewer) myMainVwr->Update();
+- }
+-}
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ if (aStatus->GraphicStatus() != AIS_DS_Displayed
++ && aStatus->GraphicStatus() != AIS_DS_Erased)
++ {
++ return;
++ }
+
+-//=======================================================================
+-//function : Display
+-//purpose :
+-//=======================================================================
++ // Erase presentations for all display modes different from aDispMode.
++ // Then make sure aDispMode is displayed and maybe highlighted.
++ // Finally, activate selection mode <SelMode> if not yet activated.
++ TColStd_ListOfInteger aModesToRemove;
++ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
++ {
++ const Standard_Integer anOldMode = aDispModeIter.Value();
++ if (anOldMode != theDispMode)
++ {
++ aModesToRemove.Append (anOldMode);
++ if(myMainPM->IsHighlighted (theIObj, anOldMode))
++ {
++ myMainPM->Unhighlight (theIObj, anOldMode);
++ }
++ myMainPM->Erase (theIObj, anOldMode);
++ }
++ }
+
+-void AIS_InteractiveContext::Display(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer aDisplayMode,
+- const Standard_Integer aSelectionMode,
+- const Standard_Boolean updateviewer,
+- const Standard_Boolean allowdecomposition)
+-{
+- if(anIObj.IsNull()) return;
++ for (TColStd_ListIteratorOfListOfInteger aRemModeIter (aModesToRemove); aRemModeIter.More(); aRemModeIter.Next())
++ {
++ aStatus->RemoveDisplayMode (aRemModeIter.Value());
++ }
+
+- if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
+-
+- // if no local context...
+- if(!HasOpenedContext()) {
+- // if(!anIObj->HasDisplayMode())
+- // anIObj->SetDisplayMode(aDisplayMode);
+-
+- if(!myObjects.IsBound(anIObj)){
+- Handle(AIS_GlobalStatus) STATUS=
+- new AIS_GlobalStatus(AIS_DS_Displayed,aDisplayMode,aSelectionMode);
+- myObjects.Bind (anIObj,STATUS);
+- myMainPM->Display(anIObj,aDisplayMode);
+- if(aSelectionMode!=-1){
+- if(!mgrSelector->Contains(anIObj))
+- mgrSelector->Load(anIObj,aSelectionMode);
+- mgrSelector->Activate(anIObj,aSelectionMode,myMainSel);
+- }
+- if(updateviewer) myMainVwr->Update();
++ if (!aStatus->IsDModeIn (theDispMode))
++ {
++ aStatus->AddDisplayMode (theDispMode);
++ }
++
++ myMainPM->Display (theIObj, theDispMode);
++ if (aStatus->GraphicStatus() == AIS_DS_Erased)
++ {
++ aStatus->SetGraphicStatus (AIS_DS_Displayed);
++ }
++ if (aStatus->IsHilighted())
++ {
++ const Standard_Integer aHiMod = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
++ myMainPM->Highlight (theIObj, aHiMod);
+ }
+- // anIObj->SelectionMode(aSelectionMode);
+- else{
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+- // ENDCLE
+- if(!STATUS->IsDModeIn(aDisplayMode)){
+- myMainPM->Display(anIObj,aDisplayMode);
+- STATUS->AddDisplayMode(aDisplayMode);
+- if(STATUS->IsSubIntensityOn())
+- myMainPM->Color(anIObj,mySubIntensity,aDisplayMode);
++ if (theSelectionMode != -1)
++ {
++ if (!mgrSelector->Contains (theIObj))
++ {
++ mgrSelector->Load (theIObj);
+ }
+- if(aSelectionMode!=-1){
+- STATUS->AddSelectionMode(aSelectionMode);
+- mgrSelector->Activate(anIObj,aSelectionMode,myMainSel);
++ if (!mgrSelector->IsActivated (theIObj, theSelectionMode))
++ {
++ mgrSelector->Activate (theIObj, theSelectionMode, myMainSel);
+ }
+- if(updateviewer) myMainVwr->Update();
+-
+ }
+ }
+- else
+- {
+- myLocalContexts(myCurLocalIndex)->Display(anIObj,aDisplayMode,allowdecomposition,aSelectionMode);
+- if(updateviewer) myMainVwr->Update();
+- }
+-}
+
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
++}
+
+ //=======================================================================
+ //function : Load
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::Load(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer SelMode,
+- const Standard_Boolean AllowDecomposition)
++void AIS_InteractiveContext::Load (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer theSelMode,
++ const Standard_Boolean theToAllowDecomposition)
+ {
+- if(anIObj.IsNull()) return;
+- if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
+-
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- if(!HasOpenedContext()) {
+- if(SelMode==-1 && !AllowDecomposition){
+- Standard_Integer DispMode,HiMod,SelModeDef;
+-
+- GetDefModes(anIObj,DispMode,HiMod,SelModeDef);
+- Handle(AIS_GlobalStatus) STATUS=
+- new AIS_GlobalStatus(AIS_DS_Erased,DispMode,SelModeDef);
+- myObjects.Bind (anIObj,STATUS);
+- return;
+- }
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
++
++ if (HasOpenedContext())
++ {
++ myLocalContexts (myCurLocalIndex)->Load (theIObj, theToAllowDecomposition, theSelMode);
++ return;
+ }
+- myLocalContexts(myCurLocalIndex)->Load(anIObj,AllowDecomposition,SelMode);
+-}
+
++ if (theSelMode == -1
++ && !theToAllowDecomposition
++ && !myObjects.IsBound (theIObj))
++ {
++ Standard_Integer aDispMode, aHiMod, aSelModeDef;
++ GetDefModes (theIObj, aDispMode, aHiMod, aSelModeDef);
++ Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Erased, aDispMode, aSelModeDef);
++ myObjects.Bind (theIObj, aStatus);
++ }
++}
+
+ //=======================================================================
+ //function : Erase
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::Erase(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::Erase (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return;
+-
+- if ( !anIObj->IsAutoHilight() )
+- anIObj->ClearSelected();
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- if(!HasOpenedContext()){
+- EraseGlobal(anIObj,updateviewer);
++ if (!theIObj->IsAutoHilight())
++ {
++ theIObj->ClearSelected();
+ }
+- else
++
++ Standard_Boolean wasInCtx = Standard_False;
++ if (HasOpenedContext())
++ {
++ // First it is checked if it is possible to remove in the current local context
++ // then one tries to remove in other local contexts, if they allow it...
++ wasInCtx = myLocalContexts (myCurLocalIndex)->Erase (theIObj);
++ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
+ {
+- // First it is checked if it is possible to remove in the current local context
+- // then one tries to remove in other local contexts, if they allow it...
+-
+- Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->Erase(anIObj);
+-// if(!WasInCtx) {
+- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
+- for (;It.More();It.Next()){
+- if(It.Value()->AcceptErase())
+-#ifdef BUC60722
+- WasInCtx |= It.Value()->Erase(anIObj);
+-#else
+- WasInCtx = It.Value()->Erase(anIObj);
+-#endif
++ if (aCtxIter.Value()->AcceptErase())
++ {
++ wasInCtx = aCtxIter.Value()->Erase (theIObj) || wasInCtx;
+ }
+-
+- if(!WasInCtx)
+- EraseGlobal(anIObj,updateviewer);
+- else
+- if(updateviewer) myMainVwr->Update();
+ }
++ }
++
++ if (!wasInCtx)
++ {
++ EraseGlobal (theIObj, Standard_False);
++ }
++
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
+ }
+
+ //=======================================================================
+ //function : EraseAll
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::EraseAll(const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::EraseAll (const Standard_Boolean theToUpdateViewer)
+ {
+- if(!HasOpenedContext())
++ if (HasOpenedContext())
+ {
+- for (AIS_DataMapIteratorOfDataMapOfIOStatus ItM(myObjects); ItM.More(); ItM.Next())
+- {
+- if(ItM.Value()->GraphicStatus() == AIS_DS_Displayed)
+- Erase(ItM.Key(),Standard_False);
+- }
+- if(updateviewer)
++ return;
++ }
++
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ if (anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed)
+ {
+- myMainVwr->Update();
++ Erase (anObjIter.Key(), Standard_False);
+ }
+ }
++
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
+ }
+
+ //=======================================================================
+ //function : DisplayAll
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::DisplayAll(const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::DisplayAll (const Standard_Boolean theToUpdateViewer)
+ {
+- if(!HasOpenedContext()){
+-
+- AIS_DisplayStatus aStatus;
++ if (HasOpenedContext())
++ {
++ return;
++ }
+
+- if (!HasOpenedContext())
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ const AIS_DisplayStatus aStatus = anObjIter.Value()->GraphicStatus();
++ if (aStatus == AIS_DS_Erased)
+ {
+- for (AIS_DataMapIteratorOfDataMapOfIOStatus ItM (myObjects); ItM.More(); ItM.Next())
+- {
+- aStatus = ItM.Value()->GraphicStatus();
+- if (aStatus == AIS_DS_Erased)
+- Display(ItM.Key(),Standard_False);
+- }
+- if(updateviewer)
+- {
+- myMainVwr->Update();
+- }
++ Display (anObjIter.Key(), Standard_False);
+ }
+ }
+-
++
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
+ }
+
+ //=======================================================================
+ //function : DisplaySelected
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::DisplaySelected(const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::DisplaySelected (const Standard_Boolean theToUpdateViewer)
+ {
+-
+- if (!HasOpenedContext())
++ if (HasOpenedContext())
+ {
+- Standard_Boolean found = Standard_False;
+- Handle(AIS_Selection) sel = AIS_Selection::Selection(myCurrentName.ToCString());
+- Handle(AIS_InteractiveObject) iObj;
+- for (sel->Init(); sel->More(); sel->Next())
+- {
+- iObj = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
+- Display(iObj,Standard_False);
+- found = Standard_True;
+- }
+- if (found && updateviewer)
+- {
+- myMainVwr->Update();
+- }
++ return;
++ }
++
++ Standard_Boolean isFound = Standard_False;
++ Handle(AIS_Selection) aSelIter = AIS_Selection::Selection (myCurrentName.ToCString());
++ for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
++ {
++ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
++ Display (anObj, Standard_False);
++ isFound = Standard_True;
+ }
+-}
+
++ if (isFound && theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
++}
+
+ //=======================================================================
+ //function : EraseSelected
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::EraseSelected(const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::EraseSelected (const Standard_Boolean theToUpdateViewer)
+ {
+- if (!HasOpenedContext())
++ if (HasOpenedContext())
+ {
+- Standard_Boolean found = Standard_False;
+- Handle(AIS_Selection) sel = AIS_Selection::Selection(myCurrentName.ToCString());
+- Handle(AIS_InteractiveObject) iObj;
+- for (sel->Init();sel->More();sel->Next())
+- {
+- iObj = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
+- Erase(iObj,Standard_False);
+- found = Standard_True;
+- }
+- if(found && updateviewer)
+- {
+- myMainVwr->Update();
+- }
++ return;
++ }
++
++ Standard_Boolean isFound = Standard_False;
++ Handle(AIS_Selection) aSelIter = AIS_Selection::Selection(myCurrentName.ToCString());
++ for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
++ {
++ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
++ Erase (anObj, Standard_False);
++ isFound = Standard_True;
++ }
++
++ if (isFound && theToUpdateViewer)
++ {
++ myMainVwr->Update();
+ }
+ }
++
+ //=======================================================================
+ //function :
+ //purpose :
+@@ -761,187 +687,163 @@
+ return Standard_True;
+ }
+
+-
+ //=======================================================================
+-//purpose :
++//function : DisplayStatus
++//purpose :
+ //=======================================================================
+-
+-AIS_DisplayStatus AIS_InteractiveContext::DisplayStatus(const Handle(AIS_InteractiveObject)& anIObj) const
++AIS_DisplayStatus AIS_InteractiveContext::DisplayStatus (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- if(anIObj.IsNull()) return AIS_DS_None;
+-
+- if(myObjects.IsBound(anIObj))
+- return myObjects(anIObj)->GraphicStatus();
++ if (theIObj.IsNull())
++ {
++ return AIS_DS_None;
++ }
++ else if (myObjects.IsBound (theIObj))
++ {
++ return myObjects (theIObj)->GraphicStatus();
++ }
+
+- AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
+- for(;ItM.More();ItM.Next()){
+- if(ItM.Value()->IsIn(anIObj))
++ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
++ {
++ if (aCtxIter.Value()->IsIn (theIObj))
++ {
+ return AIS_DS_Temporary;
++ }
+ }
+-
+ return AIS_DS_None;
+-
+ }
+
+-
+-
+-
+ //=======================================================================
+ //function : DisplayedModes
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-const TColStd_ListOfInteger& AIS_InteractiveContext::
+-DisplayedModes(const Handle(AIS_InteractiveObject)& anIObj) const
++const TColStd_ListOfInteger& AIS_InteractiveContext::DisplayedModes (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- return myObjects(anIObj)->DisplayedModes();
++ return myObjects (theIObj)->DisplayedModes();
+ }
+
+-
+ //=======================================================================
+ //function : Remove
+-//purpose :
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::Remove(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::Remove (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+-
+- if(anIObj.IsNull()) return;
+-
+- if(!HasOpenedContext()){
+- ClearGlobal(anIObj,updateviewer);
++ if (theIObj.IsNull())
++ {
++ return;
+ }
+- else
++
++ if (HasOpenedContext())
++ {
++ myLocalContexts (myCurLocalIndex)->Remove (theIObj);
++ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
+ {
+- myLocalContexts(myCurLocalIndex)->Remove(anIObj);
+- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
+- for (;It.More() ;It.Next()){
+- if(It.Value()->AcceptErase())
+- It.Value()->Remove(anIObj);
+-
++ if (aCtxIter.Value()->AcceptErase())
++ {
++ aCtxIter.Value()->Remove (theIObj);
+ }
+- // if(!WasInCtx)
+- ClearGlobal(anIObj,updateviewer);
+-// else
+-// if(updateviewer) myMainVwr->Update();
+ }
++ }
++
++ ClearGlobal (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : RemoveAll
+-//purpose :
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::RemoveAll(const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::RemoveAll (const Standard_Boolean theToUpdateViewer)
+ {
+ AIS_ListOfInteractive aList;
+- ObjectsInside(aList);
+- AIS_ListIteratorOfListOfInteractive aListIterator;
+- for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
+- Remove(aListIterator.Value(), Standard_False);
++ ObjectsInside (aList);
++ for (AIS_ListIteratorOfListOfInteractive aListIterator (aList); aListIterator.More(); aListIterator.Next())
++ {
++ Remove (aListIterator.Value(), Standard_False);
+ }
+-
+- if(updateviewer)
+- myMainVwr->Update();
+-}
+-
+-//=======================================================================
+-//function : Clear
+-//purpose :
+-//=======================================================================
+-
+-void AIS_InteractiveContext::Clear(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
+-{
+- if(anIObj.IsNull()) return;
+
+- if(!HasOpenedContext()){
+- ClearGlobal(anIObj,updateviewer);
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
+ }
+- else
+- {
+-
+- Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->Remove(anIObj);
+- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
+- for (;It.More() ;It.Next()){
+- if(It.Value()->AcceptErase())
+- WasInCtx = It.Value()->Remove(anIObj);
+-
+- }
+- if(!WasInCtx)
+- ClearGlobal(anIObj,updateviewer);
+- else
+- if(updateviewer) myMainVwr->Update();
+- }
+ }
+
+-
+-
+-
+ //=======================================================================
+ //function : ClearPrs
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::ClearPrs(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer aMode,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::ClearPrs (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer theMode,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return;
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- if(!HasOpenedContext()){
+- ClearGlobalPrs(anIObj,aMode,updateviewer);
++ if (!HasOpenedContext())
++ {
++ ClearGlobalPrs (theIObj, theMode, theToUpdateViewer);
++ return;
+ }
+- else
++
++ Standard_Boolean wasInCtx = myLocalContexts (myCurLocalIndex)->ClearPrs (theIObj, theMode);
++ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
++ {
++ if (aCtxIter.Value()->AcceptErase())
+ {
+- Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->ClearPrs(anIObj,aMode);
+- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
+- for (;It.More() ;It.Next()){
+- if(It.Value()->AcceptErase())
+- WasInCtx = It.Value()->ClearPrs(anIObj,aMode);
+- }
+- if(!WasInCtx)
+- ClearGlobalPrs(anIObj,aMode,updateviewer);
+- else
+- if(updateviewer) myMainVwr->Update();
+-
++ wasInCtx = aCtxIter.Value()->ClearPrs (theIObj, theMode) || wasInCtx;
+ }
++ }
++ if (!wasInCtx)
++ {
++ ClearGlobalPrs (theIObj, theMode, theToUpdateViewer);
++ }
++ else if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
+ }
+
+ //=======================================================================
+ //function : Hilight
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::Hilight(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::Hilight (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return;
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+ if (!HasOpenedContext())
+ {
+- if(!myObjects.IsBound(anIObj)) return;
+-
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- // const TColStd_ListOfInteger& LL = STATUS->DisplayedModes();
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+-
+- // ENDCLE
+- STATUS->SetHilightStatus (Standard_True);
++ if (!myObjects.IsBound (theIObj))
++ {
++ return;
++ }
+
+- if (STATUS->GraphicStatus() == AIS_DS_Displayed)
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ aStatus->SetHilightStatus (Standard_True);
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
+ {
+- Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
+- myMainPM->Highlight (anIObj, aHilightMode);
++ Standard_Integer aHilightMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
++ myMainPM->Highlight (theIObj, aHilightMode);
+ }
+ }
+ else
+ {
+- myLocalContexts(myCurLocalIndex)->Hilight(anIObj);
++ myLocalContexts (myCurLocalIndex)->Hilight (theIObj);
+ }
+
+- if(updateviewer) myMainVwr->Update();
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
+ }
+ //=======================================================================
+ //function : Hilight
+@@ -1086,153 +988,165 @@
+
+ //=======================================================================
+ //function : IsDisplayed
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::
+-IsDisplayed(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer aMode) const
++Standard_Boolean AIS_InteractiveContext::IsDisplayed (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer theMode) const
+ {
+- if(anIObj.IsNull()) return Standard_False;
+- if(myObjects.IsBound(anIObj)) {
+- if(myObjects(anIObj)->GraphicStatus()==AIS_DS_Displayed &&
+- myObjects(anIObj)->IsDModeIn(aMode))
++ if (theIObj.IsNull())
++ {
++ return Standard_False;
++ }
++
++ if (myObjects.IsBound (theIObj))
++ {
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed
++ && aStatus->IsDModeIn (theMode))
++ {
+ return Standard_True;
++ }
+ }
+-
+- AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
+- for(;ItM.More();ItM.Next()){
+- if(ItM.Value()->IsDisplayed(anIObj,aMode))
++
++ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
++ {
++ if (aCtxIter.Value()->IsDisplayed (theIObj, theMode))
++ {
+ return Standard_True;
++ }
+ }
+ return Standard_False;
+ }
+
+-
+ //=======================================================================
+ //function : DisplayPriority
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Integer AIS_InteractiveContext::
+-DisplayPriority(const Handle(AIS_InteractiveObject)& anIObj) const
++Standard_Integer AIS_InteractiveContext::DisplayPriority (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- if(anIObj.IsNull()) return -1;
++ if (theIObj.IsNull())
++ {
++ return -1;
++ }
++ else if (!myObjects.IsBound (theIObj))
++ {
++ return 0;
++ }
+
+- if (myObjects.IsBound(anIObj))
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed
++ || aStatus->GraphicStatus() == AIS_DS_Erased)
+ {
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+- if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
+- {
+- Standard_Integer aDispMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
+- (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
+- return myMainPM->DisplayPriority (anIObj, aDispMode);
+- }
++ Standard_Integer aDispMode = theIObj->HasDisplayMode()
++ ? theIObj->DisplayMode()
++ : (theIObj->AcceptDisplayMode (myDisplayMode)
++ ? myDisplayMode
++ : 0);
++ return myMainPM->DisplayPriority (theIObj, aDispMode);
+ }
+ return 0;
+ }
++
+ //=======================================================================
+ //function : SetDisplayPriority
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetDisplayPriority(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer aPriority)
++void AIS_InteractiveContext::SetDisplayPriority (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer thePriority)
+ {
+- if(anIObj.IsNull())
++ if (theIObj.IsNull())
++ {
+ return;
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- if(myObjects.IsBound(anIObj))
++ }
++
++ if (!theIObj->HasInteractiveContext())
+ {
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
++ theIObj->SetContext (this);
++ }
+
+- if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
+- {
+- Standard_Integer aDisplayMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
+- (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
+- myMainPM->SetDisplayPriority (anIObj, aDisplayMode, aPriority);
++ if (myObjects.IsBound (theIObj))
++ {
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed
++ || aStatus->GraphicStatus() == AIS_DS_Erased)
++ {
++ Standard_Integer aDisplayMode = theIObj->HasDisplayMode()
++ ? theIObj->DisplayMode()
++ : (theIObj->AcceptDisplayMode (myDisplayMode)
++ ? myDisplayMode
++ : 0);
++ myMainPM->SetDisplayPriority (theIObj, aDisplayMode, thePriority);
+ }
+ }
+ else if (HasOpenedContext())
+ {
+- myLocalContexts(myCurLocalIndex)->SetDisplayPriority(anIObj,aPriority);
++ myLocalContexts (myCurLocalIndex)->SetDisplayPriority (theIObj, thePriority);
+ }
+ }
+
+ //=======================================================================
+ //function : Redisplay
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::Redisplay(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer,
+- const Standard_Boolean allmodes)
++void AIS_InteractiveContext::Redisplay (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer,
++ const Standard_Boolean theAllModes)
+ {
+- if(AISDebugModeOn()){
+- cout<<"===>AIS_InteractiveContext::Redisplay de :";
+- cout<<anIObj->DynamicType()->Name()<<endl;
+- }
+-
+- RecomputePrsOnly(anIObj,updateviewer,allmodes);
+- RecomputeSelectionOnly(anIObj);
++ RecomputePrsOnly (theIObj, theToUpdateViewer, theAllModes);
++ RecomputeSelectionOnly (theIObj);
+ }
+
+ //=======================================================================
+ //function : Redisplay
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::Redisplay(const AIS_KindOfInteractive KOI,
+- const Standard_Integer /*Sign*/,
+- const Standard_Boolean updateviewer)
+-{
+- Standard_Boolean found_viewer(Standard_False);
+- // update
+- for(AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);It.More();It.Next()){
+- // CLE
+- // const Handle(AIS_InteractiveObject)& IO = It.Key();
+- Handle(AIS_InteractiveObject) IO = It.Key();
+- // ENDCLE
+- if(IO->Type()== KOI){
+-#ifdef OCCT_DEBUG
+-// Standard_Boolean good = (Sign==-1)? Standard_True :
+-// ((IO->Signature()==Sign)? Standard_True:Standard_False);
+-#endif
+- Redisplay(IO,Standard_False);
+- if (It.Value()->GraphicStatus() == AIS_DS_Displayed)
+- {
+- found_viewer = Standard_True;
+- }
++void AIS_InteractiveContext::Redisplay (const AIS_KindOfInteractive theKOI,
++ const Standard_Integer /*theSign*/,
++ const Standard_Boolean theToUpdateViewer)
++{
++ Standard_Boolean isRedisplayed = Standard_False;
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
++ if (anObj->Type() != theKOI)
++ {
++ continue;
+ }
++
++ Redisplay (anObj, Standard_False);
++ isRedisplayed = anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed
++ || isRedisplayed;
+ }
+- // update viewer...
+- if(updateviewer && found_viewer)
++
++ if (theToUpdateViewer
++ && isRedisplayed)
+ {
+ myMainVwr->Update();
+ }
+ }
+
+-
+ //=======================================================================
+ //function : RecomputePrsOnly
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::RecomputePrsOnly(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer,
+- const Standard_Boolean allmodes)
++void AIS_InteractiveContext::RecomputePrsOnly (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer,
++ const Standard_Boolean theAllModes)
+ {
+- if(anIObj.IsNull()) return;
+- anIObj->Update(allmodes);
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- if (!updateviewer)
++ theIObj->Update (theAllModes);
++ if (!theToUpdateViewer)
+ {
+ return;
+ }
+
+- if (HasOpenedContext() ||
+- (myObjects.IsBound(anIObj) && myObjects(anIObj)->GraphicStatus() == AIS_DS_Displayed))
++ if (HasOpenedContext()
++ || (myObjects.IsBound (theIObj)
++ && myObjects (theIObj)->GraphicStatus() == AIS_DS_Displayed))
+ {
+ myMainVwr->Update();
+ }
+@@ -1276,21 +1190,19 @@
+
+ //=======================================================================
+ //function : Update
+-//purpose :
++//purpose :
+ //=======================================================================
+ void AIS_InteractiveContext::Update (const Handle(AIS_InteractiveObject)& theIObj,
+- const Standard_Boolean theUpdateViewer)
++ const Standard_Boolean theUpdateViewer)
+ {
+ if (theIObj.IsNull())
+ {
+ return;
+ }
+
+- TColStd_ListOfInteger aListOfFlaggedPrsModes;
+- theIObj->ToBeUpdated (aListOfFlaggedPrsModes);
+-
+- TColStd_ListIteratorOfListOfInteger aPrsModesIt (aListOfFlaggedPrsModes);
+- for ( ; aPrsModesIt.More(); aPrsModesIt.Next())
++ TColStd_ListOfInteger aPrsModes;
++ theIObj->ToBeUpdated (aPrsModes);
++ for (TColStd_ListIteratorOfListOfInteger aPrsModesIt (aPrsModes); aPrsModesIt.More(); aPrsModesIt.Next())
+ {
+ theIObj->Update (aPrsModesIt.Value(), Standard_False);
+ }
+@@ -1323,138 +1235,142 @@
+
+ //=======================================================================
+ //function : SetLocation
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetLocation(const Handle(AIS_InteractiveObject)& anIObj,
+- const TopLoc_Location& aLoc)
++void AIS_InteractiveContext::SetLocation (const Handle(AIS_InteractiveObject)& theIObj,
++ const TopLoc_Location& theLoc)
+ {
+- if(anIObj.IsNull()) return;
+-
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- if(anIObj->HasTransformation() && aLoc.IsIdentity()){
+- anIObj->ResetTransformation();
+- mgrSelector->Update(anIObj,Standard_False);
++ if (theIObj->HasTransformation()
++ && theLoc.IsIdentity())
++ {
++ theIObj->ResetTransformation();
++ mgrSelector->Update (theIObj, Standard_False);
++ return;
++ }
++ else if (theLoc.IsIdentity())
++ {
+ return;
+ }
+- if(aLoc.IsIdentity()) return ;
+
+ // first reset the previous location to properly clean everything...
+- if(anIObj->HasTransformation())
+- anIObj->ResetTransformation();
++ if (theIObj->HasTransformation())
++ {
++ theIObj->ResetTransformation();
++ }
+
++ theIObj->SetLocalTransformation (theLoc.Transformation());
+
+- anIObj->SetLocalTransformation (aLoc.Transformation());
+-
+- if(!HasOpenedContext())
+- mgrSelector->Update(anIObj,Standard_False);
++ if (!HasOpenedContext())
++ {
++ mgrSelector->Update (theIObj, Standard_False);
++ }
+ else
+- {
+- // CLE
+- // const Handle(StdSelect_ViewerSelector3d)& tempSel = myLocalContexts(myCurLocalIndex)->MainSelector();
+- Handle(StdSelect_ViewerSelector3d) tempSel = myLocalContexts(myCurLocalIndex)->MainSelector();
+- // ENDCLE
+- mgrSelector->Update(anIObj,tempSel,Standard_False);
+- }
++ {
++ Handle(StdSelect_ViewerSelector3d) aTempSel = myLocalContexts (myCurLocalIndex)->MainSelector();
++ mgrSelector->Update (theIObj, aTempSel, Standard_False);
++ }
+ }
++
+ //=======================================================================
+ //function : ResetLocation
+-//purpose :
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::ResetLocation(const Handle(AIS_InteractiveObject)& anIObj)
++void AIS_InteractiveContext::ResetLocation (const Handle(AIS_InteractiveObject)& theIObj)
+ {
+- if(anIObj.IsNull()) return;
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- anIObj->ResetTransformation();
+- mgrSelector->Update(anIObj,Standard_False);
++ theIObj->ResetTransformation();
++ mgrSelector->Update (theIObj, Standard_False);
+ }
+
+ //=======================================================================
+ //function : HasLocation
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::
+-HasLocation(const Handle(AIS_InteractiveObject)& anIObj) const
++Standard_Boolean AIS_InteractiveContext::HasLocation (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- if(anIObj.IsNull()) return Standard_False;
+-
+- return anIObj->HasTransformation();
++ return !theIObj.IsNull()
++ && theIObj->HasTransformation();
+ }
+
+-TopLoc_Location AIS_InteractiveContext::
+-Location(const Handle(AIS_InteractiveObject)& anIObj) const
++//=======================================================================
++//function : Location
++//purpose :
++//=======================================================================
++TopLoc_Location AIS_InteractiveContext::Location (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- return anIObj->Transformation();
++ return theIObj->Transformation();
+ }
+
+ //=======================================================================
+ //function : SetDeviationCoefficient
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetDeviationCoefficient(const Standard_Real aCoefficient)
++void AIS_InteractiveContext::SetDeviationCoefficient (const Standard_Real theCoefficient)
+ {
+- myDefaultDrawer->SetDeviationCoefficient(aCoefficient);
++ myDefaultDrawer->SetDeviationCoefficient (theCoefficient);
+ }
++
+ //=======================================================================
+ //function : SetDeviationAngle
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetDeviationAngle(const Standard_Real anAngle)
++void AIS_InteractiveContext::SetDeviationAngle (const Standard_Real theAngle)
+ {
+- myDefaultDrawer->SetDeviationCoefficient(anAngle);
++ myDefaultDrawer->SetDeviationCoefficient (theAngle);
+ }
+
+ //=======================================================================
+ //function : DeviationAngle
+ //purpose : Gets deviationAngle
+ //=======================================================================
+-
+ Standard_Real AIS_InteractiveContext::DeviationAngle() const
+ {
+- //return M_PI/180.0e0 ;
+- return myDefaultDrawer->DeviationAngle();
++ return myDefaultDrawer->DeviationAngle();
+ }
+
+ //=======================================================================
+ //function : DeviationCoefficient
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Real AIS_InteractiveContext::DeviationCoefficient() const
++Standard_Real AIS_InteractiveContext::DeviationCoefficient() const
+ {
+ return myDefaultDrawer->DeviationCoefficient();
+ }
++
+ //=======================================================================
+ //function : SetHLRDeviationCoefficient
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetHLRDeviationCoefficient(const Standard_Real aCoefficient)
++void AIS_InteractiveContext::SetHLRDeviationCoefficient (const Standard_Real theCoefficient)
+ {
+- myDefaultDrawer->SetHLRDeviationCoefficient(aCoefficient);
++ myDefaultDrawer->SetHLRDeviationCoefficient (theCoefficient);
+ }
+
+ //=======================================================================
+ //function : HLRDeviationCoefficient
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Real AIS_InteractiveContext::HLRDeviationCoefficient() const
++Standard_Real AIS_InteractiveContext::HLRDeviationCoefficient() const
+ {
+ return myDefaultDrawer->HLRDeviationCoefficient();
+ }
+
+ //=======================================================================
+ //function : SetHLRAngle
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetHLRAngle(const Standard_Real anAngle)
++void AIS_InteractiveContext::SetHLRAngle (const Standard_Real theAngle)
+ {
+- myDefaultDrawer->SetHLRAngle(anAngle);
++ myDefaultDrawer->SetHLRAngle (theAngle);
+ }
+
+ //=======================================================================
+@@ -1463,23 +1379,19 @@
+ // and set them in myHLRAngle and in myHLRDeviationCoefficient
+ // of myDefaultDrawer
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetHLRAngleAndDeviation(const Standard_Real anAngle)
++void AIS_InteractiveContext::SetHLRAngleAndDeviation (const Standard_Real theAngle)
+ {
++ Standard_Real anOutAngl, anOutDefl;
++ HLRBRep::PolyHLRAngleAndDeflection (theAngle, anOutAngl, anOutDefl);
+
+- Standard_Real OutAngl,OutDefl;
+- HLRBRep::PolyHLRAngleAndDeflection(anAngle,OutAngl,OutDefl);
+-
+- myDefaultDrawer->SetHLRAngle(OutAngl);
+- myDefaultDrawer->SetHLRDeviationCoefficient(OutDefl);
+-
++ myDefaultDrawer->SetHLRAngle (anOutAngl);
++ myDefaultDrawer->SetHLRDeviationCoefficient (anOutDefl);
+ }
+
+ //=======================================================================
+ //function : HLRAngle
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+ Standard_Real AIS_InteractiveContext::HLRAngle() const
+ {
+ return myDefaultDrawer->HLRAngle();
+@@ -1487,1348 +1399,1320 @@
+
+ //=======================================================================
+ //function : SetDisplayMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetDisplayMode(const AIS_DisplayMode aMode,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetDisplayMode (const AIS_DisplayMode theMode,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(aMode==myDisplayMode) return;
+- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
++ if (theMode == myDisplayMode)
++ {
++ return;
++ }
+
+- for(;It.More();It.Next()){
+- // CLE
+- // const Handle(AIS_InteractiveObject)& anObj = It.Key();
+- Handle(AIS_InteractiveObject) anObj = It.Key();
+- // ENDCLE
+- Standard_Boolean Processed = (anObj->IsKind(STANDARD_TYPE(AIS_Shape)) ||
+- anObj->IsKind(STANDARD_TYPE(AIS_ConnectedInteractive)) ||
+- anObj->IsKind(STANDARD_TYPE(AIS_MultipleConnectedInteractive)) );
++ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
++ {
++ Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
++ Standard_Boolean toProcess = anObj->IsKind (STANDARD_TYPE(AIS_Shape))
++ || anObj->IsKind (STANDARD_TYPE(AIS_ConnectedInteractive))
++ || anObj->IsKind (STANDARD_TYPE(AIS_MultipleConnectedInteractive));
+
+- if ((!anObj->HasDisplayMode()) && Processed)
++ if (!toProcess
++ || anObj->HasDisplayMode()
++ || !anObj->AcceptDisplayMode (theMode))
++ {
++ continue;
++ }
++
++ Handle(AIS_GlobalStatus) aStatus = anObjIter.Value();
++ if (aStatus->IsDModeIn (myDisplayMode))
++ {
++ aStatus->RemoveDisplayMode (myDisplayMode);
++ }
++
++ aStatus->AddDisplayMode (theMode);
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
++ {
++ myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
++ myMainPM->Display (anObj, theMode);
++ if (aStatus->IsSubIntensityOn())
+ {
+- if(anObj->AcceptDisplayMode(aMode)){
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = It.Value();
+- Handle(AIS_GlobalStatus) STATUS = It.Value();
+- // ENDCLE
+- if(STATUS->IsDModeIn(myDisplayMode))
+- STATUS->RemoveDisplayMode(myDisplayMode);
+-
+- STATUS->AddDisplayMode(aMode);
+-
+- if(STATUS->GraphicStatus()== AIS_DS_Displayed){
+- myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
+- myMainPM->Display(anObj, aMode);
+- if(STATUS->IsSubIntensityOn())
+- myMainPM->Color(anObj,mySubIntensity,aMode);
+- }
+- // myDisplayMode = aMode;
+- }
++ myMainPM->Color (anObj, mySubIntensity, theMode);
+ }
+-
+- }
+- myDisplayMode = aMode;
+- if(updateviewer) myMainVwr->Update();
+-}
+-
++ }
++ }
++
++ myDisplayMode = theMode;
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
++}
++
+ //=======================================================================
+ //function : SetDisplayMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetDisplayMode(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer aMode,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetDisplayMode (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer theMode,
++ const Standard_Boolean theToUpdateViewer)
+ {
+-
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- if(!HasOpenedContext()){
+-
+- if(!myObjects.IsBound(anIObj))
+- anIObj->SetDisplayMode(aMode);
+- else if( anIObj->AcceptDisplayMode(aMode) )
+- {
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+- // ENDCLE
+- // SAN : erase presentations for all display modes different from <aMode>
+- if(STATUS->GraphicStatus()==AIS_DS_Displayed){
+- TColStd_ListOfInteger aModesToRemove;
+- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
+- for(;ItL.More();ItL.Next()){
+-
+- Standard_Integer OldMode = ItL.Value();
+-
+- if(OldMode!=aMode){
+- aModesToRemove.Append(OldMode);
+- if(myMainPM->IsHighlighted(anIObj,OldMode))
+- myMainPM->Unhighlight(anIObj,OldMode);
+- myMainPM->SetVisibility (anIObj, OldMode, Standard_False);
+- }
+- }
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext(this);
++ }
++
++ if (HasOpenedContext())
++ {
++ return;
++ }
+
+- for(ItL.Initialize(aModesToRemove);ItL.More();ItL.Next())
+- STATUS->RemoveDisplayMode(ItL.Value());
++ if (!myObjects.IsBound (theIObj))
++ {
++ theIObj->SetDisplayMode (theMode);
++ return;
++ }
++ else if (!theIObj->AcceptDisplayMode (theMode))
++ {
++ return;
++ }
+
+- if(!STATUS->IsDModeIn(aMode))
+- STATUS->AddDisplayMode(aMode);
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ if (aStatus->GraphicStatus() != AIS_DS_Displayed)
++ {
++ theIObj->SetDisplayMode (theMode);
++ return;
++ }
+
+- myMainPM->Display(anIObj,aMode);
+- Standard_Integer DM,HM,SM;
+- GetDefModes(anIObj,DM,HM,SM);
+- if(STATUS->IsHilighted()){
+- myMainPM->Highlight(anIObj,HM);
+- }
+- if(STATUS->IsSubIntensityOn()){
+- myMainPM->Color(anIObj,mySubIntensity,aMode);
+- }
+- if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
+- myMainVwr->Viewer()->SetTransparency(Standard_True);
+-
+- if(updateviewer) myMainVwr->Update();
++ // erase presentations for all display modes different from <aMode>
++ TColStd_ListOfInteger aModesToRemove;
++ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
++ {
++ const Standard_Integer anOldMode = aDispModeIter.Value();
++ if (anOldMode != theMode)
++ {
++ aModesToRemove.Append (anOldMode);
++ if (myMainPM->IsHighlighted (theIObj, anOldMode))
++ {
++ myMainPM->Unhighlight (theIObj, anOldMode);
+ }
+- anIObj->SetDisplayMode(aMode);
++ myMainPM->SetVisibility (theIObj, anOldMode, Standard_False);
+ }
+ }
++
++ for (TColStd_ListIteratorOfListOfInteger aRemModeIter (aModesToRemove); aRemModeIter.More(); aRemModeIter.Next())
++ {
++ aStatus->RemoveDisplayMode (aRemModeIter.Value());
++ }
++
++ if (!aStatus->IsDModeIn (theMode))
++ {
++ aStatus->AddDisplayMode (theMode);
++ }
++
++ myMainPM->Display (theIObj, theMode);
++ Standard_Integer aDispMode, aHiMode, aSelMode;
++ GetDefModes (theIObj, aDispMode, aHiMode, aSelMode);
++ if (aStatus->IsHilighted())
++ {
++ myMainPM->Highlight (theIObj, aHiMode);
++ }
++ if (aStatus->IsSubIntensityOn())
++ {
++ myMainPM->Color (theIObj, mySubIntensity, theMode);
++ }
++
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
++ theIObj->SetDisplayMode (theMode);
+ }
+
+ //=======================================================================
+ //function : UnsetDisplayMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::
+-UnsetDisplayMode(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::UnsetDisplayMode (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+- if(!anIObj->HasDisplayMode()) return;
+-
+- if(!myObjects.IsBound(anIObj))
+- anIObj->UnsetDisplayMode();
+- else
++ if (theIObj.IsNull()
++ || !theIObj->HasDisplayMode())
++ {
++ return;
++ }
++
++ if (!myObjects.IsBound (theIObj))
++ {
++ theIObj->UnsetDisplayMode();
++ return;
++ }
++
++ const Standard_Integer anOldMode = theIObj->DisplayMode();
++ if (myDisplayMode == anOldMode)
++ {
++ return;
++ }
++
++ const Handle(AIS_GlobalStatus)& aStatus = myObjects (theIObj);
++ aStatus->RemoveDisplayMode (anOldMode);
++ if (!aStatus->IsDModeIn(myDisplayMode))
++ {
++ aStatus->AddDisplayMode (myDisplayMode);
++ }
++
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
++ {
++ if (myMainPM->IsHighlighted (theIObj, anOldMode))
+ {
+- Standard_Integer OldMode = anIObj->DisplayMode();
+- if(myDisplayMode==OldMode) return;
+- const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- STATUS->RemoveDisplayMode(OldMode);
+- if(!STATUS->IsDModeIn(myDisplayMode))
+- STATUS->AddDisplayMode(myDisplayMode);
+- if(STATUS->GraphicStatus()==AIS_DS_Displayed){
+- if(myMainPM->IsHighlighted(anIObj,OldMode))
+- myMainPM->Unhighlight(anIObj,OldMode);
+- myMainPM->SetVisibility (anIObj, OldMode, Standard_False);
+- myMainPM->Display(anIObj,myDisplayMode);
+- Standard_Integer DM,HM,SM;
+- GetDefModes(anIObj,DM,HM,SM);
+- if(STATUS->IsHilighted()){
+- myMainPM->Highlight(anIObj,HM);
+- }
+- if(STATUS->IsSubIntensityOn()){
+- myMainPM->Color(anIObj,mySubIntensity,myDisplayMode);
+- }
+- if(updateviewer) myMainVwr->Update();
+- }
+- anIObj->UnsetDisplayMode();
+-
++ myMainPM->Unhighlight (theIObj, anOldMode);
+ }
++ myMainPM->SetVisibility (theIObj, anOldMode, Standard_False);
++ myMainPM->Display (theIObj, myDisplayMode);
++
++ Standard_Integer aDispMode, aHiMode, aSelMode;
++ GetDefModes (theIObj, aDispMode, aHiMode, aSelMode);
++ if (aStatus->IsHilighted())
++ {
++ myMainPM->Highlight (theIObj, aHiMode);
++ }
++ if (aStatus->IsSubIntensityOn())
++ {
++ myMainPM->Color (theIObj, mySubIntensity, myDisplayMode);
++ }
++
++ if (theToUpdateViewer)
++ {
++ myMainVwr->Update();
++ }
++ }
++
++ theIObj->UnsetDisplayMode();
+ }
+
+ //=======================================================================
+ //function : SetCurrentFacingModel
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetCurrentFacingModel(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Aspect_TypeOfFacingModel aModel)
++void AIS_InteractiveContext::SetCurrentFacingModel (const Handle(AIS_InteractiveObject)& theIObj,
++ const Aspect_TypeOfFacingModel theModel)
+ {
+- if ( !anIObj.IsNull () )
+- anIObj->SetCurrentFacingModel(aModel);
++ if (!theIObj.IsNull())
++ {
++ theIObj->SetCurrentFacingModel (theModel);
++ }
+ }
+
+ //=======================================================================
+-//function : SetColor
+-//purpose :
++//function : redisplayPrsRecModes
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetColor(const Handle(AIS_InteractiveObject)& anIObj,
+- const Quantity_NameOfColor aColor,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::redisplayPrsRecModes (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- SetColor(anIObj,Quantity_Color(aColor),updateviewer);
++ if (theIObj->RecomputeEveryPrs())
++ {
++ theIObj->Redisplay();
++ }
++ else
++ {
++ for (TColStd_ListIteratorOfListOfInteger aModes (theIObj->ListOfRecomputeModes()); aModes.More(); aModes.Next())
++ {
++ theIObj->Update (aModes.Value(), Standard_False);
++ }
++ theIObj->SetRecomputeOk();
++ }
++
++ if (theToUpdateViewer)
++ {
++ UpdateCurrentViewer();
++ }
+ }
+
+-void AIS_InteractiveContext::SetColor(const Handle(AIS_InteractiveObject)& anIObj,
+- const Quantity_Color &aColor,
+- const Standard_Boolean updateviewer)
++//=======================================================================
++//function : redisplayPrsModes
++//purpose :
++//=======================================================================
++void AIS_InteractiveContext::redisplayPrsModes (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+-
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- anIObj->SetColor(aColor);
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
++ if (theIObj->RecomputeEveryPrs())
++ {
++ theIObj->Redisplay();
++ }
+ else
++ {
++ TColStd_ListOfInteger aModes;
++ theIObj->ToBeUpdated (aModes);
++ for (TColStd_ListIteratorOfListOfInteger aModeIter (aModes); aModeIter.More(); aModeIter.Next())
+ {
+- Standard_Integer NbDisp=0;
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+- anIObj->SetRecomputeOk();
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
++ theIObj->Update (aModeIter.Value(), Standard_False);
+ }
++ theIObj->SetRecomputeOk();
++ }
+
+-
+-#ifdef OCCT_DEBUG
+-// // pour isg
+-// if(anIObj->Type()==AIS_KOI_Datum && anIObj->Signature()==3){
+-// Handle(AIS_Trihedron) Tr = *((Handle(AIS_Trihedron)*)&anIObj);
+-// Standard_Real Lx = myDefaultDrawer->DatumAspect()->FirstAxisLength();
+-// gp_Trsf T;
+-// gp_Dir D =Tr->Component()->XDirection();
+-// gp_Pnt O = Tr->Component()->Location();
+-// gp_Vec V(D);V*=Lx/5.;
+-// T.SetRotation(gp_Ax1(O,D),M_PI/6.);
+-// T.SetTranslationPart(V);
+-// TopLoc_Location L,IncLoc(T);
+-
+-// for(Standard_Integer I=1;I<90;I++){
+-// if(anIObj->HasLocation())
+-// L = anIObj->Location() * IncLoc;
+-// else
+-// L = IncLoc;
+-// SetLocation(anIObj,L);
+-// UpdateCurrentViewer();
+-// }
+-// for(I=1;I<90;I++){
+-// L = anIObj->Location() /IncLoc;
+-// SetLocation(anIObj,L);
+-// UpdateCurrentViewer();
+-// }
+-// ResetLocation(anIObj);
+-// }
+- #endif
+- if(updateviewer) UpdateCurrentViewer();
++ if (theToUpdateViewer)
++ {
++ UpdateCurrentViewer();
++ }
+ }
+
+ //=======================================================================
+-//function : SetDeviationCoefficient
+-//purpose :
++//function : SetColor
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::SetColor (const Handle(AIS_InteractiveObject)& theIObj,
++ const Quantity_NameOfColor theColor,
++ const Standard_Boolean theToUpdateViewer)
++{
++ SetColor (theIObj, Quantity_Color(theColor), theToUpdateViewer);
++}
+
+-void AIS_InteractiveContext::SetDeviationCoefficient(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real aCoefficient,
+- const Standard_Boolean updateviewer)
++//=======================================================================
++//function : SetColor
++//purpose :
++//=======================================================================
++void AIS_InteractiveContext::SetColor (const Handle(AIS_InteractiveObject)& theIObj,
++ const Quantity_Color& theColor,
++ const Standard_Boolean theToUpdateViewer)
+ {
+-// cout<<" Coefficient:"<< aCoefficient <<endl;
+- if(anIObj.IsNull()) return ;
+-
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
+- if(anIObj->Type()!=AIS_KOI_Object && anIObj->Type()!=AIS_KOI_Shape) return;
+- if(anIObj->Signature()!=0) return;
+- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnDeviationCoefficient(aCoefficient);
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
++ theIObj->SetColor (theColor);
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
++}
+
++//=======================================================================
++//function : SetDeviationCoefficient
++//purpose :
++//=======================================================================
++void AIS_InteractiveContext::SetDeviationCoefficient (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theCoefficient,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp=0;
+- TColStd_ListOfInteger LL;
+- anIObj->ToBeUpdated(LL);
+- TColStd_ListIteratorOfListOfInteger ITI(LL);
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+- anIObj->SetRecomputeOk();
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- }
+- if(updateviewer) UpdateCurrentViewer();
++ // to be modified after the related methods of AIS_Shape are passed to InteractiveObject
++ if (theIObj->Type() != AIS_KOI_Object
++ && theIObj->Type() != AIS_KOI_Shape)
++ {
++ return;
++ }
++ else if (theIObj->Signature() != 0)
++ {
++ return;
++ }
++
++ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
++ aShape->SetOwnDeviationCoefficient (theCoefficient);
++ redisplayPrsModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : SetHLRDeviationCoefficient
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetHLRDeviationCoefficient(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real aCoefficient,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetHLRDeviationCoefficient (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theCoefficient,
++ const Standard_Boolean theToUpdateViewer)
+ {
+-// cout<<" HLRCoefficient:"<< aCoefficient <<endl;
+- if(anIObj.IsNull()) return ;
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+ // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
+- if(anIObj->Type()!=AIS_KOI_Object && anIObj->Type()!=AIS_KOI_Shape) return;
+- if(anIObj->Signature()!=0) return;
+- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnHLRDeviationCoefficient(aCoefficient);
+-
+-
+-
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp=0;
++ if (theIObj->Type() != AIS_KOI_Object
++ && theIObj->Type() != AIS_KOI_Shape)
++ {
++ return;
++ }
++ else if (theIObj->Signature() != 0)
++ {
++ return;
++ }
+
+- TColStd_ListOfInteger LL;
+- anIObj->ToBeUpdated(LL);
+- TColStd_ListIteratorOfListOfInteger ITI(LL);
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+- anIObj->SetRecomputeOk();
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- }
+- if(updateviewer) UpdateCurrentViewer();
++ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
++ aShape->SetOwnHLRDeviationCoefficient (theCoefficient);
++ redisplayPrsModes (theIObj, theToUpdateViewer);
+ }
+
+-
+ //=======================================================================
+ //function : SetDeviationAngle
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetDeviationAngle(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real anAngle,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetDeviationAngle (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theAngle,
++ const Standard_Boolean theToUpdateViewer)
+ {
+-// cout<<" Angle:"<< anAngle <<endl;
+- if(anIObj.IsNull()) return ;
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+ // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
+- if(anIObj->Type()!=AIS_KOI_Shape) return;
+- if(anIObj->Signature()!=0) return;
+- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnDeviationAngle(anAngle);
+-
++ if (theIObj->Type() != AIS_KOI_Shape)
++ {
++ return;
++ }
++ else if (theIObj->Signature() != 0)
++ {
++ return;
++ }
+
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp=0;
+- TColStd_ListOfInteger LL;
+- anIObj->ToBeUpdated(LL);
+- TColStd_ListIteratorOfListOfInteger ITI(LL);
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+- anIObj->SetRecomputeOk();
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- }
+- if(updateviewer) UpdateCurrentViewer();
++ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
++ aShape->SetOwnDeviationAngle (theAngle);
++ redisplayPrsModes (theIObj, theToUpdateViewer);
+ }
++
+ //=======================================================================
+-//function : SetDeviationAngle
+-//purpose :
++//function : SetAngleAndDeviation
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::SetAngleAndDeviation (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theAngle,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::SetAngleAndDeviation(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real anAngle,
+- const Standard_Boolean updateviewer)
+-{
+-// cout<<" Angle:"<< anAngle <<endl;
+- if(anIObj.IsNull()) return ;
+-// Standard_Real anAngleRad = M_PI*anAngle/180; test rob...
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+ // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
+- if(anIObj->Type()!=AIS_KOI_Shape) return;
+- if(anIObj->Signature()!=0) return;
+- (*((Handle(AIS_Shape)*)&anIObj))->SetAngleAndDeviation(anAngle);
++ if (theIObj->Type() != AIS_KOI_Shape)
++ {
++ return;
++ }
++ if (theIObj->Signature() != 0)
++ {
++ return;
++ }
+
++ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
++ aShape->SetAngleAndDeviation (theAngle);
+
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
++ if (theIObj->RecomputeEveryPrs())
++ {
++ theIObj->Redisplay();
++ }
+ else
+- Update(anIObj,updateviewer);
++ {
++ Update (theIObj, theToUpdateViewer);
++ }
+ }
+
+ //=======================================================================
+-//function : SetDeviationAngle
+-//purpose :
++//function : SetHLRAngleAndDeviation
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::SetHLRAngleAndDeviation (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theAngle,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::SetHLRAngleAndDeviation(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real anAngle,
+- const Standard_Boolean updateviewer)
+-{
+-// cout<<" Angle:"<< anAngle <<endl;
+-
+- if(anIObj.IsNull()) return ;
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+ // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
+- if(anIObj->Type()!=AIS_KOI_Shape) return;
+- if(anIObj->Signature()!=0) return;
+- (*((Handle(AIS_Shape)*)&anIObj))->SetHLRAngleAndDeviation(anAngle);
+-
+-
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp=0;
+-
+- TColStd_ListOfInteger LL;
+- anIObj->ToBeUpdated(LL);
+- TColStd_ListIteratorOfListOfInteger ITI(LL);
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+- anIObj->SetRecomputeOk();
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- }
+- if(updateviewer) UpdateCurrentViewer();
++ if (theIObj->Type() != AIS_KOI_Shape)
++ {
++ return;
++ }
++ if (theIObj->Signature() != 0)
++ {
++ return;
++ }
++ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
++ aShape->SetHLRAngleAndDeviation (theAngle);
++ redisplayPrsModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : SetHLRDeviationAngle
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetHLRDeviationAngle(
+- const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real anAngle,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetHLRDeviationAngle (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theAngle,
++ const Standard_Boolean theToUpdateViewer)
+ {
+-// cout<<" HLRAngle:"<< anAngle <<endl;
+- if(anIObj.IsNull()) return ;
+-
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
+- if( anIObj->Type()!=AIS_KOI_Shape) return;
+- if(anIObj->Signature()!=0) return;
+- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnHLRDeviationAngle(anAngle);
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp=0;
+- TColStd_ListOfInteger LL;
+- anIObj->ToBeUpdated(LL);
+- TColStd_ListIteratorOfListOfInteger ITI(LL);
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+- anIObj->SetRecomputeOk();
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- }
+- if(updateviewer) UpdateCurrentViewer();
++ // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
++ if (theIObj->Type() != AIS_KOI_Shape)
++ {
++ return;
++ }
++ if (theIObj->Signature() != 0)
++ {
++ return;
++ }
++ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
++ aShape->SetOwnHLRDeviationAngle (theAngle);
++ redisplayPrsModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : UnsetColor
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::UnsetColor(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::UnsetColor (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+- anIObj->UnsetColor();
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp =0;
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- anIObj->SetRecomputeOk();
+- }
+- if(updateviewer)
+- UpdateCurrentViewer();
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++
++ theIObj->UnsetColor();
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : HasColor
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::HasColor(const Handle(AIS_InteractiveObject)& anIObj) const
++Standard_Boolean AIS_InteractiveContext::HasColor (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- return anIObj->HasColor();
+-
++ return theIObj->HasColor();
+ }
+
+ //=======================================================================
+ //function : Color
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Quantity_NameOfColor AIS_InteractiveContext::Color(const Handle(AIS_InteractiveObject)& anIObj) const
++Quantity_NameOfColor AIS_InteractiveContext::Color (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- return anIObj->Color();
++ return theIObj->Color();
+ }
+
+-void AIS_InteractiveContext::Color(const Handle(AIS_InteractiveObject)& anIObj,
+- Quantity_Color &aColor) const
++//=======================================================================
++//function : Color
++//purpose :
++//=======================================================================
++void AIS_InteractiveContext::Color (const Handle(AIS_InteractiveObject)& theIObj,
++ Quantity_Color& theColor) const
+ {
+- anIObj->Color(aColor);
++ theIObj->Color (theColor);
+ }
+
+ //=======================================================================
+ //function : Width
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Real AIS_InteractiveContext::Width(const Handle(AIS_InteractiveObject)& anIObj) const
++Standard_Real AIS_InteractiveContext::Width (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- return anIObj->Width();
++ return theIObj->Width();
+ }
+
+ //=======================================================================
+ //function : SetWidth
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetWidth(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real aValue,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetWidth (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theWidth,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+-
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- anIObj->SetWidth(aValue);
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- Standard_Integer NbDisp=0;
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- NbDisp++;
+- }
+-#ifdef OCCT_DEBUG
+- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
+-#endif
+- anIObj->SetRecomputeOk();
+- }
+- if(updateviewer)
+- UpdateCurrentViewer();
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
++
++ theIObj->SetWidth (theWidth);
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : UnsetWidth
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::UnsetWidth(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::UnsetWidth (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+- anIObj->UnsetWidth();
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- }
+- anIObj->SetRecomputeOk();
+- }
+- if(updateviewer)
+- UpdateCurrentViewer();
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++
++ theIObj->UnsetWidth();
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : SetMaterial
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::SetMaterial (const Handle(AIS_InteractiveObject)& theIObj,
++ const Graphic3d_NameOfMaterial theName,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::SetMaterial(const Handle(AIS_InteractiveObject)& anIObj,
+-//POP pour K4L
+- const Graphic3d_NameOfMaterial aName,
+-// const Graphic3d_NameOfPhysicalMaterial aName,
+- const Standard_Boolean updateviewer)
+-{
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- anIObj->SetMaterial(aName);
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- }
+- anIObj->SetRecomputeOk();
+- }
+- if(updateviewer)
+- UpdateCurrentViewer();
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
+
++ theIObj->SetMaterial (theName);
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : UnsetMaterial
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::UnsetMaterial(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::UnsetMaterial (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+- anIObj->UnsetMaterial();
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- }
+- anIObj->SetRecomputeOk();
+- }
+- if(updateviewer)
+- UpdateCurrentViewer();
++ if (theIObj.IsNull())
++ {
++ return;
++ }
++ theIObj->UnsetMaterial();
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : SetTransparency
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::SetTransparency (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Real theValue,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::SetTransparency(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Real aValue,
+- const Standard_Boolean updateviewer)
+-{
+- if(anIObj.IsNull()) return ;
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+-
+-#ifdef BUC60577 //right optimization
+- if(!anIObj->IsTransparent() && aValue<=0.05) return;
+-#else
+-// if(!anIObj->IsTransparent() && aValue<=0.05) return;
+-#endif
+- if(aValue<=0.05){
+- UnsetTransparency(anIObj,updateviewer);
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
++
++ if (!theIObj->IsTransparent()
++ && theValue <= 0.05)
++ {
+ return;
+ }
+-
+- if(!myMainVwr->Viewer()->Transparency())
+- myMainVwr->Viewer()->SetTransparency(Standard_True);
+- anIObj->SetTransparency(aValue);
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- }
+- anIObj->SetRecomputeOk();
+- }
+- if(updateviewer)
+- UpdateCurrentViewer();
++
++ if (theValue <= 0.05)
++ {
++ UnsetTransparency (theIObj, theToUpdateViewer);
++ return;
++ }
++
++ theIObj->SetTransparency (theValue);
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : UnsetTransparency
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::UnsetTransparency(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::UnsetTransparency (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+- anIObj->UnsetTransparency();
+- if(anIObj->RecomputeEveryPrs())
+- anIObj->Redisplay();
+- else
+- {
+- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
+- for (;ITI.More();ITI.Next())
+- {
+- anIObj->Update(ITI.Value(),Standard_False);
+- }
+- anIObj->SetRecomputeOk();
+- }
+-
+- // To Unset transparency in the viewer, if no other object is transparent ...(Speed)
+- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
+- Standard_Boolean FoundTransp(Standard_False);
+- for(;It.More() && !FoundTransp ;It.Next()){
+- if(It.Key()->IsTransparent())
+- FoundTransp = Standard_True;
++ if (theIObj.IsNull())
++ {
++ return;
+ }
+- if(!FoundTransp)
+- myMainVwr->Viewer()->SetTransparency(Standard_False);
+-
+-
+- if(updateviewer)
+- UpdateCurrentViewer();
++
++ theIObj->UnsetTransparency();
++ redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ }
+
+-//=======================================================================
+-//function : SetSelectedAspect
+-//purpose :
+-//=======================================================================
+-void AIS_InteractiveContext::SetSelectedAspect(
+- const Handle(Prs3d_BasicAspect)& anAspect,
+- const Standard_Boolean globalChange,
+- const Standard_Boolean updateViewer)
+-{
+- if( !HasOpenedContext() ) {
+- Standard_Boolean found = Standard_False;
+- Handle(AIS_Selection) sel =
+- AIS_Selection::Selection(myCurrentName.ToCString());
+- Handle(AIS_InteractiveObject) object;
+- for( sel->Init() ; sel->More() ; sel->Next()) {
+- found = Standard_True;
+- object = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
+- object->SetAspect(anAspect,globalChange);
+- }
+- if( found && updateViewer) {
+- myMainVwr->Update();
+- }
++//=======================================================================
++//function : SetSelectedAspect
++//purpose :
++//=======================================================================
++void AIS_InteractiveContext::SetSelectedAspect (const Handle(Prs3d_BasicAspect)& theAspect,
++ const Standard_Boolean theIsGlobalChange,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (HasOpenedContext())
++ {
++ return;
++ }
++
++ Standard_Boolean isFound = Standard_False;
++ Handle(AIS_Selection) aSelIter = AIS_Selection::Selection (myCurrentName.ToCString());
++ for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
++ {
++ isFound = Standard_True;
++ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
++ anObj->SetAspect (theAspect, theIsGlobalChange);
++ }
++
++ if (isFound
++ && theToUpdateViewer)
++ {
++ myMainVwr->Update();
+ }
+ }
+
+ //=======================================================================
+ //function : SetLocalAttributes
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::SetLocalAttributes (const Handle(AIS_InteractiveObject)& theIObj,
++ const Handle(AIS_Drawer)& theDrawer,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::SetLocalAttributes(const Handle(AIS_InteractiveObject)& anIObj,
+- const Handle(AIS_Drawer)& aDrawer,
+- const Standard_Boolean updateviewer)
+-{
+- if(anIObj.IsNull()) return ;
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- anIObj->SetAttributes(aDrawer);
+- Update(anIObj,updateviewer);
+-
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
++
++ theIObj->SetAttributes (theDrawer);
++ Update (theIObj, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : UnsetLocalAttributes
+-//purpose :
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::UnsetLocalAttributes(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::UnsetLocalAttributes (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- if(anIObj.IsNull()) return ;
+- if(!anIObj->HasInteractiveContext())
+- anIObj->SetContext(this);
+- anIObj->UnsetAttributes();
+- Update(anIObj,updateviewer);
+-}
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
++ if (!theIObj->HasInteractiveContext())
++ {
++ theIObj->SetContext (this);
++ }
++ theIObj->UnsetAttributes();
++ Update (theIObj, theToUpdateViewer);
++}
+
+ //=======================================================================
+ //function : Status
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::Status(const Handle(AIS_InteractiveObject)& anIObj, TCollection_ExtendedString& astatus) const
++void AIS_InteractiveContext::Status (const Handle(AIS_InteractiveObject)& theIObj,
++ TCollection_ExtendedString& theStatus) const
+ {
+- astatus = "";
++ theStatus = "";
++ if (theIObj.IsNull()
++ || !myObjects.IsBound (theIObj))
++ {
++ return;
++ }
+
+- if(anIObj.IsNull()) return ;
+- if(myObjects.IsBound(anIObj)){
+- astatus += "\t ____________________________________________";
+- astatus += "\t| Known at Neutral Point:\n\tDisplayStatus:";
+- const Handle(AIS_GlobalStatus)& ST = myObjects(anIObj);
+- switch(ST->GraphicStatus()){
++ theStatus += "\t ____________________________________________";
++ theStatus += "\t| Known at Neutral Point:\n\tDisplayStatus:";
++ const Handle(AIS_GlobalStatus)& aStatus = myObjects (theIObj);
++ switch (aStatus->GraphicStatus())
++ {
+ case AIS_DS_Displayed:
+- {
+- astatus +="\t| -->Displayed\n";
+- break;
+- }
+- case AIS_DS_Erased:
+- {
+- astatus +="\t| -->Erased\n";
+- break;
+- }
+- default:
++ {
++ theStatus += "\t| -->Displayed\n";
+ break;
+ }
+- astatus += "\t| Active Display Modes in the MainViewer :\n";
+- TColStd_ListIteratorOfListOfInteger ItL (ST->DisplayedModes());
+- for(;ItL.More();ItL.Next()){
+- astatus += "\t|\t Mode ";
+- astatus += TCollection_AsciiString(ItL.Value());
+- astatus+="\n";
+- }
+- if(IsCurrent(anIObj)) astatus +="\t| Current\n";
+- if(IsSelected(anIObj)) astatus +="\t| Selected\n";
+-
+- astatus += "\t| Active Selection Modes in the MainViewer :\n";
+- for(ItL.Initialize(ST->SelectionModes());ItL.More();ItL.Next()){
+- astatus += "\t\t Mode ";
+- astatus += TCollection_AsciiString(ItL.Value());
+- astatus+="\n";
+- }
+- astatus += "\t ____________________________________________";
+-
++ case AIS_DS_Erased:
++ {
++ theStatus += "\t| -->Erased\n";
++ break;
+ }
+-}
++ default:
++ break;
++ }
+
++ theStatus += "\t| Active Display Modes in the MainViewer :\n";
++ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
++ {
++ theStatus += "\t|\t Mode ";
++ theStatus += TCollection_AsciiString (aDispModeIter.Value());
++ theStatus += "\n";
++ }
++ if (IsCurrent (theIObj)) theStatus +="\t| Current\n";
++ if (IsSelected(theIObj)) theStatus +="\t| Selected\n";
++
++ theStatus += "\t| Active Selection Modes in the MainViewer :\n";
++ for (TColStd_ListIteratorOfListOfInteger aSelModeIter (aStatus->SelectionModes()); aSelModeIter.More(); aSelModeIter.Next())
++ {
++ theStatus += "\t\t Mode ";
++ theStatus += TCollection_AsciiString (aSelModeIter.Value());
++ theStatus += "\n";
++ }
++ theStatus += "\t ____________________________________________";
++}
+
+ //=======================================================================
+ //function : GetDefModes
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::GetDefModes (const Handle(AIS_InteractiveObject)& theIObj,
++ Standard_Integer& theDispMode,
++ Standard_Integer& theHiMode,
++ Standard_Integer& theSelMode) const
++{
++ if (theIObj.IsNull())
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::GetDefModes(const Handle(AIS_InteractiveObject)& anIObj,
+- Standard_Integer& DispMode,
+- Standard_Integer& HiMode,
+- Standard_Integer& SelMode) const
+-{
+- if(anIObj.IsNull()) return ;
+- DispMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
+- (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
+-
+- HiMode = anIObj->HasHilightMode()? anIObj->HilightMode():DispMode;
+-#ifdef BUC61051
+- SelMode = anIObj->HasSelectionMode()? anIObj->SelectionMode() : -1;
+-#else
+- SelMode = anIObj->HasSelectionMode()? anIObj->SelectionMode() : 0;
+-#endif
++ theDispMode = theIObj->HasDisplayMode()
++ ? theIObj->DisplayMode()
++ : (theIObj->AcceptDisplayMode (myDisplayMode)
++ ? myDisplayMode
++ : 0);
++ theHiMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
++ theSelMode = theIObj->HasSelectionMode() ? theIObj->SelectionMode() : -1;
+ }
+
+-
+ //=======================================================================
+ //function : EraseGlobal
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::EraseGlobal(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateviewer)
+ {
+- if(anIObj.IsNull()) return ;
+- if(!myObjects.IsBound(anIObj)) return;
++ if (theIObj.IsNull()
++ || !myObjects.IsBound (theIObj))
++ {
++ return;
++ }
+
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+- // ENDCLE
+- Standard_Integer Dmode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
+- if(STATUS->GraphicStatus()==AIS_DS_Displayed){
+-
+- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
+- for(;ItL.More();ItL.Next()){
+- if(myMainPM->IsHighlighted(anIObj,ItL.Value()))
+- myMainPM->Unhighlight(anIObj,ItL.Value());
+- myMainPM->SetVisibility (anIObj, ItL.Value(), Standard_False);
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++
++ Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
++ {
++ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
++ {
++ if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
++ {
++ myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
++ }
++ myMainPM->SetVisibility (theIObj, aDispModeIter.Value(), Standard_False);
++ }
++
++ if (IsCurrent (theIObj)
++ && !aStatus->IsDModeIn (aDispMode))
++ {
++ myMainPM->SetVisibility (theIObj, aDispMode, Standard_False);
++ }
++
++ for (TColStd_ListIteratorOfListOfInteger aSelModeIter (aStatus->SelectionModes()); aSelModeIter.More(); aSelModeIter.Next())
++ {
++ mgrSelector->Deactivate (theIObj, aSelModeIter.Value(), myMainSel);
++ }
++
++ if (theToUpdateviewer)
++ {
++ myMainVwr->Update();
+ }
+- if(IsCurrent(anIObj) && !STATUS->IsDModeIn(Dmode))
+- myMainPM->SetVisibility (anIObj, Dmode, Standard_False);
+-
+- for(ItL.Initialize(STATUS->SelectionModes());ItL.More();ItL.Next())
+- mgrSelector->Deactivate(anIObj,ItL.Value(),myMainSel);
+- if(updateviewer) myMainVwr->Update();
+ }
+- STATUS->SetGraphicStatus(AIS_DS_Erased);
+-
++ aStatus->SetGraphicStatus (AIS_DS_Erased);
+ }
+
+ //=======================================================================
+ //function : ClearGlobal
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::ClearGlobal(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Boolean theToUpdateviewer)
+ {
+- if(anIObj.IsNull()) return ;
+- if(!myObjects.IsBound(anIObj)) return;
+- // CLE
+- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
+- // ENDCLE
+- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
+- for(;ItL.More();ItL.Next()){
+- if(STATUS->IsHilighted()){
+- if(IsCurrent(anIObj))
+-#ifdef OCC204
+- AddOrRemoveCurrentObject( anIObj, updateviewer );
+-#else
+- AddOrRemoveCurrentObject(anIObj);
+-#endif
+- else if(myMainPM->IsHighlighted(anIObj,ItL.Value()))
+- myMainPM->Unhighlight(anIObj,ItL.Value());
+- }
+- myMainPM->Erase(anIObj,ItL.Value());
+- myMainPM->Clear(anIObj,ItL.Value());
+- if(anIObj->HasHilightMode()){
+- Standard_Integer im = anIObj->HilightMode();
+- myMainPM->Unhighlight(anIObj,im);
+- myMainPM->Erase(anIObj,im);
+-
+- }
+- }
++ if (theIObj.IsNull()
++ || !myObjects.IsBound (theIObj))
++ {
++ return;
++ }
++
++ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
++ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
++ {
++ if (aStatus->IsHilighted())
++ {
++ if (IsCurrent (theIObj))
++ {
++ AddOrRemoveCurrentObject (theIObj, theToUpdateviewer);
++ }
++ else if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
++ {
++ myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
++ }
++ }
++ myMainPM->Erase (theIObj, aDispModeIter.Value());
++ myMainPM->Clear (theIObj, aDispModeIter.Value());
++ if (theIObj->HasHilightMode())
++ {
++ Standard_Integer im = theIObj->HilightMode();
++ myMainPM->Unhighlight (theIObj, im);
++ myMainPM->Erase (theIObj, im);
++ }
++ }
+
+- //Object removes from Detected sequence
+- Standard_Integer i = 1;
+- for(i = 1; i < myAISDetectedSeq.Length(); i++)
++ // Object removes from Detected sequence
++ for(Standard_Integer aDetIter = 1; aDetIter < myAISDetectedSeq.Length(); ++aDetIter)
+ {
+ Handle(AIS_InteractiveObject) anObj = DetectedCurrentObject();
+- if( !anObj.IsNull() && anObj != anIObj )
+- myAISDetectedSeq.Remove( i );
++ if (!anObj.IsNull()
++ && anObj != theIObj)
++ {
++ myAISDetectedSeq.Remove (aDetIter);
++ }
+ }
+
+- if(myLastinMain == anIObj)
++ if (myLastinMain == theIObj)
++ {
+ myLastinMain.Nullify();
+-
+- if(myLastPicked == anIObj)
++ }
++ if (myLastPicked == theIObj)
++ {
+ myLastPicked.Nullify();
++ }
++
++ // remove IO from the selection manager to avoid memory leaks
++ mgrSelector->Remove (theIObj);
+
+- // OCC21671: Remove IO from the selection manager in any case
+- // to avoid memory leaks
+- mgrSelector->Remove(anIObj);
++ myObjects.UnBind (theIObj);
+
+- if (updateviewer && (STATUS->GraphicStatus() == AIS_DS_Displayed))
++ if (theToUpdateviewer
++ && aStatus->GraphicStatus() == AIS_DS_Displayed)
+ {
+ myMainVwr->Update();
+ }
+-
+- myObjects.UnBind(anIObj);
+-
+ }
+
+ //=======================================================================
+ //function : ClearGlobalPrs
+-//purpose :
++//purpose :
+ //=======================================================================
++void AIS_InteractiveContext::ClearGlobalPrs (const Handle(AIS_InteractiveObject)& theIObj,
++ const Standard_Integer theMode,
++ const Standard_Boolean theToUpdateViewer)
++{
++ if (theIObj.IsNull()
++ || !myObjects.IsBound (theIObj))
++ {
++ return;
++ }
+
+-void AIS_InteractiveContext::ClearGlobalPrs(const Handle(AIS_InteractiveObject)& anIObj,
+- const Standard_Integer aMode,
+- const Standard_Boolean updateviewer)
+-{
+- if(anIObj.IsNull()) return ;
+- if(!myObjects.IsBound(anIObj)) return;
+- const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
+-
+- Standard_Integer DM = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
+- if(STATUS->IsDModeIn(aMode)){
+- if(DM==aMode && myMainPM->IsHighlighted(anIObj,aMode))
+- myMainPM->Unhighlight(anIObj,aMode);
+-
+- myMainPM->Erase(anIObj,aMode);
+- myMainPM->Clear(anIObj,aMode);
++ const Handle(AIS_GlobalStatus)& aStatus = myObjects (theIObj);
++ if (aStatus->IsDModeIn (theMode))
++ {
++ const Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
++ if (aDispMode == theMode
++ && myMainPM->IsHighlighted (theIObj, theMode))
++ {
++ myMainPM->Unhighlight (theIObj, theMode);
++ }
++
++ myMainPM->Erase (theIObj, theMode);
++ myMainPM->Clear (theIObj, theMode);
+ }
+-
+
+- if(STATUS->GraphicStatus()==AIS_DS_Displayed && updateviewer)
++ if (aStatus->GraphicStatus() == AIS_DS_Displayed
++ && theToUpdateViewer)
++ {
+ myMainVwr->Update();
++ }
+ }
+
+ //=======================================================================
+ //function : DrawHiddenLine
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::DrawHiddenLine () const {
+-
++Standard_Boolean AIS_InteractiveContext::DrawHiddenLine() const
++{
+ return myDefaultDrawer->DrawHiddenLine();
+ }
+
+ //=======================================================================
+ //function : EnableDrawHiddenLine
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::EnableDrawHiddenLine () const {
++void AIS_InteractiveContext::EnableDrawHiddenLine() const
++{
+ myDefaultDrawer->EnableDrawHiddenLine();
+ }
+
+ //=======================================================================
+ //function : DisableDrawHiddenLine
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::DisableDrawHiddenLine () const {
++void AIS_InteractiveContext::DisableDrawHiddenLine() const
++{
+ myDefaultDrawer->DisableDrawHiddenLine();
+ }
+
+ //=======================================================================
+ //function : HiddenLineAspect
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Handle (Prs3d_LineAspect) AIS_InteractiveContext::HiddenLineAspect () const {
++Handle (Prs3d_LineAspect) AIS_InteractiveContext::HiddenLineAspect() const
++{
+ return myDefaultDrawer->HiddenLineAspect();
+ }
+
+ //=======================================================================
+ //function : SetHiddenLineAspect
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetHiddenLineAspect ( const Handle(Prs3d_LineAspect)& anAspect) const {
+- myDefaultDrawer->SetHiddenLineAspect(anAspect);
++void AIS_InteractiveContext::SetHiddenLineAspect (const Handle(Prs3d_LineAspect)& theAspect) const
++{
++ myDefaultDrawer->SetHiddenLineAspect (theAspect);
+ }
+
+ //=======================================================================
+ //function : SetIsoNumber
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetIsoNumber(const Standard_Integer Nb,const AIS_TypeOfIso Type)
++void AIS_InteractiveContext::SetIsoNumber (const Standard_Integer theNb,
++ const AIS_TypeOfIso theType)
+ {
+- switch(Type){
+- case AIS_TOI_IsoU:
+- myDefaultDrawer->UIsoAspect()->SetNumber(Nb);
+- break;
+- case AIS_TOI_IsoV:
+- myDefaultDrawer->VIsoAspect()->SetNumber(Nb);
+- break;
+- case AIS_TOI_Both:
+- myDefaultDrawer->UIsoAspect()->SetNumber(Nb);
+- myDefaultDrawer->VIsoAspect()->SetNumber(Nb);
+- break;
+-
++ switch (theType)
++ {
++ case AIS_TOI_IsoU:
++ myDefaultDrawer->UIsoAspect()->SetNumber (theNb);
++ break;
++ case AIS_TOI_IsoV:
++ myDefaultDrawer->VIsoAspect()->SetNumber (theNb);
++ break;
++ case AIS_TOI_Both:
++ myDefaultDrawer->UIsoAspect()->SetNumber (theNb);
++ myDefaultDrawer->VIsoAspect()->SetNumber (theNb);
++ break;
+ }
+ }
++
+ //=======================================================================
+ //function : IsoNumber
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Integer AIS_InteractiveContext::IsoNumber(const AIS_TypeOfIso Type)
++Standard_Integer AIS_InteractiveContext::IsoNumber (const AIS_TypeOfIso theType)
+ {
+-
+- switch(Type){
+- case AIS_TOI_IsoU:
+- return myDefaultDrawer->UIsoAspect()->Number();
+- case AIS_TOI_IsoV:
+- return myDefaultDrawer->VIsoAspect()->Number();
+- case AIS_TOI_Both:
+- return (myDefaultDrawer->UIsoAspect()->Number()==
+- myDefaultDrawer->VIsoAspect()->Number()) ?
+- myDefaultDrawer->UIsoAspect()->Number(): -1;
++ switch (theType)
++ {
++ case AIS_TOI_IsoU: return myDefaultDrawer->UIsoAspect()->Number();
++ case AIS_TOI_IsoV: return myDefaultDrawer->VIsoAspect()->Number();
++ case AIS_TOI_Both: return myDefaultDrawer->UIsoAspect()->Number() == myDefaultDrawer->VIsoAspect()->Number()
++ ? myDefaultDrawer->UIsoAspect()->Number()
++ : -1;
+ }
+ return 0;
+ }
+
+ //=======================================================================
+ //function : IsoOnPlane
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::IsoOnPlane(const Standard_Boolean SwitchOn)
++void AIS_InteractiveContext::IsoOnPlane (const Standard_Boolean theToSwitchOn)
+ {
+- myDefaultDrawer->SetIsoOnPlane(SwitchOn);
++ myDefaultDrawer->SetIsoOnPlane (theToSwitchOn);
+ }
+
+ //=======================================================================
+ //function : IsoOnPlane
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::IsoOnPlane() const
++Standard_Boolean AIS_InteractiveContext::IsoOnPlane() const
+ {
+ return myDefaultDrawer->IsoOnPlane();
+ }
+
+ //=======================================================================
+ //function : SetSelectionMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetSelectionMode(const Handle(AIS_InteractiveObject)&, const Standard_Integer )
++void AIS_InteractiveContext::SetSelectionMode (const Handle(AIS_InteractiveObject)& ,
++ const Standard_Integer )
+ {
++ //
+ }
+
+ //=======================================================================
+ //function : UnsetSelectionMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::UnsetSelectionMode(const Handle(AIS_InteractiveObject)&)
++void AIS_InteractiveContext::UnsetSelectionMode (const Handle(AIS_InteractiveObject)& )
+ {
++ //
+ }
+
+ //=======================================================================
+ //function : SetSensitivityMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetSensitivityMode(const StdSelect_SensitivityMode aMode) {
+-
+- if( HasOpenedContext() )
+- myLocalContexts(myCurLocalIndex)->SetSensitivityMode(aMode);
+- else {
+- myMainSel->SetSensitivityMode(aMode);
++void AIS_InteractiveContext::SetSensitivityMode (const StdSelect_SensitivityMode theMode)
++{
++ if (HasOpenedContext())
++ {
++ myLocalContexts (myCurLocalIndex)->SetSensitivityMode (theMode);
++ }
++ else
++ {
++ myMainSel->SetSensitivityMode (theMode);
+ }
+ }
+
+ //=======================================================================
+ //function : SensitivityMode
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-StdSelect_SensitivityMode AIS_InteractiveContext::SensitivityMode() const {
+-
+- if( HasOpenedContext() )
+- return myLocalContexts(myCurLocalIndex)->SensitivityMode();
+- return myMainSel->SensitivityMode();
++StdSelect_SensitivityMode AIS_InteractiveContext::SensitivityMode() const
++{
++ return HasOpenedContext()
++ ? myLocalContexts (myCurLocalIndex)->SensitivityMode()
++ : myMainSel->SensitivityMode();
+ }
+
+ //=======================================================================
+ //function : SetSensitivity
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetSensitivity(const Standard_Real aPrecision) {
+-
+- if( HasOpenedContext() )
+- myLocalContexts(myCurLocalIndex)->SetSensitivity(aPrecision);
+- else {
+- myMainSel->SetSensitivity(aPrecision);
++void AIS_InteractiveContext::SetSensitivity (const Standard_Real thePrecision)
++{
++ if (HasOpenedContext())
++ {
++ myLocalContexts(myCurLocalIndex)->SetSensitivity (thePrecision);
++ }
++ else
++ {
++ myMainSel->SetSensitivity (thePrecision);
+ }
+ }
+
+ //=======================================================================
+ //function : Sensitivity
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Real AIS_InteractiveContext::Sensitivity() const {
+-
+- if( HasOpenedContext() )
+- return myLocalContexts(myCurLocalIndex)->Sensitivity();
+- return myMainSel->Sensitivity();
++Standard_Real AIS_InteractiveContext::Sensitivity() const
++{
++ return HasOpenedContext()
++ ? myLocalContexts(myCurLocalIndex)->Sensitivity()
++ : myMainSel->Sensitivity();
+ }
+
+ //=======================================================================
+ //function : SetPixelTolerance
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetPixelTolerance(const Standard_Integer aPrecision) {
+-
+- if( HasOpenedContext() )
+- myLocalContexts(myCurLocalIndex)->SetPixelTolerance(aPrecision);
+- else {
+- myMainSel->SetPixelTolerance(aPrecision);
++void AIS_InteractiveContext::SetPixelTolerance (const Standard_Integer thePrecision)
++{
++ if (HasOpenedContext())
++ {
++ myLocalContexts (myCurLocalIndex)->SetPixelTolerance (thePrecision);
++ }
++ else
++ {
++ myMainSel->SetPixelTolerance (thePrecision);
+ }
+ }
+
+ //=======================================================================
+ //function : PixelTolerance
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Integer AIS_InteractiveContext::PixelTolerance() const {
+-
+- if( HasOpenedContext() )
+- return myLocalContexts(myCurLocalIndex)->PixelTolerance();
+- return myMainSel->PixelTolerance();
++Standard_Integer AIS_InteractiveContext::PixelTolerance() const
++{
++ return HasOpenedContext()
++ ? myLocalContexts (myCurLocalIndex)->PixelTolerance()
++ : myMainSel->PixelTolerance();
+ }
+
+ //=======================================================================
+ //function : IsInLocal
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::IsInLocal(const Handle(AIS_InteractiveObject)& anIObj,
+- Standard_Integer& TheIndex) const
++Standard_Boolean AIS_InteractiveContext::IsInLocal (const Handle(AIS_InteractiveObject)& theIObj,
++ Standard_Integer& theIndex) const
+ {
+- if(anIObj.IsNull()) return Standard_False;
++ if (theIObj.IsNull())
++ {
++ return Standard_False;
++ }
++
+ // if it exists at neutral point 0 index is returned
+- if(myObjects.IsBound(anIObj)) {
+- TheIndex = 0;
++ if (myObjects.IsBound (theIObj))
++ {
++ theIndex = 0;
+ return Standard_False;
+ }
+- for(Standard_Integer I=1;I<=myLocalContexts.Extent();I++){
+- if(myLocalContexts.IsBound(I)){
+- if(myLocalContexts(I)->IsIn(anIObj)){
+- TheIndex = I;
++
++ for (Standard_Integer aCtxIter = 1; aCtxIter <= myLocalContexts.Extent(); ++aCtxIter)
++ {
++ if (myLocalContexts.IsBound (aCtxIter))
++ {
++ if(myLocalContexts (aCtxIter)->IsIn (theIObj))
++ {
++ theIndex = aCtxIter;
+ return Standard_True;
+-
+ }
+ }
+ }
+- TheIndex =-1;
++ theIndex = -1;
+ return Standard_False;
+-}
+-
++}
++
+ //=======================================================================
+ //function : InitAttributes
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+ void AIS_InteractiveContext::InitAttributes()
+ {
+-
+- mgrSelector->Add(myMainSel);
++ mgrSelector->Add (myMainSel);
+ myCurrentName = AIS_Context_NewCurName();
+ mySelectionName = AIS_Context_NewSelName();
+
+- AIS_Selection::CreateSelection(mySelectionName.ToCString());
+- AIS_Selection::CreateSelection(myCurrentName.ToCString());
++ AIS_Selection::CreateSelection (mySelectionName.ToCString());
++ AIS_Selection::CreateSelection (myCurrentName.ToCString());
+
+-
+- myDefaultDrawer->SetShadingAspectGlobal(Standard_False);
+- Graphic3d_MaterialAspect aMat(Graphic3d_NOM_BRASS);
+- myDefaultDrawer->ShadingAspect()->SetMaterial(aMat);
++ myDefaultDrawer->SetShadingAspectGlobal (Standard_False);
++ Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
++ myDefaultDrawer->ShadingAspect()->SetMaterial (aMat);
+
+ // myDefaultDrawer->ShadingAspect()->SetColor(Quantity_NOC_GRAY70);
+- Handle (Prs3d_LineAspect) HLA = myDefaultDrawer->HiddenLineAspect();
+- HLA->SetColor(Quantity_NOC_GRAY20);
+- HLA->SetWidth(1);
+- HLA->SetTypeOfLine(Aspect_TOL_DASH);
++ Handle(Prs3d_LineAspect) aLineAspect = myDefaultDrawer->HiddenLineAspect();
++ aLineAspect->SetColor (Quantity_NOC_GRAY20);
++ aLineAspect->SetWidth (1.0);
++ aLineAspect->SetTypeOfLine (Aspect_TOL_DASH);
+
+ // tolerance to 4 pixels...
+ SetPixelTolerance();
+
+ // Customizing the drawer for trihedrons and planes...
+-
+- Handle (Prs3d_DatumAspect) DA = myDefaultDrawer->DatumAspect();
+- Standard_Real aLength(100.);
+- DA->SetAxisLength(aLength,aLength,aLength);
+- Quantity_NameOfColor col = Quantity_NOC_LIGHTSTEELBLUE4;
+- DA->FirstAxisAspect()->SetColor(col);
+- DA->SecondAxisAspect()->SetColor(col);
+- DA->ThirdAxisAspect()->SetColor(col);
+-
+- Handle(Prs3d_PlaneAspect)PA = myDefaultDrawer->PlaneAspect();
+- aLength =200.;
+- PA->SetPlaneLength(aLength,aLength);
+- PA->EdgesAspect()->SetColor(Quantity_NOC_SKYBLUE);
+-
+-
++ Handle(Prs3d_DatumAspect) aTrihAspect = myDefaultDrawer->DatumAspect();
++ const Standard_Real aLength = 100.0;
++ aTrihAspect->SetAxisLength (aLength, aLength, aLength);
++ const Quantity_NameOfColor aColor = Quantity_NOC_LIGHTSTEELBLUE4;
++ aTrihAspect->FirstAxisAspect() ->SetColor (aColor);
++ aTrihAspect->SecondAxisAspect()->SetColor (aColor);
++ aTrihAspect->ThirdAxisAspect() ->SetColor (aColor);
++
++ Handle(Prs3d_PlaneAspect) aPlaneAspect = myDefaultDrawer->PlaneAspect();
++ const Standard_Real aPlaneLength = 200.0;
++ aPlaneAspect->SetPlaneLength (aPlaneLength, aPlaneLength);
++ aPlaneAspect->EdgesAspect()->SetColor (Quantity_NOC_SKYBLUE);
+ }
+
+-
+ //=======================================================================
+ //function : TrihedronSize
+-//purpose :
++//purpose :
+ //=======================================================================
+ Standard_Real AIS_InteractiveContext::TrihedronSize() const
+ {
+ return myDefaultDrawer->DatumAspect()->FirstAxisLength();
+ }
++
+ //=======================================================================
+ //function : SetTrihedronSize
+-//purpose :
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::SetTrihedronSize(const Standard_Real aVal,const Standard_Boolean /*updateviewer*/)
++void AIS_InteractiveContext::SetTrihedronSize (const Standard_Real theVal,
++ const Standard_Boolean /*updateviewer*/)
+ {
+- myDefaultDrawer->DatumAspect()->SetAxisLength(aVal,aVal,aVal);
+- Redisplay(AIS_KOI_Datum,3,Standard_False);
+- Redisplay(AIS_KOI_Datum,4,Standard_True);
++ myDefaultDrawer->DatumAspect()->SetAxisLength (theVal, theVal, theVal);
++ Redisplay (AIS_KOI_Datum, 3, Standard_False);
++ Redisplay (AIS_KOI_Datum, 4, Standard_True);
+ }
+
+-
+-
+ //=======================================================================
+ //function : SetPlaneSize
+-//purpose :
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::SetPlaneSize(const Standard_Real aValX,
+- const Standard_Real aValY,
++void AIS_InteractiveContext::SetPlaneSize(const Standard_Real theValX,
++ const Standard_Real theValY,
+ const Standard_Boolean /*updateviewer*/)
+ {
+- myDefaultDrawer->PlaneAspect()->SetPlaneLength(aValX,aValY);
+- Redisplay(AIS_KOI_Datum,7);
++ myDefaultDrawer->PlaneAspect()->SetPlaneLength (theValX, theValY);
++ Redisplay (AIS_KOI_Datum, 7);
+ }
+
+ //=======================================================================
+ //function : SetPlaneSize
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-void AIS_InteractiveContext::SetPlaneSize(const Standard_Real aVal,
+- const Standard_Boolean updateviewer)
++void AIS_InteractiveContext::SetPlaneSize (const Standard_Real theVal,
++ const Standard_Boolean theToUpdateViewer)
+ {
+- SetPlaneSize(aVal,aVal,updateviewer);
++ SetPlaneSize (theVal, theVal, theToUpdateViewer);
+ }
+
+ //=======================================================================
+ //function : PlaneSize
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+-Standard_Boolean AIS_InteractiveContext::PlaneSize(Standard_Real& LX,Standard_Real& LY) const
++Standard_Boolean AIS_InteractiveContext::PlaneSize (Standard_Real& theX,
++ Standard_Real& theY) const
+ {
+- LX = myDefaultDrawer->PlaneAspect()->PlaneXLength();
+- LY = myDefaultDrawer->PlaneAspect()->PlaneYLength();
+- return (Abs(LX-LY)<=Precision::Confusion());
++ theX = myDefaultDrawer->PlaneAspect()->PlaneXLength();
++ theY = myDefaultDrawer->PlaneAspect()->PlaneYLength();
++ return (Abs (theX - theY) <= Precision::Confusion());
+ }
+
+-
+-
+ //=======================================================================
+-//function :
+-//purpose :
++//function : SetAutoActivateSelection
++//purpose :
+ //=======================================================================
+-void AIS_InteractiveContext::SetAutoActivateSelection( const Standard_Boolean Auto )
++void AIS_InteractiveContext::SetAutoActivateSelection (const Standard_Boolean theIsAuto)
+ {
+- myIsAutoActivateSelMode = Auto;
++ myIsAutoActivateSelMode = theIsAuto;
+ }
+
+ //=======================================================================
+-//function :
+-//purpose :
++//function : GetAutoActivateSelection
++//purpose :
+ //=======================================================================
+ Standard_Boolean AIS_InteractiveContext::GetAutoActivateSelection() const
+ {
+@@ -2837,13 +2721,12 @@
+
+ //=======================================================================
+ //function : SetZLayer
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+ void AIS_InteractiveContext::SetZLayer (const Handle(AIS_InteractiveObject)& theIObj,
+ const Standard_Integer theLayerId)
+ {
+- if (theIObj.IsNull ())
++ if (theIObj.IsNull())
+ return;
+
+ if (myObjects.IsBound (theIObj))
+@@ -2853,7 +2736,7 @@
+ theIObj->SetZLayer (myMainPM, theLayerId);
+ }
+ }
+- else if (HasOpenedContext ())
++ else if (HasOpenedContext())
+ {
+ myLocalContexts (myCurLocalIndex)->SetZLayer (theIObj, theLayerId);
+ }
+@@ -2861,19 +2744,18 @@
+
+ //=======================================================================
+ //function : GetZLayer
+-//purpose :
++//purpose :
+ //=======================================================================
+-
+ Standard_Integer AIS_InteractiveContext::GetZLayer (const Handle(AIS_InteractiveObject)& theIObj) const
+ {
+- if (theIObj.IsNull ())
++ if (theIObj.IsNull())
+ return -1;
+
+ if (myObjects.IsBound (theIObj))
+ {
+ return theIObj->GetZLayer (myMainPM);
+ }
+- else if (HasOpenedContext ())
++ else if (HasOpenedContext())
+ {
+ return myLocalContexts (myCurLocalIndex)->GetZLayer (theIObj);
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext_1.cxx OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext_1.cxx
+--- OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext_1.cxx 2014-11-11 17:46:38.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext_1.cxx 2015-01-16 13:01:23.000000000 +0300
+@@ -153,6 +153,7 @@
+ {
+ if (mylastindex != 0 && mylastindex <= myMapOfOwner.Extent())
+ {
++ myMainPM->ClearImmediateDraw();
+ Unhilight (myMapOfOwner (mylastindex), theView);
+ if (theToRedrawImmediate)
+ {
+@@ -376,6 +377,7 @@
+
+ if(myAutoHilight)
+ {
++ myMainPM->ClearImmediateDraw();
+ const Handle(V3d_Viewer)& aViewer = myCTX->CurrentViewer();
+ for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
+ {
+@@ -545,7 +547,6 @@
+ return;
+ }
+
+- myMainPM->ClearImmediateDraw();
+ const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
+ if (IsSelected (theOwner))
+ {
+@@ -1044,6 +1045,10 @@
+ myMapOfOwner.Clear();
+ myMapOfOwner.Assign (anOwnersToKeep);
+ mylastindex = myMapOfOwner.FindIndex (aLastPicked);
++ if (!IsValidIndex (mylastindex))
++ {
++ myMainPM->ClearImmediateDraw();
++ }
+
+ if (!isAISRemainsDetected)
+ {
+@@ -1197,6 +1202,7 @@
+ {
+ if (thePickOwner.IsNull())
+ {
++ myMainPM->ClearImmediateDraw();
+ if (theToRedrawImmediate)
+ {
+ theView->RedrawImmediate();
+@@ -1248,6 +1254,7 @@
+ if (aNewIndex != mylastindex
+ || thePickOwner->IsForcedHilight())
+ {
++ myMainPM->ClearImmediateDraw();
+ if (mylastindex != 0
+ && mylastindex <= myMapOfOwner.Extent())
+ {
+@@ -1270,7 +1277,7 @@
+ mylastindex = aNewIndex;
+ }
+
+- if (mylastindex)
++ if (mylastindex != 0)
+ {
+ mylastgood = mylastindex;
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext.cxx OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext.cxx
+--- OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext.cxx 2014-11-11 17:46:38.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext.cxx 2015-01-16 12:59:32.000000000 +0300
+@@ -445,65 +445,67 @@
+
+ Standard_Boolean AIS_LocalContext::Remove(const Handle(AIS_InteractiveObject)& aSelectable)
+ {
+- if(!myActiveObjects.IsBound(aSelectable)) return Standard_False;
++ if(!myActiveObjects.IsBound (aSelectable))
++ {
++ return Standard_False;
++ }
++
++ if (IsSelected (aSelectable))
++ {
++ AddOrRemoveSelected (aSelectable, Standard_False);
++ }
++
++ const Handle(AIS_LocalStatus)& Att = myActiveObjects (aSelectable);
+
+- if(IsSelected(aSelectable))
+- AddOrRemoveSelected(aSelectable,Standard_False);
+-
+- const Handle(AIS_LocalStatus)& Att = myActiveObjects(aSelectable);
+-
+ TColStd_ListIteratorOfListOfInteger It;
+- // it is checked which were the temporary attributes
+- // and they are set to 0
+
+- // desactivate standard modes
+- if(Att->Decomposed()){
+- for(It.Initialize(myListOfStandardMode);It.More();It.Next()){
+- mySM->Deactivate(aSelectable,It.Value(),myMainVS);
++ // Deactivate standard modes
++ if (Att->Decomposed())
++ {
++ for (It.Initialize (myListOfStandardMode); It.More(); It.Next())
++ {
++ mySM->Deactivate (aSelectable, It.Value(), myMainVS);
+ }
+ }
+-
+- // if object or temporary presentations...
+- if(Att->IsTemporary())
++
++ // If object or temporary presentations
++ if (Att->IsTemporary())
++ {
++ if (Att->IsSubIntensityOn())
+ {
+- if(Att->IsSubIntensityOn())
+- myMainPM->Unhighlight(aSelectable,Att->HilightMode());
+-
+- // remove if bug on clear correct...
+- myMainPM->Erase(aSelectable,Att->DisplayMode());
+- myMainPM->Clear(aSelectable,Att->DisplayMode());
+- if(myMainPM->IsDisplayed(aSelectable,Att->HilightMode()))
+- myMainPM->Erase(aSelectable,Att->HilightMode());
+- // myMainPM->Clear(aSelectable,Att->HilightMode());
++ myMainPM->Unhighlight (aSelectable, Att->HilightMode());
+ }
+- // if below intensity
+- else
++
++ myMainPM->Erase (aSelectable, Att->DisplayMode());
++ myMainPM->Clear (aSelectable, Att->DisplayMode());
++ if (myMainPM->IsDisplayed (aSelectable, Att->HilightMode()))
+ {
+- if(Att->IsSubIntensityOn())
+- myCTX->SubIntensityOff(aSelectable);
++ myMainPM->Erase (aSelectable, Att->HilightMode());
+ }
+- // desactivate stored proper modes
+- for(It.Initialize(Att->SelectionModes());It.More();It.Next()){
+- mySM->Deactivate(aSelectable,It.Value(),myMainVS);
+- }
+-// pop : si je laisses cela plantes dans les elements de construction
+-// alors a toi de jouer ROB
+-// RemoveSelected(aSelectable);
+-
+- if(IsSelected(aSelectable))
+- AddOrRemoveSelected(aSelectable);
+- myActiveObjects.UnBind(aSelectable);
++ }
++ // If subintensity used
++ else if (Att->IsSubIntensityOn())
++ {
++ myCTX->SubIntensityOff (aSelectable);
++ }
++
++ // Deactivate stored selection modes
++ for (It.Initialize (Att->SelectionModes()); It.More(); It.Next())
++ {
++ mySM->Deactivate (aSelectable, It.Value(), myMainVS);
++ }
+
+ // Remove the interactive object from selection manager
+ if (mySM->Contains (aSelectable))
+ {
+ mySM->Remove (aSelectable);
+ }
+-
+ UpdateSort();
+-
+ ClearOutdatedSelection (aSelectable, Standard_True);
+
++ // This should be done at the very end because most methods use
++ // myActiveObjects even during clean-up
++ myActiveObjects.UnBind (aSelectable);
+ return Standard_True;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Blend/Blend_Walking_1.gxx OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_1.gxx
+--- OCCT-6.8.0_SRC/src/Blend/Blend_Walking_1.gxx 2014-11-11 17:46:43.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_1.gxx 2015-01-16 12:59:38.000000000 +0300
+@@ -56,6 +56,7 @@
+
+ void Blend_Walking::Perform(Blend_Function& Func,
+ Blend_FuncInv& FuncInv,
++ const Handle(ChFiDS_HElSpine)& HGuide,
+ const Standard_Real Pdep,
+ const Standard_Real Pmax,
+ const Standard_Real MaxStep,
+@@ -154,7 +155,7 @@
+ }
+ }
+
+- InternalPerform(Func,FuncInv,Pmax);
++ InternalPerform(Func,FuncInv,HGuide,Pmax);
+
+ done = Standard_True;
+ }
+@@ -461,7 +462,8 @@
+ previousP.ParametersOnS1(sol(1),sol(2));
+ previousP.ParametersOnS2(sol(3),sol(4));
+
+- InternalPerform(Func,FuncInv,P);
++ Handle(ChFiDS_HElSpine) anHGuide;
++ InternalPerform(Func,FuncInv,anHGuide,P);
+ return Standard_True;
+ }
+
+@@ -502,7 +504,8 @@
+ if(OnS1) clasonS1 = Standard_False;
+ else clasonS2 = Standard_False;
+
+- InternalPerform(Func,FuncInv,P);
++ Handle(ChFiDS_HElSpine) anHGuide;
++ InternalPerform(Func,FuncInv,anHGuide,P);
+
+ clasonS1 = Standard_True;
+ clasonS2 = Standard_True;
+@@ -548,7 +551,8 @@
+ previousP.ParametersOnS1(sol(1),sol(2));
+ previousP.ParametersOnS2(sol(3),sol(4));
+
+- InternalPerform(Func,FuncInv,Pmin);
++ Handle(ChFiDS_HElSpine) anHGuide;
++ InternalPerform(Func,FuncInv,anHGuide,Pmin);
+
+ iscomplete = Standard_True;
+ return Standard_True;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Blend/Blend_Walking_4.gxx OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_4.gxx
+--- OCCT-6.8.0_SRC/src/Blend/Blend_Walking_4.gxx 2014-11-11 17:46:43.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_4.gxx 2015-01-16 12:59:38.000000000 +0300
+@@ -12,6 +12,8 @@
+ // Alternatively, this file may be used under the terms of Open CASCADE
+ // commercial license or contractual agreement.
+
++#include <gce_MakePln.hxx>
++
+ static void evalpinit(math_Vector& parinit,
+ const Blend_Point& previousP,
+ const Standard_Real parprec,
+@@ -65,6 +67,7 @@
+
+ void Blend_Walking::InternalPerform(Blend_Function& Func,
+ Blend_FuncInv& FuncInv,
++ const Handle(ChFiDS_HElSpine)& HGuide,
+ const Standard_Real Bound)
+ {
+
+@@ -251,12 +254,64 @@
+ // avec les surfaces periodiques.
+ State = Blend_OnRst12;
+ param = (w1+w2)/2;
++ gp_Pnt Pnt1, Pnt2;
+ p2d = TheArcTool::Value(recdomain1->Value(),solrst1(1));
+ sol(1) = p2d.X();
+ sol(2) = p2d.Y();
++ Pnt1 = TheSurfaceTool::Value(surf1,sol(1),sol(2));
+ p2d = TheArcTool::Value(recdomain2->Value(),solrst2(1));
+ sol(3) = p2d.X();
+ sol(4) = p2d.Y();
++ Pnt2 = TheSurfaceTool::Value(surf2,sol(3),sol(4));
++ if (!HGuide.IsNull())
++ {
++ const Standard_Real TolProd = 1.e-5;
++ Standard_Real SavedParams [2];
++ Standard_Boolean SameDirs [2] = {Standard_False, Standard_False};
++ ChFiDS_ElSpine& theElSpine = HGuide->ChangeCurve();
++ SavedParams[0] = theElSpine.GetSavedFirstParameter();
++ SavedParams[1] = theElSpine.GetSavedLastParameter();
++ for (Standard_Integer ind = 0; ind < 2; ind++)
++ {
++ if (!Precision::IsInfinite(SavedParams[ind]))
++ {
++ //Check the original first and last parameters of guide curve
++ //for equality to found parameter <param>:
++ //check equality of tangent to guide curve and
++ //normal to plane built on 3 points:
++ //point on guide curve and points on restrictions of adjacent
++ //surfaces.
++ gp_Pnt Pnt0;
++ gp_Vec Dir0;
++ HGuide->D1(SavedParams[ind], Pnt0, Dir0);
++ Standard_Real Length = Dir0.Magnitude();
++ if (Length <= gp::Resolution())
++ continue;
++ Dir0 /= Length;
++ gce_MakePln PlaneBuilder(Pnt0, Pnt1, Pnt2);
++ if (!PlaneBuilder.IsDone())
++ continue;
++ gp_Pln thePlane = PlaneBuilder.Value();
++ gp_Dir DirPlane = thePlane.Axis().Direction();
++ gp_Vec theProd = Dir0 ^ DirPlane;
++ Standard_Real ProdMod = theProd.Magnitude();
++ if (ProdMod <= TolProd)
++ SameDirs[ind] = Standard_True;
++ }
++ }
++ Standard_Real theParam = Precision::Infinite();
++ //Choose the closest parameter
++ if (SameDirs[0] && SameDirs[1])
++ theParam = (Abs(param - SavedParams[0]) < Abs(param - SavedParams[1]))?
++ SavedParams[0] : SavedParams[1];
++ else if (SameDirs[0])
++ theParam = SavedParams[0];
++ else if (SameDirs[1])
++ theParam = SavedParams[1];
++
++ if (!Precision::IsInfinite(theParam))
++ param = theParam;
++ }
+ }
+ else if (recad1) {
+ // sol sur 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Blend/Blend_Walking.cdl OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking.cdl
+--- OCCT-6.8.0_SRC/src/Blend/Blend_Walking.cdl 2014-11-11 17:46:43.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking.cdl 2015-01-16 12:59:38.000000000 +0300
+@@ -45,6 +45,7 @@
+ Transition from IntSurf,
+ Function from Blend,
+ FuncInv from Blend,
++ HElSpine from ChFiDS,
+ State from TopAbs
+
+
+@@ -66,6 +67,7 @@
+
+ Perform(me: in out; F : in out Function from Blend;
+ FInv : in out FuncInv from Blend;
++ HGuide : HElSpine from ChFiDS;
+ Pdep : Real from Standard;
+ Pmax : Real from Standard;
+ MaxStep : Real from Standard;
+@@ -164,6 +166,7 @@
+
+ InternalPerform (me: in out;F : in out Function from Blend;
+ FInv : in out FuncInv from Blend;
++ HGuide : HElSpine from ChFiDS;
+ Bound : Real from Standard)
+
+ is static private;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx
+--- OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx 2014-11-11 17:46:39.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx 2015-01-16 12:59:34.000000000 +0300
+@@ -684,8 +684,8 @@
+ }
+ //
+ if (aInOutMap.IsBound (aHole)){
+- const TopoDS_Shape& aHole2=aInOutMap(aHole);
+- if (IsInside(aHole, aHole2, myContext)) {
++ const TopoDS_Shape& aSolidWas=aInOutMap(aHole);
++ if (IsInside(aSolid, aSolidWas, myContext)) {
+ aInOutMap.UnBind(aHole);
+ aInOutMap.Bind (aHole, aSolid);
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx
+--- OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx 2014-11-11 17:46:39.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx 2015-01-16 12:59:34.000000000 +0300
+@@ -267,7 +267,6 @@
+ aPB->Indices(nV[0], nV[1]);
+ //
+ BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
+- ////const BOPDS_IndexedMapOfPaveBlock& aMPBF=aFI.PaveBlocksOn();
+ const BOPCol_MapOfInteger& aMIFOn=aFI.VerticesOn();
+ const BOPCol_MapOfInteger& aMIFIn=aFI.VerticesIn();
+ //~~~
+@@ -305,7 +304,9 @@
+ aEF.SetIndices(nE, nF);
+ aEF.SetCommonPart(aCP);
+ myDS->AddInterf(nE, nF);
+- // 3
++ //
++ aMIEFC.Add(nF);
++ //
+ BOPAlgo_Tools::FillMap(aPB, nF, aMPBLI, aAllocator);
+ break;
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools_1.cxx OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools_1.cxx
+--- OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools_1.cxx 2014-11-11 17:46:40.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools_1.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -344,6 +344,8 @@
+ Standard_Real& theFVal) {
+ try {
+ const Standard_Real aPar = theX(1);
++ if (!CheckParameter(aPar))
++ return Standard_False;
+ gp_Pnt aP1, aP2;
+ gp_Pnt2d aP2d;
+ my3DCurve->D0(aPar, aP1);
+@@ -367,7 +369,8 @@
+ math_Vector& theGrad) {
+ try {
+ const Standard_Real aPar = theX(1);
+-
++ if (!CheckParameter(aPar))
++ return Standard_False;
+ gp_Pnt aP1, aP2;
+ gp_Vec aDC3D, aDSU, aDSV;
+ gp_Pnt2d aP2d;
+@@ -417,6 +420,19 @@
+ }
+ //
+ private:
++
++ Standard_Boolean CheckParameter(const Standard_Real theParam)
++ {
++ if (theParam < my3DCurve->FirstParameter() ||
++ theParam > my3DCurve->LastParameter() ||
++ theParam < my2DCurve->FirstParameter() ||
++ theParam > my2DCurve->LastParameter() )
++ {
++ return Standard_False;
++ }
++ return Standard_True;
++ }
++
+ Handle(Geom_Curve) my3DCurve;
+ Handle(Geom2d_Curve) my2DCurve;
+ Handle(Geom_Surface) mySurf;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools.cxx OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools.cxx
+--- OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools.cxx 2014-11-11 17:46:40.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -99,7 +99,8 @@
+ gp_Pnt& aPOut,
+ Handle(IntTools_Context)& theContext,
+ GeomAPI_ProjectPointOnSurf& aProjPL,
+- const Standard_Real aDt);
++ const Standard_Real aDt,
++ const Standard_Real aTolE);
+ static
+ Standard_Real MinStep3D(const TopoDS_Edge& theE1,
+ const TopoDS_Face& theF1,
+@@ -1825,14 +1826,18 @@
+ GeomAPI_ProjectPointOnSurf& aProjPL,
+ const Standard_Real aDt)
+ {
++ Standard_Real aTolE;
++ gp_Pnt aPx;
++ //
+ BOPTools_AlgoTools3D::GetNormalToFaceOnEdge(aE, aF, aT, aDN);
+ if (aF.Orientation()==TopAbs_REVERSED){
+ aDN.Reverse();
+ }
++ //
++ aTolE=BRep_Tool::Tolerance(aE);
+ aDB = aDN^aDTgt;
+ //
+- gp_Pnt aPx;
+- if (!FindPointInFace(aF, aP, aDB, aPx, theContext, aProjPL, aDt)) {
++ if (!FindPointInFace(aF, aP, aDB, aPx, theContext, aProjPL, aDt, aTolE)) {
+ BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(aE, aF, aT, aPx,
+ aDN, theContext);
+ aProjPL.Perform(aPx);
+@@ -1841,7 +1846,6 @@
+ aDB.SetXYZ(aVec.XYZ());
+ }
+ }
+-
+ //=======================================================================
+ //function : FindPointInFace
+ //purpose : Find a point in the face in direction of <aDB>
+@@ -1852,12 +1856,13 @@
+ gp_Pnt& aPOut,
+ Handle(IntTools_Context)& theContext,
+ GeomAPI_ProjectPointOnSurf& aProjPL,
+- const Standard_Real aDt)
++ const Standard_Real aDt,
++ const Standard_Real aTolE)
+ {
+ Standard_Integer aNbItMax;
+ Standard_Real aDist, aDTol, aPM;
+ Standard_Boolean bRet;
+- gp_Pnt aP1;
++ gp_Pnt aP1, aPS;
+ //
+ aDTol = Precision::Angular();
+ aPM = aP.XYZ().Modulus();
+@@ -1869,10 +1874,27 @@
+ //
+ GeomAPI_ProjectPointOnSurf& aProj=theContext->ProjPS(aF);
+ //
++ aPS=aP;
++ aProj.Perform(aPS);
++ if (!aProj.IsDone()) {
++ return bRet;
++ }
++ aPS=aProj.NearestPoint();
++ aProjPL.Perform(aPS);
++ aPS=aProjPL.NearestPoint();
++ //
++ aPS.SetXYZ(aPS.XYZ()+2.*aTolE*aDB.XYZ());
++ aProj.Perform(aPS);
++ if (!aProj.IsDone()) {
++ return bRet;
++ }
++ aPS=aProj.NearestPoint();
++ aProjPL.Perform(aPS);
++ aPS=aProjPL.NearestPoint();
++ //
++ //
+ do {
+- aP1.SetCoord(aP.X()+aDt*aDB.X(),
+- aP.Y()+aDt*aDB.Y(),
+- aP.Z()+aDt*aDB.Z());
++ aP1.SetXYZ(aPS.XYZ()+aDt*aDB.XYZ());
+ //
+ aProj.Perform(aP1);
+ if (!aProj.IsDone()) {
+@@ -1884,7 +1906,7 @@
+ aProjPL.Perform(aPOut);
+ aPOut = aProjPL.NearestPoint();
+ //
+- gp_Vec aV(aP, aPOut);
++ gp_Vec aV(aPS, aPOut);
+ aDB.SetXYZ(aV.XYZ());
+ } while (aDist > aDTol && --aNbItMax);
+ //
+@@ -2006,8 +2028,8 @@
+ //function : IsInvertedSolid
+ //purpose :
+ //=======================================================================
+-Standard_Boolean
+- BOPTools_AlgoTools::IsInvertedSolid(const TopoDS_Solid& aSolid)
++Standard_Boolean BOPTools_AlgoTools::IsInvertedSolid
++ (const TopoDS_Solid& aSolid)
+ {
+ Standard_Real aTolS;
+ TopAbs_State aState;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BRepFill/BRepFill_Pipe.cxx OCCT-6.8.0_SRC-patch/src/BRepFill/BRepFill_Pipe.cxx
+--- OCCT-6.8.0_SRC/src/BRepFill/BRepFill_Pipe.cxx 2014-11-11 17:46:41.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/BRepFill/BRepFill_Pipe.cxx 2015-01-16 12:59:36.000000000 +0300
+@@ -274,18 +274,9 @@
+ }
+
+ ShapeUpgrade_RemoveLocations RemLoc;
++ RemLoc.SetRemoveLevel(TopAbs_COMPOUND);
+ RemLoc.Remove(myFirst);
+ myFirst = RemLoc.GetResult();
+- TopLoc_Location theLoc = myFirst.Location();
+- if (!theLoc.IsIdentity())
+- {
+- TopoDS_Shape NewMyFirst = BRepBuilderAPI_Copy(myFirst);
+- RemLoc.Remove(NewMyFirst);
+- NewMyFirst = RemLoc.GetResult();
+- TopLoc_Location theIdentity;
+- NewMyFirst.Location(theIdentity);
+- myFirst = BRepBuilderAPI_Transform(NewMyFirst, theLoc.Transformation(), Standard_True);
+- }
+
+ myLoc->Law(myLoc->NbLaw())->GetDomain(first, last);
+ myLoc->Law(myLoc->NbLaw())->D0(last,M, V);
+@@ -308,16 +299,6 @@
+
+ RemLoc.Remove(myLast);
+ myLast = RemLoc.GetResult();
+- theLoc = myLast.Location();
+- if (!theLoc.IsIdentity())
+- {
+- TopoDS_Shape NewMyLast = BRepBuilderAPI_Copy(myLast);
+- RemLoc.Remove(NewMyLast);
+- NewMyLast = RemLoc.GetResult();
+- TopLoc_Location theIdentity;
+- NewMyLast.Location(theIdentity);
+- myLast = BRepBuilderAPI_Transform(NewMyLast, theLoc.Transformation(), Standard_True);
+- }
+
+ #if DRAW
+ if (Affich) {
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_2.cxx OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_2.cxx
+--- OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_2.cxx 2014-11-11 17:46:44.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_2.cxx 2015-01-16 12:59:39.000000000 +0300
+@@ -1862,10 +1862,13 @@
+ Standard_Real wl = Guide.LastParameter();
+ Standard_Real locfleche = (wl - wf) * fleche;
+ Standard_Real wfsav = wf, wlsav = wl;
+- //Now the ElSpine is artificially extended to help rsnld.
+- Standard_Real prab = 0.01;
+- Guide.FirstParameter(wf-prab*(wl-wf));
+- Guide.LastParameter (wl+prab*(wl-wf));
++ if (!Guide.IsPeriodic())
++ {
++ //Now the ElSpine is artificially extended to help rsnld.
++ Standard_Real prab = 0.01;
++ Guide.FirstParameter(wf-prab*(wl-wf));
++ Guide.LastParameter (wl+prab*(wl-wf));
++ }
+ Handle(ChFiDS_Spine)& Spine = Stripe->ChangeSpine();
+ Standard_Integer ii, nbed = Spine->NbEdges();
+ Standard_Real lastedlastp = Spine->LastParameter(nbed);
+@@ -1920,7 +1923,9 @@
+ Last = wf;
+ if(Guide.IsPeriodic()) {
+ Last = First - Guide.Period();
++ Guide.SaveFirstParameter();
+ Guide.FirstParameter(Last);
++ Guide.SaveLastParameter();
+ Guide.LastParameter (First * 1.1);//Extension to help rsnld.
+ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_6.cxx OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_6.cxx
+--- OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_6.cxx 2014-11-11 17:46:44.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_6.cxx 2015-01-16 12:59:39.000000000 +0300
+@@ -1573,7 +1573,7 @@
+ if (5*TolGuide > MS) TolGuide = MS/5;
+ if (5*TolEsp > MS) TolEsp = MS/5;
+ }
+- TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
++ TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
+ ParSol,TolEsp,Fleche,Appro);
+ if (!TheWalk.IsDone()) {
+ #ifdef OCCT_DEBUG
+@@ -2113,7 +2113,7 @@
+ if (5*TolEsp > MS) TolEsp = MS/5;
+ }
+
+- TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
++ TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
+ ParSol,TolEsp,Fleche,Appro);
+
+ if (!TheWalk.IsDone()) {
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_C1.cxx OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_C1.cxx
+--- OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_C1.cxx 2014-11-11 17:46:44.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_C1.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -371,8 +371,7 @@
+ pared = ponc1.Parameter();
+ parltg = ponc2.Parameter();
+ if ((parltg > f) && (parltg < l)) {
+-#ifdef OCC23139
+- ////modified by jgv, 10.05.2012 for the bug 23139////
++ ////modified by jgv, 10.05.2012 for the bug 23139, 25657////
+ Handle(Geom2d_Curve) PConF = fi.PCurveOnFace();
+ if (!PConF.IsNull())
+ {
+@@ -393,7 +392,6 @@
+ }
+ }
+ /////////////////////////////////////////////////////
+-#endif
+ fi.SetParameter(parltg,isfirst);
+ cp.SetArc(cp.Tolerance(),cp.Arc(),pared,cp.TransitionOnArc());
+ return Standard_True;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cdl OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cdl
+--- OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cdl 2014-11-11 17:46:44.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cdl 2015-01-16 12:59:39.000000000 +0300
+@@ -50,6 +50,10 @@
+ LastParameter(me) returns Real from Standard
+ is redefined;
+
++ GetSavedFirstParameter(me) returns Real from Standard;
++
++ GetSavedLastParameter(me) returns Real from Standard;
++
+ Continuity(me) returns Shape from GeomAbs
+ is redefined static;
+
+@@ -102,6 +106,10 @@
+
+ LastParameter(me : in out; P : Real from Standard);
+
++ SaveFirstParameter(me : in out);
++
++ SaveLastParameter(me : in out);
++
+ SetOrigin(me : in out; O : Real from Standard);
+
+ FirstPointAndTgt(me; P : out Pnt from gp; T : out Vec from gp);
+@@ -188,5 +196,7 @@
+ period : Real from Standard;
+ periodic : Boolean from Standard;
+
++pfirstsav : Real from Standard;
++plastsav : Real from Standard;
+
+ end ElSpine;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cxx OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cxx
+--- OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cxx 2014-11-11 17:46:44.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cxx 2015-01-16 12:59:39.000000000 +0300
+@@ -27,6 +27,8 @@
+
+ ChFiDS_ElSpine::ChFiDS_ElSpine():periodic(0)
+ {
++ pfirstsav = Precision::Infinite();
++ plastsav = Precision::Infinite();
+ }
+
+
+@@ -52,6 +54,26 @@
+ }
+
+ //=======================================================================
++//function : GetSavedFirstParameter
++//purpose :
++//=======================================================================
++
++Standard_Real ChFiDS_ElSpine::GetSavedFirstParameter() const
++{
++ return pfirstsav;
++}
++
++//=======================================================================
++//function : GetSavedLastParameter
++//purpose :
++//=======================================================================
++
++Standard_Real ChFiDS_ElSpine::GetSavedLastParameter() const
++{
++ return plastsav;
++}
++
++//=======================================================================
+ //function : Continuity
+ //purpose :
+ //=======================================================================
+@@ -229,6 +251,26 @@
+ plast = P;
+ }
+
++//=======================================================================
++//function : SaveFirstParameter
++//purpose :
++//=======================================================================
++
++void ChFiDS_ElSpine::SaveFirstParameter()
++{
++ pfirstsav = pfirst;
++}
++
++//=======================================================================
++//function : SaveLastParameter
++//purpose :
++//=======================================================================
++
++void ChFiDS_ElSpine::SaveLastParameter()
++{
++ plastsav = plast;
++}
++
+
+ //=======================================================================
+ //function : SetOrigin
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Graphic3d/Graphic3d_GraphicDriver.cdl OCCT-6.8.0_SRC-patch/src/Graphic3d/Graphic3d_GraphicDriver.cdl
+--- OCCT-6.8.0_SRC/src/Graphic3d/Graphic3d_GraphicDriver.cdl 2014-11-11 17:46:49.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Graphic3d/Graphic3d_GraphicDriver.cdl 2015-01-16 13:01:24.000000000 +0300
+@@ -261,12 +261,6 @@
+ is deferred;
+ ---Purpose: call_togl_setvisualisation
+
+- Transparency ( me : mutable;
+- ACView : CView from Graphic3d;
+- AFlag : Boolean from Standard )
+- is deferred;
+- ---Purpose: call_togl_transparency
+-
+ View ( me : mutable;
+ ACView : in out CView from Graphic3d )
+ returns Boolean from Standard
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx
+--- OCCT-6.8.0_SRC/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx 2015-01-16 13:01:24.000000000 +0300
+@@ -1151,6 +1151,7 @@
+ const Standard_Real theUlSurf1,
+ const Standard_Real thePeriodOfSurf1,
+ const Handle(IntSurf_LineOn2S)& theLine,
++ const Standard_Real theTol3D,
+ const Standard_Real theTol2D,
+ const Standard_Boolean theFlForce)
+ {
+@@ -1177,6 +1178,32 @@
+ thePntOnSurf2.X(), thePntOnSurf2.Y());
+ }
+
++ const Standard_Integer aNbPnts = theLine->NbPoints();
++ if(aNbPnts > 0)
++ {
++ Standard_Real aUl = 0.0, aVl = 0.0;
++ const IntSurf_PntOn2S aPlast = theLine->Value(aNbPnts);
++ if(isTheReverse)
++ aPlast.ParametersOnS2(aUl, aVl);
++ else
++ aPlast.ParametersOnS1(aUl, aVl);
++
++ if(anUpar <= aUl)
++ {//Parameter value will be always increased.
++ return Standard_False;
++ }
++
++ //theTol2D is minimal step along parameter changed.
++ //Therefore, if we apply this minimal step two
++ //neighbour points will be always "same". Consequently,
++ //we should reduce tolerance for IsSame checking.
++ const Standard_Real aDTol = 1.0-Epsilon(1.0);
++ if(aPnt.IsSame(aPlast, theTol3D*aDTol, theTol2D*aDTol))
++ {
++ theLine->RemovePoint(aNbPnts);
++ }
++ }
++
+ theLine->Add(aPnt);
+ return Standard_True;
+ }
+@@ -1191,6 +1218,7 @@
+ const stCoeffsValue& theCoeffs,
+ const Bnd_Box2d& theUVSurf1,
+ const Bnd_Box2d& theUVSurf2,
++ const Standard_Real theTol3D,
+ const Standard_Real theTol2D,
+ const Standard_Real thePeriod,
+ const Standard_Real theNulValue,
+@@ -1281,7 +1309,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(), theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1313,7 +1341,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(),theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1346,7 +1374,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(), theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1376,7 +1404,7 @@
+ AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+ gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
+ aUSurf1f, aUSurf1l, thePeriod,
+- theWL->Curve(), theTol2D, theFlForce);
++ theWL->Curve(), theTol3D, theTol2D, theFlForce);
+ }
+ else
+ {
+@@ -1545,7 +1573,8 @@
+ {
+ Standard_Real &a = theU1crit[i],
+ &b = theU1crit[i-1];
+- if(Abs(a - b) < theTol2D)
++ const Standard_Real aRemain = fmod(Abs(a - b), thePeriod); // >= 0, because Abs(a - b) >= 0
++ if((Abs(a - b) < theTol2D) || (aRemain < theTol2D) || (Abs(aRemain - thePeriod) < theTol2D))
+ {
+ a = (a + b)/2.0;
+ b = Precision::Infinite();
+@@ -1817,6 +1846,7 @@
+ Standard_Boolean isAddedIntoWL1 = Standard_False, isAddedIntoWL2 = Standard_False;
+
+ Standard_Real anUf = aU1f[aCurInterval], anUl = aU1l[aCurInterval];
++ const Standard_Boolean isDeltaPeriod = IsEqual(anUl-anUf, aPeriod);
+
+ //Inscribe and sort critical points
+ InscribeAndSortArray(anU1crit, aNbCritPointsMax, anUf, anUl, theTol2D, aPeriod);
+@@ -1830,6 +1860,8 @@
+ Handle(IntPatch_WLine) aWLine2 = new IntPatch_WLine(aL2S2, Standard_False);
+
+ Standard_Integer aWL1FindStatus = 0, aWL2FindStatus = 0;
++ Standard_Boolean isAddingWL1Enabled = Standard_True,
++ isAddingWL2Enabled = Standard_True;
+
+ Standard_Real anU1 = anUf;
+
+@@ -1845,6 +1877,23 @@
+
+ while(anU1 <= anUl)
+ {
++ if(isDeltaPeriod)
++ {
++ if(IsEqual(anU1, anUl))
++ {
++ //if isAddedIntoWL* == TRUE WLine contains only one point
++ //(which was end point of previous WLine). If we will
++ //add point found on the current step WLine will contain only
++ //two points. At that both these points will be equal to the
++ //points found earlier. Therefore, new WLine will repeat
++ //already existing WLine. Consequently, it is necessary
++ //to forbid building new line in this case.
++
++ isAddingWL1Enabled = !isAddedIntoWL1;
++ isAddingWL2Enabled = !isAddedIntoWL2;
++ }
++ }
++
+ for(Standard_Integer i = 0; i < aNbCritPointsMax; i++)
+ {
+ if((anU1 - anU1crit[i])*aCriticalDelta[i] < 0.0)
+@@ -1995,123 +2044,129 @@
+ isFirst = Standard_False;
+ }
+
+- if( ((aUSurf2f-aU21) <= theTol2D) &&
+- ((aU21-aUSurf2l) <= theTol2D) &&
+- ((aVSurf1f - aV11) <= theTol2D) &&
+- ((aV11 - aVSurf1l) <= theTol2D) &&
+- ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
++ if(isAddingWL1Enabled)
+ {
+- Standard_Boolean isForce = Standard_False;
+- if(!aWL1FindStatus)
++ if( ((aUSurf2f-aU21) <= theTol2D) &&
++ ((aU21-aUSurf2l) <= theTol2D) &&
++ ((aVSurf1f - aV11) <= theTol2D) &&
++ ((aV11 - aVSurf1l) <= theTol2D) &&
++ ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+-
+- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ Standard_Boolean isForce = Standard_False;
++ if(!aWL1FindStatus)
+ {
+- isForce = Standard_True;
+- }
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU21, aV11, aV11Prev,
+- aV21, aV21Prev, isTheReverse,
+- 1.0, isForce, isFound1, isFound2);
++ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ {
++ isForce = Standard_True;
++ }
++
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU21, aV11, aV11Prev,
++ aV21, aV21Prev, isTheReverse,
++ 1.0, isForce, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- {
+- aWL1FindStatus = 1;
++ if(isFound1 || isFound2)
++ {
++ aWL1FindStatus = 1;
++ }
+ }
+- }
+
+- if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
+- {
+- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+- gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
+- aUSurf1f, aUSurf1l, aPeriod,
+- aWLine1->Curve(), theTol2D, isForce))
++ if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
+ {
+- if(!aWL1FindStatus)
++ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
++ gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
++ aUSurf1f, aUSurf1l, aPeriod,
++ aWLine1->Curve(), theTol3D, theTol2D, isForce))
+ {
+- aWL1FindStatus = 1;
++ if(!aWL1FindStatus)
++ {
++ aWL1FindStatus = 1;
++ }
+ }
+ }
+ }
+- }
+- else
+- {
+- if(aWL1FindStatus == 1)
++ else
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
++ if(aWL1FindStatus == 1)
++ {
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU21, aV11, aV11Prev,
+- aV21, aV21Prev, isTheReverse,
+- 1.0, Standard_False, isFound1, isFound2);
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU21, aV11, aV11Prev,
++ aV21, aV21Prev, isTheReverse,
++ 1.0, Standard_False, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- aWL1FindStatus = 2; //start a new line
++ if(isFound1 || isFound2)
++ aWL1FindStatus = 2; //start a new line
++ }
+ }
+ }
+-
+- if( ((aUSurf2f-aU22) <= theTol2D) &&
+- ((aU22-aUSurf2l) <= theTol2D) &&
+- ((aVSurf1f - aV12) <= theTol2D) &&
+- ((aV12 - aVSurf1l) <= theTol2D) &&
+- ((aVSurf2f - aV22) <= theTol2D) &&
+- ((aV22 - aVSurf2l) <= theTol2D))
++
++ if(isAddingWL2Enabled)
+ {
+- Standard_Boolean isForce = Standard_False;
+-
+- if(!aWL2FindStatus)
++ if( ((aUSurf2f-aU22) <= theTol2D) &&
++ ((aU22-aUSurf2l) <= theTol2D) &&
++ ((aVSurf1f - aV12) <= theTol2D) &&
++ ((aV12 - aVSurf1l) <= theTol2D) &&
++ ((aVSurf2f - aV22) <= theTol2D) &&
++ ((aV22 - aVSurf2l) <= theTol2D))
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
++ Standard_Boolean isForce = Standard_False;
+
+- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ if(!aWL2FindStatus)
+ {
+- isForce = Standard_True;
+- }
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU22, aV12, aV12Prev,
+- aV22, aV22Prev, isTheReverse,
+- -1.0, isForce, isFound1, isFound2);
++ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
++ {
++ isForce = Standard_True;
++ }
++
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU22, aV12, aV12Prev,
++ aV22, aV22Prev, isTheReverse,
++ -1.0, isForce, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- {
+- aWL2FindStatus = 1;
++ if(isFound1 || isFound2)
++ {
++ aWL2FindStatus = 1;
++ }
+ }
+- }
+
+- if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
+- {
+- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
+- gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
+- aUSurf1f, aUSurf1l, aPeriod,
+- aWLine2->Curve(), theTol2D, isForce))
++ if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
+ {
+- if(!aWL2FindStatus)
++ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
++ gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
++ aUSurf1f, aUSurf1l, aPeriod,
++ aWLine2->Curve(), theTol3D, theTol2D, isForce))
+ {
+- aWL2FindStatus = 1;
++ if(!aWL2FindStatus)
++ {
++ aWL2FindStatus = 1;
++ }
+ }
+ }
+ }
+- }
+- else
+- {
+- if(aWL2FindStatus == 1)
++ else
+ {
+- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
++ if(aWL2FindStatus == 1)
++ {
++ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
+
+- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
+- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
+- aNulValue, anU1, aU22, aV12, aV12Prev,
+- aV22, aV22Prev, isTheReverse,
+- -1.0, Standard_False, isFound1, isFound2);
++ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
++ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
++ aNulValue, anU1, aU22, aV12, aV12Prev,
++ aV22, aV22Prev, isTheReverse,
++ -1.0, Standard_False, isFound1, isFound2);
+
+- if(isFound1 || isFound2)
+- aWL2FindStatus = 2; //start a new line
++ if(isFound1 || isFound2)
++ aWL2FindStatus = 2; //start a new line
++ }
+ }
+ }
+
+@@ -2237,15 +2292,29 @@
+ }
+ else if(aWLine1->NbPnts() > 1)
+ {
+- isTheEmpty = Standard_False;
+- isAddedIntoWL1 = Standard_True;
++ Standard_Boolean isGood = Standard_True;
++
++ if(aWLine1->NbPnts() == 2)
++ {
++ const IntSurf_PntOn2S& aPf = aWLine1->Point(1);
++ const IntSurf_PntOn2S& aPl = aWLine1->Point(2);
+
+- SeekAdditionalPoints(theQuad1, theQuad2, aWLine1->Curve(),
+- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
+- theTol2D, aPeriod, 1.0, isTheReverse);
++ if(aPf.IsSame(aPl, Precision::Confusion()))
++ isGood = Standard_False;
++ }
+
+- aWLine1->ComputeVertexParameters(theTol3D);
+- theSlin.Append(aWLine1);
++ if(isGood)
++ {
++ isTheEmpty = Standard_False;
++ isAddedIntoWL1 = Standard_True;
++
++ SeekAdditionalPoints( theQuad1, theQuad2, aWLine1->Curve(),
++ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
++ theTol2D, aPeriod, 1.0, isTheReverse);
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++ theSlin.Append(aWLine1);
++ }
+ }
+ else
+ {
+@@ -2267,15 +2336,28 @@
+ }
+ else if(aWLine2->NbPnts() > 1)
+ {
+- isTheEmpty = Standard_False;
+- isAddedIntoWL2 = Standard_True;
++ Standard_Boolean isGood = Standard_True;
++ if(aWLine2->NbPnts() == 2)
++ {
++ const IntSurf_PntOn2S& aPf = aWLine2->Point(1);
++ const IntSurf_PntOn2S& aPl = aWLine2->Point(2);
++
++ if(aPf.IsSame(aPl, Precision::Confusion()))
++ isGood = Standard_False;
++ }
+
+- SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
+- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
+- theTol2D, aPeriod, -1.0, isTheReverse);
++ if(isGood)
++ {
++ isTheEmpty = Standard_False;
++ isAddedIntoWL2 = Standard_True;
+
+- aWLine2->ComputeVertexParameters(theTol3D);
+- theSlin.Append(aWLine2);
++ SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
++ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
++ theTol2D, aPeriod, -1.0, isTheReverse);
++
++ aWLine2->ComputeVertexParameters(theTol3D);
++ theSlin.Append(aWLine2);
++ }
+ }
+ else
+ {
+@@ -2284,6 +2366,203 @@
+ }
+ }
+
++ if(theSlin.Length() > 0)
++ {
++ for(Standard_Integer aNumOfLine = 2; aNumOfLine <= theSlin.Length(); aNumOfLine++)
++ {
++ const Handle(IntPatch_WLine)& aWLine = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine));
++
++ const IntSurf_PntOn2S& aPntFWL = aWLine->Point(1);
++
++ Standard_Real aU1 = 0.0, aU2 = 0.0, aV1 = 0.0, aV2 = 0.0;
++ aPntFWL.Parameters(aU1, aV1, aU2, aV2);
++
++ if( IsEqual(aU1, 0.0) || IsEqual(aU1, aPeriod))
++ {
++ theSlin.Exchange(1, aNumOfLine);
++ break;
++ }
++ }
++
++ for(Standard_Integer aNumOfLine1 = 1; aNumOfLine1 <= theSlin.Length(); aNumOfLine1++)
++ {
++ const Handle(IntPatch_WLine)& aWLine1 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine1));
++
++ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
++ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
++ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
++
++ for(Standard_Integer aNPt = 1; aNPt <= theSPnt.Length(); aNPt++)
++ {
++ const IntSurf_PntOn2S aPntCur = theSPnt.Value(aNPt).PntOn2S();
++
++ if( aPntCur.IsSame(aPntFWL1, Precision::Confusion()) ||
++ aPntCur.IsSame(aPntLWL1, Precision::Confusion()))
++ {
++ theSPnt.Remove(aNPt);
++ aNPt--;
++ }
++ }
++
++ Standard_Boolean hasBeenRemoved = Standard_False;
++ for(Standard_Integer aNumOfLine2 = aNumOfLine1 + 1; aNumOfLine2 <= theSlin.Length(); aNumOfLine2++)
++ {
++ const Handle(IntPatch_WLine)& aWLine2 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine2));
++
++ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
++ const Standard_Integer aNbPntsWL2 = aWLine2->NbPnts();
++
++ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
++ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
++
++ const IntSurf_PntOn2S& aPntFWL2 = aWLine2->Point(1);
++ const IntSurf_PntOn2S& aPntLWL2 = aWLine2->Point(aNbPntsWL2);
++
++ if(aPntFWL1.IsSame(aPntFWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->InsertBefore(1, aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++
++ if(aPntFWL1.IsSame(aPntLWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->InsertBefore(1, aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++
++ if(aPntLWL1.IsSame(aPntFWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->Add(aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++
++ if(aPntLWL1.IsSame(aPntLWL2, Precision::Confusion()))
++ {
++ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
++ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
++
++ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
++ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
++
++ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
++ IsEqual(fmod(aU12, aPeriod), 0.0) ||
++ IsEqual(fmod(aU21, aPeriod), 0.0) ||
++ IsEqual(fmod(aU22, aPeriod), 0.0) ||
++ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
++ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
++ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
++ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
++ {
++ aWLine1->ClearVertexes();
++ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
++ {
++ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
++ aWLine1->Curve()->Add(aPt);
++ }
++
++ aWLine1->ComputeVertexParameters(theTol3D);
++
++ theSlin.Remove(aNumOfLine2);
++ aNumOfLine2--;
++ hasBeenRemoved = Standard_True;
++
++ continue;
++ }
++ }
++ }
++
++ if(hasBeenRemoved)
++ aNumOfLine1--;
++
++ //aWLine1->ComputeVertexParameters(theTol3D);
++ }
++ }//if(theSlin.Length() > 0)
++
++
+ return Standard_True;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.cdl OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.cdl
+--- OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.cdl 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.cdl 2015-01-16 12:59:50.000000000 +0300
+@@ -309,9 +309,21 @@
+ ---C++: return const&
+ returns HCurve2d from Adaptor2d;
+
+- Dump(me)
++ ClearVertexes(me: mutable)
++ is static;
+
+- is static;
++ RemoveVertex(me: mutable;
++ theIndex : Integer from Standard)
++ is static;
++
++ InsertVertexBefore(me: mutable;
++ theIndex : Integer from Standard;
++ thePnt : Point from IntPatch)
++ is static;
++
++ Dump(me)
++
++ is static;
+
+
+ fields
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.lxx OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.lxx
+--- OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.lxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.lxx 2015-01-16 12:59:50.000000000 +0300
+@@ -97,3 +97,27 @@
+ {
+ return svtx(Index);
+ }
++
++inline void IntPatch_WLine::ClearVertexes()
++{
++ svtx.Clear();
++}
++
++inline void IntPatch_WLine::RemoveVertex(const Standard_Integer theIndex)
++{
++ if((theIndex < 1) || (theIndex > NbVertex()))
++ Standard_OutOfRange::Raise("Cannot delete not existing vertex");
++ svtx.Remove(theIndex);
++}
++
++inline void IntPatch_WLine::InsertVertexBefore( const Standard_Integer theIndex,
++ const IntPatch_Point& thePnt)
++{
++ const Standard_Integer aNbVertexes = NbVertex();
++ Standard_Integer anIndex = Max(theIndex, 1);
++
++ if(anIndex > aNbVertexes)
++ svtx.Append(thePnt);
++ else
++ svtx.InsertBefore(theIndex, thePnt);
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cdl OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cdl
+--- OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cdl 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cdl 2015-01-16 13:01:24.000000000 +0300
+@@ -119,6 +119,15 @@
+
+ is static;
+
++ IsSame(me; theOterPoint : PntOn2S from IntSurf;
++ theTol3D, theTol2D: Real from Standard = 0.0)
++
++ ---Purpose: Returns TRUE if 2D- and 3D-coordinates of theOterPoint are equal to
++ -- corresponding coordinates of me (with given tolerance).
++ -- If theTol2D == 0.0 we will compare 3D-points only.
++
++ returns Boolean from Standard;
++
+
+ fields
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cxx OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cxx
+--- OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cxx 2015-01-16 12:59:51.000000000 +0300
+@@ -49,4 +49,31 @@
+ }
+
+
++Standard_Boolean IntSurf_PntOn2S::IsSame( const IntSurf_PntOn2S& theOterPoint,
++ const Standard_Real theTol3D,
++ const Standard_Real theTol2D) const
++{
++ if(pt.SquareDistance(theOterPoint.Value()) > theTol3D*theTol3D)
++ return Standard_False;
+
++ if(IsEqual(theTol2D, 0.0))
++ {//We need not compare 2D-coordinates of the points
++ return Standard_True;
++ }
++
++ Standard_Real aU1 = 0.0, aV1 = 0.0, aU2 = 0.0, aV2 = 0.0;
++ theOterPoint.Parameters(aU1, aV1, aU2, aV2);
++
++ gp_Pnt2d aP1(u1, v1), aP2(aU1, aV1);
++
++ if(!aP1.IsEqual(aP2, theTol2D))
++ return Standard_False;
++
++ aP1.SetCoord(u2, v2);
++ aP2.SetCoord(aU2, aV2);
++
++ if(!aP1.IsEqual(aP2, theTol2D))
++ return Standard_False;
++
++ return Standard_True;
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntTools/IntTools_EdgeFace.cxx OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_EdgeFace.cxx
+--- OCCT-6.8.0_SRC/src/IntTools/IntTools_EdgeFace.cxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_EdgeFace.cxx 2015-01-16 12:59:51.000000000 +0300
+@@ -1365,20 +1365,27 @@
+ (const IntTools_CommonPrt& aCP,
+ Standard_Real& aTx)
+ {
+- Standard_Real aTF, aTL, Tol, U1f,U1l,V1f,V1l, af, al,aDist2, aMinDist2, aTm, aDist2New;
+- Standard_Real aEpsT;
++ Standard_Real aTF, aTL, Tol, U1f,U1l,V1f,V1l;
++ Standard_Real aEpsT, af, al,aDist2, aMinDist2, aTm, aDist2New;
+ Standard_Boolean theflag=Standard_False;
+ Standard_Integer aNbExt, i, iLower ;
+-
++ GeomAbs_CurveType aType;
++ //
+ aCP.Range1(aTF, aTL);
++ aType=myC.GetType();
++ //
+ aEpsT=8.e-5;
++ if (aType==GeomAbs_Line) {
++ aEpsT=9.e-5;
++ }
++ //
+ aTm=0.5*(aTF+aTL);
+ aDist2=DistanceFunction(aTm);
+ aDist2 *= aDist2;
+
+ Tol = Precision::PConfusion();
+
+- const Handle(Geom_Curve)& Curve =BRep_Tool::Curve (myC.Edge(), af, al);
++ const Handle(Geom_Curve)& Curve =BRep_Tool::Curve (myC.Edge(), af, al);
+ const Handle(Geom_Surface)& Surface=BRep_Tool::Surface(myS.Face());
+
+ Surface->Bounds(U1f,U1l,V1f,V1l);
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntTools/IntTools_FaceFace.cxx OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_FaceFace.cxx
+--- OCCT-6.8.0_SRC/src/IntTools/IntTools_FaceFace.cxx 2014-11-11 17:46:54.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_FaceFace.cxx 2015-01-16 12:59:51.000000000 +0300
+@@ -1243,10 +1243,9 @@
+ return;
+ }
+ }
++ //
+ // Do the Curve
+-
+-
+- typl=L->ArcType();
++ //
+ switch (typl) {
+ //########################################
+ // Line, Parabola, Hyperbola
+@@ -1276,10 +1275,14 @@
+ //
+ aNbParts=myLConstruct.NbParts();
+ for (i=1; i<=aNbParts; i++) {
++ Standard_Boolean bFNIt, bLPIt;
++ //
+ myLConstruct.Part(i, fprm, lprm);
+-
+- if (!Precision::IsNegativeInfinite(fprm) &&
+- !Precision::IsPositiveInfinite(lprm)) {
++ //
++ bFNIt=Precision::IsNegativeInfinite(fprm);
++ bLPIt=Precision::IsPositiveInfinite(lprm);
++ //
++ if (!bFNIt && !bLPIt) {
+ //
+ IntTools_Curve aCurve;
+ //
+@@ -1309,7 +1312,7 @@
+ //
+ aCurve.SetFirstCurve2d(H1);
+ }
+-
++ //
+ if(myApprox2) {
+ Handle (Geom2d_Curve) C2d;
+ BuildPCurves(fprm,lprm,Tolpc,myHS2->ChangeSurface().Surface(),newc,C2d);
+@@ -1325,25 +1328,24 @@
+ aCurve.SetSecondCurve2d(H1);
+ }
+ mySeqOfCurve.Append(aCurve);
+- } // end of if (!Precision::IsNegativeInfinite(fprm) && !Precision::IsPositiveInfinite(lprm))
++ } //if (!bFNIt && !bLPIt) {
+ else {
+ // on regarde si on garde
+ //
+- Standard_Boolean bFNIt, bLPIt;
+ Standard_Real aTestPrm, dT=100.;
+-
+- bFNIt=Precision::IsNegativeInfinite(fprm);
+- bLPIt=Precision::IsPositiveInfinite(lprm);
+-
++ //
+ aTestPrm=0.;
+-
+ if (bFNIt && !bLPIt) {
+ aTestPrm=lprm-dT;
+ }
+ else if (!bFNIt && bLPIt) {
+ aTestPrm=fprm+dT;
+ }
+-
++ else {
++ // i.e, if (bFNIt && bLPIt)
++ aTestPrm=IntTools_Tools::IntermediatePoint(-dT, dT);
++ }
++ //
+ gp_Pnt ptref(newc->Value(aTestPrm));
+ //
+ GeomAbs_SurfaceType typS1 = myHS1->GetType();
+@@ -1353,8 +1355,7 @@
+ typS1 == GeomAbs_SurfaceOfRevolution ||
+ typS2 == GeomAbs_SurfaceOfExtrusion ||
+ typS2 == GeomAbs_OffsetSurface ||
+- typS2 == GeomAbs_SurfaceOfRevolution)
+- {
++ typS2 == GeomAbs_SurfaceOfRevolution) {
+ Handle(Geom2d_BSplineCurve) H1;
+ mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
+ continue;
+@@ -1373,7 +1374,7 @@
+ mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
+ }
+ }
+- }// end of for (i=1; i<=myLConstruct.NbParts(); i++)
++ }// for (i=1; i<=aNbParts; i++) {
+ }// case IntPatch_Lin: case IntPatch_Parabola: case IntPatch_Hyperbola:
+ break;
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/math/math_Recipes.cxx OCCT-6.8.0_SRC-patch/src/math/math_Recipes.cxx
+--- OCCT-6.8.0_SRC/src/math/math_Recipes.cxx 2014-11-11 17:47:18.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/math/math_Recipes.cxx 2015-01-16 13:01:25.000000000 +0300
+@@ -177,7 +177,7 @@
+ math_Vector& vv,
+ Standard_Real TINY) {
+
+- Standard_Integer i, imax=0, j, k;
++ Standard_Integer i, imax=1, j, k;
+ Standard_Real big, dum, sum, temp;
+
+ Standard_Integer n = a.RowNumber();
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver_7.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver_7.cxx
+--- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver_7.cxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver_7.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -470,13 +470,6 @@
+ }
+ }
+
+-void OpenGl_GraphicDriver::Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag)
+-{
+- const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
+- if (aCView)
+- aCView->WS->UseTransparency(AFlag);
+-}
+-
+ // =======================================================================
+ // function : InvalidateBVHData
+ // purpose :
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver.hxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver.hxx
+--- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver.hxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver.hxx 2015-01-16 13:01:24.000000000 +0300
+@@ -167,7 +167,6 @@
+ Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
+ Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
+ Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
+- Standard_EXPORT void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
+ Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
+ Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
+ Standard_EXPORT void ZBufferTriedronSetup (const Quantity_NameOfColor XColor = Quantity_NOC_RED, const Quantity_NameOfColor YColor = Quantity_NOC_GREEN, const Quantity_NameOfColor ZColor = Quantity_NOC_BLUE1, const Standard_Real SizeRatio = 0.8, const Standard_Real AxisDiametr = 0.05, const Standard_Integer NbFacettes = 12);
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_View.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_View.cxx
+--- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_View.cxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_View.cxx 2015-01-16 12:59:55.000000000 +0300
+@@ -54,7 +54,7 @@
+
+ OpenGl_View::OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext,
+ OpenGl_StateCounter* theCounter)
+-: mySurfaceDetail(Visual3d_TOD_NONE),
++: mySurfaceDetail(Visual3d_TOD_ALL),
+ myBackfacing(0),
+ myBgTexture(myDefaultBgTexture),
+ myBgGradient(myDefaultBgGradient),
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace_5.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace_5.cxx
+--- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace_5.cxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace_5.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -119,7 +119,7 @@
+ NamedStatus |= OPENGL_NS_2NDPASSNEED;
+ }
+
+- if (myUseTransparency && aProps->trans != 1.0f)
++ if (aProps->trans != 1.0f)
+ {
+ // render transparent
+ myMatTmp.Diffuse.a() = aProps->trans;
+@@ -349,7 +349,7 @@
+ ? TelCullNone
+ : (TelCullMode )AspectFace_set->CullingMode();
+ if (aCullingMode != TelCullNone
+- && myUseTransparency && !(NamedStatus & OPENGL_NS_2NDPASSDO))
++ && !(NamedStatus & OPENGL_NS_2NDPASSDO))
+ {
+ // disable culling in case of translucent shading aspect
+ if (AspectFace_set->IntFront().trans != 1.0f)
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.cxx
+--- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.cxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -156,7 +156,6 @@
+ myTransientDrawToFront (Standard_True),
+ myBackBufferRestored (Standard_False),
+ myIsImmediateDrawn (Standard_False),
+- myUseTransparency (Standard_False),
+ myUseZBuffer (Standard_False),
+ myUseDepthTest (Standard_True),
+ myUseGLLight (Standard_True),
+@@ -255,15 +254,6 @@
+ return Standard_True;
+ }
+
+-// =======================================================================
+-// function : UseTransparency
+-// purpose : call_togl_transparency
+-// =======================================================================
+-void OpenGl_Workspace::UseTransparency (const Standard_Boolean theFlag)
+-{
+- myUseTransparency = theFlag;
+-}
+-
+ //=======================================================================
+ //function : ResetAppliedAspect
+ //purpose : Sets default values of GL parameters in accordance with default aspects
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.hxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.hxx
+--- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.hxx 2014-11-11 17:46:58.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.hxx 2015-01-16 13:01:24.000000000 +0300
+@@ -184,7 +184,6 @@
+ Image_PixMap& theImage,
+ const Graphic3d_BufferType& theBufferType);
+
+- void UseTransparency (const Standard_Boolean theFlag);
+ Standard_Boolean& UseZBuffer() { return myUseZBuffer; }
+ Standard_Boolean& UseDepthTest() { return myUseDepthTest; }
+ Standard_Boolean& UseGLLight() { return myUseGLLight; }
+@@ -671,7 +670,6 @@
+ Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
+ Standard_Boolean myBackBufferRestored;
+ Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
+- Standard_Boolean myUseTransparency;
+ Standard_Boolean myUseZBuffer;
+ Standard_Boolean myUseDepthTest;
+ Standard_Boolean myUseGLLight;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ProjLib/ProjLib_ProjectedCurve.cxx OCCT-6.8.0_SRC-patch/src/ProjLib/ProjLib_ProjectedCurve.cxx
+--- OCCT-6.8.0_SRC/src/ProjLib/ProjLib_ProjectedCurve.cxx 2014-11-11 17:47:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ProjLib/ProjLib_ProjectedCurve.cxx 2015-01-16 12:59:57.000000000 +0300
+@@ -53,6 +53,7 @@
+ #include <Geom2d_TrimmedCurve.hxx>
+ #include <ElCLib.hxx>
+ #include <GeomLib.hxx>
++#include <Extrema_ExtPC.hxx>
+
+ //=======================================================================
+ //function : IsoIsDeg
+@@ -482,7 +483,16 @@
+ IsTrimmed[0] = Standard_True;
+ f = f + dt;
+ myCurve = myCurve->Trim(f, l, Precision::Confusion());
+- Vsingular[0] = ElCLib::Parameter(L, P);
++ // Searching the parameter on the basis curve for surface of revolution
++ Extrema_ExtPC anExtr(P, mySurface->BasisCurve()->Curve(), myTolerance);
++ if (anExtr.IsDone())
++ {
++ Standard_Integer anIndex = 1;
++ while (!anExtr.IsMin(anIndex) && anIndex < anExtr.NbExt()) anIndex++;
++ Vsingular[0] = anExtr.Point(anIndex).Parameter();
++ }
++ else
++ Vsingular[0] = ElCLib::Parameter(L, P);
+ //SingularCase[0] = 3;
+ }
+
+@@ -492,7 +502,16 @@
+ IsTrimmed[1] = Standard_True;
+ l = l - dt;
+ myCurve = myCurve->Trim(f, l, Precision::Confusion());
+- Vsingular[1] = ElCLib::Parameter(L, P);
++ // Searching the parameter on the basis curve for surface of revolution
++ Extrema_ExtPC anExtr(P, mySurface->BasisCurve()->Curve(), myTolerance);
++ if (anExtr.IsDone())
++ {
++ Standard_Integer anIndex = 1;
++ while (!anExtr.IsMin(anIndex) && anIndex < anExtr.NbExt()) anIndex++;
++ Vsingular[1] = anExtr.Point(anIndex).Parameter();
++ }
++ else
++ Vsingular[1] = ElCLib::Parameter(L, P);
+ //SingularCase[1] = 4;
+ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/QABugs/QABugs_11.cxx OCCT-6.8.0_SRC-patch/src/QABugs/QABugs_11.cxx
+--- OCCT-6.8.0_SRC/src/QABugs/QABugs_11.cxx 2014-11-11 17:47:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/QABugs/QABugs_11.cxx 2015-01-16 13:01:24.000000000 +0300
+@@ -236,10 +236,10 @@
+ anAISCtx->AddOrRemoveCurrentObject(aSh4);
+
+ //remove all this objects from context
+- anAISCtx->Clear(aSh1, Standard_False);
+- anAISCtx->Clear(aSh2, Standard_False);
+- anAISCtx->Clear(aSh3, Standard_False);
+- anAISCtx->Clear(aSh4, Standard_False);
++ anAISCtx->Remove (aSh1, Standard_False);
++ anAISCtx->Remove (aSh2, Standard_False);
++ anAISCtx->Remove (aSh3, Standard_False);
++ anAISCtx->Remove (aSh4, Standard_False);
+ return 0;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/SelectMgr/SelectMgr_EntityOwner.cxx OCCT-6.8.0_SRC-patch/src/SelectMgr/SelectMgr_EntityOwner.cxx
+--- OCCT-6.8.0_SRC/src/SelectMgr/SelectMgr_EntityOwner.cxx 2014-11-11 17:47:04.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/SelectMgr/SelectMgr_EntityOwner.cxx 2015-01-16 13:00:02.000000000 +0300
+@@ -129,7 +129,7 @@
+
+ TopLoc_Location SelectMgr_EntityOwner::Location() const
+ {
+- return !HasSelectable() ? TopLoc_Location() : TopLoc_Location(mySelectable->Transformation());
++ return !HasLocation() ? TopLoc_Location() : TopLoc_Location(mySelectable->Transformation());
+ }
+
+ void SelectMgr_EntityOwner::ResetLocation()
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cdl OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cdl
+--- OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cdl 2014-11-11 17:47:05.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cdl 2015-01-16 13:00:03.000000000 +0300
+@@ -135,6 +135,12 @@
+ ---C++: inline
+ ---Purpose: Returns (modifiable) the mode for applying
+ -- ShapeFix::FixVertexPosition before all fixes, by default False.
++
++ FixVertexTolMode (me: mutable) returns Integer;
++ ---C++: return &
++ ---C++: inline
++ ---Purpose: Returns (modifiable) the mode for fixing tolerances of vertices on whole shape
++ -- after performing all fixes
+ fields
+
+ myResult : Shape from TopoDS is protected;
+@@ -147,6 +153,7 @@
+ myFixWireMode : Integer is protected;
+ myFixSameParameterMode : Integer is protected;
+ myFixVertexPositionMode : Integer is protected;
++ myFixVertexTolMode : Integer is protected;
+ myStatus : Integer is protected;
+
+ end Shape;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cxx OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cxx
+--- OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cxx 2014-11-11 17:47:05.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cxx 2015-01-16 13:00:03.000000000 +0300
+@@ -53,6 +53,7 @@
+ myFixWireMode = -1;
+ myFixSameParameterMode = -1;
+ myFixVertexPositionMode =0;
++ myFixVertexTolMode = -1;
+ myFixSolid = new ShapeFix_Solid;
+ }
+
+@@ -71,6 +72,7 @@
+ myFixSameParameterMode = -1;
+ myFixSolid = new ShapeFix_Solid;
+ myFixVertexPositionMode =0;
++ myFixVertexTolMode = -1;
+ Init(shape);
+ }
+
+@@ -97,7 +99,7 @@
+ Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
+ {
+ Standard_Integer savFixSmallAreaWireMode = 0;
+-
++ Standard_Integer savFixVertexTolMode = myFixVertexTolMode;
+ Handle(ShapeFix_Face) fft = Handle(ShapeFix_Face)::DownCast( FixFaceTool() );
+ if ( !fft.IsNull() ) {
+ savFixSmallAreaWireMode = fft->FixSmallAreaWireMode();
+@@ -142,7 +144,7 @@
+ TopoDS_Shape shape = myShape;
+ Standard_Boolean savFixSameParameterMode = myFixSameParameterMode;
+ myFixSameParameterMode = Standard_False;
+-
++ myFixVertexTolMode = Standard_False;
+ Standard_Integer aShapesNb = 0;
+ for ( TopoDS_Iterator anIter(S); anIter.More(); anIter.Next() )
+ ++aShapesNb;
+@@ -159,6 +161,7 @@
+ return Standard_False; // aborted execution
+
+ myFixSameParameterMode = savFixSameParameterMode;
++ myFixVertexTolMode = savFixVertexTolMode;
+ myShape = shape;
+ break;
+ }
+@@ -242,6 +245,26 @@
+ {
+ SameParameter(myResult, Standard_False, theProgress);
+ }
++ if( NeedFix( myFixVertexTolMode))
++ {
++ Standard_Integer nbF = 0;
++ TopExp_Explorer anExpF(myResult, TopAbs_FACE);
++ for( ; anExpF.More() && nbF <= 1; anExpF.Next())
++ nbF++;
++ if( nbF > 1)
++ {
++ //fix for bug 0025455
++ // for case when vertex belong to the different faces it is necessary to check vertices tolerances
++ //after all fixes.
++ //This fix it should be performed for example for case when cutting edge was performed.
++
++ Handle(ShapeFix_Edge) sfe = FixEdgeTool();
++ TopExp_Explorer anExpE (myResult, TopAbs_EDGE);
++ for ( ; anExpE.More(); anExpE.Next())
++ sfe->FixVertexTolerance( TopoDS::Edge (anExpE.Current()));
++
++ }
++ }
+
+ if ( !fft.IsNull() )
+ fft->FixSmallAreaWireMode() = savFixSmallAreaWireMode;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.lxx OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.lxx
+--- OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.lxx 2014-11-11 17:47:05.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.lxx 2015-01-16 13:00:03.000000000 +0300
+@@ -122,3 +122,13 @@
+ {
+ return myFixVertexPositionMode;
+ }
++
++//=======================================================================
++//function : FixVertexTolMode
++//purpose :
++//=======================================================================
++
++inline Standard_Integer& ShapeFix_Shape::FixVertexTolMode()
++{
++ return myFixVertexTolMode;
++}
+\ No newline at end of file
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_Plane.cxx OCCT-6.8.0_SRC-patch/src/V3d/V3d_Plane.cxx
+--- OCCT-6.8.0_SRC/src/V3d/V3d_Plane.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_Plane.cxx 2015-01-16 13:00:15.000000000 +0300
+@@ -70,7 +70,6 @@
+ Graphic3d_MaterialAspect aPlastic (Graphic3d_NOM_PLASTIC);
+ aPlastic.SetColor (theColor);
+ aPlastic.SetTransparency (0.5);
+- theView->SetTransparency (Standard_True);
+ anAsp->SetFrontMaterial (aPlastic);
+ anAsp->SetInteriorStyle (Aspect_IS_HATCH);
+ anAsp->SetHatchStyle (Aspect_HS_GRID_DIAGONAL_WIDE);
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_View_2.cxx OCCT-6.8.0_SRC-patch/src/V3d/V3d_View_2.cxx
+--- OCCT-6.8.0_SRC/src/V3d/V3d_View_2.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_View_2.cxx 2015-01-16 13:01:25.000000000 +0300
+@@ -21,7 +21,6 @@
+ --------------------------------
+ 00-09-92 : GG ; Creation.
+ 24-12-97 : FMN ; Suppression de GEOMLITE
+- 21-02-00 : GG ; Add Transparency() method
+ 23-11-00 : GG ; Add IsActiveLight() and IsActivePlane() methods
+
+ ************************************************************************/
+@@ -102,18 +101,6 @@
+
+ }
+
+-void V3d_View::SetTransparency(const Standard_Boolean AnActivity) {
+-
+- MyTransparencyFlag = AnActivity;
+- MyView->SetTransparency(AnActivity);
+-}
+-
+-
+-Standard_Boolean V3d_View::Transparency() const {
+-
+- return MyTransparencyFlag;
+-}
+-
+ void V3d_View::InitActiveLights() {
+ myActiveLightsIterator.Initialize(MyActiveLights);
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_View.cdl OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cdl
+--- OCCT-6.8.0_SRC/src/V3d/V3d_View.cdl 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cdl 2015-01-16 13:01:25.000000000 +0300
+@@ -35,8 +35,6 @@
+ -- -> Add SetProjModel() method.
+ -- VKH - 15/11/99 : G004
+ -- -> Add method Dump()
+--- GG - IMP210200
+--- -> Add Transparency() method
+ -- THA - 17/08/00 Thomas HARTL <t-hartl@muenchen.matra-dtv.fr>
+ -- -> Add Print method (works only under Windows).
+ -- GG - IMP231100
+@@ -415,10 +413,6 @@
+ ---Level: Public
+ ---Purpose: Returns TRUE when the light is active in this view.
+
+- SetTransparency( me : mutable ; AnActivity : Boolean = Standard_False);
+- ---Level: Public
+- ---Purpose: Activate/Deactivate the transparency in this view.
+-
+ SetImmediateUpdate(me: mutable; theImmediateUpdate: Boolean from Standard)
+ returns Boolean from Standard;
+ ---Purpose: sets the immediate update mode and returns the previous one.
+@@ -1141,10 +1135,6 @@
+ ---Level: Public
+ -- purpose: return the current environment texture used
+
+- Transparency(me) returns Boolean from Standard;
+- ---Level: Public
+- ---Purpose: Returns the transparency activity.
+-
+ Visualization ( me ) returns TypeOfVisualization from V3d;
+ ---Level: Public
+ ---Purpose: Returns the current visualisation mode.
+@@ -1638,7 +1628,6 @@
+ MyGridEchoStructure : Structure from Graphic3d;
+ MyGridEchoGroup : Group from Graphic3d;
+
+- MyTransparencyFlag : Boolean from Standard;
+ myImmediateUpdate: Boolean from Standard is protected;
+
+ myXscreenAxis : Vector from Graphic3d;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_View.cxx OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cxx
+--- OCCT-6.8.0_SRC/src/V3d/V3d_View.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cxx 2015-01-16 13:00:15.000000000 +0300
+@@ -251,8 +251,6 @@
+ aCamera->SetProjectionType ((Type == V3d_ORTHOGRAPHIC)
+ ? Graphic3d_Camera::Projection_Orthographic
+ : Graphic3d_Camera::Projection_Perspective);
+-
+- MyTransparencyFlag = Standard_False;
+ }
+
+ //=============================================================================
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ViewerTest/ViewerTest.cxx OCCT-6.8.0_SRC-patch/src/ViewerTest/ViewerTest.cxx
+--- OCCT-6.8.0_SRC/src/ViewerTest/ViewerTest.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/ViewerTest/ViewerTest.cxx 2015-01-16 13:01:25.000000000 +0300
+@@ -241,7 +241,7 @@
+ Handle(AIS_InteractiveObject)::DownCast (aMap.Find2 (theName));
+
+ if (!anOldObj.IsNull())
+- aContextAIS->Clear (anOldObj, Standard_True);
++ aContextAIS->Remove (anOldObj, Standard_True);
+
+ // remove name and old object from map
+ aMap.UnBind2 (theName);
+@@ -2751,7 +2751,7 @@
+ }
+ else
+ {
+- anAISContext->Clear (anIO, Standard_False);
++ anAISContext->Remove (anIO, Standard_False);
+ aTexturedIO = new AIS_TexturedShape (DBRep::Get (theArgv[1]));
+ GetMapOfAIS().UnBind1 (anIO);
+ GetMapOfAIS().UnBind2 (aShapeName);
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ContextView.cxx OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ContextView.cxx
+--- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ContextView.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ContextView.cxx 2015-01-16 13:00:15.000000000 +0300
+@@ -57,7 +57,7 @@
+ MyVisual (Visual3d_TOV_WIREFRAME),
+ MyLights (),
+ MyTextureEnv(),
+-MySurfaceDetail(Visual3d_TOD_NONE),
++MySurfaceDetail(Visual3d_TOD_ALL),
+ myClipPlanes()
+ {
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cdl OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cdl
+--- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cdl 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cdl 2015-01-16 13:00:15.000000000 +0300
+@@ -1045,15 +1045,6 @@
+ -- or insufficient memory.
+ -- Warning: Works only under Windows.
+
+- SetTransparency ( me : mutable;
+- AFlag : Boolean from Standard )
+- is static;
+- ---Level: Advanced
+- ---Purpose: if <AFlag> is Standard_True then the transparency
+- -- is managed in the view <me>.
+- -- Default Standard_False
+- ---Category: Internal methods
+-
+ ZBufferIsActivated ( me )
+ returns Boolean from Standard
+ is static;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cxx OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cxx
+--- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cxx 2015-01-16 13:00:15.000000000 +0300
+@@ -805,7 +805,6 @@
+ {
+ myGraphicDriver->ActivateView (MyCView);
+ myGraphicDriver->Background (MyCView);
+- myGraphicDriver->Transparency (MyCView, myViewManager->Transparency());
+
+ MyCView.Active = 1;
+
+@@ -1801,22 +1800,6 @@
+ }
+
+ // =======================================================================
+-// function : SetTransparency
+-// purpose :
+-// =======================================================================
+-void Visual3d_View::SetTransparency (const Standard_Boolean theActivity)
+-{
+- if (IsDeleted()
+- || !IsDefined()
+- || !IsActive())
+- {
+- return;
+- }
+-
+- myGraphicDriver->Transparency (MyCView, theActivity);
+-}
+-
+-// =======================================================================
+ // function : SetZBufferActivity
+ // purpose :
+ // =======================================================================
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cdl OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cdl
+--- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cdl 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cdl 2015-01-16 13:00:15.000000000 +0300
+@@ -411,24 +411,6 @@
+ -- if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
+ ---Category: Private methods
+
+- Transparency ( me )
+- returns Boolean from Standard
+- is static;
+- ---Level: Advanced
+- ---Purpose: Returns Standard_True if the transparency
+- -- is activated in all activated views.
+- -- Default Standard_False
+- ---Category: Internal methods
+-
+- SetTransparency ( me : mutable;
+- AFlag : Boolean from Standard )
+- is static;
+- ---Level: Advanced
+- ---Purpose: if <AFlag> is Standard_True then the transparency
+- -- is managed.
+- -- Default Standard_False
+- ---Category: Internal methods
+-
+ ZBufferAuto ( me )
+ returns Boolean from Standard
+ is static;
+@@ -473,7 +455,6 @@
+
+ -- advanced
+ MyZBufferAuto : Boolean from Standard;
+- MyTransparency : Boolean from Standard;
+
+ -- Z layer indexes
+ myLayerIds : MapOfInteger from TColStd;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cxx OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cxx
+--- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cxx 2014-11-11 17:47:15.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cxx 2015-01-16 13:01:25.000000000 +0300
+@@ -83,8 +83,7 @@
+ Graphic3d_StructureManager (theDriver),
+ MyDefinedView (),
+ MyViewGenId (View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*(Visual3d_ViewManager::CurrentId ()-1),View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*Visual3d_ViewManager::CurrentId ()-1),
+-MyZBufferAuto (Standard_False),
+-MyTransparency (Standard_False)
++MyZBufferAuto (Standard_False)
+ {
+ // default layer is always presented in display layer sequence
+ // it can not be removed
+@@ -558,24 +557,6 @@
+ MyViewGenId.Free(aViewId);
+ }
+
+-void Visual3d_ViewManager::SetTransparency (const Standard_Boolean AFlag)
+-{
+- if (MyTransparency && AFlag) return;
+- if (! MyTransparency && ! AFlag) return;
+-
+- for(int i=1; i<=MyDefinedView.Length(); i++)
+- {
+- (MyDefinedView.Value(i))->SetTransparency(AFlag);
+- }
+-
+- MyTransparency = AFlag;
+-}
+-
+-Standard_Boolean Visual3d_ViewManager::Transparency () const
+-{
+- return (MyTransparency);
+-}
+-
+ void Visual3d_ViewManager::SetZBufferAuto (const Standard_Boolean AFlag)
+ {
+ if (MyZBufferAuto && AFlag) return;
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/boolean/bcut_complex/N9 OCCT-6.8.0_SRC-patch/tests/boolean/bcut_complex/N9
+--- OCCT-6.8.0_SRC/tests/boolean/bcut_complex/N9 2014-11-11 17:47:21.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/boolean/bcut_complex/N9 2015-01-16 13:00:21.000000000 +0300
+@@ -1,8 +1,8 @@
+ # Original bug : pro14942
+ # Date : 26Aout98
+
+-#CR23958 puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
+-#CR23958 puts "TODO #22911 ALL: Error : The area of the resulting shape is"
++puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
++puts "TODO #22911 ALL: Error : The area of the resulting shape is"
+
+ restore [locate_data_file CTO904_pro14942a.rle] a
+ restore [locate_data_file pro14942b.rle] b
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/boolean/bfuse_complex/P1 OCCT-6.8.0_SRC-patch/tests/boolean/bfuse_complex/P1
+--- OCCT-6.8.0_SRC/tests/boolean/bfuse_complex/P1 2014-11-11 17:47:22.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/boolean/bfuse_complex/P1 2015-01-16 13:00:23.000000000 +0300
+@@ -1,4 +1,5 @@
+ puts "TODO ?OCC24157 ALL: Error : The area of the resulting shape is"
++puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
+ # cts17861
+
+ restore [locate_data_file CTO900_cts17861a.rle] a
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/boolean/bopcommon_complex/J1 OCCT-6.8.0_SRC-patch/tests/boolean/bopcommon_complex/J1
+--- OCCT-6.8.0_SRC/tests/boolean/bopcommon_complex/J1 2014-11-11 17:47:23.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/boolean/bopcommon_complex/J1 2015-01-16 13:00:24.000000000 +0300
+@@ -1,3 +1,6 @@
++puts "TODO #22911 ALL: Error : The bopcommon is not valid. The area is"
++puts "TODO #22911 ALL: Error : The area of the resulting shape is"
++
+ restore [locate_data_file a158] a
+ restore [locate_data_file b148] b
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/begin OCCT-6.8.0_SRC-patch/tests/bugs/begin
+--- OCCT-6.8.0_SRC/tests/bugs/begin 2014-11-11 17:47:29.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/begin 2015-01-16 13:01:25.000000000 +0300
+@@ -253,7 +253,7 @@
+ }
+
+ # Check if list of xdistcs-command is valid
+-proc checkList {List Tolerance D_good} {
++proc checkList {List Tolerance D_good Limit_Tol} {
+ set L1 [llength ${List}]
+ set L2 10
+ set L3 5
+@@ -266,7 +266,14 @@
+ set D [lindex ${List} ${j2}]
+ #puts "i=${i} j1=${j1} j2=${j2} T=${T} D=${D}"
+ if { [expr abs(${D} - ${D_good})] > ${Tolerance} } {
+- puts "Error: i=${i} T=${T} D=${D}"
++ puts "Error : T=${T} D=${D}"
++ }
++
++ if { ${Tolerance} > ${Limit_Tol} } {
++ if { [expr abs(${D} - ${D_good})] > ${Limit_Tol}
++ && [expr abs(${D} - ${D_good})] <= ${Tolerance} } {
++ puts "Attention (critical value of tolerance) : T=${T} D=${D}"
++ }
+ }
+ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/heal/bug25455 OCCT-6.8.0_SRC-patch/tests/bugs/heal/bug25455
+--- OCCT-6.8.0_SRC/tests/bugs/heal/bug25455 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/heal/bug25455 2015-01-16 13:00:32.000000000 +0300
+@@ -0,0 +1,21 @@
++puts "============"
++puts "OCC25455"
++puts "============"
++puts ""
++######################################################
++# fixshape works at the second attempt
++######################################################
++
++restore [locate_data_file bug25455_rx.brep] rx
++
++fixshape rx rx
++
++set info [checkshape rx]
++
++# Resume
++puts ""
++if { [regexp {This shape seems to be valid} ${info}] } {
++ puts "OK: fixshape works properly"
++} else {
++ puts "Error: fixshape works bad"
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_1 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_1
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_1 2014-11-11 17:47:31.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_1 2015-01-16 13:01:25.000000000 +0300
+@@ -22,16 +22,16 @@
+ renamevar p_1 result
+
+ set status 0
+- set length 110.161
+- set nb_v_good 4
+- set nb_e_good 4
++ set length 110.167
++ set nb_v_good 1
++ set nb_e_good 1
+ set nb_w_good 1
+ set nb_f_good 0
+ set nb_sh_good 0
+ set nb_sol_good 0
+ set nb_compsol_good 0
+ set nb_compound_good 0
+- set nb_shape_good 9
++ set nb_shape_good 3
+ }
+
+ if { ${mistake} != 0 } {
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_2 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_2
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_2 2014-11-11 17:47:31.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_2 2015-01-16 13:01:25.000000000 +0300
+@@ -22,16 +22,16 @@
+ renamevar p_2 result
+ set status 0
+
+- set length 110.171
+- set nb_v_good 4
+- set nb_e_good 4
++ set length 110.167
++ set nb_v_good 1
++ set nb_e_good 1
+ set nb_w_good 1
+ set nb_f_good 0
+ set nb_sh_good 0
+ set nb_sol_good 0
+ set nb_compsol_good 0
+ set nb_compound_good 0
+- set nb_shape_good 9
++ set nb_shape_good 3
+ }
+
+ # Resume
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22864 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22864
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22864 2014-11-11 17:47:32.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22864 2015-01-16 13:00:34.000000000 +0300
+@@ -18,15 +18,15 @@
+ #
+ set status 0
+ #
+-set nb_v_good 8
+-set nb_e_good 12
+-set nb_w_good 4
+-set nb_f_good 4
++set nb_v_good 2
++set nb_e_good 3
++set nb_w_good 1
++set nb_f_good 1
+ set nb_sh_good 0
+ set nb_sol_good 0
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 29
++set nb_shape_good 8
+ #
+ set Numbers 11
+ #
+@@ -95,7 +95,7 @@
+ puts "Faulty ${BugNumber}"
+ }
+
+-set square 8444.76
++set square 6606.88
+ set 2dviewer 0
+
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22967 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22967
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22967 2014-11-11 17:47:32.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22967 2015-01-16 13:00:34.000000000 +0300
+@@ -7,7 +7,7 @@
+ ###########################################################################################################
+
+ set BugNumber OCC22967
+-set check_value 3.46945e-006
++set check_value 8.46459e-006
+
+ restore [locate_data_file bug22967_Cylinder_1.brep] b1
+ restore [locate_data_file bug22967_Scale_1.brep] b2
+@@ -54,6 +54,6 @@
+ puts "OK ${BugNumber}"
+ }
+
+-set square 669221
++set square 668843
+ set 2dviewer 0
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug23218 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug23218
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug23218 2014-11-11 17:47:32.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug23218 2015-01-16 13:00:35.000000000 +0300
+@@ -19,7 +19,7 @@
+ puts $result
+ puts "Finish project operation ..."
+
+-set GoodToleranceReached 2.4950140688989345e-006
++set GoodToleranceReached 6.3315853638232248e-007
+ regexp {Tolerance Reached=([-0-9.+eE]+)} $result full ToleranceReached
+
+ proc GetPercent {Value GoodValue} {
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug472_3 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug472_3
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug472_3 2014-11-11 17:47:32.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug472_3 2015-01-16 13:00:35.000000000 +0300
+@@ -1,7 +1,7 @@
+ #puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
+ #puts "TODO OCC12345 ALL: Error : The square of result shape is"
+-puts "TODO OCC12345 ALL: Error : The command is not valid"
+-puts "TODO OCC12345 ALL: Error : Result shape is WRONG because it must contains"
++#puts "TODO OCC12345 ALL: Error : The command is not valid"
++#puts "TODO OCC12345 ALL: Error : Result shape is WRONG because it must contains"
+
+ puts "========================"
+ puts " OCC472 "
+@@ -20,8 +20,8 @@
+
+ bfuse result b1 b2
+
+-set nb_v_good 5
+-set nb_e_edge 7
+-set square 0
++set nb_v_good 66
++set nb_e_edge 107
++set square 31657.5
+ set 2dviewer 0
+
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug497_3 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug497_3
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug497_3 2014-11-11 17:47:32.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug497_3 2015-01-16 13:00:35.000000000 +0300
+@@ -15,5 +15,5 @@
+
+ bcut result a_1 a_2
+
+-set square 1773.6
++set square 2471.48
+ set 2dviewer 0
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24154 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24154
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24154 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24154 2015-01-16 13:01:25.000000000 +0300
+@@ -12,18 +12,19 @@
+ bop b1 b2
+ bopcut result
+
+-set square 2.68434e+06
++#set square 2.68434e+06
++set square 5.21269e+06
+ set volume 7.35468e+07
+
+ # Analysis of "nbshapes res"
+ set nb_v_good 18
+-set nb_e_good 27
+-set nb_w_good 11
+-set nb_f_good 11
++set nb_e_good 36
++set nb_w_good 18
++set nb_f_good 18
+ set nb_sh_good 1
+ set nb_sol_good 1
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 70
++set nb_shape_good 93
+
+ set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24798 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24798
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24798 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24798 2015-01-16 13:00:37.000000000 +0300
+@@ -12,17 +12,17 @@
+ bop b1 b2
+ bopcut result
+
+-set square 1826.15
++set square 1826.16
+
+ # Analysis of "nbshapes res"
+-set nb_v_good 49
+-set nb_e_good 72
++set nb_v_good 44
++set nb_e_good 67
+ set nb_w_good 29
+ set nb_f_good 22
+ set nb_sh_good 1
+ set nb_sol_good 1
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 175
++set nb_shape_good 165
+
+ set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_common OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_common
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_common 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_common 2015-01-16 13:00:37.000000000 +0300
+@@ -43,16 +43,16 @@
+ bfillds
+ bbop result 0
+
+-set square 10008.5
++set square 10008.9
+
+-set nb_v_good 260
+-set nb_e_good 306
++set nb_v_good 140
++set nb_e_good 186
+ set nb_w_good 126
+ set nb_f_good 126
+ set nb_sh_good 40
+ set nb_sol_good 40
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 899
++set nb_shape_good 659
+
+ set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_cut OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_cut
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_cut 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_cut 2015-01-16 13:00:37.000000000 +0300
+@@ -45,14 +45,14 @@
+
+ set square 103838
+
+-set nb_v_good 280
+-set nb_e_good 338
++set nb_v_good 160
++set nb_e_good 218
+ set nb_w_good 142
+ set nb_f_good 80
+ set nb_sh_good 3
+ set nb_sol_good 3
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 847
++set nb_shape_good 607
+
+ set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_fuse OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_fuse
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_fuse 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_fuse 2015-01-16 13:00:37.000000000 +0300
+@@ -46,14 +46,14 @@
+
+ set square 157211
+
+-set nb_v_good 280
+-set nb_e_good 338
++set nb_v_good 160
++set nb_e_good 218
+ set nb_w_good 142
+ set nb_f_good 80
+ set nb_sh_good 1
+ set nb_sol_good 1
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 843
++set nb_shape_good 603
+
+ set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24981 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24981
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24981 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24981 2015-01-16 13:00:37.000000000 +0300
+@@ -20,14 +20,14 @@
+ bfillds
+ bbuild result
+
+-set nb_v_good 268
+-set nb_e_good 366
++set nb_v_good 170
++set nb_e_good 268
+ set nb_w_good 243
+ set nb_f_good 195
+ set nb_sh_good 75
+ set nb_sol_good 75
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 1223
++set nb_shape_good 1027
+
+ set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_11 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_11
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_11 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_11 2015-01-16 13:00:37.000000000 +0300
+@@ -6,6 +6,12 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # bopcurves command
+
+ restore [locate_data_file bug25292_Input_0.brep] b1
+@@ -21,11 +27,17 @@
+ #############################
+
+ regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
++
++#This value must be equal to the analogical value in bug25292_11 and bug25292_12 of "bugs modalg_5" testgrid.
+ set MaxTol 1.e-7
++
++#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
++set GoodNbCurv 4
++
+ if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+ }
+-set GoodNbCurv 7
++
+ if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: Curve Number is bad!"
+ }
+@@ -34,105 +46,54 @@
+
+ # 1
+ puts ""
+-puts "First curve"
+
+ mksurface s1 f1
+ mksurface s2 f2
+
+-dlog reset
+-dlog on
+-xdistcs c_1 s1 0 1 10
+-set Log1 [dlog get]
+-
+-set List1 [split ${Log1} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List1} ${Tolerance} ${D_good}
+-
+-# 2
+-puts ""
+-puts "Second curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_2 s1 0 1 10
+-set Log2 [dlog get]
+-
+-set List2 [split ${Log2} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List2} ${Tolerance} ${D_good}
+-
+-# 3
+-puts ""
+-puts "Third curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_3 s1 0 1 10
+-set Log3 [dlog get]
+-
+-set List3 [split ${Log3} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List3} ${Tolerance} ${D_good}
+-
+-# 4
+-puts ""
+-puts "Fourth curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_4 s1 0 1 10
+-set Log4 [dlog get]
+-
+-set List4 [split ${Log4} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List4} ${Tolerance} ${D_good}
+-
+-# 5
+-puts ""
+-puts "Fifth curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_5 s1 0 1 10
+-set Log5 [dlog get]
+-
+-set List5 [split ${Log5} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List5} ${Tolerance} ${D_good}
+-
+-# 6
+-puts ""
+-puts "Sixth curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_6 s1 0 1 10
+-set Log6 [dlog get]
+-
+-set List6 [split ${Log6} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List6} ${Tolerance} ${D_good}
+-
+-# 7
+-puts ""
+-puts "Seventh curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_7 s1 0 1 10
+-set Log7 [dlog get]
+-
+-set List7 [split ${Log7} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List7} ${Tolerance} ${D_good}
+-
++for {set i 1} {$i <= ${NbCurv}} {incr i} {
++ set log [dump c_$i]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++
++ puts "U1=${U1}"
++ puts "U2=${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s1 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s2 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++}
+
+ v2d
+ 2dfit
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_12 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_12
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_12 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_12 2015-01-16 13:00:37.000000000 +0300
+@@ -1,5 +1,3 @@
+-puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
+-
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -8,6 +6,12 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # bopcurves command
+
+ restore [locate_data_file bug25292_Input_0.brep] b1
+@@ -23,11 +27,17 @@
+ #############################
+
+ regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
++
++#This value must be equal to the analogical value in bug25292_11 and bug25292_12 of "bugs modalg_5" testgrid.
+ set MaxTol 1.e-7
++
++#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
++set GoodNbCurv 4
++
+ if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+ }
+-set GoodNbCurv 7
++
+ if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: Curve Number is bad!"
+ }
+@@ -36,112 +46,55 @@
+
+ # 1
+ puts ""
+-puts "First curve"
+
+ mksurface s1 f1
+ mksurface s2 f2
+
+-dlog reset
+-dlog on
+-xdistcs c_1 s1 0 1 10
+-set Log1 [dlog get]
+-
+-set List1 [split ${Log1} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List1} ${Tolerance} ${D_good}
+-
+-# 2
+-puts ""
+-puts "Second curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_2 s1 0 1 10
+-set Log2 [dlog get]
+-
+-set List2 [split ${Log2} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List2} ${Tolerance} ${D_good}
+-
+-# 3
+-puts ""
+-puts "Third curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_3 s1 0 1 10
+-set Log3 [dlog get]
+-
+-set List3 [split ${Log3} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List3} ${Tolerance} ${D_good}
+-
+-# 4
+-puts ""
+-puts "Fourth curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_4 s1 0 1 10
+-set Log4 [dlog get]
+-
+-set List4 [split ${Log4} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List4} ${Tolerance} ${D_good}
+-
+-# 5
+-if { [info exist c_5] } {
+-puts ""
+-puts "Fifth curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_5 s1 0 1 10
+-set Log5 [dlog get]
+-
+-set List5 [split ${Log5} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List5} ${Tolerance} ${D_good}
+-}
+-
+-# 6
+-if { [info exist c_6] } {
+-puts ""
+-puts "Sixth curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_6 s1 0 1 10
+-set Log6 [dlog get]
+-
+-set List6 [split ${Log6} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List6} ${Tolerance} ${D_good}
++for {set i 1} {$i <= ${NbCurv}} {incr i} {
++ set log [dump c_$i]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++
++ puts "U1=${U1}"
++ puts "U2=${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s1 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s2 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
+ }
+
+-# 7
+-if { [info exist c_7] } {
+-puts ""
+-puts "Seventh curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_7 s1 0 1 10
+-set Log7 [dlog get]
+-
+-set List7 [split ${Log7} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List7} ${Tolerance} ${D_good}
+-}
+-
+-
+ v2d
+ 2dfit
+ set only_screen_axo 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_13 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_13
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_13 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_13 2015-01-16 13:00:37.000000000 +0300
+@@ -23,14 +23,14 @@
+
+ set square 289.348
+
+-set nb_v_good 12
+-set nb_e_good 18
++set nb_v_good 9
++set nb_e_good 15
+ set nb_w_good 10
+ set nb_f_good 10
+ set nb_sh_good 3
+ set nb_sol_good 3
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 57
++set nb_shape_good 51
+
+ set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_14 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_14
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_14 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_14 2015-01-16 13:00:37.000000000 +0300
+@@ -1,7 +1,3 @@
+-puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 12 vertices instead of 9"
+-puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 18 edges instead of 15"
+-puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 57 shapes instead of 51"
+-
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -27,14 +23,14 @@
+
+ set square 289.348
+
+-set nb_v_good 12
+-set nb_e_good 18
++set nb_v_good 9
++set nb_e_good 15
+ set nb_w_good 10
+ set nb_f_good 10
+ set nb_sh_good 3
+ set nb_sol_good 3
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 57
++set nb_shape_good 51
+
+ set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_15 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_15
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_15 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_15 2015-01-16 13:01:25.000000000 +0300
+@@ -6,8 +6,37 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++
+ # intersect command
+
++#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
++set GoodNbCurv 4
++
+ restore [locate_data_file bug25292_Input_0.brep] b1
+ restore [locate_data_file bug25292_Input_1.brep] b2
+
+@@ -20,11 +49,98 @@
+ mksurface s2 f2
+
+ #################
+-intersect i s1 s2
++intersect res s1 s2
+ #################
+-
+-if { [info exist i_7] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_16 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_16
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_16 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_16 2015-01-16 13:01:25.000000000 +0300
+@@ -1,5 +1,3 @@
+-puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
+-
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -8,8 +6,37 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++
+ # intersect command
+
++#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
++set GoodNbCurv 4
++
+ restore [locate_data_file bug25292_Input_0.brep] b1
+ restore [locate_data_file bug25292_Input_1.brep] b2
+
+@@ -22,11 +49,99 @@
+ mksurface s2 f2
+
+ #################
+-intersect i s2 s1
++intersect res s2 s1
+ #################
+
+-if { [info exist i_7] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_21 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_21
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_21 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_21 2015-01-16 13:00:37.000000000 +0300
+@@ -6,6 +6,12 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # bopcurves command
+
+ restore [locate_data_file bug25292_Input_3.brep] b1
+@@ -17,66 +23,74 @@
+ copy b2_1 f2
+
+ #########################
+-set log [bopcurves f1 f2]
++set log [bopcurves f1 f2 -2d]
+ #########################
+
+ regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
++
++#This value must be equal to the analogical value in bug25292_21 and bug25292_22 of "bugs modalg_5" testgrid.
+ set MaxTol 1.e-7
++
++#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
++set GoodNbCurv 2
++
+ if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+ }
+-set GoodNbCurv 3
++
+ if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: Curve Number is bad!"
+ }
+
+ #-------------
+
+-# 1
+-puts ""
+-puts "First curve"
+-
+ mksurface s1 f1
+ mksurface s2 f2
+
+-dlog reset
+-dlog on
+-xdistcs c_1 s1 0 1 10
+-set Log1 [dlog get]
+-
+-set List1 [split ${Log1} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List1} ${Tolerance} ${D_good}
+-
+-# 2
+-puts ""
+-puts "Second curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_2 s1 0 1 10
+-set Log2 [dlog get]
+-
+-set List2 [split ${Log2} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List2} ${Tolerance} ${D_good}
+-
+-# 3
+-puts ""
+-puts "Third curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_3 s1 0 1 10
+-set Log3 [dlog get]
+-
+-set List3 [split ${Log3} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List3} ${Tolerance} ${D_good}
+-
++for {set i 1} {$i <= ${NbCurv}} {incr i} {
++ set log [dump c_$i]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++
++ puts "U1=${U1}"
++ puts "U2=${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s1 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s2 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++}
+
+ smallview
+ fit
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_22 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_22
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_22 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_22 2015-01-16 13:00:37.000000000 +0300
+@@ -1,5 +1,3 @@
+-puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
+-
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -8,6 +6,12 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # bopcurves command
+
+ restore [locate_data_file bug25292_Input_3.brep] b1
+@@ -19,69 +23,75 @@
+ copy b2_1 f2
+
+ #########################
+-set log [bopcurves f2 f1]
++set log [bopcurves f2 f1 -2d]
+ #########################
+
+ regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
++
++#This value must be equal to the analogical value in bug25292_21 and bug25292_22 of "bugs modalg_5" testgrid.
+ set MaxTol 1.e-7
++
++#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
++set GoodNbCurv 2
++
+ if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+ }
+-set GoodNbCurv 3
++
+ if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: Curve Number is bad!"
+ }
+
+ #-------------
+
+-# 1
+-puts ""
+-puts "First curve"
+-
+ mksurface s1 f1
+ mksurface s2 f2
+
+-dlog reset
+-dlog on
+-xdistcs c_1 s1 0 1 10
+-set Log1 [dlog get]
+-
+-set List1 [split ${Log1} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List1} ${Tolerance} ${D_good}
+-
+-# 2
+-puts ""
+-puts "Second curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_2 s1 0 1 10
+-set Log2 [dlog get]
+-
+-set List2 [split ${Log2} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List2} ${Tolerance} ${D_good}
+-
+-# 3
+-if { [info exist c_3] } {
+-puts ""
+-puts "Third curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_3 s1 0 1 10
+-set Log3 [dlog get]
+-
+-set List3 [split ${Log3} {TD= \t\n}]
+-set Tolerance 1.0e-7
+-set D_good 0.
+-checkList ${List3} ${Tolerance} ${D_good}
++for {set i 1} {$i <= ${NbCurv}} {incr i} {
++ set log [dump c_$i]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++
++ puts "U1=${U1}"
++ puts "U2=${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s1 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s2 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance 1.0e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
+ }
+
+-
+ smallview
+ fit
+ set only_screen_axo 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_23 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_23
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_23 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_23 2015-01-16 13:00:37.000000000 +0300
+@@ -21,16 +21,17 @@
+ bfillds
+ bbuild result
+
++#These values must be equal to the analogical values in bug25292_23 and bug25292_24 of "bugs modalg_5" testgrid.
+ set square 31.6797
+
+-set nb_v_good 11
+-set nb_e_good 20
++set nb_v_good 10
++set nb_e_good 19
+ set nb_w_good 13
+ set nb_f_good 13
+ set nb_sh_good 3
+ set nb_sol_good 3
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 64
++set nb_shape_good 62
+
+ set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_24 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_24
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_24 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_24 2015-01-16 13:00:37.000000000 +0300
+@@ -1,8 +1,3 @@
+-puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 11 vertices instead of 10"
+-puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 20 edges instead of 19"
+-puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 64 shapes instead of 62"
+-
+-
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -26,16 +21,17 @@
+ bfillds
+ bbuild result
+
++#These values must be equal to the analogical values in bug25292_23 and bug25292_24 of "bugs modalg_5" testgrid.
+ set square 31.6797
+
+-set nb_v_good 11
+-set nb_e_good 20
++set nb_v_good 10
++set nb_e_good 19
+ set nb_w_good 13
+ set nb_f_good 13
+ set nb_sh_good 3
+ set nb_sol_good 3
+ set nb_compsol_good 0
+ set nb_compound_good 1
+-set nb_shape_good 64
++set nb_shape_good 62
+
+ set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_25 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_25
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_25 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_25 2015-01-16 13:01:25.000000000 +0300
+@@ -6,8 +6,37 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++
+ # intersect command
+
++#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
++set GoodNbCurv 2
++
+ restore [locate_data_file bug25292_Input_3.brep] b1
+ restore [locate_data_file bug25292_Input_11.brep] b2
+
+@@ -20,11 +49,100 @@
+ mksurface s2 f2
+
+ #################
+-intersect i s1 s2
++intersect res s1 s2
+ #################
+
+-if { [info exist i_3] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
++
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_26 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_26
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_26 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_26 2015-01-16 13:01:25.000000000 +0300
+@@ -1,5 +1,3 @@
+-puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
+-
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -8,8 +6,37 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++
+ # intersect command
+
++#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
++set GoodNbCurv 2
++
+ restore [locate_data_file bug25292_Input_3.brep] b1
+ restore [locate_data_file bug25292_Input_11.brep] b2
+
+@@ -22,12 +49,99 @@
+ mksurface s2 f2
+
+ #################
+-intersect i s2 s1
++intersect res s2 s1
+ #################
+
+-if { [info exist i_3] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.1e-7
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+-
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_31 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_31
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_31 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_31 2015-01-16 13:01:25.000000000 +0300
+@@ -6,6 +6,12 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # bopcurves command
+
+ restore [locate_data_file bug25292_f1.brep] f1
+@@ -16,48 +22,69 @@
+ #############################
+
+ regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
+-set MaxTol 1.e-3
++
++#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
++set MaxTol 3.e-4
++
++#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
++set GoodNbCurv 1
++
+ if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+ }
+-set GoodNbCurv 2
+ if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: Curve Number is bad!!"
+ }
+
+ #-------------
+
+-# 1
+-puts ""
+-puts "First curve"
+-
+ mksurface s1 f1
+ mksurface s2 f2
+
+-dlog reset
+-dlog on
+-xdistcs c_1 s1 0 1 10
+-set Log1 [dlog get]
+-
+-set List1 [split ${Log1} {TD= \t\n}]
+-set Tolerance 1.0e-4
+-set D_good 0.
+-checkList ${List1} ${Tolerance} ${D_good}
+-
+-# 2
+-puts ""
+-puts "Second curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_2 s1 0 1 10
+-set Log2 [dlog get]
+-
+-set List2 [split ${Log2} {TD= \t\n}]
+-set Tolerance 1.0e-4
+-set D_good 0.
+-checkList ${List2} ${Tolerance} ${D_good}
+-
++for {set i 1} {$i <= ${NbCurv}} {incr i} {
++ set log [dump c_$i]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++
++ puts "U1=${U1}"
++ puts "U2=${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s1 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance MaxTol
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s2 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance MaxTol
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++}
+
+ smallview
+ fit
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_32 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_32
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_32 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_32 2015-01-16 13:01:25.000000000 +0300
+@@ -1,3 +1,5 @@
++puts "TODO OCC25331 Debian60-64: Error: Tolerance is too big!"
++
+ puts "================"
+ puts "OCC25292"
+ puts "================"
+@@ -6,6 +8,12 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # bopcurves command
+
+ restore [locate_data_file bug25292_f1.brep] f1
+@@ -16,48 +24,69 @@
+ #############################
+
+ regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
+-set MaxTol 1.e-3
++
++#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
++set MaxTol 3.e-4
++
++#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
++set GoodNbCurv 1
++
+ if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+ }
+-set GoodNbCurv 2
+ if {${NbCurv} != ${GoodNbCurv}} {
+ puts "Error: Curve Number is bad!!"
+ }
+
+ #-------------
+
+-# 1
+-puts ""
+-puts "First curve"
+-
+ mksurface s1 f1
+ mksurface s2 f2
+
+-dlog reset
+-dlog on
+-xdistcs c_1 s1 0 1 10
+-set Log1 [dlog get]
+-
+-set List1 [split ${Log1} {TD= \t\n}]
+-set Tolerance 1.0e-4
+-set D_good 0.
+-checkList ${List1} ${Tolerance} ${D_good}
+-
+-# 2
+-puts ""
+-puts "Second curve"
+-
+-dlog reset
+-dlog on
+-xdistcs c_2 s1 0 1 10
+-set Log2 [dlog get]
+-
+-set List2 [split ${Log2} {TD= \t\n}]
+-set Tolerance 1.0e-4
+-set D_good 0.
+-checkList ${List2} ${Tolerance} ${D_good}
+-
++for {set i 1} {$i <= ${NbCurv}} {incr i} {
++ set log [dump c_$i]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++
++ puts "U1=${U1}"
++ puts "U2=${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s1 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance MaxTol
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs c_$i s2 ${U1} ${U2} 10
++ set Log2 [dlog get]
++ set List2 [split ${Log2} {TD= \t\n}]
++ set Tolerance MaxTol
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
++}
+
+ smallview
+ fit
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_33 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_33
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_33 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_33 2015-01-16 13:00:37.000000000 +0300
+@@ -6,8 +6,37 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++
+ # intersect command
+
++#This value must be equal to the analogical value in bug25292_33 and bug25292_34 of "bugs modalg_5" testgrid.
++set GoodNbCurv 1
++
+ restore [locate_data_file bug25292_f1.brep] f1
+ restore [locate_data_file bug25292_f2.brep] f2
+
+@@ -15,11 +44,99 @@
+ mksurface s2 f2
+
+ #################
+-intersect i s1 s2
++intersect res s1 s2
+ #################
+
+-if { [info exist i] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_34 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_34
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_34 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_34 2015-01-16 13:00:37.000000000 +0300
+@@ -6,8 +6,37 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++
+ # intersect command
+
++#This value must be equal to the analogical value in bug25292_33 and bug25292_34 of "bugs modalg_5" testgrid.
++set GoodNbCurv 1
++
+ restore [locate_data_file bug25292_f1.brep] f1
+ restore [locate_data_file bug25292_f2.brep] f2
+
+@@ -15,11 +44,99 @@
+ mksurface s2 f2
+
+ #################
+-intersect i s2 s1
++intersect res s2 s1
+ #################
+
+-if { [info exist i] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 1.0e-6
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_35 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_35
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_35 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_35 2015-01-16 13:01:25.000000000 +0300
+@@ -6,8 +6,38 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # intersect command for trimmed surfaces
+
++#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid.
++set GoodNbCurv 2
++
+ restore [locate_data_file bug25292_f1.brep] f1
+ restore [locate_data_file bug25292_f2.brep] f2
+
+@@ -21,11 +51,99 @@
+ trim s2t s2 0. 1.570796326795 -275 275
+
+ ###################
+-intersect k s1t s2t
++intersect res s1t s2t
+ ###################
+
+-if { [info exist k_2] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_36 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_36
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_36 2014-11-11 17:47:34.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_36 2015-01-16 13:01:25.000000000 +0300
+@@ -6,8 +6,38 @@
+ # Face/Face intersection algorithm gives different results for different order of the arguments
+ #######################################################################
+
++proc GetRange { curve } {
++ global U1
++ global U2
++
++ set log [uplevel dump $curve]
++
++ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
++ puts "Degree=${Degree}"
++ puts "Poles=${Poles}"
++ puts "KnotsPoles=${KnotsPoles}"
++ puts ""
++
++ set Knot 1
++ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U1 Mult1
++
++ set Knot ${KnotsPoles}
++ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
++ regexp ${exp_string} ${log} full U2 Mult2
++}
++
++puts "##############################"
++puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
++puts "##############################"
++puts ""
++puts ""
++
+ # intersect command for trimmed surfaces
+
++#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid.
++set GoodNbCurv 2
++
+ restore [locate_data_file bug25292_f1.brep] f1
+ restore [locate_data_file bug25292_f2.brep] f2
+
+@@ -21,11 +51,99 @@
+ trim s2t s2 0. 1.570796326795 -275 275
+
+ ###################
+-intersect k s2t s1t
++intersect res s2t s1t
+ ###################
+
+-if { [info exist k_2] } {
+- puts "OK: Curve Number is good!"
++set che [whatis res]
++set ind [string first "3d curve" $che]
++if {${ind} >= 0} {
++ #Only variable "res" exists
++
++ if { $GoodNbCurv == 1 } {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
++
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res s2 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
+ } else {
+- puts "Error: Curve Number is bad!"
++ set ic 1
++ set AllowRepeate 1
++ while { $AllowRepeate != 0 } {
++ set che [whatis res_$ic]
++ set ind [string first "3d curve" $che]
++ if {${ind} < 0} {
++ set AllowRepeate 0
++ } else {
++ set U1 0.0
++ set U2 0.0
++
++ GetRange res_$ic
++
++ puts "U1 = ${U1}"
++ puts "U2 = ${U2}"
++
++ if {[expr {$U2 - $U1}] < 1.0e-20} {
++ puts "Error: Wrong curve's range!"
++ }
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s1 ${U1} ${U2} 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ dlog reset
++ dlog on
++ xdistcs res_$ic s2 0 1 10
++ set Log1 [dlog get]
++ set List1 [split ${Log1} {TD= \t\n}]
++ set Tolerance 3.0e-4
++ set Limit_Tol 1.0e-7
++ set D_good 0.
++ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
++
++ incr ic
++ }
++ }
++
++ if {[expr {$ic - 1}] == $GoodNbCurv} {
++ puts "OK: Curve Number is good!"
++ } else {
++ puts "Error: Curve Number is bad!"
++ }
+ }
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25432 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25432
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25432 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25432 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,33 @@
++puts "============"
++puts "OCC25432"
++puts "============"
++puts ""
++#########################################################################
++# Wrong result obtained by MakerVolume operator.
++#########################################################################
++
++restore [locate_data_file bug25432_qz.brep] q
++
++explode q f
++mkvolume result q_1 q_2 q_3 q_4 q_5 q_6 q_7 q_8 q_9 q_10 q_11 -ni
++
++regexp {Mass +: +([-0-9.+eE]+)} [vprops result] full volume
++
++set expected_volume 0.26776
++set tol_abs_volume 1.0e-4
++set tol_rel_volume 0.0001
++checkreal "Volume" ${volume} ${expected_volume} ${tol_abs_volume} ${tol_rel_volume}
++
++set square 3.59972
++
++set nb_v_good 12
++set nb_e_good 20
++set nb_w_good 11
++set nb_f_good 11
++set nb_sh_good 2
++set nb_sol_good 2
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 59
++
++set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25449 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25449
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25449 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25449 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,31 @@
++puts "================"
++puts "OCC25449"
++puts "================"
++puts ""
++#######################################################################
++# Excess vertex in result of General Fuse operation.
++#######################################################################
++
++restore [locate_data_file bug25449_fz351.brep] b1
++restore [locate_data_file bug25449_ez679.brep] b2
++
++bclearobjects
++bcleartools
++baddobjects b1 b2
++
++bfillds -t
++bbuild result
++
++set square 21.1115
++
++set nb_v_good 4
++set nb_e_good 4
++set nb_w_good 1
++set nb_f_good 1
++set nb_sh_good 0
++set nb_sol_good 0
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 11
++
++set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_1 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_1
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_1 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_1 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,26 @@
++puts "================"
++puts "OCC25450"
++puts "================"
++puts ""
++####################################
++# Common operation returns wrong shape
++####################################
++
++restore [locate_data_file bug25450_Shape.brep] a
++
++explode a
++bcommon result a_1 a_2
++
++set square 142153
++
++set nb_v_good 8
++set nb_e_good 12
++set nb_w_good 4
++set nb_f_good 4
++set nb_sh_good 1
++set nb_sol_good 0
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 30
++
++set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_2 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_2
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_2 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_2 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,27 @@
++puts "================"
++puts "OCC25450"
++puts "================"
++puts ""
++####################################
++# Common operation returns wrong shape
++####################################
++
++restore [locate_data_file bug25450_b1.brep] b1
++restore [locate_data_file bug25450_b2.brep] b2
++
++bop b1 b2
++bopcommon result
++
++set square 35538.3
++
++set nb_v_good 4
++set nb_e_good 4
++set nb_w_good 1
++set nb_f_good 1
++set nb_sh_good 1
++set nb_sol_good 0
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 12
++
++set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25456 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25456
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25456 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25456 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,17 @@
++puts "============"
++puts "OCC25456"
++puts "============"
++puts ""
++###############################
++## BOPAlgo_CheckerSI reports an error on the given shape
++###############################
++
++restore [locate_data_file bug25456_shape.brep] a
++
++set info [bopcheck a]
++
++if {[string compare ${info} " This shape seems to be OK.\n"] == 0} {
++ puts "OK: BOPAlgo_CheckerSI report is good"
++} else {
++ puts "Error : BOPAlgo_CheckerSI report is wrong"
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_1 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_1
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_1 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_1 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,31 @@
++puts "========"
++puts "OCC25465"
++puts "========"
++puts ""
++################################################
++# Excess vertex in the result of CUT operation
++################################################
++
++restore [locate_data_file OCC25465_Gorivo.brep] b1
++restore [locate_data_file OCC25465_Translation_1.brep] b2
++
++explode b1 f
++explode b2 f
++set bug_info [bopcurves b1_3 b2_4]
++bop b1 b2
++bopcut result
++
++# It is strictly forbidden to change nb_v_good and nb_e_good values (see OCC25465)
++set nb_v_good 11
++set nb_e_good 17
++set nb_w_good 8
++set nb_f_good 8
++set nb_sh_good 1
++set nb_sol_good 1
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 47
++
++if {[lindex $bug_info 2] != 3} {
++ puts "ERROR: OCC25465 is reproduced."
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_2 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_2
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_2 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_2 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,31 @@
++puts "========"
++puts "OCC25465"
++puts "========"
++puts ""
++################################################
++# Excess vertex in the result of CUT operation
++################################################
++
++restore [locate_data_file OCC25465_t_boite1.brep] b1
++restore [locate_data_file OCC25465_c_cyl.brep] b2
++
++explode b1 f
++explode b2 f
++set bug_info [bopcurves b1_6 b2_1]
++bop b1 b2
++bopcut result
++
++# It is strictly forbidden to change nb_v_good and nb_e_good values (see OCC25465)
++set nb_v_good 13
++set nb_e_good 20
++set nb_w_good 11
++set nb_f_good 8
++set nb_sh_good 1
++set nb_sol_good 1
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 55
++
++if {[lindex $bug_info 2] != 2} {
++ puts "ERROR: OCC25465 is reproduced."
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25480 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25480
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25480 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25480 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,26 @@
++puts "============"
++puts "OCC25480"
++puts "============"
++puts ""
++#######################################################################
++# Incorrect result of BRepOffsetAPI_MakePipe
++#######################################################################
++
++restore [locate_data_file bug25480_part1.brep] a
++restore [locate_data_file bug25480_part2.brep] b
++
++pipe result b a 1
++
++set square 48441
++
++set nb_v_good 224
++set nb_e_good 392
++set nb_w_good 196
++set nb_f_good 196
++set nb_sh_good 14
++set nb_sol_good 14
++set nb_compsol_good 0
++set nb_compound_good 8
++set nb_shape_good 1044
++
++set 2dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25488 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25488
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25488 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25488 2015-01-16 13:01:25.000000000 +0300
+@@ -0,0 +1,34 @@
++puts "========"
++puts "OCC25488"
++puts "========"
++puts ""
++######################################################
++# Wrong result of two trimmed cylinders intersection
++######################################################
++
++set Tolerance 3.0e-7
++set D_good 0.
++set Limit_Tol 1.0e-7
++
++restore [locate_data_file OCC25488_sb1_1t.draw] sb1
++restore [locate_data_file OCC25488_sb2_1t.draw] sb2
++
++set bug_info [intersect res sb1 sb2]
++
++set i 0
++while {$i != [llength $bug_info]} {
++ set res_i [lindex $bug_info $i]
++ dlog reset
++ dlog on
++ xdistcs ${res_i} sb1 0 1 10
++ set BugLog [dlog get]
++ set BugList [split ${BugLog} {TD= \t\n}]
++ checkList ${BugList} ${Tolerance} ${D_good} ${Limit_Tol}
++ dlog reset
++ dlog on
++ xdistcs ${res_i} sb2 0 1 10
++ set BugLog [dlog get]
++ set BugList [split ${BugLog} {TD= \t\n}]
++ checkList ${BugList} ${Tolerance} ${D_good} ${Limit_Tol}
++ set i [expr {$i + 1}]
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25505 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25505
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25505 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25505 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,39 @@
++puts "============"
++puts "OCC25505"
++puts "============"
++puts ""
++###############################
++## General Fuse produces self-intersection shape
++###############################
++
++restore [locate_data_file bug25505_q.brep] q
++
++explode q
++
++bclearobjects
++bcleartools
++baddobjects q_1 q_2 q_3 q_4
++bfillds
++bbuild result
++
++set info [bopcheck result]
++
++if {[string compare ${info} " This shape seems to be OK.\n"] == 0} {
++ puts "OK: General Fuse produces good shape"
++} else {
++ puts "Error : General Fuse produces self-intersection shape"
++}
++
++set square 68796.4
++
++set nb_v_good 14
++set nb_e_good 21
++set nb_w_good 9
++set nb_f_good 9
++set nb_sh_good 7
++set nb_sol_good 4
++set nb_compsol_good 0
++set nb_compound_good 1
++set nb_shape_good 65
++
++set 3dviewer 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25592 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25592
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25592 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25592 2015-01-16 13:00:38.000000000 +0300
+@@ -0,0 +1,50 @@
++puts "============"
++puts "OCC25592"
++puts "============"
++puts ""
++######################################################
++# Bad result of Fillet operation
++######################################################
++
++restore [locate_data_file bug25592_tshape.brep] t
++explode t e
++shape c c
++add t_4 c
++add t_6 c
++fillet r t 30 c
++explode r f
++
++set info1 [bopargcheck r_2 #f]
++if { [regexp "to be valid for BOP" ${info1}] == 1 } {
++ puts "1. OK : Good result of Fillet operation\n"
++} else {
++ puts "1. Error : Bad result of Fillet operation\n"
++}
++
++set info2 [bopargcheck r_1 #f]
++if { [regexp "to be valid for BOP" ${info2}] == 1 } {
++ puts "2. OK : Good result of Fillet operation\n"
++} else {
++ puts "2. Error : Bad result of Fillet operation\n"
++}
++
++set info3 [bopargcheck r_6 #f]
++if { [regexp "to be valid for BOP" ${info3}] == 1 } {
++ puts "3. OK : Good result of Fillet operation\n"
++} else {
++ puts "3. Error : Bad result of Fillet operation\n"
++}
++
++set info4 [bopargcheck r_7 #f]
++if { [regexp "to be valid for BOP" ${info4}] == 1 } {
++ puts "4. OK : Good result of Fillet operation\n"
++} else {
++ puts "4. Error : Bad result of Fillet operation\n"
++}
++
++set info5 [bopargcheck r_9 #f]
++if { [regexp "to be valid for BOP" ${info5}] == 1 } {
++ puts "5. OK : Good result of Fillet operation\n"
++} else {
++ puts "5. Error : Bad result of Fillet operation\n"
++}
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25657 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25657
+--- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25657 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25657 2015-01-16 13:01:25.000000000 +0300
+@@ -0,0 +1,25 @@
++puts "========"
++puts "OCC25657"
++puts "========"
++puts ""
++###########################################################################################
++# Bad result of Fillet operation
++###########################################################################################
++
++restore [locate_data_file bug25657_r4.brep] r4
++explode r4 e
++shape c c
++add r4_15 c
++fillet res r4 20 c
++
++explode res f
++
++pcurve res_2
++# exception
++
++pcurve res_5
++# exception
++
++smallview
++fit
++set only_screen_axo 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_1 OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_1
+--- OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_1 2014-11-11 17:47:35.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_1 2015-01-16 13:00:39.000000000 +0300
+@@ -1,3 +1,5 @@
++puts "TODO CR25432 ALL: Error : The square of result shape is"
++
+ puts "================"
+ puts "OCC26"
+ puts "================"
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_2 OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_2
+--- OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_2 2014-11-11 17:47:35.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_2 2015-01-16 13:00:39.000000000 +0300
+@@ -1,3 +1,5 @@
++puts "TODO CR25432 ALL: Error : The square of result shape is"
++
+ puts "================"
+ puts "OCC26"
+ puts "================"
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/moddata_3/bug25494 OCCT-6.8.0_SRC-patch/tests/bugs/moddata_3/bug25494
+--- OCCT-6.8.0_SRC/tests/bugs/moddata_3/bug25494 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/moddata_3/bug25494 2015-01-16 13:00:40.000000000 +0300
+@@ -0,0 +1,14 @@
++puts "================"
++puts "OCC25494"
++puts "================"
++puts ""
++#######################################################################
++# Wrong result obtained by projection algorithm
++#######################################################################
++
++restore [locate_data_file bug25494_s.draw] s
++restore [locate_data_file bug25494_c.draw] c
++
++project c2d c s
++
++dump c2d
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/vis/bug25492 OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25492
+--- OCCT-6.8.0_SRC/tests/bugs/vis/bug25492 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25492 2015-01-16 13:00:41.000000000 +0300
+@@ -0,0 +1,32 @@
++puts "============"
++puts "CR25492"
++puts "============"
++puts ""
++#######################################################################
++# The selected subshape does not have topological relationship
++# with orginal shape in OCC680
++#######################################################################
++pload ALL
++
++set isEqual 0
++vinit
++box aShape 5 5 5 3 3 3
++vdisplay aShape
++vfit
++vselmode 4 1
++vselect 100 200
++vpickselected aSub
++explode aShape F
++
++
++for {set i 1} {$i <= 6 } {incr i} {
++ set aRes [compare aShape_$i aSub];
++ if { [lsearch $aRes equal] != -1} {
++ set isEqual 1
++ }
++}
++
++if {$isEqual == 0} {
++puts "Error: No selected sub-shape was found in exploded sub-shapes"
++}
++set only_screen 1
+diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/vis/bug25528 OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25528
+--- OCCT-6.8.0_SRC/tests/bugs/vis/bug25528 1970-01-01 03:00:00.000000000 +0300
++++ OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25528 2015-01-16 13:00:41.000000000 +0300
+@@ -0,0 +1,25 @@
++puts "============"
++puts "OCC25528"
++puts "============"
++puts ""
++####################################################################################
++# Visualization - Exception on removing an interactive object from
++# a local context
++# vremove -local <obj_name> crashes if there is an opened local context
++####################################################################################
++
++pload ALL
++box b 1 2 3
++vinit
++vdisplay b
++vfit
++
++# opening a local context for local selection
++vselmode b 4 1
++# Select a face just to simulate the scenario used in a real application
++vselect 200 200
++# This line should not lead to exception
++vremove -local b
++
++# Screenshot should be empty (box removed successfully)
++vdump ${imagedir}/${casename}.png
+++ /dev/null
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/drv/BRepBlend/BRepBlend_Walking_0.cxx OCCT-6.8.0_SRC-patch/drv/BRepBlend/BRepBlend_Walking_0.cxx
---- OCCT-6.8.0_SRC/drv/BRepBlend/BRepBlend_Walking_0.cxx 2014-11-11 17:53:30.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/drv/BRepBlend/BRepBlend_Walking_0.cxx 2015-01-16 14:33:41.000000000 +0300
-@@ -22,6 +22,7 @@
- #include <Blend_Point.hxx>
- #include <Blend_Function.hxx>
- #include <Blend_FuncInv.hxx>
-+#include <ChFiDS_HElSpine.hxx>
- #include <gp_Pnt2d.hxx>
- #include <IntSurf_Transition.hxx>
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/AIS_InteractiveContext.hxx OCCT-6.8.0_SRC-patch/inc/AIS_InteractiveContext.hxx
---- OCCT-6.8.0_SRC/inc/AIS_InteractiveContext.hxx 2014-11-11 17:54:39.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/AIS_InteractiveContext.hxx 2015-01-16 14:34:51.000000000 +0300
-@@ -239,13 +239,6 @@
- //! Local Context opened.
- Standard_EXPORT Standard_Boolean KeepTemporary (const Handle(AIS_InteractiveObject)& anIObj, const Standard_Integer InWhichLocal = -1) ;
-
-- //! Removes the interactive object aniobj from all viewers.
-- //! If a local context is open and if updateviewer equals
-- //! Standard_False, the presentation of the Interactive
-- //! Object activates the selection mode; the object is
-- //! displayed but no viewer will be updated.
-- Standard_EXPORT void Clear (const Handle(AIS_InteractiveObject)& aniobj, const Standard_Boolean updateviewer = Standard_True) ;
--
- //! Empties the graphic presentation of the mode
- //! indexed by aMode.
- //! If a local context is open and if updateviewer equals
-@@ -1633,6 +1626,12 @@
- Standard_EXPORT void InitAttributes() ;
-
- Standard_EXPORT Standard_Integer PurgeViewer (const Handle(V3d_Viewer)& Vwr) ;
-+
-+ //! UNKNOWN
-+ Standard_EXPORT void redisplayPrsModes (const Handle(AIS_InteractiveObject)& theIObj, const Standard_Boolean theToUpdateViewer = Standard_True) ;
-+
-+ //! UNKNOWN
-+ Standard_EXPORT void redisplayPrsRecModes (const Handle(AIS_InteractiveObject)& theIObj, const Standard_Boolean theToUpdateViewer = Standard_True) ;
-
- AIS_DataMapOfIOStatus myObjects;
- Handle(SelectMgr_SelectionManager) mgrSelector;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Blend_Walking_1.gxx OCCT-6.8.0_SRC-patch/inc/Blend_Walking_1.gxx
---- OCCT-6.8.0_SRC/inc/Blend_Walking_1.gxx 2014-11-11 17:46:43.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/Blend_Walking_1.gxx 2015-01-16 12:59:38.000000000 +0300
-@@ -56,6 +56,7 @@
-
- void Blend_Walking::Perform(Blend_Function& Func,
- Blend_FuncInv& FuncInv,
-+ const Handle(ChFiDS_HElSpine)& HGuide,
- const Standard_Real Pdep,
- const Standard_Real Pmax,
- const Standard_Real MaxStep,
-@@ -154,7 +155,7 @@
- }
- }
-
-- InternalPerform(Func,FuncInv,Pmax);
-+ InternalPerform(Func,FuncInv,HGuide,Pmax);
-
- done = Standard_True;
- }
-@@ -461,7 +462,8 @@
- previousP.ParametersOnS1(sol(1),sol(2));
- previousP.ParametersOnS2(sol(3),sol(4));
-
-- InternalPerform(Func,FuncInv,P);
-+ Handle(ChFiDS_HElSpine) anHGuide;
-+ InternalPerform(Func,FuncInv,anHGuide,P);
- return Standard_True;
- }
-
-@@ -502,7 +504,8 @@
- if(OnS1) clasonS1 = Standard_False;
- else clasonS2 = Standard_False;
-
-- InternalPerform(Func,FuncInv,P);
-+ Handle(ChFiDS_HElSpine) anHGuide;
-+ InternalPerform(Func,FuncInv,anHGuide,P);
-
- clasonS1 = Standard_True;
- clasonS2 = Standard_True;
-@@ -548,7 +551,8 @@
- previousP.ParametersOnS1(sol(1),sol(2));
- previousP.ParametersOnS2(sol(3),sol(4));
-
-- InternalPerform(Func,FuncInv,Pmin);
-+ Handle(ChFiDS_HElSpine) anHGuide;
-+ InternalPerform(Func,FuncInv,anHGuide,Pmin);
-
- iscomplete = Standard_True;
- return Standard_True;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Blend_Walking_4.gxx OCCT-6.8.0_SRC-patch/inc/Blend_Walking_4.gxx
---- OCCT-6.8.0_SRC/inc/Blend_Walking_4.gxx 2014-11-11 17:46:43.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/Blend_Walking_4.gxx 2015-01-16 12:59:38.000000000 +0300
-@@ -12,6 +12,8 @@
- // Alternatively, this file may be used under the terms of Open CASCADE
- // commercial license or contractual agreement.
-
-+#include <gce_MakePln.hxx>
-+
- static void evalpinit(math_Vector& parinit,
- const Blend_Point& previousP,
- const Standard_Real parprec,
-@@ -65,6 +67,7 @@
-
- void Blend_Walking::InternalPerform(Blend_Function& Func,
- Blend_FuncInv& FuncInv,
-+ const Handle(ChFiDS_HElSpine)& HGuide,
- const Standard_Real Bound)
- {
-
-@@ -251,12 +254,64 @@
- // avec les surfaces periodiques.
- State = Blend_OnRst12;
- param = (w1+w2)/2;
-+ gp_Pnt Pnt1, Pnt2;
- p2d = TheArcTool::Value(recdomain1->Value(),solrst1(1));
- sol(1) = p2d.X();
- sol(2) = p2d.Y();
-+ Pnt1 = TheSurfaceTool::Value(surf1,sol(1),sol(2));
- p2d = TheArcTool::Value(recdomain2->Value(),solrst2(1));
- sol(3) = p2d.X();
- sol(4) = p2d.Y();
-+ Pnt2 = TheSurfaceTool::Value(surf2,sol(3),sol(4));
-+ if (!HGuide.IsNull())
-+ {
-+ const Standard_Real TolProd = 1.e-5;
-+ Standard_Real SavedParams [2];
-+ Standard_Boolean SameDirs [2] = {Standard_False, Standard_False};
-+ ChFiDS_ElSpine& theElSpine = HGuide->ChangeCurve();
-+ SavedParams[0] = theElSpine.GetSavedFirstParameter();
-+ SavedParams[1] = theElSpine.GetSavedLastParameter();
-+ for (Standard_Integer ind = 0; ind < 2; ind++)
-+ {
-+ if (!Precision::IsInfinite(SavedParams[ind]))
-+ {
-+ //Check the original first and last parameters of guide curve
-+ //for equality to found parameter <param>:
-+ //check equality of tangent to guide curve and
-+ //normal to plane built on 3 points:
-+ //point on guide curve and points on restrictions of adjacent
-+ //surfaces.
-+ gp_Pnt Pnt0;
-+ gp_Vec Dir0;
-+ HGuide->D1(SavedParams[ind], Pnt0, Dir0);
-+ Standard_Real Length = Dir0.Magnitude();
-+ if (Length <= gp::Resolution())
-+ continue;
-+ Dir0 /= Length;
-+ gce_MakePln PlaneBuilder(Pnt0, Pnt1, Pnt2);
-+ if (!PlaneBuilder.IsDone())
-+ continue;
-+ gp_Pln thePlane = PlaneBuilder.Value();
-+ gp_Dir DirPlane = thePlane.Axis().Direction();
-+ gp_Vec theProd = Dir0 ^ DirPlane;
-+ Standard_Real ProdMod = theProd.Magnitude();
-+ if (ProdMod <= TolProd)
-+ SameDirs[ind] = Standard_True;
-+ }
-+ }
-+ Standard_Real theParam = Precision::Infinite();
-+ //Choose the closest parameter
-+ if (SameDirs[0] && SameDirs[1])
-+ theParam = (Abs(param - SavedParams[0]) < Abs(param - SavedParams[1]))?
-+ SavedParams[0] : SavedParams[1];
-+ else if (SameDirs[0])
-+ theParam = SavedParams[0];
-+ else if (SameDirs[1])
-+ theParam = SavedParams[1];
-+
-+ if (!Precision::IsInfinite(theParam))
-+ param = theParam;
-+ }
- }
- else if (recad1) {
- // sol sur 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/BRepBlend_Walking.hxx OCCT-6.8.0_SRC-patch/inc/BRepBlend_Walking.hxx
---- OCCT-6.8.0_SRC/inc/BRepBlend_Walking.hxx 2014-11-11 17:53:30.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/BRepBlend_Walking.hxx 2015-01-16 14:33:41.000000000 +0300
-@@ -22,6 +22,7 @@
- #include <Handle_Adaptor2d_HCurve2d.hxx>
- #include <Handle_Adaptor3d_HCurve.hxx>
- #include <Standard_Integer.hxx>
-+#include <Handle_ChFiDS_HElSpine.hxx>
- #include <TopAbs_State.hxx>
- #include <Blend_Status.hxx>
- class BRepBlend_Line;
-@@ -41,6 +42,7 @@
- class Blend_Point;
- class Blend_Function;
- class Blend_FuncInv;
-+class ChFiDS_HElSpine;
- class gp_Pnt2d;
- class IntSurf_Transition;
-
-@@ -59,7 +61,7 @@
-
- Standard_EXPORT void AddSingularPoint (const Blend_Point& P) ;
-
-- Standard_EXPORT void Perform (Blend_Function& F, Blend_FuncInv& FInv, const Standard_Real Pdep, const Standard_Real Pmax, const Standard_Real MaxStep, const Standard_Real TolGuide, const math_Vector& Soldep, const Standard_Real Tolesp, const Standard_Real Fleche, const Standard_Boolean Appro = Standard_False) ;
-+ Standard_EXPORT void Perform (Blend_Function& F, Blend_FuncInv& FInv, const Handle(ChFiDS_HElSpine)& HGuide, const Standard_Real Pdep, const Standard_Real Pmax, const Standard_Real MaxStep, const Standard_Real TolGuide, const math_Vector& Soldep, const Standard_Real Tolesp, const Standard_Real Fleche, const Standard_Boolean Appro = Standard_False) ;
-
- Standard_EXPORT Standard_Boolean PerformFirstSection (Blend_Function& F, const Standard_Real Pdep, math_Vector& ParDep, const Standard_Real Tolesp, const Standard_Real TolGuide, TopAbs_State& Pos1, TopAbs_State& Pos2) ;
-
-@@ -99,7 +101,7 @@
- private:
-
-
-- Standard_EXPORT void InternalPerform (Blend_Function& F, Blend_FuncInv& FInv, const Standard_Real Bound) ;
-+ Standard_EXPORT void InternalPerform (Blend_Function& F, Blend_FuncInv& FInv, const Handle(ChFiDS_HElSpine)& HGuide, const Standard_Real Bound) ;
-
- Standard_EXPORT Standard_Integer ArcToRecadre (const Standard_Boolean OnFirst, const math_Vector& Sol, const Standard_Integer PrevIndex, gp_Pnt2d& lpt2d, gp_Pnt2d& pt2d, Standard_Real& ponarc) ;
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/ChFiDS_ElSpine.hxx OCCT-6.8.0_SRC-patch/inc/ChFiDS_ElSpine.hxx
---- OCCT-6.8.0_SRC/inc/ChFiDS_ElSpine.hxx 2014-11-11 17:53:46.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/ChFiDS_ElSpine.hxx 2015-01-16 14:33:58.000000000 +0300
-@@ -56,6 +56,10 @@
-
- Standard_EXPORT virtual Standard_Real LastParameter() const;
-
-+ Standard_EXPORT Standard_Real GetSavedFirstParameter() const;
-+
-+ Standard_EXPORT Standard_Real GetSavedLastParameter() const;
-+
- Standard_EXPORT GeomAbs_Shape Continuity() const;
-
- Standard_EXPORT Standard_Integer NbIntervals (const GeomAbs_Shape S) ;
-@@ -91,6 +95,10 @@
-
- Standard_EXPORT void LastParameter (const Standard_Real P) ;
-
-+ Standard_EXPORT void SaveFirstParameter() ;
-+
-+ Standard_EXPORT void SaveLastParameter() ;
-+
- Standard_EXPORT void SetOrigin (const Standard_Real O) ;
-
- Standard_EXPORT void FirstPointAndTgt (gp_Pnt& P, gp_Vec& T) const;
-@@ -149,6 +157,8 @@
- Standard_Real plast;
- Standard_Real period;
- Standard_Boolean periodic;
-+ Standard_Real pfirstsav;
-+ Standard_Real plastsav;
-
-
- };
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Graphic3d_GraphicDriver.hxx OCCT-6.8.0_SRC-patch/inc/Graphic3d_GraphicDriver.hxx
---- OCCT-6.8.0_SRC/inc/Graphic3d_GraphicDriver.hxx 2014-11-11 17:54:46.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/Graphic3d_GraphicDriver.hxx 2015-01-16 14:34:57.000000000 +0300
-@@ -130,9 +130,6 @@
- //! call_togl_setvisualisation
- Standard_EXPORT virtual void SetVisualisation (const Graphic3d_CView& ACView) = 0;
-
-- //! call_togl_transparency
-- Standard_EXPORT virtual void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag) = 0;
--
- //! call_togl_view
- Standard_EXPORT virtual Standard_Boolean View (Graphic3d_CView& ACView) = 0;
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntPatch_ImpImpIntersection_4.gxx OCCT-6.8.0_SRC-patch/inc/IntPatch_ImpImpIntersection_4.gxx
---- OCCT-6.8.0_SRC/inc/IntPatch_ImpImpIntersection_4.gxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/IntPatch_ImpImpIntersection_4.gxx 2015-01-16 13:01:24.000000000 +0300
-@@ -1151,6 +1151,7 @@
- const Standard_Real theUlSurf1,
- const Standard_Real thePeriodOfSurf1,
- const Handle(IntSurf_LineOn2S)& theLine,
-+ const Standard_Real theTol3D,
- const Standard_Real theTol2D,
- const Standard_Boolean theFlForce)
- {
-@@ -1177,6 +1178,32 @@
- thePntOnSurf2.X(), thePntOnSurf2.Y());
- }
-
-+ const Standard_Integer aNbPnts = theLine->NbPoints();
-+ if(aNbPnts > 0)
-+ {
-+ Standard_Real aUl = 0.0, aVl = 0.0;
-+ const IntSurf_PntOn2S aPlast = theLine->Value(aNbPnts);
-+ if(isTheReverse)
-+ aPlast.ParametersOnS2(aUl, aVl);
-+ else
-+ aPlast.ParametersOnS1(aUl, aVl);
-+
-+ if(anUpar <= aUl)
-+ {//Parameter value will be always increased.
-+ return Standard_False;
-+ }
-+
-+ //theTol2D is minimal step along parameter changed.
-+ //Therefore, if we apply this minimal step two
-+ //neighbour points will be always "same". Consequently,
-+ //we should reduce tolerance for IsSame checking.
-+ const Standard_Real aDTol = 1.0-Epsilon(1.0);
-+ if(aPnt.IsSame(aPlast, theTol3D*aDTol, theTol2D*aDTol))
-+ {
-+ theLine->RemovePoint(aNbPnts);
-+ }
-+ }
-+
- theLine->Add(aPnt);
- return Standard_True;
- }
-@@ -1191,6 +1218,7 @@
- const stCoeffsValue& theCoeffs,
- const Bnd_Box2d& theUVSurf1,
- const Bnd_Box2d& theUVSurf2,
-+ const Standard_Real theTol3D,
- const Standard_Real theTol2D,
- const Standard_Real thePeriod,
- const Standard_Real theNulValue,
-@@ -1281,7 +1309,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(), theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1313,7 +1341,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(),theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1346,7 +1374,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(), theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1376,7 +1404,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(), theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1545,7 +1573,8 @@
- {
- Standard_Real &a = theU1crit[i],
- &b = theU1crit[i-1];
-- if(Abs(a - b) < theTol2D)
-+ const Standard_Real aRemain = fmod(Abs(a - b), thePeriod); // >= 0, because Abs(a - b) >= 0
-+ if((Abs(a - b) < theTol2D) || (aRemain < theTol2D) || (Abs(aRemain - thePeriod) < theTol2D))
- {
- a = (a + b)/2.0;
- b = Precision::Infinite();
-@@ -1817,6 +1846,7 @@
- Standard_Boolean isAddedIntoWL1 = Standard_False, isAddedIntoWL2 = Standard_False;
-
- Standard_Real anUf = aU1f[aCurInterval], anUl = aU1l[aCurInterval];
-+ const Standard_Boolean isDeltaPeriod = IsEqual(anUl-anUf, aPeriod);
-
- //Inscribe and sort critical points
- InscribeAndSortArray(anU1crit, aNbCritPointsMax, anUf, anUl, theTol2D, aPeriod);
-@@ -1830,6 +1860,8 @@
- Handle(IntPatch_WLine) aWLine2 = new IntPatch_WLine(aL2S2, Standard_False);
-
- Standard_Integer aWL1FindStatus = 0, aWL2FindStatus = 0;
-+ Standard_Boolean isAddingWL1Enabled = Standard_True,
-+ isAddingWL2Enabled = Standard_True;
-
- Standard_Real anU1 = anUf;
-
-@@ -1845,6 +1877,23 @@
-
- while(anU1 <= anUl)
- {
-+ if(isDeltaPeriod)
-+ {
-+ if(IsEqual(anU1, anUl))
-+ {
-+ //if isAddedIntoWL* == TRUE WLine contains only one point
-+ //(which was end point of previous WLine). If we will
-+ //add point found on the current step WLine will contain only
-+ //two points. At that both these points will be equal to the
-+ //points found earlier. Therefore, new WLine will repeat
-+ //already existing WLine. Consequently, it is necessary
-+ //to forbid building new line in this case.
-+
-+ isAddingWL1Enabled = !isAddedIntoWL1;
-+ isAddingWL2Enabled = !isAddedIntoWL2;
-+ }
-+ }
-+
- for(Standard_Integer i = 0; i < aNbCritPointsMax; i++)
- {
- if((anU1 - anU1crit[i])*aCriticalDelta[i] < 0.0)
-@@ -1995,123 +2044,129 @@
- isFirst = Standard_False;
- }
-
-- if( ((aUSurf2f-aU21) <= theTol2D) &&
-- ((aU21-aUSurf2l) <= theTol2D) &&
-- ((aVSurf1f - aV11) <= theTol2D) &&
-- ((aV11 - aVSurf1l) <= theTol2D) &&
-- ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
-+ if(isAddingWL1Enabled)
- {
-- Standard_Boolean isForce = Standard_False;
-- if(!aWL1FindStatus)
-+ if( ((aUSurf2f-aU21) <= theTol2D) &&
-+ ((aU21-aUSurf2l) <= theTol2D) &&
-+ ((aVSurf1f - aV11) <= theTol2D) &&
-+ ((aV11 - aVSurf1l) <= theTol2D) &&
-+ ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
--
-- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ Standard_Boolean isForce = Standard_False;
-+ if(!aWL1FindStatus)
- {
-- isForce = Standard_True;
-- }
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU21, aV11, aV11Prev,
-- aV21, aV21Prev, isTheReverse,
-- 1.0, isForce, isFound1, isFound2);
-+ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ {
-+ isForce = Standard_True;
-+ }
-+
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU21, aV11, aV11Prev,
-+ aV21, aV21Prev, isTheReverse,
-+ 1.0, isForce, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- {
-- aWL1FindStatus = 1;
-+ if(isFound1 || isFound2)
-+ {
-+ aWL1FindStatus = 1;
-+ }
- }
-- }
-
-- if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
-- {
-- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-- gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
-- aUSurf1f, aUSurf1l, aPeriod,
-- aWLine1->Curve(), theTol2D, isForce))
-+ if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
- {
-- if(!aWL1FindStatus)
-+ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-+ gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
-+ aUSurf1f, aUSurf1l, aPeriod,
-+ aWLine1->Curve(), theTol3D, theTol2D, isForce))
- {
-- aWL1FindStatus = 1;
-+ if(!aWL1FindStatus)
-+ {
-+ aWL1FindStatus = 1;
-+ }
- }
- }
- }
-- }
-- else
-- {
-- if(aWL1FindStatus == 1)
-+ else
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-+ if(aWL1FindStatus == 1)
-+ {
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU21, aV11, aV11Prev,
-- aV21, aV21Prev, isTheReverse,
-- 1.0, Standard_False, isFound1, isFound2);
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU21, aV11, aV11Prev,
-+ aV21, aV21Prev, isTheReverse,
-+ 1.0, Standard_False, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- aWL1FindStatus = 2; //start a new line
-+ if(isFound1 || isFound2)
-+ aWL1FindStatus = 2; //start a new line
-+ }
- }
- }
--
-- if( ((aUSurf2f-aU22) <= theTol2D) &&
-- ((aU22-aUSurf2l) <= theTol2D) &&
-- ((aVSurf1f - aV12) <= theTol2D) &&
-- ((aV12 - aVSurf1l) <= theTol2D) &&
-- ((aVSurf2f - aV22) <= theTol2D) &&
-- ((aV22 - aVSurf2l) <= theTol2D))
-+
-+ if(isAddingWL2Enabled)
- {
-- Standard_Boolean isForce = Standard_False;
--
-- if(!aWL2FindStatus)
-+ if( ((aUSurf2f-aU22) <= theTol2D) &&
-+ ((aU22-aUSurf2l) <= theTol2D) &&
-+ ((aVSurf1f - aV12) <= theTol2D) &&
-+ ((aV12 - aVSurf1l) <= theTol2D) &&
-+ ((aVSurf2f - aV22) <= theTol2D) &&
-+ ((aV22 - aVSurf2l) <= theTol2D))
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-+ Standard_Boolean isForce = Standard_False;
-
-- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ if(!aWL2FindStatus)
- {
-- isForce = Standard_True;
-- }
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU22, aV12, aV12Prev,
-- aV22, aV22Prev, isTheReverse,
-- -1.0, isForce, isFound1, isFound2);
-+ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ {
-+ isForce = Standard_True;
-+ }
-+
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU22, aV12, aV12Prev,
-+ aV22, aV22Prev, isTheReverse,
-+ -1.0, isForce, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- {
-- aWL2FindStatus = 1;
-+ if(isFound1 || isFound2)
-+ {
-+ aWL2FindStatus = 1;
-+ }
- }
-- }
-
-- if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
-- {
-- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-- gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
-- aUSurf1f, aUSurf1l, aPeriod,
-- aWLine2->Curve(), theTol2D, isForce))
-+ if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
- {
-- if(!aWL2FindStatus)
-+ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-+ gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
-+ aUSurf1f, aUSurf1l, aPeriod,
-+ aWLine2->Curve(), theTol3D, theTol2D, isForce))
- {
-- aWL2FindStatus = 1;
-+ if(!aWL2FindStatus)
-+ {
-+ aWL2FindStatus = 1;
-+ }
- }
- }
- }
-- }
-- else
-- {
-- if(aWL2FindStatus == 1)
-+ else
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-+ if(aWL2FindStatus == 1)
-+ {
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU22, aV12, aV12Prev,
-- aV22, aV22Prev, isTheReverse,
-- -1.0, Standard_False, isFound1, isFound2);
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU22, aV12, aV12Prev,
-+ aV22, aV22Prev, isTheReverse,
-+ -1.0, Standard_False, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- aWL2FindStatus = 2; //start a new line
-+ if(isFound1 || isFound2)
-+ aWL2FindStatus = 2; //start a new line
-+ }
- }
- }
-
-@@ -2237,15 +2292,29 @@
- }
- else if(aWLine1->NbPnts() > 1)
- {
-- isTheEmpty = Standard_False;
-- isAddedIntoWL1 = Standard_True;
-+ Standard_Boolean isGood = Standard_True;
-+
-+ if(aWLine1->NbPnts() == 2)
-+ {
-+ const IntSurf_PntOn2S& aPf = aWLine1->Point(1);
-+ const IntSurf_PntOn2S& aPl = aWLine1->Point(2);
-
-- SeekAdditionalPoints(theQuad1, theQuad2, aWLine1->Curve(),
-- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-- theTol2D, aPeriod, 1.0, isTheReverse);
-+ if(aPf.IsSame(aPl, Precision::Confusion()))
-+ isGood = Standard_False;
-+ }
-
-- aWLine1->ComputeVertexParameters(theTol3D);
-- theSlin.Append(aWLine1);
-+ if(isGood)
-+ {
-+ isTheEmpty = Standard_False;
-+ isAddedIntoWL1 = Standard_True;
-+
-+ SeekAdditionalPoints( theQuad1, theQuad2, aWLine1->Curve(),
-+ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-+ theTol2D, aPeriod, 1.0, isTheReverse);
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+ theSlin.Append(aWLine1);
-+ }
- }
- else
- {
-@@ -2267,15 +2336,28 @@
- }
- else if(aWLine2->NbPnts() > 1)
- {
-- isTheEmpty = Standard_False;
-- isAddedIntoWL2 = Standard_True;
-+ Standard_Boolean isGood = Standard_True;
-+ if(aWLine2->NbPnts() == 2)
-+ {
-+ const IntSurf_PntOn2S& aPf = aWLine2->Point(1);
-+ const IntSurf_PntOn2S& aPl = aWLine2->Point(2);
-+
-+ if(aPf.IsSame(aPl, Precision::Confusion()))
-+ isGood = Standard_False;
-+ }
-
-- SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
-- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-- theTol2D, aPeriod, -1.0, isTheReverse);
-+ if(isGood)
-+ {
-+ isTheEmpty = Standard_False;
-+ isAddedIntoWL2 = Standard_True;
-
-- aWLine2->ComputeVertexParameters(theTol3D);
-- theSlin.Append(aWLine2);
-+ SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
-+ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-+ theTol2D, aPeriod, -1.0, isTheReverse);
-+
-+ aWLine2->ComputeVertexParameters(theTol3D);
-+ theSlin.Append(aWLine2);
-+ }
- }
- else
- {
-@@ -2284,6 +2366,203 @@
- }
- }
-
-+ if(theSlin.Length() > 0)
-+ {
-+ for(Standard_Integer aNumOfLine = 2; aNumOfLine <= theSlin.Length(); aNumOfLine++)
-+ {
-+ const Handle(IntPatch_WLine)& aWLine = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine));
-+
-+ const IntSurf_PntOn2S& aPntFWL = aWLine->Point(1);
-+
-+ Standard_Real aU1 = 0.0, aU2 = 0.0, aV1 = 0.0, aV2 = 0.0;
-+ aPntFWL.Parameters(aU1, aV1, aU2, aV2);
-+
-+ if( IsEqual(aU1, 0.0) || IsEqual(aU1, aPeriod))
-+ {
-+ theSlin.Exchange(1, aNumOfLine);
-+ break;
-+ }
-+ }
-+
-+ for(Standard_Integer aNumOfLine1 = 1; aNumOfLine1 <= theSlin.Length(); aNumOfLine1++)
-+ {
-+ const Handle(IntPatch_WLine)& aWLine1 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine1));
-+
-+ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
-+ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
-+ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
-+
-+ for(Standard_Integer aNPt = 1; aNPt <= theSPnt.Length(); aNPt++)
-+ {
-+ const IntSurf_PntOn2S aPntCur = theSPnt.Value(aNPt).PntOn2S();
-+
-+ if( aPntCur.IsSame(aPntFWL1, Precision::Confusion()) ||
-+ aPntCur.IsSame(aPntLWL1, Precision::Confusion()))
-+ {
-+ theSPnt.Remove(aNPt);
-+ aNPt--;
-+ }
-+ }
-+
-+ Standard_Boolean hasBeenRemoved = Standard_False;
-+ for(Standard_Integer aNumOfLine2 = aNumOfLine1 + 1; aNumOfLine2 <= theSlin.Length(); aNumOfLine2++)
-+ {
-+ const Handle(IntPatch_WLine)& aWLine2 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine2));
-+
-+ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
-+ const Standard_Integer aNbPntsWL2 = aWLine2->NbPnts();
-+
-+ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
-+ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
-+
-+ const IntSurf_PntOn2S& aPntFWL2 = aWLine2->Point(1);
-+ const IntSurf_PntOn2S& aPntLWL2 = aWLine2->Point(aNbPntsWL2);
-+
-+ if(aPntFWL1.IsSame(aPntFWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->InsertBefore(1, aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+
-+ if(aPntFWL1.IsSame(aPntLWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->InsertBefore(1, aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+
-+ if(aPntLWL1.IsSame(aPntFWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->Add(aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+
-+ if(aPntLWL1.IsSame(aPntLWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->Add(aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+ }
-+
-+ if(hasBeenRemoved)
-+ aNumOfLine1--;
-+
-+ //aWLine1->ComputeVertexParameters(theTol3D);
-+ }
-+ }//if(theSlin.Length() > 0)
-+
-+
- return Standard_True;
- }
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntPatch_WLine.hxx OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.hxx
---- OCCT-6.8.0_SRC/inc/IntPatch_WLine.hxx 2014-11-11 17:54:07.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.hxx 2015-01-16 14:34:19.000000000 +0300
-@@ -138,6 +138,12 @@
-
- Standard_EXPORT const Handle(Adaptor2d_HCurve2d)& GetArcOnS2() const;
-
-+ Standard_EXPORT void ClearVertexes() ;
-+
-+ Standard_EXPORT void RemoveVertex (const Standard_Integer theIndex) ;
-+
-+ Standard_EXPORT void InsertVertexBefore (const Standard_Integer theIndex, const IntPatch_Point& thePnt) ;
-+
- Standard_EXPORT void Dump() const;
-
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntPatch_WLine.lxx OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.lxx
---- OCCT-6.8.0_SRC/inc/IntPatch_WLine.lxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/IntPatch_WLine.lxx 2015-01-16 12:59:50.000000000 +0300
-@@ -97,3 +97,27 @@
- {
- return svtx(Index);
- }
-+
-+inline void IntPatch_WLine::ClearVertexes()
-+{
-+ svtx.Clear();
-+}
-+
-+inline void IntPatch_WLine::RemoveVertex(const Standard_Integer theIndex)
-+{
-+ if((theIndex < 1) || (theIndex > NbVertex()))
-+ Standard_OutOfRange::Raise("Cannot delete not existing vertex");
-+ svtx.Remove(theIndex);
-+}
-+
-+inline void IntPatch_WLine::InsertVertexBefore( const Standard_Integer theIndex,
-+ const IntPatch_Point& thePnt)
-+{
-+ const Standard_Integer aNbVertexes = NbVertex();
-+ Standard_Integer anIndex = Max(theIndex, 1);
-+
-+ if(anIndex > aNbVertexes)
-+ svtx.Append(thePnt);
-+ else
-+ svtx.InsertBefore(theIndex, thePnt);
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/IntSurf_PntOn2S.hxx OCCT-6.8.0_SRC-patch/inc/IntSurf_PntOn2S.hxx
---- OCCT-6.8.0_SRC/inc/IntSurf_PntOn2S.hxx 2014-11-11 17:54:10.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/IntSurf_PntOn2S.hxx 2015-01-16 14:34:22.000000000 +0300
-@@ -60,6 +60,11 @@
-
- //! Returns the parameters of the point on both surfaces.
- void Parameters (Standard_Real& U1, Standard_Real& V1, Standard_Real& U2, Standard_Real& V2) const;
-+
-+ //! Returns TRUE if 2D- and 3D-coordinates of theOterPoint are equal to
-+ //! corresponding coordinates of me (with given tolerance).
-+ //! If theTol2D == 0.0 we will compare 3D-points only.
-+ Standard_EXPORT Standard_Boolean IsSame (const IntSurf_PntOn2S& theOterPoint, const Standard_Real theTol3D = 0.0, const Standard_Real theTol2D = 0.0) const;
-
-
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/OpenGl_GraphicDriver.hxx OCCT-6.8.0_SRC-patch/inc/OpenGl_GraphicDriver.hxx
---- OCCT-6.8.0_SRC/inc/OpenGl_GraphicDriver.hxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/OpenGl_GraphicDriver.hxx 2015-01-16 13:01:24.000000000 +0300
-@@ -167,7 +167,6 @@
- Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
- Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
- Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
-- Standard_EXPORT void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
- Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
- Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
- Standard_EXPORT void ZBufferTriedronSetup (const Quantity_NameOfColor XColor = Quantity_NOC_RED, const Quantity_NameOfColor YColor = Quantity_NOC_GREEN, const Quantity_NameOfColor ZColor = Quantity_NOC_BLUE1, const Standard_Real SizeRatio = 0.8, const Standard_Real AxisDiametr = 0.05, const Standard_Integer NbFacettes = 12);
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/OpenGl_Workspace.hxx OCCT-6.8.0_SRC-patch/inc/OpenGl_Workspace.hxx
---- OCCT-6.8.0_SRC/inc/OpenGl_Workspace.hxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/OpenGl_Workspace.hxx 2015-01-16 13:01:24.000000000 +0300
-@@ -184,7 +184,6 @@
- Image_PixMap& theImage,
- const Graphic3d_BufferType& theBufferType);
-
-- void UseTransparency (const Standard_Boolean theFlag);
- Standard_Boolean& UseZBuffer() { return myUseZBuffer; }
- Standard_Boolean& UseDepthTest() { return myUseDepthTest; }
- Standard_Boolean& UseGLLight() { return myUseGLLight; }
-@@ -671,7 +670,6 @@
- Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
- Standard_Boolean myBackBufferRestored;
- Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
-- Standard_Boolean myUseTransparency;
- Standard_Boolean myUseZBuffer;
- Standard_Boolean myUseDepthTest;
- Standard_Boolean myUseGLLight;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/ShapeFix_Shape.hxx OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.hxx
---- OCCT-6.8.0_SRC/inc/ShapeFix_Shape.hxx 2014-11-11 17:54:25.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.hxx 2015-01-16 14:34:37.000000000 +0300
-@@ -116,6 +116,10 @@
- //! Returns (modifiable) the mode for applying
- //! ShapeFix::FixVertexPosition before all fixes, by default False.
- Standard_Integer& FixVertexPositionMode() ;
-+
-+ //! Returns (modifiable) the mode for fixing tolerances of vertices on whole shape
-+ //! after performing all fixes
-+ Standard_Integer& FixVertexTolMode() ;
-
-
-
-@@ -139,6 +143,7 @@
- Standard_Integer myFixWireMode;
- Standard_Integer myFixSameParameterMode;
- Standard_Integer myFixVertexPositionMode;
-+ Standard_Integer myFixVertexTolMode;
- Standard_Integer myStatus;
-
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/ShapeFix_Shape.lxx OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.lxx
---- OCCT-6.8.0_SRC/inc/ShapeFix_Shape.lxx 2014-11-11 17:47:05.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/ShapeFix_Shape.lxx 2015-01-16 13:00:03.000000000 +0300
-@@ -122,3 +122,13 @@
- {
- return myFixVertexPositionMode;
- }
-+
-+//=======================================================================
-+//function : FixVertexTolMode
-+//purpose :
-+//=======================================================================
-+
-+inline Standard_Integer& ShapeFix_Shape::FixVertexTolMode()
-+{
-+ return myFixVertexTolMode;
-+}
-\ No newline at end of file
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/V3d_View.hxx OCCT-6.8.0_SRC-patch/inc/V3d_View.hxx
---- OCCT-6.8.0_SRC/inc/V3d_View.hxx 2014-11-11 17:54:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/V3d_View.hxx 2015-01-16 14:35:09.000000000 +0300
-@@ -308,9 +308,6 @@
- //! Returns TRUE when the light is active in this view.
- Standard_EXPORT Standard_Boolean IsActiveLight (const Handle(V3d_Light)& aLight) const;
-
-- //! Activate/Deactivate the transparency in this view.
-- Standard_EXPORT void SetTransparency (const Standard_Boolean AnActivity = Standard_False) ;
--
- //! sets the immediate update mode and returns the previous one.
- Standard_EXPORT Standard_Boolean SetImmediateUpdate (const Standard_Boolean theImmediateUpdate) ;
-
-@@ -704,9 +701,6 @@
-
- Standard_EXPORT Handle(Graphic3d_TextureEnv) TextureEnv() const;
-
-- //! Returns the transparency activity.
-- Standard_EXPORT Standard_Boolean Transparency() const;
--
- //! Returns the current visualisation mode.
- Standard_EXPORT V3d_TypeOfVisualization Visualization() const;
-
-@@ -1075,7 +1069,6 @@
- TColStd_Array2OfReal MyTrsf;
- Handle(Graphic3d_Structure) MyGridEchoStructure;
- Handle(Graphic3d_Group) MyGridEchoGroup;
-- Standard_Boolean MyTransparencyFlag;
- Graphic3d_Vector myXscreenAxis;
- Graphic3d_Vector myYscreenAxis;
- Graphic3d_Vector myZscreenAxis;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Visual3d_View.hxx OCCT-6.8.0_SRC-patch/inc/Visual3d_View.hxx
---- OCCT-6.8.0_SRC/inc/Visual3d_View.hxx 2014-11-11 17:54:59.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/Visual3d_View.hxx 2015-01-16 14:35:10.000000000 +0300
-@@ -478,11 +478,6 @@
- //! Warning: Works only under Windows.
- Standard_EXPORT Standard_Boolean Print (const Aspect_Handle hPrnDC, const Standard_Boolean showBackground, const Standard_CString filename, const Aspect_PrintAlgo printAlgorithm = Aspect_PA_STRETCH, const Standard_Real theScaleFactor = 1.0) const;
-
-- //! if <AFlag> is Standard_True then the transparency
-- //! is managed in the view <me>.
-- //! Default Standard_False
-- Standard_EXPORT void SetTransparency (const Standard_Boolean AFlag) ;
--
- //! Returns Standard_True if the ZBuffer is activated
- //! in the view <me> and Standard_False if not.
- Standard_EXPORT Standard_Boolean ZBufferIsActivated() const;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/inc/Visual3d_ViewManager.hxx OCCT-6.8.0_SRC-patch/inc/Visual3d_ViewManager.hxx
---- OCCT-6.8.0_SRC/inc/Visual3d_ViewManager.hxx 2014-11-11 17:54:59.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/inc/Visual3d_ViewManager.hxx 2015-01-16 14:35:10.000000000 +0300
-@@ -200,16 +200,6 @@
- //! if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
- Standard_EXPORT void ReCompute (const Handle(Graphic3d_Structure)& AStructure, const Handle(Graphic3d_DataStructureManager)& AProjector) ;
-
-- //! Returns Standard_True if the transparency
-- //! is activated in all activated views.
-- //! Default Standard_False
-- Standard_EXPORT Standard_Boolean Transparency() const;
--
-- //! if <AFlag> is Standard_True then the transparency
-- //! is managed.
-- //! Default Standard_False
-- Standard_EXPORT void SetTransparency (const Standard_Boolean AFlag) ;
--
- //! Returns Standard_True if the zbuffer activity
- //! is managed automatically.
- //! Default Standard_False
-@@ -251,7 +241,6 @@
- Aspect_GenId MyViewGenId;
- Handle(Graphic3d_GraphicDriver) MyGraphicDriver;
- Standard_Boolean MyZBufferAuto;
-- Standard_Boolean MyTransparency;
- TColStd_MapOfInteger myLayerIds;
- TColStd_SequenceOfInteger myLayerSeq;
- Visual3d_MapOfZLayerSettings myMapOfZLayerSettings;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/samples/qt/VoxelDemo/src/Viewer.cpp OCCT-6.8.0_SRC-patch/samples/qt/VoxelDemo/src/Viewer.cpp
---- OCCT-6.8.0_SRC/samples/qt/VoxelDemo/src/Viewer.cpp 2014-11-11 17:46:38.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/samples/qt/VoxelDemo/src/Viewer.cpp 2015-01-16 12:59:32.000000000 +0300
-@@ -51,7 +51,6 @@
-
- myView->MustBeResized();
- myView->SetSurfaceDetail(V3d_TEX_NONE);
-- myView->SetTransparency(Standard_True);
- myView->SetSize(10000.0);
- myView->SetZSize(10000.0);
- myView->SetViewMappingDefault();
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cdl OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cdl
---- OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cdl 2014-11-11 17:46:38.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cdl 2015-01-16 13:01:23.000000000 +0300
-@@ -268,15 +268,6 @@
- -- inWhichLocal gives the local context in which anIObj
- -- is displayed. By default, the index -1 refers to the last
- -- Local Context opened.
--
-- Clear(me : mutable;
-- aniobj : InteractiveObject from AIS;
-- updateviewer : Boolean from Standard = Standard_True);
-----Purpose: Removes the interactive object aniobj from all viewers.
---- If a local context is open and if updateviewer equals
---- Standard_False, the presentation of the Interactive
---- Object activates the selection mode; the object is
---- displayed but no viewer will be updated.
-
- ClearPrs( me :mutable;
- aniobj : InteractiveObject from AIS;
-@@ -2046,6 +2037,16 @@
- PurgeViewer(me:mutable;Vwr:Viewer from V3d)
- returns Integer from Standard is static private;
-
-+ redisplayPrsModes (me : mutable;
-+ theIObj : InteractiveObject from AIS;
-+ theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
-+ ---Purpose: UNKNOWN
-+
-+ redisplayPrsRecModes (me : mutable;
-+ theIObj : InteractiveObject from AIS;
-+ theToUpdateViewer : Boolean from Standard = Standard_True) is static private;
-+ ---Purpose: UNKNOWN
-+
- fields
-
- myObjects : DataMapOfIOStatus from AIS;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cxx OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cxx
---- OCCT-6.8.0_SRC/src/AIS/AIS_InteractiveContext.cxx 2014-11-11 17:46:38.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_InteractiveContext.cxx 2015-01-16 13:01:23.000000000 +0300
-@@ -16,27 +16,6 @@
-
- // Modified by XAB & Serguei Dec 97 (angle &deviation coeffts)
-
--#define BUC60577 //GG_101099 Enable to compute correctly
--// transparency with more than one object in the view.
--
--#define BUC60632 //GG 15/03/00 Add protection on SetDisplayMode()
--// method, compute only authorized presentation.
--
--#define BUC60688 //GG 25/05/00 Add SetSensitivity() methods.
--
--#define BUC60722 //GG 04/09/00 Always enable viewer update when erasing something
--
--#define IMP051001 //GG Adds SetZDetected() and ZDetected() methods
--
--#define OCC172 //SAV clear static map before destroying context.
--
--#define OCC204 //SAV 26/02/02 : pass <updateviewer> flag to
--// AddOrRemoveCurrentObject method from ClearGlobal.
--
--#define OCC4373 //SAN 10/11/03 : improve display mode management in
--// Display( IO, updateviewer ) and
--// SetDisplayMode( IO, mode, updateviewer ) methods
--
- #include <AIS_InteractiveContext.ixx>
-
- //#include <AIS_DataMapIteratorOfDataMapOfInteractiveInteger.hxx>
-@@ -71,28 +50,6 @@
-
- #include <AIS_ListIteratorOfListOfInteractive.hxx>
-
--// In the method GetDefModes() the returned value of the selection mode
--// is always equal to 0 if it is -1.
--#define BUC61051
--
--// The local context is closed the method ::ResetOriginalState() sets the selection mode equal to 0
--// in spite of the selection mode of the interactive object in Natural Point.
--#define OCC166
--
--static Standard_Boolean AISDebugModeOn()
--{
--// static OSD_Environment aisdb("AISDEBUGMODE");
--// return !aisdb.Value().IsEmpty();
-- static Standard_Integer isDebugMode(-1);
-- if (isDebugMode < 0) {
-- isDebugMode = 1;
-- OSD_Environment aisdb("AISDEBUGMODE");
-- if (aisdb.Value().IsEmpty())
-- isDebugMode = 0;
-- }
-- return (isDebugMode != 0);
--}
--
- namespace
- {
- static volatile Standard_Integer THE_AIS_INDEX_SEL = 0;
-@@ -109,7 +66,7 @@
- return TCollection_AsciiString ("AIS_CurContext_")
- + TCollection_AsciiString (Standard_Atomic_Increment (&THE_AIS_INDEX_CUR));
- }
--};
-+}
-
- //=======================================================================
- //function : AIS_InteractiveContext
-@@ -131,9 +88,7 @@
- mySubIntensity(Quantity_NOC_GRAY40),
- myDisplayMode(0),
- myCurLocalIndex(0),
--#ifdef IMP051001
- myZDetectionFlag(0),
--#endif
- myIsAutoActivateSelMode( Standard_True )
- {
- InitAttributes();
-@@ -141,31 +96,30 @@
-
- void AIS_InteractiveContext::Delete() const
- {
-- //Clear the static current selection. Else the memory
-- //is not release
-+ // clear the static current selection
- AIS_Selection::ClearCurrentSelection();
--#ifdef OCC172
-+
- // to avoid an exception
-- if ( AIS_Selection::Find( mySelectionName.ToCString() ) )
-- AIS_Selection::Remove( mySelectionName.ToCString() );
-+ if (AIS_Selection::Find (mySelectionName.ToCString()))
-+ {
-+ AIS_Selection::Remove (mySelectionName.ToCString());
-+ }
-
- // to avoid an exception
-- if ( AIS_Selection::Find( myCurrentName.ToCString() ) )
-- AIS_Selection::Remove( myCurrentName.ToCString() );
-+ if (AIS_Selection::Find (myCurrentName.ToCString()))
-+ {
-+ AIS_Selection::Remove (myCurrentName.ToCString());
-+ }
-
- // let's remove one reference explicitly. this operation's supposed to
- // be performed when mgrSelector will be destroyed but anyway...
-- mgrSelector->Remove( myMainSel );
--#endif
-- AIS_ListOfInteractive aList;
--
-- AIS_DataMapIteratorOfDataMapOfIOStatus anIt(myObjects);
-+ mgrSelector->Remove (myMainSel);
-+
- Handle(AIS_InteractiveContext) aNullContext;
-- for(; anIt.More() ; anIt.Next())
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
- {
-- Handle(AIS_InteractiveObject) anObj = anIt.Key();
-- anObj->SetContext(aNullContext);
--
-+ Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
-+ anObj->SetContext (aNullContext);
- }
- MMgt_TShared::Delete();
- }
-@@ -209,494 +163,466 @@
-
- //=======================================================================
- //function : DisplayedObjects
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::DisplayedObjects(AIS_ListOfInteractive& aListOfIO,
-- const Standard_Boolean OnlyFromNeutral) const
-+void AIS_InteractiveContext::DisplayedObjects (AIS_ListOfInteractive& theListOfIO,
-+ const Standard_Boolean theOnlyFromNeutral) const
- {
--#ifdef OCCT_DEBUG
-- cout<<"AIS_IC::DisplayedObjects"<<endl;
--#endif
--
-- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
-- if(!HasOpenedContext() || OnlyFromNeutral){
-- for(;It.More();It.Next()){
-- if(It.Value()->GraphicStatus()==AIS_DS_Displayed)
-- aListOfIO.Append(It.Key());
-- }
-- }
-- else{
-- TColStd_MapOfTransient theMap;
-- // neutral point
-- for(;It.More();It.Next()){
-- if(It.Value()->GraphicStatus()==AIS_DS_Displayed)
-- theMap.Add(It.Key());
-- }
--
-- //parse all local contexts...
--#ifdef OCCT_DEBUG
-- cout<<"\tFrom Neutral Point : "<<theMap.Extent()<<endl;
-- Standard_Integer NbDisp;
-- for(AIS_DataMapIteratorOfDataMapOfILC it1(myLocalContexts);it1.More();it1.Next()){
-- const Handle(AIS_LocalContext)& LC = it1.Value();
-- NbDisp = LC->DisplayedObjects(theMap);
-- cout<<"\tIn Local Context "<<it1.Key()<<" : "<<NbDisp<<endl;
-- }
--#endif
-- Handle(AIS_InteractiveObject) curIO;
-- Handle(Standard_Transient) Tr;
-- for(TColStd_MapIteratorOfMapOfTransient it2(theMap);it2.More();it2.Next()){
-- Tr = it2.Key();
-- curIO = *((Handle(AIS_InteractiveObject)*) &Tr);
-- aListOfIO.Append(curIO);
-+ if (!HasOpenedContext()
-+ || theOnlyFromNeutral)
-+ {
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ if (anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed)
-+ {
-+ theListOfIO.Append (anObjIter.Key());
- }
- }
-+ return;
-+ }
-+
-+ // neutral point
-+ TColStd_MapOfTransient aDispMap;
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ if (anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed)
-+ {
-+ aDispMap.Add (anObjIter.Key());
-+ }
-+ }
-+
-+ // parse all local contexts...
-+ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
-+ {
-+ const Handle(AIS_LocalContext)& aLocCtx = aCtxIter.Value();
-+ aLocCtx->DisplayedObjects (aDispMap);
-+ }
-+
-+ Handle(AIS_InteractiveObject) anObj;
-+ for (TColStd_MapIteratorOfMapOfTransient aDispMapIter (aDispMap); aDispMapIter.More(); aDispMapIter.Next())
-+ {
-+ const Handle(Standard_Transient)& aTransient = aDispMapIter.Key();
-+ anObj = *((Handle(AIS_InteractiveObject)* )&aTransient);
-+ theListOfIO.Append (anObj);
-+ }
- }
-+
- //=======================================================================
- //function : DisplayedObjects
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::DisplayedObjects(const AIS_KindOfInteractive TheKind,
-- const Standard_Integer TheSign,
-- AIS_ListOfInteractive& aListOfIO,
-- const Standard_Boolean /*OnlyFromNeutral*/) const
-+void AIS_InteractiveContext::DisplayedObjects (const AIS_KindOfInteractive theKind,
-+ const Standard_Integer theSign,
-+ AIS_ListOfInteractive& theListOfIO,
-+ const Standard_Boolean /*OnlyFromNeutral*/) const
- {
-- ObjectsByDisplayStatus( TheKind, TheSign, AIS_DS_Displayed, aListOfIO );
-+ ObjectsByDisplayStatus (theKind, theSign, AIS_DS_Displayed, theListOfIO);
- }
-
- //=======================================================================
- //function : ErasedObjects
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::ErasedObjects(AIS_ListOfInteractive& theListOfIO) const
-+void AIS_InteractiveContext::ErasedObjects (AIS_ListOfInteractive& theListOfIO) const
- {
-- ObjectsByDisplayStatus( AIS_DS_Erased, theListOfIO );
-+ ObjectsByDisplayStatus (AIS_DS_Erased, theListOfIO);
- }
-
- //=======================================================================
- //function : ErasedObjects
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::ErasedObjects(const AIS_KindOfInteractive TheKind,
-- const Standard_Integer TheSign,
-- AIS_ListOfInteractive& theListOfIO) const
-+void AIS_InteractiveContext::ErasedObjects (const AIS_KindOfInteractive theKind,
-+ const Standard_Integer theSign,
-+ AIS_ListOfInteractive& theListOfIO) const
- {
-- ObjectsByDisplayStatus( TheKind, TheSign, AIS_DS_Erased, theListOfIO );
-+ ObjectsByDisplayStatus (theKind, theSign, AIS_DS_Erased, theListOfIO);
- }
-
- //=======================================================================
- //function : ObjectsByDisplayStatus
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::ObjectsByDisplayStatus(const AIS_DisplayStatus theStatus,
-- AIS_ListOfInteractive& theListOfIO) const
-+void AIS_InteractiveContext::ObjectsByDisplayStatus (const AIS_DisplayStatus theStatus,
-+ AIS_ListOfInteractive& theListOfIO) const
- {
-- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
-- for(;It.More();It.Next()){
-- if(It.Value()->GraphicStatus() == theStatus)
-- theListOfIO.Append(It.Key());
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ if (anObjIter.Value()->GraphicStatus() == theStatus)
-+ {
-+ theListOfIO.Append (anObjIter.Key());
-+ }
- }
- }
-
- //=======================================================================
- //function : ObjectsByDisplayStatus
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::ObjectsByDisplayStatus (const AIS_KindOfInteractive theKind,
-+ const Standard_Integer theSign,
-+ const AIS_DisplayStatus theStatus,
-+ AIS_ListOfInteractive& theListOfIO) const
-+{
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ if (anObjIter.Value()->GraphicStatus() != theStatus
-+ || anObjIter.Key()->Type() != theKind)
-+ {
-+ continue;
-+ }
-
--void AIS_InteractiveContext::ObjectsByDisplayStatus(const AIS_KindOfInteractive TheKind,
-- const Standard_Integer TheSign,
-- const AIS_DisplayStatus theStatus,
-- AIS_ListOfInteractive& theListOfIO) const
--{
-- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
-- for(;It.More();It.Next()){
-- if(It.Value()->GraphicStatus()==theStatus){
-- if(It.Key()->Type()==TheKind){
-- if(TheSign ==-1)
-- theListOfIO.Append(It.Key());
-- else{
-- if(It.Key()->Signature()==TheSign)
-- theListOfIO.Append(It.Key());
-- }
-- }
-+ if (theSign == -1
-+ || anObjIter.Key()->Signature() == theSign)
-+ {
-+ theListOfIO.Append (anObjIter.Key());
- }
- }
- }
-
- //=======================================================================
- //function : ObjectsInside
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::ObjectsInside (AIS_ListOfInteractive& theListOfIO,
-+ const AIS_KindOfInteractive theKind,
-+ const Standard_Integer theSign) const
-+{
-+ if (theKind == AIS_KOI_None
-+ && theSign == -1)
-+ {
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ theListOfIO.Append (anObjIter.Key());
-+ }
-+ return;
-+ }
-
--void AIS_InteractiveContext::ObjectsInside(AIS_ListOfInteractive& aListOfIO,
-- const AIS_KindOfInteractive TheKind,
-- const Standard_Integer TheSign) const
--{
-- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
-- if(TheKind==AIS_KOI_None && TheSign ==-1){
-- for(;It.More();It.Next()){
-- aListOfIO.Append(It.Key());
-- }
-- }
-- else{
-- for(;It.More();It.Next()){
-- if(It.Key()->Type()==TheKind){
-- if(TheSign ==-1)
-- aListOfIO.Append(It.Key());
-- else{
-- if(It.Key()->Signature()==TheSign)
-- aListOfIO.Append(It.Key());
-- }
-- }
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ if (anObjIter.Key()->Type() != theKind)
-+ {
-+ continue;
-+ }
-+
-+ if (theSign == -1
-+ || anObjIter.Key()->Signature() == theSign)
-+ {
-+ theListOfIO.Append (anObjIter.Key());
- }
- }
- }
-
- //=======================================================================
- //function : Display
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::Display (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+
-+ Standard_Integer aDispMode = 0, aHiMod = -1, aSelMode = -1;
-+ GetDefModes (theIObj, aDispMode, aHiMod, aSelMode);
-
--void AIS_InteractiveContext::Display(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer )
-+ Display (theIObj, aDispMode, myIsAutoActivateSelMode ? aSelMode : -1,
-+ theToUpdateViewer, theIObj->AcceptShapeDecomposition());
-+}
-+
-+//=======================================================================
-+//function : Display
-+//purpose :
-+//=======================================================================
-+void AIS_InteractiveContext::Display (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer theDispMode,
-+ const Standard_Integer theSelectionMode,
-+ const Standard_Boolean theToUpdateViewer,
-+ const Standard_Boolean theToAllowDecomposition)
- {
-- if(anIObj.IsNull()) return;
--
-- Standard_Integer DispMode,HiMod,SelMode;
--
-- GetDefModes(anIObj,DispMode,HiMod,SelMode);
--
-- Handle (AIS_InteractiveContext) aThis = this;
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(aThis);
--
-- //NO LOCAL CONTEXT OPEN
-- if(!HasOpenedContext()) {
--#ifndef OCC4373
-- // SAN : Do not return here. Perform advanced display mode analysis a bit later...
-- if(IsDisplayed(anIObj)) return;
--#endif
--
-- // it did not yet exist
-- if(!myObjects.IsBound(anIObj)){
--
-- Handle(AIS_GlobalStatus) STATUS=
--#ifdef OCC166
-- new AIS_GlobalStatus(AIS_DS_Displayed,DispMode,SelMode);
--#else
-- new AIS_GlobalStatus(AIS_DS_Displayed,DispMode,0);
--#endif
-- myObjects.Bind (anIObj,STATUS);
-- myMainPM->Display(anIObj,DispMode);
-- if( myIsAutoActivateSelMode )
-- {
-- if(!mgrSelector->Contains(anIObj))
-- mgrSelector->Load(anIObj);
-- mgrSelector->Activate(anIObj,SelMode,myMainSel);
-- }
--
-- if(updateviewer) myMainVwr->Update();
-- }
-- // it is somewhere else...
-- else {
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-- // ENDCLE
-- if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
-- {
-- // SAN : erase presentations for all display modes different from <DispMode>;
-- // then make sure <DispMode> is displayed and maybe highlighted;
-- // Finally, activate selection mode <SelMode> if not yet activated.
-- TColStd_ListOfInteger aModesToRemove;
-- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
-- for(;ItL.More();ItL.Next()){
--
-- Standard_Integer OldMode = ItL.Value();
--
-- if(OldMode!=DispMode){
-- aModesToRemove.Append(OldMode);
-- if(myMainPM->IsHighlighted(anIObj,OldMode))
-- myMainPM->Unhighlight(anIObj,OldMode);
-- myMainPM->Erase(anIObj,OldMode);
-- }
-- }
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- for(ItL.Initialize(aModesToRemove);ItL.More();ItL.Next())
-- STATUS->RemoveDisplayMode(ItL.Value());
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
-- if(!STATUS->IsDModeIn(DispMode))
-- STATUS->AddDisplayMode(DispMode);
-+ if (HasOpenedContext())
-+ {
-+ myLocalContexts (myCurLocalIndex)->Display (theIObj, theDispMode, theToAllowDecomposition, theSelectionMode);
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
-+ return;
-+ }
-
-- myMainPM->Display(anIObj,DispMode);
-- if (STATUS->GraphicStatus() == AIS_DS_Erased)
-- {
-- STATUS->SetGraphicStatus(AIS_DS_Displayed);
-- }
-- if(STATUS->IsHilighted()){
-- myMainPM->Highlight(anIObj,HiMod);
-- }
-- if( myIsAutoActivateSelMode )
-- {
-- if(!mgrSelector->Contains(anIObj))
-- mgrSelector->Load(anIObj);
-- if(!mgrSelector->IsActivated(anIObj,SelMode))
-- mgrSelector->Activate(anIObj,SelMode,myMainSel);
-- }
-+ if (!myObjects.IsBound (theIObj))
-+ {
-+ Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
-+ myObjects.Bind (theIObj, aStatus);
-+ myMainPM->Display(theIObj, theDispMode);
-+ if (theSelectionMode != -1)
-+ {
-+ if (!mgrSelector->Contains (theIObj))
-+ {
-+ mgrSelector->Load (theIObj);
- }
-- }
--
-- if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
-- myMainVwr->Viewer()->SetTransparency(Standard_True);
-- if(updateviewer) myMainVwr->Update();
-+ mgrSelector->Activate (theIObj, theSelectionMode, myMainSel);
-+ }
- }
--
-- // LOCAL CONTEXT OPEN
- else
- {
-- myLocalContexts(myCurLocalIndex)->Display(anIObj,DispMode,anIObj->AcceptShapeDecomposition(),SelMode);
--
-- if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
-- myMainVwr->Viewer()->SetTransparency(Standard_True);
--
--
-- if(updateviewer) myMainVwr->Update();
-- }
--}
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ if (aStatus->GraphicStatus() != AIS_DS_Displayed
-+ && aStatus->GraphicStatus() != AIS_DS_Erased)
-+ {
-+ return;
-+ }
-
--//=======================================================================
--//function : Display
--//purpose :
--//=======================================================================
-+ // Erase presentations for all display modes different from aDispMode.
-+ // Then make sure aDispMode is displayed and maybe highlighted.
-+ // Finally, activate selection mode <SelMode> if not yet activated.
-+ TColStd_ListOfInteger aModesToRemove;
-+ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
-+ {
-+ const Standard_Integer anOldMode = aDispModeIter.Value();
-+ if (anOldMode != theDispMode)
-+ {
-+ aModesToRemove.Append (anOldMode);
-+ if(myMainPM->IsHighlighted (theIObj, anOldMode))
-+ {
-+ myMainPM->Unhighlight (theIObj, anOldMode);
-+ }
-+ myMainPM->Erase (theIObj, anOldMode);
-+ }
-+ }
-
--void AIS_InteractiveContext::Display(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer aDisplayMode,
-- const Standard_Integer aSelectionMode,
-- const Standard_Boolean updateviewer,
-- const Standard_Boolean allowdecomposition)
--{
-- if(anIObj.IsNull()) return;
-+ for (TColStd_ListIteratorOfListOfInteger aRemModeIter (aModesToRemove); aRemModeIter.More(); aRemModeIter.Next())
-+ {
-+ aStatus->RemoveDisplayMode (aRemModeIter.Value());
-+ }
-
-- if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
--
-- // if no local context...
-- if(!HasOpenedContext()) {
-- // if(!anIObj->HasDisplayMode())
-- // anIObj->SetDisplayMode(aDisplayMode);
--
-- if(!myObjects.IsBound(anIObj)){
-- Handle(AIS_GlobalStatus) STATUS=
-- new AIS_GlobalStatus(AIS_DS_Displayed,aDisplayMode,aSelectionMode);
-- myObjects.Bind (anIObj,STATUS);
-- myMainPM->Display(anIObj,aDisplayMode);
-- if(aSelectionMode!=-1){
-- if(!mgrSelector->Contains(anIObj))
-- mgrSelector->Load(anIObj,aSelectionMode);
-- mgrSelector->Activate(anIObj,aSelectionMode,myMainSel);
-- }
-- if(updateviewer) myMainVwr->Update();
-+ if (!aStatus->IsDModeIn (theDispMode))
-+ {
-+ aStatus->AddDisplayMode (theDispMode);
-+ }
-+
-+ myMainPM->Display (theIObj, theDispMode);
-+ if (aStatus->GraphicStatus() == AIS_DS_Erased)
-+ {
-+ aStatus->SetGraphicStatus (AIS_DS_Displayed);
-+ }
-+ if (aStatus->IsHilighted())
-+ {
-+ const Standard_Integer aHiMod = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
-+ myMainPM->Highlight (theIObj, aHiMod);
- }
-- // anIObj->SelectionMode(aSelectionMode);
-- else{
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-- // ENDCLE
-- if(!STATUS->IsDModeIn(aDisplayMode)){
-- myMainPM->Display(anIObj,aDisplayMode);
-- STATUS->AddDisplayMode(aDisplayMode);
-- if(STATUS->IsSubIntensityOn())
-- myMainPM->Color(anIObj,mySubIntensity,aDisplayMode);
-+ if (theSelectionMode != -1)
-+ {
-+ if (!mgrSelector->Contains (theIObj))
-+ {
-+ mgrSelector->Load (theIObj);
- }
-- if(aSelectionMode!=-1){
-- STATUS->AddSelectionMode(aSelectionMode);
-- mgrSelector->Activate(anIObj,aSelectionMode,myMainSel);
-+ if (!mgrSelector->IsActivated (theIObj, theSelectionMode))
-+ {
-+ mgrSelector->Activate (theIObj, theSelectionMode, myMainSel);
- }
-- if(updateviewer) myMainVwr->Update();
--
- }
- }
-- else
-- {
-- myLocalContexts(myCurLocalIndex)->Display(anIObj,aDisplayMode,allowdecomposition,aSelectionMode);
-- if(updateviewer) myMainVwr->Update();
-- }
--}
-
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
-+}
-
- //=======================================================================
- //function : Load
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::Load(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer SelMode,
-- const Standard_Boolean AllowDecomposition)
-+void AIS_InteractiveContext::Load (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer theSelMode,
-+ const Standard_Boolean theToAllowDecomposition)
- {
-- if(anIObj.IsNull()) return;
-- if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
--
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- if(!HasOpenedContext()) {
-- if(SelMode==-1 && !AllowDecomposition){
-- Standard_Integer DispMode,HiMod,SelModeDef;
--
-- GetDefModes(anIObj,DispMode,HiMod,SelModeDef);
-- Handle(AIS_GlobalStatus) STATUS=
-- new AIS_GlobalStatus(AIS_DS_Erased,DispMode,SelModeDef);
-- myObjects.Bind (anIObj,STATUS);
-- return;
-- }
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-+
-+ if (HasOpenedContext())
-+ {
-+ myLocalContexts (myCurLocalIndex)->Load (theIObj, theToAllowDecomposition, theSelMode);
-+ return;
- }
-- myLocalContexts(myCurLocalIndex)->Load(anIObj,AllowDecomposition,SelMode);
--}
-
-+ if (theSelMode == -1
-+ && !theToAllowDecomposition
-+ && !myObjects.IsBound (theIObj))
-+ {
-+ Standard_Integer aDispMode, aHiMod, aSelModeDef;
-+ GetDefModes (theIObj, aDispMode, aHiMod, aSelModeDef);
-+ Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Erased, aDispMode, aSelModeDef);
-+ myObjects.Bind (theIObj, aStatus);
-+ }
-+}
-
- //=======================================================================
- //function : Erase
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::Erase(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::Erase (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return;
--
-- if ( !anIObj->IsAutoHilight() )
-- anIObj->ClearSelected();
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- if(!HasOpenedContext()){
-- EraseGlobal(anIObj,updateviewer);
-+ if (!theIObj->IsAutoHilight())
-+ {
-+ theIObj->ClearSelected();
- }
-- else
-+
-+ Standard_Boolean wasInCtx = Standard_False;
-+ if (HasOpenedContext())
-+ {
-+ // First it is checked if it is possible to remove in the current local context
-+ // then one tries to remove in other local contexts, if they allow it...
-+ wasInCtx = myLocalContexts (myCurLocalIndex)->Erase (theIObj);
-+ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
- {
-- // First it is checked if it is possible to remove in the current local context
-- // then one tries to remove in other local contexts, if they allow it...
--
-- Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->Erase(anIObj);
--// if(!WasInCtx) {
-- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
-- for (;It.More();It.Next()){
-- if(It.Value()->AcceptErase())
--#ifdef BUC60722
-- WasInCtx |= It.Value()->Erase(anIObj);
--#else
-- WasInCtx = It.Value()->Erase(anIObj);
--#endif
-+ if (aCtxIter.Value()->AcceptErase())
-+ {
-+ wasInCtx = aCtxIter.Value()->Erase (theIObj) || wasInCtx;
- }
--
-- if(!WasInCtx)
-- EraseGlobal(anIObj,updateviewer);
-- else
-- if(updateviewer) myMainVwr->Update();
- }
-+ }
-+
-+ if (!wasInCtx)
-+ {
-+ EraseGlobal (theIObj, Standard_False);
-+ }
-+
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
- }
-
- //=======================================================================
- //function : EraseAll
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::EraseAll(const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::EraseAll (const Standard_Boolean theToUpdateViewer)
- {
-- if(!HasOpenedContext())
-+ if (HasOpenedContext())
- {
-- for (AIS_DataMapIteratorOfDataMapOfIOStatus ItM(myObjects); ItM.More(); ItM.Next())
-- {
-- if(ItM.Value()->GraphicStatus() == AIS_DS_Displayed)
-- Erase(ItM.Key(),Standard_False);
-- }
-- if(updateviewer)
-+ return;
-+ }
-+
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ if (anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed)
- {
-- myMainVwr->Update();
-+ Erase (anObjIter.Key(), Standard_False);
- }
- }
-+
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
- }
-
- //=======================================================================
- //function : DisplayAll
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::DisplayAll(const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::DisplayAll (const Standard_Boolean theToUpdateViewer)
- {
-- if(!HasOpenedContext()){
--
-- AIS_DisplayStatus aStatus;
-+ if (HasOpenedContext())
-+ {
-+ return;
-+ }
-
-- if (!HasOpenedContext())
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ const AIS_DisplayStatus aStatus = anObjIter.Value()->GraphicStatus();
-+ if (aStatus == AIS_DS_Erased)
- {
-- for (AIS_DataMapIteratorOfDataMapOfIOStatus ItM (myObjects); ItM.More(); ItM.Next())
-- {
-- aStatus = ItM.Value()->GraphicStatus();
-- if (aStatus == AIS_DS_Erased)
-- Display(ItM.Key(),Standard_False);
-- }
-- if(updateviewer)
-- {
-- myMainVwr->Update();
-- }
-+ Display (anObjIter.Key(), Standard_False);
- }
- }
--
-+
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
- }
-
- //=======================================================================
- //function : DisplaySelected
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::DisplaySelected(const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::DisplaySelected (const Standard_Boolean theToUpdateViewer)
- {
--
-- if (!HasOpenedContext())
-+ if (HasOpenedContext())
- {
-- Standard_Boolean found = Standard_False;
-- Handle(AIS_Selection) sel = AIS_Selection::Selection(myCurrentName.ToCString());
-- Handle(AIS_InteractiveObject) iObj;
-- for (sel->Init(); sel->More(); sel->Next())
-- {
-- iObj = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
-- Display(iObj,Standard_False);
-- found = Standard_True;
-- }
-- if (found && updateviewer)
-- {
-- myMainVwr->Update();
-- }
-+ return;
-+ }
-+
-+ Standard_Boolean isFound = Standard_False;
-+ Handle(AIS_Selection) aSelIter = AIS_Selection::Selection (myCurrentName.ToCString());
-+ for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
-+ {
-+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
-+ Display (anObj, Standard_False);
-+ isFound = Standard_True;
- }
--}
-
-+ if (isFound && theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
-+}
-
- //=======================================================================
- //function : EraseSelected
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::EraseSelected(const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::EraseSelected (const Standard_Boolean theToUpdateViewer)
- {
-- if (!HasOpenedContext())
-+ if (HasOpenedContext())
- {
-- Standard_Boolean found = Standard_False;
-- Handle(AIS_Selection) sel = AIS_Selection::Selection(myCurrentName.ToCString());
-- Handle(AIS_InteractiveObject) iObj;
-- for (sel->Init();sel->More();sel->Next())
-- {
-- iObj = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
-- Erase(iObj,Standard_False);
-- found = Standard_True;
-- }
-- if(found && updateviewer)
-- {
-- myMainVwr->Update();
-- }
-+ return;
-+ }
-+
-+ Standard_Boolean isFound = Standard_False;
-+ Handle(AIS_Selection) aSelIter = AIS_Selection::Selection(myCurrentName.ToCString());
-+ for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
-+ {
-+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
-+ Erase (anObj, Standard_False);
-+ isFound = Standard_True;
-+ }
-+
-+ if (isFound && theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
- }
- }
-+
- //=======================================================================
- //function :
- //purpose :
-@@ -761,187 +687,163 @@
- return Standard_True;
- }
-
--
- //=======================================================================
--//purpose :
-+//function : DisplayStatus
-+//purpose :
- //=======================================================================
--
--AIS_DisplayStatus AIS_InteractiveContext::DisplayStatus(const Handle(AIS_InteractiveObject)& anIObj) const
-+AIS_DisplayStatus AIS_InteractiveContext::DisplayStatus (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- if(anIObj.IsNull()) return AIS_DS_None;
--
-- if(myObjects.IsBound(anIObj))
-- return myObjects(anIObj)->GraphicStatus();
-+ if (theIObj.IsNull())
-+ {
-+ return AIS_DS_None;
-+ }
-+ else if (myObjects.IsBound (theIObj))
-+ {
-+ return myObjects (theIObj)->GraphicStatus();
-+ }
-
-- AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
-- for(;ItM.More();ItM.Next()){
-- if(ItM.Value()->IsIn(anIObj))
-+ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
-+ {
-+ if (aCtxIter.Value()->IsIn (theIObj))
-+ {
- return AIS_DS_Temporary;
-+ }
- }
--
- return AIS_DS_None;
--
- }
-
--
--
--
- //=======================================================================
- //function : DisplayedModes
--//purpose :
-+//purpose :
- //=======================================================================
--
--const TColStd_ListOfInteger& AIS_InteractiveContext::
--DisplayedModes(const Handle(AIS_InteractiveObject)& anIObj) const
-+const TColStd_ListOfInteger& AIS_InteractiveContext::DisplayedModes (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- return myObjects(anIObj)->DisplayedModes();
-+ return myObjects (theIObj)->DisplayedModes();
- }
-
--
- //=======================================================================
- //function : Remove
--//purpose :
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::Remove(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::Remove (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
--
-- if(anIObj.IsNull()) return;
--
-- if(!HasOpenedContext()){
-- ClearGlobal(anIObj,updateviewer);
-+ if (theIObj.IsNull())
-+ {
-+ return;
- }
-- else
-+
-+ if (HasOpenedContext())
-+ {
-+ myLocalContexts (myCurLocalIndex)->Remove (theIObj);
-+ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
- {
-- myLocalContexts(myCurLocalIndex)->Remove(anIObj);
-- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
-- for (;It.More() ;It.Next()){
-- if(It.Value()->AcceptErase())
-- It.Value()->Remove(anIObj);
--
-+ if (aCtxIter.Value()->AcceptErase())
-+ {
-+ aCtxIter.Value()->Remove (theIObj);
- }
-- // if(!WasInCtx)
-- ClearGlobal(anIObj,updateviewer);
--// else
--// if(updateviewer) myMainVwr->Update();
- }
-+ }
-+
-+ ClearGlobal (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : RemoveAll
--//purpose :
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::RemoveAll(const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::RemoveAll (const Standard_Boolean theToUpdateViewer)
- {
- AIS_ListOfInteractive aList;
-- ObjectsInside(aList);
-- AIS_ListIteratorOfListOfInteractive aListIterator;
-- for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
-- Remove(aListIterator.Value(), Standard_False);
-+ ObjectsInside (aList);
-+ for (AIS_ListIteratorOfListOfInteractive aListIterator (aList); aListIterator.More(); aListIterator.Next())
-+ {
-+ Remove (aListIterator.Value(), Standard_False);
- }
--
-- if(updateviewer)
-- myMainVwr->Update();
--}
--
--//=======================================================================
--//function : Clear
--//purpose :
--//=======================================================================
--
--void AIS_InteractiveContext::Clear(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
--{
-- if(anIObj.IsNull()) return;
-
-- if(!HasOpenedContext()){
-- ClearGlobal(anIObj,updateviewer);
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
- }
-- else
-- {
--
-- Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->Remove(anIObj);
-- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
-- for (;It.More() ;It.Next()){
-- if(It.Value()->AcceptErase())
-- WasInCtx = It.Value()->Remove(anIObj);
--
-- }
-- if(!WasInCtx)
-- ClearGlobal(anIObj,updateviewer);
-- else
-- if(updateviewer) myMainVwr->Update();
-- }
- }
-
--
--
--
- //=======================================================================
- //function : ClearPrs
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::ClearPrs(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer aMode,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::ClearPrs (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer theMode,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return;
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- if(!HasOpenedContext()){
-- ClearGlobalPrs(anIObj,aMode,updateviewer);
-+ if (!HasOpenedContext())
-+ {
-+ ClearGlobalPrs (theIObj, theMode, theToUpdateViewer);
-+ return;
- }
-- else
-+
-+ Standard_Boolean wasInCtx = myLocalContexts (myCurLocalIndex)->ClearPrs (theIObj, theMode);
-+ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
-+ {
-+ if (aCtxIter.Value()->AcceptErase())
- {
-- Standard_Boolean WasInCtx = myLocalContexts(myCurLocalIndex)->ClearPrs(anIObj,aMode);
-- AIS_DataMapIteratorOfDataMapOfILC It(myLocalContexts);
-- for (;It.More() ;It.Next()){
-- if(It.Value()->AcceptErase())
-- WasInCtx = It.Value()->ClearPrs(anIObj,aMode);
-- }
-- if(!WasInCtx)
-- ClearGlobalPrs(anIObj,aMode,updateviewer);
-- else
-- if(updateviewer) myMainVwr->Update();
--
-+ wasInCtx = aCtxIter.Value()->ClearPrs (theIObj, theMode) || wasInCtx;
- }
-+ }
-+ if (!wasInCtx)
-+ {
-+ ClearGlobalPrs (theIObj, theMode, theToUpdateViewer);
-+ }
-+ else if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
- }
-
- //=======================================================================
- //function : Hilight
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::Hilight(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::Hilight (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return;
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- if(!anIObj->HasInteractiveContext()) anIObj->SetContext(this);
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
- if (!HasOpenedContext())
- {
-- if(!myObjects.IsBound(anIObj)) return;
--
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- // const TColStd_ListOfInteger& LL = STATUS->DisplayedModes();
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
--
-- // ENDCLE
-- STATUS->SetHilightStatus (Standard_True);
-+ if (!myObjects.IsBound (theIObj))
-+ {
-+ return;
-+ }
-
-- if (STATUS->GraphicStatus() == AIS_DS_Displayed)
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ aStatus->SetHilightStatus (Standard_True);
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
- {
-- Standard_Integer aHilightMode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
-- myMainPM->Highlight (anIObj, aHilightMode);
-+ Standard_Integer aHilightMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
-+ myMainPM->Highlight (theIObj, aHilightMode);
- }
- }
- else
- {
-- myLocalContexts(myCurLocalIndex)->Hilight(anIObj);
-+ myLocalContexts (myCurLocalIndex)->Hilight (theIObj);
- }
-
-- if(updateviewer) myMainVwr->Update();
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
- }
- //=======================================================================
- //function : Hilight
-@@ -1086,153 +988,165 @@
-
- //=======================================================================
- //function : IsDisplayed
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::
--IsDisplayed(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer aMode) const
-+Standard_Boolean AIS_InteractiveContext::IsDisplayed (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer theMode) const
- {
-- if(anIObj.IsNull()) return Standard_False;
-- if(myObjects.IsBound(anIObj)) {
-- if(myObjects(anIObj)->GraphicStatus()==AIS_DS_Displayed &&
-- myObjects(anIObj)->IsDModeIn(aMode))
-+ if (theIObj.IsNull())
-+ {
-+ return Standard_False;
-+ }
-+
-+ if (myObjects.IsBound (theIObj))
-+ {
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed
-+ && aStatus->IsDModeIn (theMode))
-+ {
- return Standard_True;
-+ }
- }
--
-- AIS_DataMapIteratorOfDataMapOfILC ItM(myLocalContexts);
-- for(;ItM.More();ItM.Next()){
-- if(ItM.Value()->IsDisplayed(anIObj,aMode))
-+
-+ for (AIS_DataMapIteratorOfDataMapOfILC aCtxIter (myLocalContexts); aCtxIter.More(); aCtxIter.Next())
-+ {
-+ if (aCtxIter.Value()->IsDisplayed (theIObj, theMode))
-+ {
- return Standard_True;
-+ }
- }
- return Standard_False;
- }
-
--
- //=======================================================================
- //function : DisplayPriority
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Integer AIS_InteractiveContext::
--DisplayPriority(const Handle(AIS_InteractiveObject)& anIObj) const
-+Standard_Integer AIS_InteractiveContext::DisplayPriority (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- if(anIObj.IsNull()) return -1;
-+ if (theIObj.IsNull())
-+ {
-+ return -1;
-+ }
-+ else if (!myObjects.IsBound (theIObj))
-+ {
-+ return 0;
-+ }
-
-- if (myObjects.IsBound(anIObj))
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed
-+ || aStatus->GraphicStatus() == AIS_DS_Erased)
- {
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-- if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
-- {
-- Standard_Integer aDispMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
-- (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
-- return myMainPM->DisplayPriority (anIObj, aDispMode);
-- }
-+ Standard_Integer aDispMode = theIObj->HasDisplayMode()
-+ ? theIObj->DisplayMode()
-+ : (theIObj->AcceptDisplayMode (myDisplayMode)
-+ ? myDisplayMode
-+ : 0);
-+ return myMainPM->DisplayPriority (theIObj, aDispMode);
- }
- return 0;
- }
-+
- //=======================================================================
- //function : SetDisplayPriority
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetDisplayPriority(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer aPriority)
-+void AIS_InteractiveContext::SetDisplayPriority (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer thePriority)
- {
-- if(anIObj.IsNull())
-+ if (theIObj.IsNull())
-+ {
- return;
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- if(myObjects.IsBound(anIObj))
-+ }
-+
-+ if (!theIObj->HasInteractiveContext())
- {
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-+ theIObj->SetContext (this);
-+ }
-
-- if (STATUS->GraphicStatus() == AIS_DS_Displayed || STATUS->GraphicStatus() == AIS_DS_Erased)
-- {
-- Standard_Integer aDisplayMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
-- (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
-- myMainPM->SetDisplayPriority (anIObj, aDisplayMode, aPriority);
-+ if (myObjects.IsBound (theIObj))
-+ {
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed
-+ || aStatus->GraphicStatus() == AIS_DS_Erased)
-+ {
-+ Standard_Integer aDisplayMode = theIObj->HasDisplayMode()
-+ ? theIObj->DisplayMode()
-+ : (theIObj->AcceptDisplayMode (myDisplayMode)
-+ ? myDisplayMode
-+ : 0);
-+ myMainPM->SetDisplayPriority (theIObj, aDisplayMode, thePriority);
- }
- }
- else if (HasOpenedContext())
- {
-- myLocalContexts(myCurLocalIndex)->SetDisplayPriority(anIObj,aPriority);
-+ myLocalContexts (myCurLocalIndex)->SetDisplayPriority (theIObj, thePriority);
- }
- }
-
- //=======================================================================
- //function : Redisplay
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::Redisplay(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer,
-- const Standard_Boolean allmodes)
-+void AIS_InteractiveContext::Redisplay (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer,
-+ const Standard_Boolean theAllModes)
- {
-- if(AISDebugModeOn()){
-- cout<<"===>AIS_InteractiveContext::Redisplay de :";
-- cout<<anIObj->DynamicType()->Name()<<endl;
-- }
--
-- RecomputePrsOnly(anIObj,updateviewer,allmodes);
-- RecomputeSelectionOnly(anIObj);
-+ RecomputePrsOnly (theIObj, theToUpdateViewer, theAllModes);
-+ RecomputeSelectionOnly (theIObj);
- }
-
- //=======================================================================
- //function : Redisplay
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::Redisplay(const AIS_KindOfInteractive KOI,
-- const Standard_Integer /*Sign*/,
-- const Standard_Boolean updateviewer)
--{
-- Standard_Boolean found_viewer(Standard_False);
-- // update
-- for(AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);It.More();It.Next()){
-- // CLE
-- // const Handle(AIS_InteractiveObject)& IO = It.Key();
-- Handle(AIS_InteractiveObject) IO = It.Key();
-- // ENDCLE
-- if(IO->Type()== KOI){
--#ifdef OCCT_DEBUG
--// Standard_Boolean good = (Sign==-1)? Standard_True :
--// ((IO->Signature()==Sign)? Standard_True:Standard_False);
--#endif
-- Redisplay(IO,Standard_False);
-- if (It.Value()->GraphicStatus() == AIS_DS_Displayed)
-- {
-- found_viewer = Standard_True;
-- }
-+void AIS_InteractiveContext::Redisplay (const AIS_KindOfInteractive theKOI,
-+ const Standard_Integer /*theSign*/,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ Standard_Boolean isRedisplayed = Standard_False;
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
-+ if (anObj->Type() != theKOI)
-+ {
-+ continue;
- }
-+
-+ Redisplay (anObj, Standard_False);
-+ isRedisplayed = anObjIter.Value()->GraphicStatus() == AIS_DS_Displayed
-+ || isRedisplayed;
- }
-- // update viewer...
-- if(updateviewer && found_viewer)
-+
-+ if (theToUpdateViewer
-+ && isRedisplayed)
- {
- myMainVwr->Update();
- }
- }
-
--
- //=======================================================================
- //function : RecomputePrsOnly
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::RecomputePrsOnly(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer,
-- const Standard_Boolean allmodes)
-+void AIS_InteractiveContext::RecomputePrsOnly (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer,
-+ const Standard_Boolean theAllModes)
- {
-- if(anIObj.IsNull()) return;
-- anIObj->Update(allmodes);
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- if (!updateviewer)
-+ theIObj->Update (theAllModes);
-+ if (!theToUpdateViewer)
- {
- return;
- }
-
-- if (HasOpenedContext() ||
-- (myObjects.IsBound(anIObj) && myObjects(anIObj)->GraphicStatus() == AIS_DS_Displayed))
-+ if (HasOpenedContext()
-+ || (myObjects.IsBound (theIObj)
-+ && myObjects (theIObj)->GraphicStatus() == AIS_DS_Displayed))
- {
- myMainVwr->Update();
- }
-@@ -1276,21 +1190,19 @@
-
- //=======================================================================
- //function : Update
--//purpose :
-+//purpose :
- //=======================================================================
- void AIS_InteractiveContext::Update (const Handle(AIS_InteractiveObject)& theIObj,
-- const Standard_Boolean theUpdateViewer)
-+ const Standard_Boolean theUpdateViewer)
- {
- if (theIObj.IsNull())
- {
- return;
- }
-
-- TColStd_ListOfInteger aListOfFlaggedPrsModes;
-- theIObj->ToBeUpdated (aListOfFlaggedPrsModes);
--
-- TColStd_ListIteratorOfListOfInteger aPrsModesIt (aListOfFlaggedPrsModes);
-- for ( ; aPrsModesIt.More(); aPrsModesIt.Next())
-+ TColStd_ListOfInteger aPrsModes;
-+ theIObj->ToBeUpdated (aPrsModes);
-+ for (TColStd_ListIteratorOfListOfInteger aPrsModesIt (aPrsModes); aPrsModesIt.More(); aPrsModesIt.Next())
- {
- theIObj->Update (aPrsModesIt.Value(), Standard_False);
- }
-@@ -1323,138 +1235,142 @@
-
- //=======================================================================
- //function : SetLocation
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetLocation(const Handle(AIS_InteractiveObject)& anIObj,
-- const TopLoc_Location& aLoc)
-+void AIS_InteractiveContext::SetLocation (const Handle(AIS_InteractiveObject)& theIObj,
-+ const TopLoc_Location& theLoc)
- {
-- if(anIObj.IsNull()) return;
--
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- if(anIObj->HasTransformation() && aLoc.IsIdentity()){
-- anIObj->ResetTransformation();
-- mgrSelector->Update(anIObj,Standard_False);
-+ if (theIObj->HasTransformation()
-+ && theLoc.IsIdentity())
-+ {
-+ theIObj->ResetTransformation();
-+ mgrSelector->Update (theIObj, Standard_False);
-+ return;
-+ }
-+ else if (theLoc.IsIdentity())
-+ {
- return;
- }
-- if(aLoc.IsIdentity()) return ;
-
- // first reset the previous location to properly clean everything...
-- if(anIObj->HasTransformation())
-- anIObj->ResetTransformation();
-+ if (theIObj->HasTransformation())
-+ {
-+ theIObj->ResetTransformation();
-+ }
-
-+ theIObj->SetLocalTransformation (theLoc.Transformation());
-
-- anIObj->SetLocalTransformation (aLoc.Transformation());
--
-- if(!HasOpenedContext())
-- mgrSelector->Update(anIObj,Standard_False);
-+ if (!HasOpenedContext())
-+ {
-+ mgrSelector->Update (theIObj, Standard_False);
-+ }
- else
-- {
-- // CLE
-- // const Handle(StdSelect_ViewerSelector3d)& tempSel = myLocalContexts(myCurLocalIndex)->MainSelector();
-- Handle(StdSelect_ViewerSelector3d) tempSel = myLocalContexts(myCurLocalIndex)->MainSelector();
-- // ENDCLE
-- mgrSelector->Update(anIObj,tempSel,Standard_False);
-- }
-+ {
-+ Handle(StdSelect_ViewerSelector3d) aTempSel = myLocalContexts (myCurLocalIndex)->MainSelector();
-+ mgrSelector->Update (theIObj, aTempSel, Standard_False);
-+ }
- }
-+
- //=======================================================================
- //function : ResetLocation
--//purpose :
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::ResetLocation(const Handle(AIS_InteractiveObject)& anIObj)
-+void AIS_InteractiveContext::ResetLocation (const Handle(AIS_InteractiveObject)& theIObj)
- {
-- if(anIObj.IsNull()) return;
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- anIObj->ResetTransformation();
-- mgrSelector->Update(anIObj,Standard_False);
-+ theIObj->ResetTransformation();
-+ mgrSelector->Update (theIObj, Standard_False);
- }
-
- //=======================================================================
- //function : HasLocation
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::
--HasLocation(const Handle(AIS_InteractiveObject)& anIObj) const
-+Standard_Boolean AIS_InteractiveContext::HasLocation (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- if(anIObj.IsNull()) return Standard_False;
--
-- return anIObj->HasTransformation();
-+ return !theIObj.IsNull()
-+ && theIObj->HasTransformation();
- }
-
--TopLoc_Location AIS_InteractiveContext::
--Location(const Handle(AIS_InteractiveObject)& anIObj) const
-+//=======================================================================
-+//function : Location
-+//purpose :
-+//=======================================================================
-+TopLoc_Location AIS_InteractiveContext::Location (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- return anIObj->Transformation();
-+ return theIObj->Transformation();
- }
-
- //=======================================================================
- //function : SetDeviationCoefficient
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetDeviationCoefficient(const Standard_Real aCoefficient)
-+void AIS_InteractiveContext::SetDeviationCoefficient (const Standard_Real theCoefficient)
- {
-- myDefaultDrawer->SetDeviationCoefficient(aCoefficient);
-+ myDefaultDrawer->SetDeviationCoefficient (theCoefficient);
- }
-+
- //=======================================================================
- //function : SetDeviationAngle
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetDeviationAngle(const Standard_Real anAngle)
-+void AIS_InteractiveContext::SetDeviationAngle (const Standard_Real theAngle)
- {
-- myDefaultDrawer->SetDeviationCoefficient(anAngle);
-+ myDefaultDrawer->SetDeviationCoefficient (theAngle);
- }
-
- //=======================================================================
- //function : DeviationAngle
- //purpose : Gets deviationAngle
- //=======================================================================
--
- Standard_Real AIS_InteractiveContext::DeviationAngle() const
- {
-- //return M_PI/180.0e0 ;
-- return myDefaultDrawer->DeviationAngle();
-+ return myDefaultDrawer->DeviationAngle();
- }
-
- //=======================================================================
- //function : DeviationCoefficient
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Real AIS_InteractiveContext::DeviationCoefficient() const
-+Standard_Real AIS_InteractiveContext::DeviationCoefficient() const
- {
- return myDefaultDrawer->DeviationCoefficient();
- }
-+
- //=======================================================================
- //function : SetHLRDeviationCoefficient
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetHLRDeviationCoefficient(const Standard_Real aCoefficient)
-+void AIS_InteractiveContext::SetHLRDeviationCoefficient (const Standard_Real theCoefficient)
- {
-- myDefaultDrawer->SetHLRDeviationCoefficient(aCoefficient);
-+ myDefaultDrawer->SetHLRDeviationCoefficient (theCoefficient);
- }
-
- //=======================================================================
- //function : HLRDeviationCoefficient
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Real AIS_InteractiveContext::HLRDeviationCoefficient() const
-+Standard_Real AIS_InteractiveContext::HLRDeviationCoefficient() const
- {
- return myDefaultDrawer->HLRDeviationCoefficient();
- }
-
- //=======================================================================
- //function : SetHLRAngle
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetHLRAngle(const Standard_Real anAngle)
-+void AIS_InteractiveContext::SetHLRAngle (const Standard_Real theAngle)
- {
-- myDefaultDrawer->SetHLRAngle(anAngle);
-+ myDefaultDrawer->SetHLRAngle (theAngle);
- }
-
- //=======================================================================
-@@ -1463,23 +1379,19 @@
- // and set them in myHLRAngle and in myHLRDeviationCoefficient
- // of myDefaultDrawer
- //=======================================================================
--
--void AIS_InteractiveContext::SetHLRAngleAndDeviation(const Standard_Real anAngle)
-+void AIS_InteractiveContext::SetHLRAngleAndDeviation (const Standard_Real theAngle)
- {
-+ Standard_Real anOutAngl, anOutDefl;
-+ HLRBRep::PolyHLRAngleAndDeflection (theAngle, anOutAngl, anOutDefl);
-
-- Standard_Real OutAngl,OutDefl;
-- HLRBRep::PolyHLRAngleAndDeflection(anAngle,OutAngl,OutDefl);
--
-- myDefaultDrawer->SetHLRAngle(OutAngl);
-- myDefaultDrawer->SetHLRDeviationCoefficient(OutDefl);
--
-+ myDefaultDrawer->SetHLRAngle (anOutAngl);
-+ myDefaultDrawer->SetHLRDeviationCoefficient (anOutDefl);
- }
-
- //=======================================================================
- //function : HLRAngle
--//purpose :
-+//purpose :
- //=======================================================================
--
- Standard_Real AIS_InteractiveContext::HLRAngle() const
- {
- return myDefaultDrawer->HLRAngle();
-@@ -1487,1348 +1399,1320 @@
-
- //=======================================================================
- //function : SetDisplayMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetDisplayMode(const AIS_DisplayMode aMode,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetDisplayMode (const AIS_DisplayMode theMode,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(aMode==myDisplayMode) return;
-- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
-+ if (theMode == myDisplayMode)
-+ {
-+ return;
-+ }
-
-- for(;It.More();It.Next()){
-- // CLE
-- // const Handle(AIS_InteractiveObject)& anObj = It.Key();
-- Handle(AIS_InteractiveObject) anObj = It.Key();
-- // ENDCLE
-- Standard_Boolean Processed = (anObj->IsKind(STANDARD_TYPE(AIS_Shape)) ||
-- anObj->IsKind(STANDARD_TYPE(AIS_ConnectedInteractive)) ||
-- anObj->IsKind(STANDARD_TYPE(AIS_MultipleConnectedInteractive)) );
-+ for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
-+ {
-+ Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
-+ Standard_Boolean toProcess = anObj->IsKind (STANDARD_TYPE(AIS_Shape))
-+ || anObj->IsKind (STANDARD_TYPE(AIS_ConnectedInteractive))
-+ || anObj->IsKind (STANDARD_TYPE(AIS_MultipleConnectedInteractive));
-
-- if ((!anObj->HasDisplayMode()) && Processed)
-+ if (!toProcess
-+ || anObj->HasDisplayMode()
-+ || !anObj->AcceptDisplayMode (theMode))
-+ {
-+ continue;
-+ }
-+
-+ Handle(AIS_GlobalStatus) aStatus = anObjIter.Value();
-+ if (aStatus->IsDModeIn (myDisplayMode))
-+ {
-+ aStatus->RemoveDisplayMode (myDisplayMode);
-+ }
-+
-+ aStatus->AddDisplayMode (theMode);
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
-+ {
-+ myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
-+ myMainPM->Display (anObj, theMode);
-+ if (aStatus->IsSubIntensityOn())
- {
-- if(anObj->AcceptDisplayMode(aMode)){
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = It.Value();
-- Handle(AIS_GlobalStatus) STATUS = It.Value();
-- // ENDCLE
-- if(STATUS->IsDModeIn(myDisplayMode))
-- STATUS->RemoveDisplayMode(myDisplayMode);
--
-- STATUS->AddDisplayMode(aMode);
--
-- if(STATUS->GraphicStatus()== AIS_DS_Displayed){
-- myMainPM->SetVisibility (anObj, myDisplayMode, Standard_False);
-- myMainPM->Display(anObj, aMode);
-- if(STATUS->IsSubIntensityOn())
-- myMainPM->Color(anObj,mySubIntensity,aMode);
-- }
-- // myDisplayMode = aMode;
-- }
-+ myMainPM->Color (anObj, mySubIntensity, theMode);
- }
--
-- }
-- myDisplayMode = aMode;
-- if(updateviewer) myMainVwr->Update();
--}
--
-+ }
-+ }
-+
-+ myDisplayMode = theMode;
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
-+}
-+
- //=======================================================================
- //function : SetDisplayMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetDisplayMode(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer aMode,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetDisplayMode (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer theMode,
-+ const Standard_Boolean theToUpdateViewer)
- {
--
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- if(!HasOpenedContext()){
--
-- if(!myObjects.IsBound(anIObj))
-- anIObj->SetDisplayMode(aMode);
-- else if( anIObj->AcceptDisplayMode(aMode) )
-- {
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-- // ENDCLE
-- // SAN : erase presentations for all display modes different from <aMode>
-- if(STATUS->GraphicStatus()==AIS_DS_Displayed){
-- TColStd_ListOfInteger aModesToRemove;
-- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
-- for(;ItL.More();ItL.Next()){
--
-- Standard_Integer OldMode = ItL.Value();
--
-- if(OldMode!=aMode){
-- aModesToRemove.Append(OldMode);
-- if(myMainPM->IsHighlighted(anIObj,OldMode))
-- myMainPM->Unhighlight(anIObj,OldMode);
-- myMainPM->SetVisibility (anIObj, OldMode, Standard_False);
-- }
-- }
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext(this);
-+ }
-+
-+ if (HasOpenedContext())
-+ {
-+ return;
-+ }
-
-- for(ItL.Initialize(aModesToRemove);ItL.More();ItL.Next())
-- STATUS->RemoveDisplayMode(ItL.Value());
-+ if (!myObjects.IsBound (theIObj))
-+ {
-+ theIObj->SetDisplayMode (theMode);
-+ return;
-+ }
-+ else if (!theIObj->AcceptDisplayMode (theMode))
-+ {
-+ return;
-+ }
-
-- if(!STATUS->IsDModeIn(aMode))
-- STATUS->AddDisplayMode(aMode);
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ if (aStatus->GraphicStatus() != AIS_DS_Displayed)
-+ {
-+ theIObj->SetDisplayMode (theMode);
-+ return;
-+ }
-
-- myMainPM->Display(anIObj,aMode);
-- Standard_Integer DM,HM,SM;
-- GetDefModes(anIObj,DM,HM,SM);
-- if(STATUS->IsHilighted()){
-- myMainPM->Highlight(anIObj,HM);
-- }
-- if(STATUS->IsSubIntensityOn()){
-- myMainPM->Color(anIObj,mySubIntensity,aMode);
-- }
-- if(anIObj->IsTransparent() && !myMainVwr->Viewer()->Transparency())
-- myMainVwr->Viewer()->SetTransparency(Standard_True);
--
-- if(updateviewer) myMainVwr->Update();
-+ // erase presentations for all display modes different from <aMode>
-+ TColStd_ListOfInteger aModesToRemove;
-+ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
-+ {
-+ const Standard_Integer anOldMode = aDispModeIter.Value();
-+ if (anOldMode != theMode)
-+ {
-+ aModesToRemove.Append (anOldMode);
-+ if (myMainPM->IsHighlighted (theIObj, anOldMode))
-+ {
-+ myMainPM->Unhighlight (theIObj, anOldMode);
- }
-- anIObj->SetDisplayMode(aMode);
-+ myMainPM->SetVisibility (theIObj, anOldMode, Standard_False);
- }
- }
-+
-+ for (TColStd_ListIteratorOfListOfInteger aRemModeIter (aModesToRemove); aRemModeIter.More(); aRemModeIter.Next())
-+ {
-+ aStatus->RemoveDisplayMode (aRemModeIter.Value());
-+ }
-+
-+ if (!aStatus->IsDModeIn (theMode))
-+ {
-+ aStatus->AddDisplayMode (theMode);
-+ }
-+
-+ myMainPM->Display (theIObj, theMode);
-+ Standard_Integer aDispMode, aHiMode, aSelMode;
-+ GetDefModes (theIObj, aDispMode, aHiMode, aSelMode);
-+ if (aStatus->IsHilighted())
-+ {
-+ myMainPM->Highlight (theIObj, aHiMode);
-+ }
-+ if (aStatus->IsSubIntensityOn())
-+ {
-+ myMainPM->Color (theIObj, mySubIntensity, theMode);
-+ }
-+
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
-+ theIObj->SetDisplayMode (theMode);
- }
-
- //=======================================================================
- //function : UnsetDisplayMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::
--UnsetDisplayMode(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::UnsetDisplayMode (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
-- if(!anIObj->HasDisplayMode()) return;
--
-- if(!myObjects.IsBound(anIObj))
-- anIObj->UnsetDisplayMode();
-- else
-+ if (theIObj.IsNull()
-+ || !theIObj->HasDisplayMode())
-+ {
-+ return;
-+ }
-+
-+ if (!myObjects.IsBound (theIObj))
-+ {
-+ theIObj->UnsetDisplayMode();
-+ return;
-+ }
-+
-+ const Standard_Integer anOldMode = theIObj->DisplayMode();
-+ if (myDisplayMode == anOldMode)
-+ {
-+ return;
-+ }
-+
-+ const Handle(AIS_GlobalStatus)& aStatus = myObjects (theIObj);
-+ aStatus->RemoveDisplayMode (anOldMode);
-+ if (!aStatus->IsDModeIn(myDisplayMode))
-+ {
-+ aStatus->AddDisplayMode (myDisplayMode);
-+ }
-+
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
-+ {
-+ if (myMainPM->IsHighlighted (theIObj, anOldMode))
- {
-- Standard_Integer OldMode = anIObj->DisplayMode();
-- if(myDisplayMode==OldMode) return;
-- const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- STATUS->RemoveDisplayMode(OldMode);
-- if(!STATUS->IsDModeIn(myDisplayMode))
-- STATUS->AddDisplayMode(myDisplayMode);
-- if(STATUS->GraphicStatus()==AIS_DS_Displayed){
-- if(myMainPM->IsHighlighted(anIObj,OldMode))
-- myMainPM->Unhighlight(anIObj,OldMode);
-- myMainPM->SetVisibility (anIObj, OldMode, Standard_False);
-- myMainPM->Display(anIObj,myDisplayMode);
-- Standard_Integer DM,HM,SM;
-- GetDefModes(anIObj,DM,HM,SM);
-- if(STATUS->IsHilighted()){
-- myMainPM->Highlight(anIObj,HM);
-- }
-- if(STATUS->IsSubIntensityOn()){
-- myMainPM->Color(anIObj,mySubIntensity,myDisplayMode);
-- }
-- if(updateviewer) myMainVwr->Update();
-- }
-- anIObj->UnsetDisplayMode();
--
-+ myMainPM->Unhighlight (theIObj, anOldMode);
- }
-+ myMainPM->SetVisibility (theIObj, anOldMode, Standard_False);
-+ myMainPM->Display (theIObj, myDisplayMode);
-+
-+ Standard_Integer aDispMode, aHiMode, aSelMode;
-+ GetDefModes (theIObj, aDispMode, aHiMode, aSelMode);
-+ if (aStatus->IsHilighted())
-+ {
-+ myMainPM->Highlight (theIObj, aHiMode);
-+ }
-+ if (aStatus->IsSubIntensityOn())
-+ {
-+ myMainPM->Color (theIObj, mySubIntensity, myDisplayMode);
-+ }
-+
-+ if (theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
-+ }
-+ }
-+
-+ theIObj->UnsetDisplayMode();
- }
-
- //=======================================================================
- //function : SetCurrentFacingModel
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetCurrentFacingModel(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Aspect_TypeOfFacingModel aModel)
-+void AIS_InteractiveContext::SetCurrentFacingModel (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Aspect_TypeOfFacingModel theModel)
- {
-- if ( !anIObj.IsNull () )
-- anIObj->SetCurrentFacingModel(aModel);
-+ if (!theIObj.IsNull())
-+ {
-+ theIObj->SetCurrentFacingModel (theModel);
-+ }
- }
-
- //=======================================================================
--//function : SetColor
--//purpose :
-+//function : redisplayPrsRecModes
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetColor(const Handle(AIS_InteractiveObject)& anIObj,
-- const Quantity_NameOfColor aColor,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::redisplayPrsRecModes (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- SetColor(anIObj,Quantity_Color(aColor),updateviewer);
-+ if (theIObj->RecomputeEveryPrs())
-+ {
-+ theIObj->Redisplay();
-+ }
-+ else
-+ {
-+ for (TColStd_ListIteratorOfListOfInteger aModes (theIObj->ListOfRecomputeModes()); aModes.More(); aModes.Next())
-+ {
-+ theIObj->Update (aModes.Value(), Standard_False);
-+ }
-+ theIObj->SetRecomputeOk();
-+ }
-+
-+ if (theToUpdateViewer)
-+ {
-+ UpdateCurrentViewer();
-+ }
- }
-
--void AIS_InteractiveContext::SetColor(const Handle(AIS_InteractiveObject)& anIObj,
-- const Quantity_Color &aColor,
-- const Standard_Boolean updateviewer)
-+//=======================================================================
-+//function : redisplayPrsModes
-+//purpose :
-+//=======================================================================
-+void AIS_InteractiveContext::redisplayPrsModes (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
--
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- anIObj->SetColor(aColor);
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-+ if (theIObj->RecomputeEveryPrs())
-+ {
-+ theIObj->Redisplay();
-+ }
- else
-+ {
-+ TColStd_ListOfInteger aModes;
-+ theIObj->ToBeUpdated (aModes);
-+ for (TColStd_ListIteratorOfListOfInteger aModeIter (aModes); aModeIter.More(); aModeIter.Next())
- {
-- Standard_Integer NbDisp=0;
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
-- anIObj->SetRecomputeOk();
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-+ theIObj->Update (aModeIter.Value(), Standard_False);
- }
-+ theIObj->SetRecomputeOk();
-+ }
-
--
--#ifdef OCCT_DEBUG
--// // pour isg
--// if(anIObj->Type()==AIS_KOI_Datum && anIObj->Signature()==3){
--// Handle(AIS_Trihedron) Tr = *((Handle(AIS_Trihedron)*)&anIObj);
--// Standard_Real Lx = myDefaultDrawer->DatumAspect()->FirstAxisLength();
--// gp_Trsf T;
--// gp_Dir D =Tr->Component()->XDirection();
--// gp_Pnt O = Tr->Component()->Location();
--// gp_Vec V(D);V*=Lx/5.;
--// T.SetRotation(gp_Ax1(O,D),M_PI/6.);
--// T.SetTranslationPart(V);
--// TopLoc_Location L,IncLoc(T);
--
--// for(Standard_Integer I=1;I<90;I++){
--// if(anIObj->HasLocation())
--// L = anIObj->Location() * IncLoc;
--// else
--// L = IncLoc;
--// SetLocation(anIObj,L);
--// UpdateCurrentViewer();
--// }
--// for(I=1;I<90;I++){
--// L = anIObj->Location() /IncLoc;
--// SetLocation(anIObj,L);
--// UpdateCurrentViewer();
--// }
--// ResetLocation(anIObj);
--// }
-- #endif
-- if(updateviewer) UpdateCurrentViewer();
-+ if (theToUpdateViewer)
-+ {
-+ UpdateCurrentViewer();
-+ }
- }
-
- //=======================================================================
--//function : SetDeviationCoefficient
--//purpose :
-+//function : SetColor
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::SetColor (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Quantity_NameOfColor theColor,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ SetColor (theIObj, Quantity_Color(theColor), theToUpdateViewer);
-+}
-
--void AIS_InteractiveContext::SetDeviationCoefficient(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real aCoefficient,
-- const Standard_Boolean updateviewer)
-+//=======================================================================
-+//function : SetColor
-+//purpose :
-+//=======================================================================
-+void AIS_InteractiveContext::SetColor (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Quantity_Color& theColor,
-+ const Standard_Boolean theToUpdateViewer)
- {
--// cout<<" Coefficient:"<< aCoefficient <<endl;
-- if(anIObj.IsNull()) return ;
--
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-- if(anIObj->Type()!=AIS_KOI_Object && anIObj->Type()!=AIS_KOI_Shape) return;
-- if(anIObj->Signature()!=0) return;
-- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnDeviationCoefficient(aCoefficient);
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-+ theIObj->SetColor (theColor);
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
-+}
-
-+//=======================================================================
-+//function : SetDeviationCoefficient
-+//purpose :
-+//=======================================================================
-+void AIS_InteractiveContext::SetDeviationCoefficient (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theCoefficient,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp=0;
-- TColStd_ListOfInteger LL;
-- anIObj->ToBeUpdated(LL);
-- TColStd_ListIteratorOfListOfInteger ITI(LL);
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
-- anIObj->SetRecomputeOk();
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- }
-- if(updateviewer) UpdateCurrentViewer();
-+ // to be modified after the related methods of AIS_Shape are passed to InteractiveObject
-+ if (theIObj->Type() != AIS_KOI_Object
-+ && theIObj->Type() != AIS_KOI_Shape)
-+ {
-+ return;
-+ }
-+ else if (theIObj->Signature() != 0)
-+ {
-+ return;
-+ }
-+
-+ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
-+ aShape->SetOwnDeviationCoefficient (theCoefficient);
-+ redisplayPrsModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : SetHLRDeviationCoefficient
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetHLRDeviationCoefficient(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real aCoefficient,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetHLRDeviationCoefficient (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theCoefficient,
-+ const Standard_Boolean theToUpdateViewer)
- {
--// cout<<" HLRCoefficient:"<< aCoefficient <<endl;
-- if(anIObj.IsNull()) return ;
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-- if(anIObj->Type()!=AIS_KOI_Object && anIObj->Type()!=AIS_KOI_Shape) return;
-- if(anIObj->Signature()!=0) return;
-- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnHLRDeviationCoefficient(aCoefficient);
--
--
--
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp=0;
-+ if (theIObj->Type() != AIS_KOI_Object
-+ && theIObj->Type() != AIS_KOI_Shape)
-+ {
-+ return;
-+ }
-+ else if (theIObj->Signature() != 0)
-+ {
-+ return;
-+ }
-
-- TColStd_ListOfInteger LL;
-- anIObj->ToBeUpdated(LL);
-- TColStd_ListIteratorOfListOfInteger ITI(LL);
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
-- anIObj->SetRecomputeOk();
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- }
-- if(updateviewer) UpdateCurrentViewer();
-+ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
-+ aShape->SetOwnHLRDeviationCoefficient (theCoefficient);
-+ redisplayPrsModes (theIObj, theToUpdateViewer);
- }
-
--
- //=======================================================================
- //function : SetDeviationAngle
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetDeviationAngle(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real anAngle,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetDeviationAngle (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theAngle,
-+ const Standard_Boolean theToUpdateViewer)
- {
--// cout<<" Angle:"<< anAngle <<endl;
-- if(anIObj.IsNull()) return ;
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-- if(anIObj->Type()!=AIS_KOI_Shape) return;
-- if(anIObj->Signature()!=0) return;
-- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnDeviationAngle(anAngle);
--
-+ if (theIObj->Type() != AIS_KOI_Shape)
-+ {
-+ return;
-+ }
-+ else if (theIObj->Signature() != 0)
-+ {
-+ return;
-+ }
-
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp=0;
-- TColStd_ListOfInteger LL;
-- anIObj->ToBeUpdated(LL);
-- TColStd_ListIteratorOfListOfInteger ITI(LL);
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
-- anIObj->SetRecomputeOk();
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- }
-- if(updateviewer) UpdateCurrentViewer();
-+ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
-+ aShape->SetOwnDeviationAngle (theAngle);
-+ redisplayPrsModes (theIObj, theToUpdateViewer);
- }
-+
- //=======================================================================
--//function : SetDeviationAngle
--//purpose :
-+//function : SetAngleAndDeviation
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::SetAngleAndDeviation (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theAngle,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::SetAngleAndDeviation(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real anAngle,
-- const Standard_Boolean updateviewer)
--{
--// cout<<" Angle:"<< anAngle <<endl;
-- if(anIObj.IsNull()) return ;
--// Standard_Real anAngleRad = M_PI*anAngle/180; test rob...
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-- if(anIObj->Type()!=AIS_KOI_Shape) return;
-- if(anIObj->Signature()!=0) return;
-- (*((Handle(AIS_Shape)*)&anIObj))->SetAngleAndDeviation(anAngle);
-+ if (theIObj->Type() != AIS_KOI_Shape)
-+ {
-+ return;
-+ }
-+ if (theIObj->Signature() != 0)
-+ {
-+ return;
-+ }
-
-+ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
-+ aShape->SetAngleAndDeviation (theAngle);
-
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-+ if (theIObj->RecomputeEveryPrs())
-+ {
-+ theIObj->Redisplay();
-+ }
- else
-- Update(anIObj,updateviewer);
-+ {
-+ Update (theIObj, theToUpdateViewer);
-+ }
- }
-
- //=======================================================================
--//function : SetDeviationAngle
--//purpose :
-+//function : SetHLRAngleAndDeviation
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::SetHLRAngleAndDeviation (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theAngle,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::SetHLRAngleAndDeviation(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real anAngle,
-- const Standard_Boolean updateviewer)
--{
--// cout<<" Angle:"<< anAngle <<endl;
--
-- if(anIObj.IsNull()) return ;
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-- if(anIObj->Type()!=AIS_KOI_Shape) return;
-- if(anIObj->Signature()!=0) return;
-- (*((Handle(AIS_Shape)*)&anIObj))->SetHLRAngleAndDeviation(anAngle);
--
--
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp=0;
--
-- TColStd_ListOfInteger LL;
-- anIObj->ToBeUpdated(LL);
-- TColStd_ListIteratorOfListOfInteger ITI(LL);
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
-- anIObj->SetRecomputeOk();
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- }
-- if(updateviewer) UpdateCurrentViewer();
-+ if (theIObj->Type() != AIS_KOI_Shape)
-+ {
-+ return;
-+ }
-+ if (theIObj->Signature() != 0)
-+ {
-+ return;
-+ }
-+ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
-+ aShape->SetHLRAngleAndDeviation (theAngle);
-+ redisplayPrsModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : SetHLRDeviationAngle
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetHLRDeviationAngle(
-- const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real anAngle,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetHLRDeviationAngle (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theAngle,
-+ const Standard_Boolean theToUpdateViewer)
- {
--// cout<<" HLRAngle:"<< anAngle <<endl;
-- if(anIObj.IsNull()) return ;
--
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-- if( anIObj->Type()!=AIS_KOI_Shape) return;
-- if(anIObj->Signature()!=0) return;
-- (*((Handle(AIS_Shape)*)&anIObj))->SetOwnHLRDeviationAngle(anAngle);
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp=0;
-- TColStd_ListOfInteger LL;
-- anIObj->ToBeUpdated(LL);
-- TColStd_ListIteratorOfListOfInteger ITI(LL);
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
-- anIObj->SetRecomputeOk();
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- }
-- if(updateviewer) UpdateCurrentViewer();
-+ // To be modified after the related methods of AIS_Shape are passed to InteractiveObject
-+ if (theIObj->Type() != AIS_KOI_Shape)
-+ {
-+ return;
-+ }
-+ if (theIObj->Signature() != 0)
-+ {
-+ return;
-+ }
-+ Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast (theIObj);
-+ aShape->SetOwnHLRDeviationAngle (theAngle);
-+ redisplayPrsModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : UnsetColor
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::UnsetColor(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::UnsetColor (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
-- anIObj->UnsetColor();
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp =0;
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- anIObj->SetRecomputeOk();
-- }
-- if(updateviewer)
-- UpdateCurrentViewer();
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+
-+ theIObj->UnsetColor();
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : HasColor
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::HasColor(const Handle(AIS_InteractiveObject)& anIObj) const
-+Standard_Boolean AIS_InteractiveContext::HasColor (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- return anIObj->HasColor();
--
-+ return theIObj->HasColor();
- }
-
- //=======================================================================
- //function : Color
--//purpose :
-+//purpose :
- //=======================================================================
--
--Quantity_NameOfColor AIS_InteractiveContext::Color(const Handle(AIS_InteractiveObject)& anIObj) const
-+Quantity_NameOfColor AIS_InteractiveContext::Color (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- return anIObj->Color();
-+ return theIObj->Color();
- }
-
--void AIS_InteractiveContext::Color(const Handle(AIS_InteractiveObject)& anIObj,
-- Quantity_Color &aColor) const
-+//=======================================================================
-+//function : Color
-+//purpose :
-+//=======================================================================
-+void AIS_InteractiveContext::Color (const Handle(AIS_InteractiveObject)& theIObj,
-+ Quantity_Color& theColor) const
- {
-- anIObj->Color(aColor);
-+ theIObj->Color (theColor);
- }
-
- //=======================================================================
- //function : Width
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Real AIS_InteractiveContext::Width(const Handle(AIS_InteractiveObject)& anIObj) const
-+Standard_Real AIS_InteractiveContext::Width (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- return anIObj->Width();
-+ return theIObj->Width();
- }
-
- //=======================================================================
- //function : SetWidth
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetWidth(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real aValue,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetWidth (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theWidth,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
--
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- anIObj->SetWidth(aValue);
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- Standard_Integer NbDisp=0;
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- NbDisp++;
-- }
--#ifdef OCCT_DEBUG
-- cout<<"nb of modes to recalculate : "<<NbDisp<<endl;
--#endif
-- anIObj->SetRecomputeOk();
-- }
-- if(updateviewer)
-- UpdateCurrentViewer();
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-+
-+ theIObj->SetWidth (theWidth);
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : UnsetWidth
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::UnsetWidth(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::UnsetWidth (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
-- anIObj->UnsetWidth();
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- }
-- anIObj->SetRecomputeOk();
-- }
-- if(updateviewer)
-- UpdateCurrentViewer();
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+
-+ theIObj->UnsetWidth();
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : SetMaterial
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::SetMaterial (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Graphic3d_NameOfMaterial theName,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::SetMaterial(const Handle(AIS_InteractiveObject)& anIObj,
--//POP pour K4L
-- const Graphic3d_NameOfMaterial aName,
--// const Graphic3d_NameOfPhysicalMaterial aName,
-- const Standard_Boolean updateviewer)
--{
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- anIObj->SetMaterial(aName);
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- }
-- anIObj->SetRecomputeOk();
-- }
-- if(updateviewer)
-- UpdateCurrentViewer();
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-
-+ theIObj->SetMaterial (theName);
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : UnsetMaterial
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::UnsetMaterial(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::UnsetMaterial (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
-- anIObj->UnsetMaterial();
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- }
-- anIObj->SetRecomputeOk();
-- }
-- if(updateviewer)
-- UpdateCurrentViewer();
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-+ theIObj->UnsetMaterial();
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : SetTransparency
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::SetTransparency (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Real theValue,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::SetTransparency(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Real aValue,
-- const Standard_Boolean updateviewer)
--{
-- if(anIObj.IsNull()) return ;
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
--
--#ifdef BUC60577 //right optimization
-- if(!anIObj->IsTransparent() && aValue<=0.05) return;
--#else
--// if(!anIObj->IsTransparent() && aValue<=0.05) return;
--#endif
-- if(aValue<=0.05){
-- UnsetTransparency(anIObj,updateviewer);
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-+
-+ if (!theIObj->IsTransparent()
-+ && theValue <= 0.05)
-+ {
- return;
- }
--
-- if(!myMainVwr->Viewer()->Transparency())
-- myMainVwr->Viewer()->SetTransparency(Standard_True);
-- anIObj->SetTransparency(aValue);
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- }
-- anIObj->SetRecomputeOk();
-- }
-- if(updateviewer)
-- UpdateCurrentViewer();
-+
-+ if (theValue <= 0.05)
-+ {
-+ UnsetTransparency (theIObj, theToUpdateViewer);
-+ return;
-+ }
-+
-+ theIObj->SetTransparency (theValue);
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : UnsetTransparency
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::UnsetTransparency(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::UnsetTransparency (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
-- anIObj->UnsetTransparency();
-- if(anIObj->RecomputeEveryPrs())
-- anIObj->Redisplay();
-- else
-- {
-- TColStd_ListIteratorOfListOfInteger ITI(anIObj->ListOfRecomputeModes());
-- for (;ITI.More();ITI.Next())
-- {
-- anIObj->Update(ITI.Value(),Standard_False);
-- }
-- anIObj->SetRecomputeOk();
-- }
--
-- // To Unset transparency in the viewer, if no other object is transparent ...(Speed)
-- AIS_DataMapIteratorOfDataMapOfIOStatus It(myObjects);
-- Standard_Boolean FoundTransp(Standard_False);
-- for(;It.More() && !FoundTransp ;It.Next()){
-- if(It.Key()->IsTransparent())
-- FoundTransp = Standard_True;
-+ if (theIObj.IsNull())
-+ {
-+ return;
- }
-- if(!FoundTransp)
-- myMainVwr->Viewer()->SetTransparency(Standard_False);
--
--
-- if(updateviewer)
-- UpdateCurrentViewer();
-+
-+ theIObj->UnsetTransparency();
-+ redisplayPrsRecModes (theIObj, theToUpdateViewer);
- }
-
--//=======================================================================
--//function : SetSelectedAspect
--//purpose :
--//=======================================================================
--void AIS_InteractiveContext::SetSelectedAspect(
-- const Handle(Prs3d_BasicAspect)& anAspect,
-- const Standard_Boolean globalChange,
-- const Standard_Boolean updateViewer)
--{
-- if( !HasOpenedContext() ) {
-- Standard_Boolean found = Standard_False;
-- Handle(AIS_Selection) sel =
-- AIS_Selection::Selection(myCurrentName.ToCString());
-- Handle(AIS_InteractiveObject) object;
-- for( sel->Init() ; sel->More() ; sel->Next()) {
-- found = Standard_True;
-- object = Handle(AIS_InteractiveObject)::DownCast(sel->Value());
-- object->SetAspect(anAspect,globalChange);
-- }
-- if( found && updateViewer) {
-- myMainVwr->Update();
-- }
-+//=======================================================================
-+//function : SetSelectedAspect
-+//purpose :
-+//=======================================================================
-+void AIS_InteractiveContext::SetSelectedAspect (const Handle(Prs3d_BasicAspect)& theAspect,
-+ const Standard_Boolean theIsGlobalChange,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (HasOpenedContext())
-+ {
-+ return;
-+ }
-+
-+ Standard_Boolean isFound = Standard_False;
-+ Handle(AIS_Selection) aSelIter = AIS_Selection::Selection (myCurrentName.ToCString());
-+ for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
-+ {
-+ isFound = Standard_True;
-+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
-+ anObj->SetAspect (theAspect, theIsGlobalChange);
-+ }
-+
-+ if (isFound
-+ && theToUpdateViewer)
-+ {
-+ myMainVwr->Update();
- }
- }
-
- //=======================================================================
- //function : SetLocalAttributes
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::SetLocalAttributes (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Handle(AIS_Drawer)& theDrawer,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::SetLocalAttributes(const Handle(AIS_InteractiveObject)& anIObj,
-- const Handle(AIS_Drawer)& aDrawer,
-- const Standard_Boolean updateviewer)
--{
-- if(anIObj.IsNull()) return ;
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- anIObj->SetAttributes(aDrawer);
-- Update(anIObj,updateviewer);
--
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-+
-+ theIObj->SetAttributes (theDrawer);
-+ Update (theIObj, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : UnsetLocalAttributes
--//purpose :
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::UnsetLocalAttributes(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::UnsetLocalAttributes (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- if(anIObj.IsNull()) return ;
-- if(!anIObj->HasInteractiveContext())
-- anIObj->SetContext(this);
-- anIObj->UnsetAttributes();
-- Update(anIObj,updateviewer);
--}
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
-+ if (!theIObj->HasInteractiveContext())
-+ {
-+ theIObj->SetContext (this);
-+ }
-+ theIObj->UnsetAttributes();
-+ Update (theIObj, theToUpdateViewer);
-+}
-
- //=======================================================================
- //function : Status
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::Status(const Handle(AIS_InteractiveObject)& anIObj, TCollection_ExtendedString& astatus) const
-+void AIS_InteractiveContext::Status (const Handle(AIS_InteractiveObject)& theIObj,
-+ TCollection_ExtendedString& theStatus) const
- {
-- astatus = "";
-+ theStatus = "";
-+ if (theIObj.IsNull()
-+ || !myObjects.IsBound (theIObj))
-+ {
-+ return;
-+ }
-
-- if(anIObj.IsNull()) return ;
-- if(myObjects.IsBound(anIObj)){
-- astatus += "\t ____________________________________________";
-- astatus += "\t| Known at Neutral Point:\n\tDisplayStatus:";
-- const Handle(AIS_GlobalStatus)& ST = myObjects(anIObj);
-- switch(ST->GraphicStatus()){
-+ theStatus += "\t ____________________________________________";
-+ theStatus += "\t| Known at Neutral Point:\n\tDisplayStatus:";
-+ const Handle(AIS_GlobalStatus)& aStatus = myObjects (theIObj);
-+ switch (aStatus->GraphicStatus())
-+ {
- case AIS_DS_Displayed:
-- {
-- astatus +="\t| -->Displayed\n";
-- break;
-- }
-- case AIS_DS_Erased:
-- {
-- astatus +="\t| -->Erased\n";
-- break;
-- }
-- default:
-+ {
-+ theStatus += "\t| -->Displayed\n";
- break;
- }
-- astatus += "\t| Active Display Modes in the MainViewer :\n";
-- TColStd_ListIteratorOfListOfInteger ItL (ST->DisplayedModes());
-- for(;ItL.More();ItL.Next()){
-- astatus += "\t|\t Mode ";
-- astatus += TCollection_AsciiString(ItL.Value());
-- astatus+="\n";
-- }
-- if(IsCurrent(anIObj)) astatus +="\t| Current\n";
-- if(IsSelected(anIObj)) astatus +="\t| Selected\n";
--
-- astatus += "\t| Active Selection Modes in the MainViewer :\n";
-- for(ItL.Initialize(ST->SelectionModes());ItL.More();ItL.Next()){
-- astatus += "\t\t Mode ";
-- astatus += TCollection_AsciiString(ItL.Value());
-- astatus+="\n";
-- }
-- astatus += "\t ____________________________________________";
--
-+ case AIS_DS_Erased:
-+ {
-+ theStatus += "\t| -->Erased\n";
-+ break;
- }
--}
-+ default:
-+ break;
-+ }
-
-+ theStatus += "\t| Active Display Modes in the MainViewer :\n";
-+ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
-+ {
-+ theStatus += "\t|\t Mode ";
-+ theStatus += TCollection_AsciiString (aDispModeIter.Value());
-+ theStatus += "\n";
-+ }
-+ if (IsCurrent (theIObj)) theStatus +="\t| Current\n";
-+ if (IsSelected(theIObj)) theStatus +="\t| Selected\n";
-+
-+ theStatus += "\t| Active Selection Modes in the MainViewer :\n";
-+ for (TColStd_ListIteratorOfListOfInteger aSelModeIter (aStatus->SelectionModes()); aSelModeIter.More(); aSelModeIter.Next())
-+ {
-+ theStatus += "\t\t Mode ";
-+ theStatus += TCollection_AsciiString (aSelModeIter.Value());
-+ theStatus += "\n";
-+ }
-+ theStatus += "\t ____________________________________________";
-+}
-
- //=======================================================================
- //function : GetDefModes
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::GetDefModes (const Handle(AIS_InteractiveObject)& theIObj,
-+ Standard_Integer& theDispMode,
-+ Standard_Integer& theHiMode,
-+ Standard_Integer& theSelMode) const
-+{
-+ if (theIObj.IsNull())
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::GetDefModes(const Handle(AIS_InteractiveObject)& anIObj,
-- Standard_Integer& DispMode,
-- Standard_Integer& HiMode,
-- Standard_Integer& SelMode) const
--{
-- if(anIObj.IsNull()) return ;
-- DispMode = anIObj->HasDisplayMode() ? anIObj->DisplayMode() :
-- (anIObj->AcceptDisplayMode(myDisplayMode)? myDisplayMode : 0);
--
-- HiMode = anIObj->HasHilightMode()? anIObj->HilightMode():DispMode;
--#ifdef BUC61051
-- SelMode = anIObj->HasSelectionMode()? anIObj->SelectionMode() : -1;
--#else
-- SelMode = anIObj->HasSelectionMode()? anIObj->SelectionMode() : 0;
--#endif
-+ theDispMode = theIObj->HasDisplayMode()
-+ ? theIObj->DisplayMode()
-+ : (theIObj->AcceptDisplayMode (myDisplayMode)
-+ ? myDisplayMode
-+ : 0);
-+ theHiMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
-+ theSelMode = theIObj->HasSelectionMode() ? theIObj->SelectionMode() : -1;
- }
-
--
- //=======================================================================
- //function : EraseGlobal
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::EraseGlobal(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateviewer)
- {
-- if(anIObj.IsNull()) return ;
-- if(!myObjects.IsBound(anIObj)) return;
-+ if (theIObj.IsNull()
-+ || !myObjects.IsBound (theIObj))
-+ {
-+ return;
-+ }
-
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-- // ENDCLE
-- Standard_Integer Dmode = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
-- if(STATUS->GraphicStatus()==AIS_DS_Displayed){
--
-- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
-- for(;ItL.More();ItL.Next()){
-- if(myMainPM->IsHighlighted(anIObj,ItL.Value()))
-- myMainPM->Unhighlight(anIObj,ItL.Value());
-- myMainPM->SetVisibility (anIObj, ItL.Value(), Standard_False);
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+
-+ Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed)
-+ {
-+ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
-+ {
-+ if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
-+ {
-+ myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
-+ }
-+ myMainPM->SetVisibility (theIObj, aDispModeIter.Value(), Standard_False);
-+ }
-+
-+ if (IsCurrent (theIObj)
-+ && !aStatus->IsDModeIn (aDispMode))
-+ {
-+ myMainPM->SetVisibility (theIObj, aDispMode, Standard_False);
-+ }
-+
-+ for (TColStd_ListIteratorOfListOfInteger aSelModeIter (aStatus->SelectionModes()); aSelModeIter.More(); aSelModeIter.Next())
-+ {
-+ mgrSelector->Deactivate (theIObj, aSelModeIter.Value(), myMainSel);
-+ }
-+
-+ if (theToUpdateviewer)
-+ {
-+ myMainVwr->Update();
- }
-- if(IsCurrent(anIObj) && !STATUS->IsDModeIn(Dmode))
-- myMainPM->SetVisibility (anIObj, Dmode, Standard_False);
--
-- for(ItL.Initialize(STATUS->SelectionModes());ItL.More();ItL.Next())
-- mgrSelector->Deactivate(anIObj,ItL.Value(),myMainSel);
-- if(updateviewer) myMainVwr->Update();
- }
-- STATUS->SetGraphicStatus(AIS_DS_Erased);
--
-+ aStatus->SetGraphicStatus (AIS_DS_Erased);
- }
-
- //=======================================================================
- //function : ClearGlobal
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::ClearGlobal(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Boolean theToUpdateviewer)
- {
-- if(anIObj.IsNull()) return ;
-- if(!myObjects.IsBound(anIObj)) return;
-- // CLE
-- // const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
-- Handle(AIS_GlobalStatus) STATUS = myObjects(anIObj);
-- // ENDCLE
-- TColStd_ListIteratorOfListOfInteger ItL (STATUS->DisplayedModes());
-- for(;ItL.More();ItL.Next()){
-- if(STATUS->IsHilighted()){
-- if(IsCurrent(anIObj))
--#ifdef OCC204
-- AddOrRemoveCurrentObject( anIObj, updateviewer );
--#else
-- AddOrRemoveCurrentObject(anIObj);
--#endif
-- else if(myMainPM->IsHighlighted(anIObj,ItL.Value()))
-- myMainPM->Unhighlight(anIObj,ItL.Value());
-- }
-- myMainPM->Erase(anIObj,ItL.Value());
-- myMainPM->Clear(anIObj,ItL.Value());
-- if(anIObj->HasHilightMode()){
-- Standard_Integer im = anIObj->HilightMode();
-- myMainPM->Unhighlight(anIObj,im);
-- myMainPM->Erase(anIObj,im);
--
-- }
-- }
-+ if (theIObj.IsNull()
-+ || !myObjects.IsBound (theIObj))
-+ {
-+ return;
-+ }
-+
-+ Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
-+ for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
-+ {
-+ if (aStatus->IsHilighted())
-+ {
-+ if (IsCurrent (theIObj))
-+ {
-+ AddOrRemoveCurrentObject (theIObj, theToUpdateviewer);
-+ }
-+ else if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
-+ {
-+ myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
-+ }
-+ }
-+ myMainPM->Erase (theIObj, aDispModeIter.Value());
-+ myMainPM->Clear (theIObj, aDispModeIter.Value());
-+ if (theIObj->HasHilightMode())
-+ {
-+ Standard_Integer im = theIObj->HilightMode();
-+ myMainPM->Unhighlight (theIObj, im);
-+ myMainPM->Erase (theIObj, im);
-+ }
-+ }
-
-- //Object removes from Detected sequence
-- Standard_Integer i = 1;
-- for(i = 1; i < myAISDetectedSeq.Length(); i++)
-+ // Object removes from Detected sequence
-+ for(Standard_Integer aDetIter = 1; aDetIter < myAISDetectedSeq.Length(); ++aDetIter)
- {
- Handle(AIS_InteractiveObject) anObj = DetectedCurrentObject();
-- if( !anObj.IsNull() && anObj != anIObj )
-- myAISDetectedSeq.Remove( i );
-+ if (!anObj.IsNull()
-+ && anObj != theIObj)
-+ {
-+ myAISDetectedSeq.Remove (aDetIter);
-+ }
- }
-
-- if(myLastinMain == anIObj)
-+ if (myLastinMain == theIObj)
-+ {
- myLastinMain.Nullify();
--
-- if(myLastPicked == anIObj)
-+ }
-+ if (myLastPicked == theIObj)
-+ {
- myLastPicked.Nullify();
-+ }
-+
-+ // remove IO from the selection manager to avoid memory leaks
-+ mgrSelector->Remove (theIObj);
-
-- // OCC21671: Remove IO from the selection manager in any case
-- // to avoid memory leaks
-- mgrSelector->Remove(anIObj);
-+ myObjects.UnBind (theIObj);
-
-- if (updateviewer && (STATUS->GraphicStatus() == AIS_DS_Displayed))
-+ if (theToUpdateviewer
-+ && aStatus->GraphicStatus() == AIS_DS_Displayed)
- {
- myMainVwr->Update();
- }
--
-- myObjects.UnBind(anIObj);
--
- }
-
- //=======================================================================
- //function : ClearGlobalPrs
--//purpose :
-+//purpose :
- //=======================================================================
-+void AIS_InteractiveContext::ClearGlobalPrs (const Handle(AIS_InteractiveObject)& theIObj,
-+ const Standard_Integer theMode,
-+ const Standard_Boolean theToUpdateViewer)
-+{
-+ if (theIObj.IsNull()
-+ || !myObjects.IsBound (theIObj))
-+ {
-+ return;
-+ }
-
--void AIS_InteractiveContext::ClearGlobalPrs(const Handle(AIS_InteractiveObject)& anIObj,
-- const Standard_Integer aMode,
-- const Standard_Boolean updateviewer)
--{
-- if(anIObj.IsNull()) return ;
-- if(!myObjects.IsBound(anIObj)) return;
-- const Handle(AIS_GlobalStatus)& STATUS = myObjects(anIObj);
--
-- Standard_Integer DM = anIObj->HasHilightMode() ? anIObj->HilightMode() : 0;
-- if(STATUS->IsDModeIn(aMode)){
-- if(DM==aMode && myMainPM->IsHighlighted(anIObj,aMode))
-- myMainPM->Unhighlight(anIObj,aMode);
--
-- myMainPM->Erase(anIObj,aMode);
-- myMainPM->Clear(anIObj,aMode);
-+ const Handle(AIS_GlobalStatus)& aStatus = myObjects (theIObj);
-+ if (aStatus->IsDModeIn (theMode))
-+ {
-+ const Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
-+ if (aDispMode == theMode
-+ && myMainPM->IsHighlighted (theIObj, theMode))
-+ {
-+ myMainPM->Unhighlight (theIObj, theMode);
-+ }
-+
-+ myMainPM->Erase (theIObj, theMode);
-+ myMainPM->Clear (theIObj, theMode);
- }
--
-
-- if(STATUS->GraphicStatus()==AIS_DS_Displayed && updateviewer)
-+ if (aStatus->GraphicStatus() == AIS_DS_Displayed
-+ && theToUpdateViewer)
-+ {
- myMainVwr->Update();
-+ }
- }
-
- //=======================================================================
- //function : DrawHiddenLine
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::DrawHiddenLine () const {
--
-+Standard_Boolean AIS_InteractiveContext::DrawHiddenLine() const
-+{
- return myDefaultDrawer->DrawHiddenLine();
- }
-
- //=======================================================================
- //function : EnableDrawHiddenLine
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::EnableDrawHiddenLine () const {
-+void AIS_InteractiveContext::EnableDrawHiddenLine() const
-+{
- myDefaultDrawer->EnableDrawHiddenLine();
- }
-
- //=======================================================================
- //function : DisableDrawHiddenLine
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::DisableDrawHiddenLine () const {
-+void AIS_InteractiveContext::DisableDrawHiddenLine() const
-+{
- myDefaultDrawer->DisableDrawHiddenLine();
- }
-
- //=======================================================================
- //function : HiddenLineAspect
--//purpose :
-+//purpose :
- //=======================================================================
--
--Handle (Prs3d_LineAspect) AIS_InteractiveContext::HiddenLineAspect () const {
-+Handle (Prs3d_LineAspect) AIS_InteractiveContext::HiddenLineAspect() const
-+{
- return myDefaultDrawer->HiddenLineAspect();
- }
-
- //=======================================================================
- //function : SetHiddenLineAspect
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetHiddenLineAspect ( const Handle(Prs3d_LineAspect)& anAspect) const {
-- myDefaultDrawer->SetHiddenLineAspect(anAspect);
-+void AIS_InteractiveContext::SetHiddenLineAspect (const Handle(Prs3d_LineAspect)& theAspect) const
-+{
-+ myDefaultDrawer->SetHiddenLineAspect (theAspect);
- }
-
- //=======================================================================
- //function : SetIsoNumber
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetIsoNumber(const Standard_Integer Nb,const AIS_TypeOfIso Type)
-+void AIS_InteractiveContext::SetIsoNumber (const Standard_Integer theNb,
-+ const AIS_TypeOfIso theType)
- {
-- switch(Type){
-- case AIS_TOI_IsoU:
-- myDefaultDrawer->UIsoAspect()->SetNumber(Nb);
-- break;
-- case AIS_TOI_IsoV:
-- myDefaultDrawer->VIsoAspect()->SetNumber(Nb);
-- break;
-- case AIS_TOI_Both:
-- myDefaultDrawer->UIsoAspect()->SetNumber(Nb);
-- myDefaultDrawer->VIsoAspect()->SetNumber(Nb);
-- break;
--
-+ switch (theType)
-+ {
-+ case AIS_TOI_IsoU:
-+ myDefaultDrawer->UIsoAspect()->SetNumber (theNb);
-+ break;
-+ case AIS_TOI_IsoV:
-+ myDefaultDrawer->VIsoAspect()->SetNumber (theNb);
-+ break;
-+ case AIS_TOI_Both:
-+ myDefaultDrawer->UIsoAspect()->SetNumber (theNb);
-+ myDefaultDrawer->VIsoAspect()->SetNumber (theNb);
-+ break;
- }
- }
-+
- //=======================================================================
- //function : IsoNumber
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Integer AIS_InteractiveContext::IsoNumber(const AIS_TypeOfIso Type)
-+Standard_Integer AIS_InteractiveContext::IsoNumber (const AIS_TypeOfIso theType)
- {
--
-- switch(Type){
-- case AIS_TOI_IsoU:
-- return myDefaultDrawer->UIsoAspect()->Number();
-- case AIS_TOI_IsoV:
-- return myDefaultDrawer->VIsoAspect()->Number();
-- case AIS_TOI_Both:
-- return (myDefaultDrawer->UIsoAspect()->Number()==
-- myDefaultDrawer->VIsoAspect()->Number()) ?
-- myDefaultDrawer->UIsoAspect()->Number(): -1;
-+ switch (theType)
-+ {
-+ case AIS_TOI_IsoU: return myDefaultDrawer->UIsoAspect()->Number();
-+ case AIS_TOI_IsoV: return myDefaultDrawer->VIsoAspect()->Number();
-+ case AIS_TOI_Both: return myDefaultDrawer->UIsoAspect()->Number() == myDefaultDrawer->VIsoAspect()->Number()
-+ ? myDefaultDrawer->UIsoAspect()->Number()
-+ : -1;
- }
- return 0;
- }
-
- //=======================================================================
- //function : IsoOnPlane
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::IsoOnPlane(const Standard_Boolean SwitchOn)
-+void AIS_InteractiveContext::IsoOnPlane (const Standard_Boolean theToSwitchOn)
- {
-- myDefaultDrawer->SetIsoOnPlane(SwitchOn);
-+ myDefaultDrawer->SetIsoOnPlane (theToSwitchOn);
- }
-
- //=======================================================================
- //function : IsoOnPlane
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::IsoOnPlane() const
-+Standard_Boolean AIS_InteractiveContext::IsoOnPlane() const
- {
- return myDefaultDrawer->IsoOnPlane();
- }
-
- //=======================================================================
- //function : SetSelectionMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetSelectionMode(const Handle(AIS_InteractiveObject)&, const Standard_Integer )
-+void AIS_InteractiveContext::SetSelectionMode (const Handle(AIS_InteractiveObject)& ,
-+ const Standard_Integer )
- {
-+ //
- }
-
- //=======================================================================
- //function : UnsetSelectionMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::UnsetSelectionMode(const Handle(AIS_InteractiveObject)&)
-+void AIS_InteractiveContext::UnsetSelectionMode (const Handle(AIS_InteractiveObject)& )
- {
-+ //
- }
-
- //=======================================================================
- //function : SetSensitivityMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetSensitivityMode(const StdSelect_SensitivityMode aMode) {
--
-- if( HasOpenedContext() )
-- myLocalContexts(myCurLocalIndex)->SetSensitivityMode(aMode);
-- else {
-- myMainSel->SetSensitivityMode(aMode);
-+void AIS_InteractiveContext::SetSensitivityMode (const StdSelect_SensitivityMode theMode)
-+{
-+ if (HasOpenedContext())
-+ {
-+ myLocalContexts (myCurLocalIndex)->SetSensitivityMode (theMode);
-+ }
-+ else
-+ {
-+ myMainSel->SetSensitivityMode (theMode);
- }
- }
-
- //=======================================================================
- //function : SensitivityMode
--//purpose :
-+//purpose :
- //=======================================================================
--
--StdSelect_SensitivityMode AIS_InteractiveContext::SensitivityMode() const {
--
-- if( HasOpenedContext() )
-- return myLocalContexts(myCurLocalIndex)->SensitivityMode();
-- return myMainSel->SensitivityMode();
-+StdSelect_SensitivityMode AIS_InteractiveContext::SensitivityMode() const
-+{
-+ return HasOpenedContext()
-+ ? myLocalContexts (myCurLocalIndex)->SensitivityMode()
-+ : myMainSel->SensitivityMode();
- }
-
- //=======================================================================
- //function : SetSensitivity
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetSensitivity(const Standard_Real aPrecision) {
--
-- if( HasOpenedContext() )
-- myLocalContexts(myCurLocalIndex)->SetSensitivity(aPrecision);
-- else {
-- myMainSel->SetSensitivity(aPrecision);
-+void AIS_InteractiveContext::SetSensitivity (const Standard_Real thePrecision)
-+{
-+ if (HasOpenedContext())
-+ {
-+ myLocalContexts(myCurLocalIndex)->SetSensitivity (thePrecision);
-+ }
-+ else
-+ {
-+ myMainSel->SetSensitivity (thePrecision);
- }
- }
-
- //=======================================================================
- //function : Sensitivity
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Real AIS_InteractiveContext::Sensitivity() const {
--
-- if( HasOpenedContext() )
-- return myLocalContexts(myCurLocalIndex)->Sensitivity();
-- return myMainSel->Sensitivity();
-+Standard_Real AIS_InteractiveContext::Sensitivity() const
-+{
-+ return HasOpenedContext()
-+ ? myLocalContexts(myCurLocalIndex)->Sensitivity()
-+ : myMainSel->Sensitivity();
- }
-
- //=======================================================================
- //function : SetPixelTolerance
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetPixelTolerance(const Standard_Integer aPrecision) {
--
-- if( HasOpenedContext() )
-- myLocalContexts(myCurLocalIndex)->SetPixelTolerance(aPrecision);
-- else {
-- myMainSel->SetPixelTolerance(aPrecision);
-+void AIS_InteractiveContext::SetPixelTolerance (const Standard_Integer thePrecision)
-+{
-+ if (HasOpenedContext())
-+ {
-+ myLocalContexts (myCurLocalIndex)->SetPixelTolerance (thePrecision);
-+ }
-+ else
-+ {
-+ myMainSel->SetPixelTolerance (thePrecision);
- }
- }
-
- //=======================================================================
- //function : PixelTolerance
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Integer AIS_InteractiveContext::PixelTolerance() const {
--
-- if( HasOpenedContext() )
-- return myLocalContexts(myCurLocalIndex)->PixelTolerance();
-- return myMainSel->PixelTolerance();
-+Standard_Integer AIS_InteractiveContext::PixelTolerance() const
-+{
-+ return HasOpenedContext()
-+ ? myLocalContexts (myCurLocalIndex)->PixelTolerance()
-+ : myMainSel->PixelTolerance();
- }
-
- //=======================================================================
- //function : IsInLocal
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::IsInLocal(const Handle(AIS_InteractiveObject)& anIObj,
-- Standard_Integer& TheIndex) const
-+Standard_Boolean AIS_InteractiveContext::IsInLocal (const Handle(AIS_InteractiveObject)& theIObj,
-+ Standard_Integer& theIndex) const
- {
-- if(anIObj.IsNull()) return Standard_False;
-+ if (theIObj.IsNull())
-+ {
-+ return Standard_False;
-+ }
-+
- // if it exists at neutral point 0 index is returned
-- if(myObjects.IsBound(anIObj)) {
-- TheIndex = 0;
-+ if (myObjects.IsBound (theIObj))
-+ {
-+ theIndex = 0;
- return Standard_False;
- }
-- for(Standard_Integer I=1;I<=myLocalContexts.Extent();I++){
-- if(myLocalContexts.IsBound(I)){
-- if(myLocalContexts(I)->IsIn(anIObj)){
-- TheIndex = I;
-+
-+ for (Standard_Integer aCtxIter = 1; aCtxIter <= myLocalContexts.Extent(); ++aCtxIter)
-+ {
-+ if (myLocalContexts.IsBound (aCtxIter))
-+ {
-+ if(myLocalContexts (aCtxIter)->IsIn (theIObj))
-+ {
-+ theIndex = aCtxIter;
- return Standard_True;
--
- }
- }
- }
-- TheIndex =-1;
-+ theIndex = -1;
- return Standard_False;
--}
--
-+}
-+
- //=======================================================================
- //function : InitAttributes
--//purpose :
-+//purpose :
- //=======================================================================
--
- void AIS_InteractiveContext::InitAttributes()
- {
--
-- mgrSelector->Add(myMainSel);
-+ mgrSelector->Add (myMainSel);
- myCurrentName = AIS_Context_NewCurName();
- mySelectionName = AIS_Context_NewSelName();
-
-- AIS_Selection::CreateSelection(mySelectionName.ToCString());
-- AIS_Selection::CreateSelection(myCurrentName.ToCString());
-+ AIS_Selection::CreateSelection (mySelectionName.ToCString());
-+ AIS_Selection::CreateSelection (myCurrentName.ToCString());
-
--
-- myDefaultDrawer->SetShadingAspectGlobal(Standard_False);
-- Graphic3d_MaterialAspect aMat(Graphic3d_NOM_BRASS);
-- myDefaultDrawer->ShadingAspect()->SetMaterial(aMat);
-+ myDefaultDrawer->SetShadingAspectGlobal (Standard_False);
-+ Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
-+ myDefaultDrawer->ShadingAspect()->SetMaterial (aMat);
-
- // myDefaultDrawer->ShadingAspect()->SetColor(Quantity_NOC_GRAY70);
-- Handle (Prs3d_LineAspect) HLA = myDefaultDrawer->HiddenLineAspect();
-- HLA->SetColor(Quantity_NOC_GRAY20);
-- HLA->SetWidth(1);
-- HLA->SetTypeOfLine(Aspect_TOL_DASH);
-+ Handle(Prs3d_LineAspect) aLineAspect = myDefaultDrawer->HiddenLineAspect();
-+ aLineAspect->SetColor (Quantity_NOC_GRAY20);
-+ aLineAspect->SetWidth (1.0);
-+ aLineAspect->SetTypeOfLine (Aspect_TOL_DASH);
-
- // tolerance to 4 pixels...
- SetPixelTolerance();
-
- // Customizing the drawer for trihedrons and planes...
--
-- Handle (Prs3d_DatumAspect) DA = myDefaultDrawer->DatumAspect();
-- Standard_Real aLength(100.);
-- DA->SetAxisLength(aLength,aLength,aLength);
-- Quantity_NameOfColor col = Quantity_NOC_LIGHTSTEELBLUE4;
-- DA->FirstAxisAspect()->SetColor(col);
-- DA->SecondAxisAspect()->SetColor(col);
-- DA->ThirdAxisAspect()->SetColor(col);
--
-- Handle(Prs3d_PlaneAspect)PA = myDefaultDrawer->PlaneAspect();
-- aLength =200.;
-- PA->SetPlaneLength(aLength,aLength);
-- PA->EdgesAspect()->SetColor(Quantity_NOC_SKYBLUE);
--
--
-+ Handle(Prs3d_DatumAspect) aTrihAspect = myDefaultDrawer->DatumAspect();
-+ const Standard_Real aLength = 100.0;
-+ aTrihAspect->SetAxisLength (aLength, aLength, aLength);
-+ const Quantity_NameOfColor aColor = Quantity_NOC_LIGHTSTEELBLUE4;
-+ aTrihAspect->FirstAxisAspect() ->SetColor (aColor);
-+ aTrihAspect->SecondAxisAspect()->SetColor (aColor);
-+ aTrihAspect->ThirdAxisAspect() ->SetColor (aColor);
-+
-+ Handle(Prs3d_PlaneAspect) aPlaneAspect = myDefaultDrawer->PlaneAspect();
-+ const Standard_Real aPlaneLength = 200.0;
-+ aPlaneAspect->SetPlaneLength (aPlaneLength, aPlaneLength);
-+ aPlaneAspect->EdgesAspect()->SetColor (Quantity_NOC_SKYBLUE);
- }
-
--
- //=======================================================================
- //function : TrihedronSize
--//purpose :
-+//purpose :
- //=======================================================================
- Standard_Real AIS_InteractiveContext::TrihedronSize() const
- {
- return myDefaultDrawer->DatumAspect()->FirstAxisLength();
- }
-+
- //=======================================================================
- //function : SetTrihedronSize
--//purpose :
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::SetTrihedronSize(const Standard_Real aVal,const Standard_Boolean /*updateviewer*/)
-+void AIS_InteractiveContext::SetTrihedronSize (const Standard_Real theVal,
-+ const Standard_Boolean /*updateviewer*/)
- {
-- myDefaultDrawer->DatumAspect()->SetAxisLength(aVal,aVal,aVal);
-- Redisplay(AIS_KOI_Datum,3,Standard_False);
-- Redisplay(AIS_KOI_Datum,4,Standard_True);
-+ myDefaultDrawer->DatumAspect()->SetAxisLength (theVal, theVal, theVal);
-+ Redisplay (AIS_KOI_Datum, 3, Standard_False);
-+ Redisplay (AIS_KOI_Datum, 4, Standard_True);
- }
-
--
--
- //=======================================================================
- //function : SetPlaneSize
--//purpose :
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::SetPlaneSize(const Standard_Real aValX,
-- const Standard_Real aValY,
-+void AIS_InteractiveContext::SetPlaneSize(const Standard_Real theValX,
-+ const Standard_Real theValY,
- const Standard_Boolean /*updateviewer*/)
- {
-- myDefaultDrawer->PlaneAspect()->SetPlaneLength(aValX,aValY);
-- Redisplay(AIS_KOI_Datum,7);
-+ myDefaultDrawer->PlaneAspect()->SetPlaneLength (theValX, theValY);
-+ Redisplay (AIS_KOI_Datum, 7);
- }
-
- //=======================================================================
- //function : SetPlaneSize
--//purpose :
-+//purpose :
- //=======================================================================
--
--void AIS_InteractiveContext::SetPlaneSize(const Standard_Real aVal,
-- const Standard_Boolean updateviewer)
-+void AIS_InteractiveContext::SetPlaneSize (const Standard_Real theVal,
-+ const Standard_Boolean theToUpdateViewer)
- {
-- SetPlaneSize(aVal,aVal,updateviewer);
-+ SetPlaneSize (theVal, theVal, theToUpdateViewer);
- }
-
- //=======================================================================
- //function : PlaneSize
--//purpose :
-+//purpose :
- //=======================================================================
--
--Standard_Boolean AIS_InteractiveContext::PlaneSize(Standard_Real& LX,Standard_Real& LY) const
-+Standard_Boolean AIS_InteractiveContext::PlaneSize (Standard_Real& theX,
-+ Standard_Real& theY) const
- {
-- LX = myDefaultDrawer->PlaneAspect()->PlaneXLength();
-- LY = myDefaultDrawer->PlaneAspect()->PlaneYLength();
-- return (Abs(LX-LY)<=Precision::Confusion());
-+ theX = myDefaultDrawer->PlaneAspect()->PlaneXLength();
-+ theY = myDefaultDrawer->PlaneAspect()->PlaneYLength();
-+ return (Abs (theX - theY) <= Precision::Confusion());
- }
-
--
--
- //=======================================================================
--//function :
--//purpose :
-+//function : SetAutoActivateSelection
-+//purpose :
- //=======================================================================
--void AIS_InteractiveContext::SetAutoActivateSelection( const Standard_Boolean Auto )
-+void AIS_InteractiveContext::SetAutoActivateSelection (const Standard_Boolean theIsAuto)
- {
-- myIsAutoActivateSelMode = Auto;
-+ myIsAutoActivateSelMode = theIsAuto;
- }
-
- //=======================================================================
--//function :
--//purpose :
-+//function : GetAutoActivateSelection
-+//purpose :
- //=======================================================================
- Standard_Boolean AIS_InteractiveContext::GetAutoActivateSelection() const
- {
-@@ -2837,13 +2721,12 @@
-
- //=======================================================================
- //function : SetZLayer
--//purpose :
-+//purpose :
- //=======================================================================
--
- void AIS_InteractiveContext::SetZLayer (const Handle(AIS_InteractiveObject)& theIObj,
- const Standard_Integer theLayerId)
- {
-- if (theIObj.IsNull ())
-+ if (theIObj.IsNull())
- return;
-
- if (myObjects.IsBound (theIObj))
-@@ -2853,7 +2736,7 @@
- theIObj->SetZLayer (myMainPM, theLayerId);
- }
- }
-- else if (HasOpenedContext ())
-+ else if (HasOpenedContext())
- {
- myLocalContexts (myCurLocalIndex)->SetZLayer (theIObj, theLayerId);
- }
-@@ -2861,19 +2744,18 @@
-
- //=======================================================================
- //function : GetZLayer
--//purpose :
-+//purpose :
- //=======================================================================
--
- Standard_Integer AIS_InteractiveContext::GetZLayer (const Handle(AIS_InteractiveObject)& theIObj) const
- {
-- if (theIObj.IsNull ())
-+ if (theIObj.IsNull())
- return -1;
-
- if (myObjects.IsBound (theIObj))
- {
- return theIObj->GetZLayer (myMainPM);
- }
-- else if (HasOpenedContext ())
-+ else if (HasOpenedContext())
- {
- return myLocalContexts (myCurLocalIndex)->GetZLayer (theIObj);
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext_1.cxx OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext_1.cxx
---- OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext_1.cxx 2014-11-11 17:46:38.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext_1.cxx 2015-01-16 13:01:23.000000000 +0300
-@@ -153,6 +153,7 @@
- {
- if (mylastindex != 0 && mylastindex <= myMapOfOwner.Extent())
- {
-+ myMainPM->ClearImmediateDraw();
- Unhilight (myMapOfOwner (mylastindex), theView);
- if (theToRedrawImmediate)
- {
-@@ -376,6 +377,7 @@
-
- if(myAutoHilight)
- {
-+ myMainPM->ClearImmediateDraw();
- const Handle(V3d_Viewer)& aViewer = myCTX->CurrentViewer();
- for (aViewer->InitActiveViews(); aViewer->MoreActiveViews(); aViewer->NextActiveViews())
- {
-@@ -545,7 +547,6 @@
- return;
- }
-
-- myMainPM->ClearImmediateDraw();
- const Standard_Integer aHilightMode = GetHiMod (Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable()));
- if (IsSelected (theOwner))
- {
-@@ -1044,6 +1045,10 @@
- myMapOfOwner.Clear();
- myMapOfOwner.Assign (anOwnersToKeep);
- mylastindex = myMapOfOwner.FindIndex (aLastPicked);
-+ if (!IsValidIndex (mylastindex))
-+ {
-+ myMainPM->ClearImmediateDraw();
-+ }
-
- if (!isAISRemainsDetected)
- {
-@@ -1197,6 +1202,7 @@
- {
- if (thePickOwner.IsNull())
- {
-+ myMainPM->ClearImmediateDraw();
- if (theToRedrawImmediate)
- {
- theView->RedrawImmediate();
-@@ -1248,6 +1254,7 @@
- if (aNewIndex != mylastindex
- || thePickOwner->IsForcedHilight())
- {
-+ myMainPM->ClearImmediateDraw();
- if (mylastindex != 0
- && mylastindex <= myMapOfOwner.Extent())
- {
-@@ -1270,7 +1277,7 @@
- mylastindex = aNewIndex;
- }
-
-- if (mylastindex)
-+ if (mylastindex != 0)
- {
- mylastgood = mylastindex;
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext.cxx OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext.cxx
---- OCCT-6.8.0_SRC/src/AIS/AIS_LocalContext.cxx 2014-11-11 17:46:38.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/AIS/AIS_LocalContext.cxx 2015-01-16 12:59:32.000000000 +0300
-@@ -445,65 +445,67 @@
-
- Standard_Boolean AIS_LocalContext::Remove(const Handle(AIS_InteractiveObject)& aSelectable)
- {
-- if(!myActiveObjects.IsBound(aSelectable)) return Standard_False;
-+ if(!myActiveObjects.IsBound (aSelectable))
-+ {
-+ return Standard_False;
-+ }
-+
-+ if (IsSelected (aSelectable))
-+ {
-+ AddOrRemoveSelected (aSelectable, Standard_False);
-+ }
-+
-+ const Handle(AIS_LocalStatus)& Att = myActiveObjects (aSelectable);
-
-- if(IsSelected(aSelectable))
-- AddOrRemoveSelected(aSelectable,Standard_False);
--
-- const Handle(AIS_LocalStatus)& Att = myActiveObjects(aSelectable);
--
- TColStd_ListIteratorOfListOfInteger It;
-- // it is checked which were the temporary attributes
-- // and they are set to 0
-
-- // desactivate standard modes
-- if(Att->Decomposed()){
-- for(It.Initialize(myListOfStandardMode);It.More();It.Next()){
-- mySM->Deactivate(aSelectable,It.Value(),myMainVS);
-+ // Deactivate standard modes
-+ if (Att->Decomposed())
-+ {
-+ for (It.Initialize (myListOfStandardMode); It.More(); It.Next())
-+ {
-+ mySM->Deactivate (aSelectable, It.Value(), myMainVS);
- }
- }
--
-- // if object or temporary presentations...
-- if(Att->IsTemporary())
-+
-+ // If object or temporary presentations
-+ if (Att->IsTemporary())
-+ {
-+ if (Att->IsSubIntensityOn())
- {
-- if(Att->IsSubIntensityOn())
-- myMainPM->Unhighlight(aSelectable,Att->HilightMode());
--
-- // remove if bug on clear correct...
-- myMainPM->Erase(aSelectable,Att->DisplayMode());
-- myMainPM->Clear(aSelectable,Att->DisplayMode());
-- if(myMainPM->IsDisplayed(aSelectable,Att->HilightMode()))
-- myMainPM->Erase(aSelectable,Att->HilightMode());
-- // myMainPM->Clear(aSelectable,Att->HilightMode());
-+ myMainPM->Unhighlight (aSelectable, Att->HilightMode());
- }
-- // if below intensity
-- else
-+
-+ myMainPM->Erase (aSelectable, Att->DisplayMode());
-+ myMainPM->Clear (aSelectable, Att->DisplayMode());
-+ if (myMainPM->IsDisplayed (aSelectable, Att->HilightMode()))
- {
-- if(Att->IsSubIntensityOn())
-- myCTX->SubIntensityOff(aSelectable);
-+ myMainPM->Erase (aSelectable, Att->HilightMode());
- }
-- // desactivate stored proper modes
-- for(It.Initialize(Att->SelectionModes());It.More();It.Next()){
-- mySM->Deactivate(aSelectable,It.Value(),myMainVS);
-- }
--// pop : si je laisses cela plantes dans les elements de construction
--// alors a toi de jouer ROB
--// RemoveSelected(aSelectable);
--
-- if(IsSelected(aSelectable))
-- AddOrRemoveSelected(aSelectable);
-- myActiveObjects.UnBind(aSelectable);
-+ }
-+ // If subintensity used
-+ else if (Att->IsSubIntensityOn())
-+ {
-+ myCTX->SubIntensityOff (aSelectable);
-+ }
-+
-+ // Deactivate stored selection modes
-+ for (It.Initialize (Att->SelectionModes()); It.More(); It.Next())
-+ {
-+ mySM->Deactivate (aSelectable, It.Value(), myMainVS);
-+ }
-
- // Remove the interactive object from selection manager
- if (mySM->Contains (aSelectable))
- {
- mySM->Remove (aSelectable);
- }
--
- UpdateSort();
--
- ClearOutdatedSelection (aSelectable, Standard_True);
-
-+ // This should be done at the very end because most methods use
-+ // myActiveObjects even during clean-up
-+ myActiveObjects.UnBind (aSelectable);
- return Standard_True;
- }
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Blend/Blend_Walking_1.gxx OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_1.gxx
---- OCCT-6.8.0_SRC/src/Blend/Blend_Walking_1.gxx 2014-11-11 17:46:43.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_1.gxx 2015-01-16 12:59:38.000000000 +0300
-@@ -56,6 +56,7 @@
-
- void Blend_Walking::Perform(Blend_Function& Func,
- Blend_FuncInv& FuncInv,
-+ const Handle(ChFiDS_HElSpine)& HGuide,
- const Standard_Real Pdep,
- const Standard_Real Pmax,
- const Standard_Real MaxStep,
-@@ -154,7 +155,7 @@
- }
- }
-
-- InternalPerform(Func,FuncInv,Pmax);
-+ InternalPerform(Func,FuncInv,HGuide,Pmax);
-
- done = Standard_True;
- }
-@@ -461,7 +462,8 @@
- previousP.ParametersOnS1(sol(1),sol(2));
- previousP.ParametersOnS2(sol(3),sol(4));
-
-- InternalPerform(Func,FuncInv,P);
-+ Handle(ChFiDS_HElSpine) anHGuide;
-+ InternalPerform(Func,FuncInv,anHGuide,P);
- return Standard_True;
- }
-
-@@ -502,7 +504,8 @@
- if(OnS1) clasonS1 = Standard_False;
- else clasonS2 = Standard_False;
-
-- InternalPerform(Func,FuncInv,P);
-+ Handle(ChFiDS_HElSpine) anHGuide;
-+ InternalPerform(Func,FuncInv,anHGuide,P);
-
- clasonS1 = Standard_True;
- clasonS2 = Standard_True;
-@@ -548,7 +551,8 @@
- previousP.ParametersOnS1(sol(1),sol(2));
- previousP.ParametersOnS2(sol(3),sol(4));
-
-- InternalPerform(Func,FuncInv,Pmin);
-+ Handle(ChFiDS_HElSpine) anHGuide;
-+ InternalPerform(Func,FuncInv,anHGuide,Pmin);
-
- iscomplete = Standard_True;
- return Standard_True;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Blend/Blend_Walking_4.gxx OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_4.gxx
---- OCCT-6.8.0_SRC/src/Blend/Blend_Walking_4.gxx 2014-11-11 17:46:43.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking_4.gxx 2015-01-16 12:59:38.000000000 +0300
-@@ -12,6 +12,8 @@
- // Alternatively, this file may be used under the terms of Open CASCADE
- // commercial license or contractual agreement.
-
-+#include <gce_MakePln.hxx>
-+
- static void evalpinit(math_Vector& parinit,
- const Blend_Point& previousP,
- const Standard_Real parprec,
-@@ -65,6 +67,7 @@
-
- void Blend_Walking::InternalPerform(Blend_Function& Func,
- Blend_FuncInv& FuncInv,
-+ const Handle(ChFiDS_HElSpine)& HGuide,
- const Standard_Real Bound)
- {
-
-@@ -251,12 +254,64 @@
- // avec les surfaces periodiques.
- State = Blend_OnRst12;
- param = (w1+w2)/2;
-+ gp_Pnt Pnt1, Pnt2;
- p2d = TheArcTool::Value(recdomain1->Value(),solrst1(1));
- sol(1) = p2d.X();
- sol(2) = p2d.Y();
-+ Pnt1 = TheSurfaceTool::Value(surf1,sol(1),sol(2));
- p2d = TheArcTool::Value(recdomain2->Value(),solrst2(1));
- sol(3) = p2d.X();
- sol(4) = p2d.Y();
-+ Pnt2 = TheSurfaceTool::Value(surf2,sol(3),sol(4));
-+ if (!HGuide.IsNull())
-+ {
-+ const Standard_Real TolProd = 1.e-5;
-+ Standard_Real SavedParams [2];
-+ Standard_Boolean SameDirs [2] = {Standard_False, Standard_False};
-+ ChFiDS_ElSpine& theElSpine = HGuide->ChangeCurve();
-+ SavedParams[0] = theElSpine.GetSavedFirstParameter();
-+ SavedParams[1] = theElSpine.GetSavedLastParameter();
-+ for (Standard_Integer ind = 0; ind < 2; ind++)
-+ {
-+ if (!Precision::IsInfinite(SavedParams[ind]))
-+ {
-+ //Check the original first and last parameters of guide curve
-+ //for equality to found parameter <param>:
-+ //check equality of tangent to guide curve and
-+ //normal to plane built on 3 points:
-+ //point on guide curve and points on restrictions of adjacent
-+ //surfaces.
-+ gp_Pnt Pnt0;
-+ gp_Vec Dir0;
-+ HGuide->D1(SavedParams[ind], Pnt0, Dir0);
-+ Standard_Real Length = Dir0.Magnitude();
-+ if (Length <= gp::Resolution())
-+ continue;
-+ Dir0 /= Length;
-+ gce_MakePln PlaneBuilder(Pnt0, Pnt1, Pnt2);
-+ if (!PlaneBuilder.IsDone())
-+ continue;
-+ gp_Pln thePlane = PlaneBuilder.Value();
-+ gp_Dir DirPlane = thePlane.Axis().Direction();
-+ gp_Vec theProd = Dir0 ^ DirPlane;
-+ Standard_Real ProdMod = theProd.Magnitude();
-+ if (ProdMod <= TolProd)
-+ SameDirs[ind] = Standard_True;
-+ }
-+ }
-+ Standard_Real theParam = Precision::Infinite();
-+ //Choose the closest parameter
-+ if (SameDirs[0] && SameDirs[1])
-+ theParam = (Abs(param - SavedParams[0]) < Abs(param - SavedParams[1]))?
-+ SavedParams[0] : SavedParams[1];
-+ else if (SameDirs[0])
-+ theParam = SavedParams[0];
-+ else if (SameDirs[1])
-+ theParam = SavedParams[1];
-+
-+ if (!Precision::IsInfinite(theParam))
-+ param = theParam;
-+ }
- }
- else if (recad1) {
- // sol sur 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Blend/Blend_Walking.cdl OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking.cdl
---- OCCT-6.8.0_SRC/src/Blend/Blend_Walking.cdl 2014-11-11 17:46:43.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Blend/Blend_Walking.cdl 2015-01-16 12:59:38.000000000 +0300
-@@ -45,6 +45,7 @@
- Transition from IntSurf,
- Function from Blend,
- FuncInv from Blend,
-+ HElSpine from ChFiDS,
- State from TopAbs
-
-
-@@ -66,6 +67,7 @@
-
- Perform(me: in out; F : in out Function from Blend;
- FInv : in out FuncInv from Blend;
-+ HGuide : HElSpine from ChFiDS;
- Pdep : Real from Standard;
- Pmax : Real from Standard;
- MaxStep : Real from Standard;
-@@ -164,6 +166,7 @@
-
- InternalPerform (me: in out;F : in out Function from Blend;
- FInv : in out FuncInv from Blend;
-+ HGuide : HElSpine from ChFiDS;
- Bound : Real from Standard)
-
- is static private;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx
---- OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx 2014-11-11 17:46:39.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_BuilderSolid.cxx 2015-01-16 12:59:34.000000000 +0300
-@@ -684,8 +684,8 @@
- }
- //
- if (aInOutMap.IsBound (aHole)){
-- const TopoDS_Shape& aHole2=aInOutMap(aHole);
-- if (IsInside(aHole, aHole2, myContext)) {
-+ const TopoDS_Shape& aSolidWas=aInOutMap(aHole);
-+ if (IsInside(aSolid, aSolidWas, myContext)) {
- aInOutMap.UnBind(aHole);
- aInOutMap.Bind (aHole, aSolid);
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx
---- OCCT-6.8.0_SRC/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx 2014-11-11 17:46:39.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx 2015-01-16 12:59:34.000000000 +0300
-@@ -267,7 +267,6 @@
- aPB->Indices(nV[0], nV[1]);
- //
- BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
-- ////const BOPDS_IndexedMapOfPaveBlock& aMPBF=aFI.PaveBlocksOn();
- const BOPCol_MapOfInteger& aMIFOn=aFI.VerticesOn();
- const BOPCol_MapOfInteger& aMIFIn=aFI.VerticesIn();
- //~~~
-@@ -305,7 +304,9 @@
- aEF.SetIndices(nE, nF);
- aEF.SetCommonPart(aCP);
- myDS->AddInterf(nE, nF);
-- // 3
-+ //
-+ aMIEFC.Add(nF);
-+ //
- BOPAlgo_Tools::FillMap(aPB, nF, aMPBLI, aAllocator);
- break;
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools_1.cxx OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools_1.cxx
---- OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools_1.cxx 2014-11-11 17:46:40.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools_1.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -344,6 +344,8 @@
- Standard_Real& theFVal) {
- try {
- const Standard_Real aPar = theX(1);
-+ if (!CheckParameter(aPar))
-+ return Standard_False;
- gp_Pnt aP1, aP2;
- gp_Pnt2d aP2d;
- my3DCurve->D0(aPar, aP1);
-@@ -367,7 +369,8 @@
- math_Vector& theGrad) {
- try {
- const Standard_Real aPar = theX(1);
--
-+ if (!CheckParameter(aPar))
-+ return Standard_False;
- gp_Pnt aP1, aP2;
- gp_Vec aDC3D, aDSU, aDSV;
- gp_Pnt2d aP2d;
-@@ -417,6 +420,19 @@
- }
- //
- private:
-+
-+ Standard_Boolean CheckParameter(const Standard_Real theParam)
-+ {
-+ if (theParam < my3DCurve->FirstParameter() ||
-+ theParam > my3DCurve->LastParameter() ||
-+ theParam < my2DCurve->FirstParameter() ||
-+ theParam > my2DCurve->LastParameter() )
-+ {
-+ return Standard_False;
-+ }
-+ return Standard_True;
-+ }
-+
- Handle(Geom_Curve) my3DCurve;
- Handle(Geom2d_Curve) my2DCurve;
- Handle(Geom_Surface) mySurf;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools.cxx OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools.cxx
---- OCCT-6.8.0_SRC/src/BOPTools/BOPTools_AlgoTools.cxx 2014-11-11 17:46:40.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/BOPTools/BOPTools_AlgoTools.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -99,7 +99,8 @@
- gp_Pnt& aPOut,
- Handle(IntTools_Context)& theContext,
- GeomAPI_ProjectPointOnSurf& aProjPL,
-- const Standard_Real aDt);
-+ const Standard_Real aDt,
-+ const Standard_Real aTolE);
- static
- Standard_Real MinStep3D(const TopoDS_Edge& theE1,
- const TopoDS_Face& theF1,
-@@ -1825,14 +1826,18 @@
- GeomAPI_ProjectPointOnSurf& aProjPL,
- const Standard_Real aDt)
- {
-+ Standard_Real aTolE;
-+ gp_Pnt aPx;
-+ //
- BOPTools_AlgoTools3D::GetNormalToFaceOnEdge(aE, aF, aT, aDN);
- if (aF.Orientation()==TopAbs_REVERSED){
- aDN.Reverse();
- }
-+ //
-+ aTolE=BRep_Tool::Tolerance(aE);
- aDB = aDN^aDTgt;
- //
-- gp_Pnt aPx;
-- if (!FindPointInFace(aF, aP, aDB, aPx, theContext, aProjPL, aDt)) {
-+ if (!FindPointInFace(aF, aP, aDB, aPx, theContext, aProjPL, aDt, aTolE)) {
- BOPTools_AlgoTools3D::GetApproxNormalToFaceOnEdge(aE, aF, aT, aPx,
- aDN, theContext);
- aProjPL.Perform(aPx);
-@@ -1841,7 +1846,6 @@
- aDB.SetXYZ(aVec.XYZ());
- }
- }
--
- //=======================================================================
- //function : FindPointInFace
- //purpose : Find a point in the face in direction of <aDB>
-@@ -1852,12 +1856,13 @@
- gp_Pnt& aPOut,
- Handle(IntTools_Context)& theContext,
- GeomAPI_ProjectPointOnSurf& aProjPL,
-- const Standard_Real aDt)
-+ const Standard_Real aDt,
-+ const Standard_Real aTolE)
- {
- Standard_Integer aNbItMax;
- Standard_Real aDist, aDTol, aPM;
- Standard_Boolean bRet;
-- gp_Pnt aP1;
-+ gp_Pnt aP1, aPS;
- //
- aDTol = Precision::Angular();
- aPM = aP.XYZ().Modulus();
-@@ -1869,10 +1874,27 @@
- //
- GeomAPI_ProjectPointOnSurf& aProj=theContext->ProjPS(aF);
- //
-+ aPS=aP;
-+ aProj.Perform(aPS);
-+ if (!aProj.IsDone()) {
-+ return bRet;
-+ }
-+ aPS=aProj.NearestPoint();
-+ aProjPL.Perform(aPS);
-+ aPS=aProjPL.NearestPoint();
-+ //
-+ aPS.SetXYZ(aPS.XYZ()+2.*aTolE*aDB.XYZ());
-+ aProj.Perform(aPS);
-+ if (!aProj.IsDone()) {
-+ return bRet;
-+ }
-+ aPS=aProj.NearestPoint();
-+ aProjPL.Perform(aPS);
-+ aPS=aProjPL.NearestPoint();
-+ //
-+ //
- do {
-- aP1.SetCoord(aP.X()+aDt*aDB.X(),
-- aP.Y()+aDt*aDB.Y(),
-- aP.Z()+aDt*aDB.Z());
-+ aP1.SetXYZ(aPS.XYZ()+aDt*aDB.XYZ());
- //
- aProj.Perform(aP1);
- if (!aProj.IsDone()) {
-@@ -1884,7 +1906,7 @@
- aProjPL.Perform(aPOut);
- aPOut = aProjPL.NearestPoint();
- //
-- gp_Vec aV(aP, aPOut);
-+ gp_Vec aV(aPS, aPOut);
- aDB.SetXYZ(aV.XYZ());
- } while (aDist > aDTol && --aNbItMax);
- //
-@@ -2006,8 +2028,8 @@
- //function : IsInvertedSolid
- //purpose :
- //=======================================================================
--Standard_Boolean
-- BOPTools_AlgoTools::IsInvertedSolid(const TopoDS_Solid& aSolid)
-+Standard_Boolean BOPTools_AlgoTools::IsInvertedSolid
-+ (const TopoDS_Solid& aSolid)
- {
- Standard_Real aTolS;
- TopAbs_State aState;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/BRepFill/BRepFill_Pipe.cxx OCCT-6.8.0_SRC-patch/src/BRepFill/BRepFill_Pipe.cxx
---- OCCT-6.8.0_SRC/src/BRepFill/BRepFill_Pipe.cxx 2014-11-11 17:46:41.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/BRepFill/BRepFill_Pipe.cxx 2015-01-16 12:59:36.000000000 +0300
-@@ -274,18 +274,9 @@
- }
-
- ShapeUpgrade_RemoveLocations RemLoc;
-+ RemLoc.SetRemoveLevel(TopAbs_COMPOUND);
- RemLoc.Remove(myFirst);
- myFirst = RemLoc.GetResult();
-- TopLoc_Location theLoc = myFirst.Location();
-- if (!theLoc.IsIdentity())
-- {
-- TopoDS_Shape NewMyFirst = BRepBuilderAPI_Copy(myFirst);
-- RemLoc.Remove(NewMyFirst);
-- NewMyFirst = RemLoc.GetResult();
-- TopLoc_Location theIdentity;
-- NewMyFirst.Location(theIdentity);
-- myFirst = BRepBuilderAPI_Transform(NewMyFirst, theLoc.Transformation(), Standard_True);
-- }
-
- myLoc->Law(myLoc->NbLaw())->GetDomain(first, last);
- myLoc->Law(myLoc->NbLaw())->D0(last,M, V);
-@@ -308,16 +299,6 @@
-
- RemLoc.Remove(myLast);
- myLast = RemLoc.GetResult();
-- theLoc = myLast.Location();
-- if (!theLoc.IsIdentity())
-- {
-- TopoDS_Shape NewMyLast = BRepBuilderAPI_Copy(myLast);
-- RemLoc.Remove(NewMyLast);
-- NewMyLast = RemLoc.GetResult();
-- TopLoc_Location theIdentity;
-- NewMyLast.Location(theIdentity);
-- myLast = BRepBuilderAPI_Transform(NewMyLast, theLoc.Transformation(), Standard_True);
-- }
-
- #if DRAW
- if (Affich) {
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_2.cxx OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_2.cxx
---- OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_2.cxx 2014-11-11 17:46:44.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_2.cxx 2015-01-16 12:59:39.000000000 +0300
-@@ -1862,10 +1862,13 @@
- Standard_Real wl = Guide.LastParameter();
- Standard_Real locfleche = (wl - wf) * fleche;
- Standard_Real wfsav = wf, wlsav = wl;
-- //Now the ElSpine is artificially extended to help rsnld.
-- Standard_Real prab = 0.01;
-- Guide.FirstParameter(wf-prab*(wl-wf));
-- Guide.LastParameter (wl+prab*(wl-wf));
-+ if (!Guide.IsPeriodic())
-+ {
-+ //Now the ElSpine is artificially extended to help rsnld.
-+ Standard_Real prab = 0.01;
-+ Guide.FirstParameter(wf-prab*(wl-wf));
-+ Guide.LastParameter (wl+prab*(wl-wf));
-+ }
- Handle(ChFiDS_Spine)& Spine = Stripe->ChangeSpine();
- Standard_Integer ii, nbed = Spine->NbEdges();
- Standard_Real lastedlastp = Spine->LastParameter(nbed);
-@@ -1920,7 +1923,9 @@
- Last = wf;
- if(Guide.IsPeriodic()) {
- Last = First - Guide.Period();
-+ Guide.SaveFirstParameter();
- Guide.FirstParameter(Last);
-+ Guide.SaveLastParameter();
- Guide.LastParameter (First * 1.1);//Extension to help rsnld.
- }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_6.cxx OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_6.cxx
---- OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_6.cxx 2014-11-11 17:46:44.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_6.cxx 2015-01-16 12:59:39.000000000 +0300
-@@ -1573,7 +1573,7 @@
- if (5*TolGuide > MS) TolGuide = MS/5;
- if (5*TolEsp > MS) TolEsp = MS/5;
- }
-- TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
-+ TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
- ParSol,TolEsp,Fleche,Appro);
- if (!TheWalk.IsDone()) {
- #ifdef OCCT_DEBUG
-@@ -2113,7 +2113,7 @@
- if (5*TolEsp > MS) TolEsp = MS/5;
- }
-
-- TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
-+ TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
- ParSol,TolEsp,Fleche,Appro);
-
- if (!TheWalk.IsDone()) {
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_C1.cxx OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_C1.cxx
---- OCCT-6.8.0_SRC/src/ChFi3d/ChFi3d_Builder_C1.cxx 2014-11-11 17:46:44.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ChFi3d/ChFi3d_Builder_C1.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -371,8 +371,7 @@
- pared = ponc1.Parameter();
- parltg = ponc2.Parameter();
- if ((parltg > f) && (parltg < l)) {
--#ifdef OCC23139
-- ////modified by jgv, 10.05.2012 for the bug 23139////
-+ ////modified by jgv, 10.05.2012 for the bug 23139, 25657////
- Handle(Geom2d_Curve) PConF = fi.PCurveOnFace();
- if (!PConF.IsNull())
- {
-@@ -393,7 +392,6 @@
- }
- }
- /////////////////////////////////////////////////////
--#endif
- fi.SetParameter(parltg,isfirst);
- cp.SetArc(cp.Tolerance(),cp.Arc(),pared,cp.TransitionOnArc());
- return Standard_True;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cdl OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cdl
---- OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cdl 2014-11-11 17:46:44.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cdl 2015-01-16 12:59:39.000000000 +0300
-@@ -50,6 +50,10 @@
- LastParameter(me) returns Real from Standard
- is redefined;
-
-+ GetSavedFirstParameter(me) returns Real from Standard;
-+
-+ GetSavedLastParameter(me) returns Real from Standard;
-+
- Continuity(me) returns Shape from GeomAbs
- is redefined static;
-
-@@ -102,6 +106,10 @@
-
- LastParameter(me : in out; P : Real from Standard);
-
-+ SaveFirstParameter(me : in out);
-+
-+ SaveLastParameter(me : in out);
-+
- SetOrigin(me : in out; O : Real from Standard);
-
- FirstPointAndTgt(me; P : out Pnt from gp; T : out Vec from gp);
-@@ -188,5 +196,7 @@
- period : Real from Standard;
- periodic : Boolean from Standard;
-
-+pfirstsav : Real from Standard;
-+plastsav : Real from Standard;
-
- end ElSpine;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cxx OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cxx
---- OCCT-6.8.0_SRC/src/ChFiDS/ChFiDS_ElSpine.cxx 2014-11-11 17:46:44.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ChFiDS/ChFiDS_ElSpine.cxx 2015-01-16 12:59:39.000000000 +0300
-@@ -27,6 +27,8 @@
-
- ChFiDS_ElSpine::ChFiDS_ElSpine():periodic(0)
- {
-+ pfirstsav = Precision::Infinite();
-+ plastsav = Precision::Infinite();
- }
-
-
-@@ -52,6 +54,26 @@
- }
-
- //=======================================================================
-+//function : GetSavedFirstParameter
-+//purpose :
-+//=======================================================================
-+
-+Standard_Real ChFiDS_ElSpine::GetSavedFirstParameter() const
-+{
-+ return pfirstsav;
-+}
-+
-+//=======================================================================
-+//function : GetSavedLastParameter
-+//purpose :
-+//=======================================================================
-+
-+Standard_Real ChFiDS_ElSpine::GetSavedLastParameter() const
-+{
-+ return plastsav;
-+}
-+
-+//=======================================================================
- //function : Continuity
- //purpose :
- //=======================================================================
-@@ -229,6 +251,26 @@
- plast = P;
- }
-
-+//=======================================================================
-+//function : SaveFirstParameter
-+//purpose :
-+//=======================================================================
-+
-+void ChFiDS_ElSpine::SaveFirstParameter()
-+{
-+ pfirstsav = pfirst;
-+}
-+
-+//=======================================================================
-+//function : SaveLastParameter
-+//purpose :
-+//=======================================================================
-+
-+void ChFiDS_ElSpine::SaveLastParameter()
-+{
-+ plastsav = plast;
-+}
-+
-
- //=======================================================================
- //function : SetOrigin
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Graphic3d/Graphic3d_GraphicDriver.cdl OCCT-6.8.0_SRC-patch/src/Graphic3d/Graphic3d_GraphicDriver.cdl
---- OCCT-6.8.0_SRC/src/Graphic3d/Graphic3d_GraphicDriver.cdl 2014-11-11 17:46:49.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Graphic3d/Graphic3d_GraphicDriver.cdl 2015-01-16 13:01:24.000000000 +0300
-@@ -261,12 +261,6 @@
- is deferred;
- ---Purpose: call_togl_setvisualisation
-
-- Transparency ( me : mutable;
-- ACView : CView from Graphic3d;
-- AFlag : Boolean from Standard )
-- is deferred;
-- ---Purpose: call_togl_transparency
--
- View ( me : mutable;
- ACView : in out CView from Graphic3d )
- returns Boolean from Standard
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx
---- OCCT-6.8.0_SRC/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx 2015-01-16 13:01:24.000000000 +0300
-@@ -1151,6 +1151,7 @@
- const Standard_Real theUlSurf1,
- const Standard_Real thePeriodOfSurf1,
- const Handle(IntSurf_LineOn2S)& theLine,
-+ const Standard_Real theTol3D,
- const Standard_Real theTol2D,
- const Standard_Boolean theFlForce)
- {
-@@ -1177,6 +1178,32 @@
- thePntOnSurf2.X(), thePntOnSurf2.Y());
- }
-
-+ const Standard_Integer aNbPnts = theLine->NbPoints();
-+ if(aNbPnts > 0)
-+ {
-+ Standard_Real aUl = 0.0, aVl = 0.0;
-+ const IntSurf_PntOn2S aPlast = theLine->Value(aNbPnts);
-+ if(isTheReverse)
-+ aPlast.ParametersOnS2(aUl, aVl);
-+ else
-+ aPlast.ParametersOnS1(aUl, aVl);
-+
-+ if(anUpar <= aUl)
-+ {//Parameter value will be always increased.
-+ return Standard_False;
-+ }
-+
-+ //theTol2D is minimal step along parameter changed.
-+ //Therefore, if we apply this minimal step two
-+ //neighbour points will be always "same". Consequently,
-+ //we should reduce tolerance for IsSame checking.
-+ const Standard_Real aDTol = 1.0-Epsilon(1.0);
-+ if(aPnt.IsSame(aPlast, theTol3D*aDTol, theTol2D*aDTol))
-+ {
-+ theLine->RemovePoint(aNbPnts);
-+ }
-+ }
-+
- theLine->Add(aPnt);
- return Standard_True;
- }
-@@ -1191,6 +1218,7 @@
- const stCoeffsValue& theCoeffs,
- const Bnd_Box2d& theUVSurf1,
- const Bnd_Box2d& theUVSurf2,
-+ const Standard_Real theTol3D,
- const Standard_Real theTol2D,
- const Standard_Real thePeriod,
- const Standard_Real theNulValue,
-@@ -1281,7 +1309,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(), theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1313,7 +1341,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(),theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1346,7 +1374,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar2, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(), theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1376,7 +1404,7 @@
- AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
- gp_Pnt2d(anUpar1, aV1), gp_Pnt2d(aU2, aV2),
- aUSurf1f, aUSurf1l, thePeriod,
-- theWL->Curve(), theTol2D, theFlForce);
-+ theWL->Curve(), theTol3D, theTol2D, theFlForce);
- }
- else
- {
-@@ -1545,7 +1573,8 @@
- {
- Standard_Real &a = theU1crit[i],
- &b = theU1crit[i-1];
-- if(Abs(a - b) < theTol2D)
-+ const Standard_Real aRemain = fmod(Abs(a - b), thePeriod); // >= 0, because Abs(a - b) >= 0
-+ if((Abs(a - b) < theTol2D) || (aRemain < theTol2D) || (Abs(aRemain - thePeriod) < theTol2D))
- {
- a = (a + b)/2.0;
- b = Precision::Infinite();
-@@ -1817,6 +1846,7 @@
- Standard_Boolean isAddedIntoWL1 = Standard_False, isAddedIntoWL2 = Standard_False;
-
- Standard_Real anUf = aU1f[aCurInterval], anUl = aU1l[aCurInterval];
-+ const Standard_Boolean isDeltaPeriod = IsEqual(anUl-anUf, aPeriod);
-
- //Inscribe and sort critical points
- InscribeAndSortArray(anU1crit, aNbCritPointsMax, anUf, anUl, theTol2D, aPeriod);
-@@ -1830,6 +1860,8 @@
- Handle(IntPatch_WLine) aWLine2 = new IntPatch_WLine(aL2S2, Standard_False);
-
- Standard_Integer aWL1FindStatus = 0, aWL2FindStatus = 0;
-+ Standard_Boolean isAddingWL1Enabled = Standard_True,
-+ isAddingWL2Enabled = Standard_True;
-
- Standard_Real anU1 = anUf;
-
-@@ -1845,6 +1877,23 @@
-
- while(anU1 <= anUl)
- {
-+ if(isDeltaPeriod)
-+ {
-+ if(IsEqual(anU1, anUl))
-+ {
-+ //if isAddedIntoWL* == TRUE WLine contains only one point
-+ //(which was end point of previous WLine). If we will
-+ //add point found on the current step WLine will contain only
-+ //two points. At that both these points will be equal to the
-+ //points found earlier. Therefore, new WLine will repeat
-+ //already existing WLine. Consequently, it is necessary
-+ //to forbid building new line in this case.
-+
-+ isAddingWL1Enabled = !isAddedIntoWL1;
-+ isAddingWL2Enabled = !isAddedIntoWL2;
-+ }
-+ }
-+
- for(Standard_Integer i = 0; i < aNbCritPointsMax; i++)
- {
- if((anU1 - anU1crit[i])*aCriticalDelta[i] < 0.0)
-@@ -1995,123 +2044,129 @@
- isFirst = Standard_False;
- }
-
-- if( ((aUSurf2f-aU21) <= theTol2D) &&
-- ((aU21-aUSurf2l) <= theTol2D) &&
-- ((aVSurf1f - aV11) <= theTol2D) &&
-- ((aV11 - aVSurf1l) <= theTol2D) &&
-- ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
-+ if(isAddingWL1Enabled)
- {
-- Standard_Boolean isForce = Standard_False;
-- if(!aWL1FindStatus)
-+ if( ((aUSurf2f-aU21) <= theTol2D) &&
-+ ((aU21-aUSurf2l) <= theTol2D) &&
-+ ((aVSurf1f - aV11) <= theTol2D) &&
-+ ((aV11 - aVSurf1l) <= theTol2D) &&
-+ ((aVSurf2f - aV21) <= theTol2D) && ((aV21 - aVSurf2l) <= theTol2D))
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
--
-- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ Standard_Boolean isForce = Standard_False;
-+ if(!aWL1FindStatus)
- {
-- isForce = Standard_True;
-- }
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU21, aV11, aV11Prev,
-- aV21, aV21Prev, isTheReverse,
-- 1.0, isForce, isFound1, isFound2);
-+ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ {
-+ isForce = Standard_True;
-+ }
-+
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU21, aV11, aV11Prev,
-+ aV21, aV21Prev, isTheReverse,
-+ 1.0, isForce, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- {
-- aWL1FindStatus = 1;
-+ if(isFound1 || isFound2)
-+ {
-+ aWL1FindStatus = 1;
-+ }
- }
-- }
-
-- if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
-- {
-- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-- gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
-- aUSurf1f, aUSurf1l, aPeriod,
-- aWLine1->Curve(), theTol2D, isForce))
-+ if((aWL1FindStatus != 2) || (aWLine1->NbPnts() >= 1))
- {
-- if(!aWL1FindStatus)
-+ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-+ gp_Pnt2d(anU1, aV11), gp_Pnt2d(aU21, aV21),
-+ aUSurf1f, aUSurf1l, aPeriod,
-+ aWLine1->Curve(), theTol3D, theTol2D, isForce))
- {
-- aWL1FindStatus = 1;
-+ if(!aWL1FindStatus)
-+ {
-+ aWL1FindStatus = 1;
-+ }
- }
- }
- }
-- }
-- else
-- {
-- if(aWL1FindStatus == 1)
-+ else
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-+ if(aWL1FindStatus == 1)
-+ {
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU21, aV11, aV11Prev,
-- aV21, aV21Prev, isTheReverse,
-- 1.0, Standard_False, isFound1, isFound2);
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine1, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU21, aV11, aV11Prev,
-+ aV21, aV21Prev, isTheReverse,
-+ 1.0, Standard_False, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- aWL1FindStatus = 2; //start a new line
-+ if(isFound1 || isFound2)
-+ aWL1FindStatus = 2; //start a new line
-+ }
- }
- }
--
-- if( ((aUSurf2f-aU22) <= theTol2D) &&
-- ((aU22-aUSurf2l) <= theTol2D) &&
-- ((aVSurf1f - aV12) <= theTol2D) &&
-- ((aV12 - aVSurf1l) <= theTol2D) &&
-- ((aVSurf2f - aV22) <= theTol2D) &&
-- ((aV22 - aVSurf2l) <= theTol2D))
-+
-+ if(isAddingWL2Enabled)
- {
-- Standard_Boolean isForce = Standard_False;
--
-- if(!aWL2FindStatus)
-+ if( ((aUSurf2f-aU22) <= theTol2D) &&
-+ ((aU22-aUSurf2l) <= theTol2D) &&
-+ ((aVSurf1f - aV12) <= theTol2D) &&
-+ ((aV12 - aVSurf1l) <= theTol2D) &&
-+ ((aVSurf2f - aV22) <= theTol2D) &&
-+ ((aV22 - aVSurf2l) <= theTol2D))
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-+ Standard_Boolean isForce = Standard_False;
-
-- if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ if(!aWL2FindStatus)
- {
-- isForce = Standard_True;
-- }
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU22, aV12, aV12Prev,
-- aV22, aV22Prev, isTheReverse,
-- -1.0, isForce, isFound1, isFound2);
-+ if(((aUSurf2l - aUSurf2f) >= aPeriod) && (Abs(anU1-aUSurf1l) < theTol2D))
-+ {
-+ isForce = Standard_True;
-+ }
-+
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU22, aV12, aV12Prev,
-+ aV22, aV22Prev, isTheReverse,
-+ -1.0, isForce, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- {
-- aWL2FindStatus = 1;
-+ if(isFound1 || isFound2)
-+ {
-+ aWL2FindStatus = 1;
-+ }
- }
-- }
-
-- if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
-- {
-- if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-- gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
-- aUSurf1f, aUSurf1l, aPeriod,
-- aWLine2->Curve(), theTol2D, isForce))
-+ if((aWL2FindStatus != 2) || (aWLine2->NbPnts() >= 1))
- {
-- if(!aWL2FindStatus)
-+ if(AddPointIntoWL(theQuad1, theQuad2, isTheReverse,
-+ gp_Pnt2d(anU1, aV12), gp_Pnt2d(aU22, aV22),
-+ aUSurf1f, aUSurf1l, aPeriod,
-+ aWLine2->Curve(), theTol3D, theTol2D, isForce))
- {
-- aWL2FindStatus = 1;
-+ if(!aWL2FindStatus)
-+ {
-+ aWL2FindStatus = 1;
-+ }
- }
- }
- }
-- }
-- else
-- {
-- if(aWL2FindStatus == 1)
-+ else
- {
-- Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-+ if(aWL2FindStatus == 1)
-+ {
-+ Standard_Boolean isFound1 = Standard_False, isFound2 = Standard_False;
-
-- AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-- theUVSurf1, theUVSurf2, theTol2D, aPeriod,
-- aNulValue, anU1, aU22, aV12, aV12Prev,
-- aV22, aV22Prev, isTheReverse,
-- -1.0, Standard_False, isFound1, isFound2);
-+ AddBoundaryPoint(theQuad1, theQuad2, aWLine2, anEquationCoeffs,
-+ theUVSurf1, theUVSurf2, theTol3D, theTol2D, aPeriod,
-+ aNulValue, anU1, aU22, aV12, aV12Prev,
-+ aV22, aV22Prev, isTheReverse,
-+ -1.0, Standard_False, isFound1, isFound2);
-
-- if(isFound1 || isFound2)
-- aWL2FindStatus = 2; //start a new line
-+ if(isFound1 || isFound2)
-+ aWL2FindStatus = 2; //start a new line
-+ }
- }
- }
-
-@@ -2237,15 +2292,29 @@
- }
- else if(aWLine1->NbPnts() > 1)
- {
-- isTheEmpty = Standard_False;
-- isAddedIntoWL1 = Standard_True;
-+ Standard_Boolean isGood = Standard_True;
-+
-+ if(aWLine1->NbPnts() == 2)
-+ {
-+ const IntSurf_PntOn2S& aPf = aWLine1->Point(1);
-+ const IntSurf_PntOn2S& aPl = aWLine1->Point(2);
-
-- SeekAdditionalPoints(theQuad1, theQuad2, aWLine1->Curve(),
-- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-- theTol2D, aPeriod, 1.0, isTheReverse);
-+ if(aPf.IsSame(aPl, Precision::Confusion()))
-+ isGood = Standard_False;
-+ }
-
-- aWLine1->ComputeVertexParameters(theTol3D);
-- theSlin.Append(aWLine1);
-+ if(isGood)
-+ {
-+ isTheEmpty = Standard_False;
-+ isAddedIntoWL1 = Standard_True;
-+
-+ SeekAdditionalPoints( theQuad1, theQuad2, aWLine1->Curve(),
-+ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-+ theTol2D, aPeriod, 1.0, isTheReverse);
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+ theSlin.Append(aWLine1);
-+ }
- }
- else
- {
-@@ -2267,15 +2336,28 @@
- }
- else if(aWLine2->NbPnts() > 1)
- {
-- isTheEmpty = Standard_False;
-- isAddedIntoWL2 = Standard_True;
-+ Standard_Boolean isGood = Standard_True;
-+ if(aWLine2->NbPnts() == 2)
-+ {
-+ const IntSurf_PntOn2S& aPf = aWLine2->Point(1);
-+ const IntSurf_PntOn2S& aPl = aWLine2->Point(2);
-+
-+ if(aPf.IsSame(aPl, Precision::Confusion()))
-+ isGood = Standard_False;
-+ }
-
-- SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
-- anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-- theTol2D, aPeriod, -1.0, isTheReverse);
-+ if(isGood)
-+ {
-+ isTheEmpty = Standard_False;
-+ isAddedIntoWL2 = Standard_True;
-
-- aWLine2->ComputeVertexParameters(theTol3D);
-- theSlin.Append(aWLine2);
-+ SeekAdditionalPoints(theQuad1, theQuad2, aWLine2->Curve(),
-+ anEquationCoeffs, aNbPoints, aUSurf2f, aUSurf2l,
-+ theTol2D, aPeriod, -1.0, isTheReverse);
-+
-+ aWLine2->ComputeVertexParameters(theTol3D);
-+ theSlin.Append(aWLine2);
-+ }
- }
- else
- {
-@@ -2284,6 +2366,203 @@
- }
- }
-
-+ if(theSlin.Length() > 0)
-+ {
-+ for(Standard_Integer aNumOfLine = 2; aNumOfLine <= theSlin.Length(); aNumOfLine++)
-+ {
-+ const Handle(IntPatch_WLine)& aWLine = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine));
-+
-+ const IntSurf_PntOn2S& aPntFWL = aWLine->Point(1);
-+
-+ Standard_Real aU1 = 0.0, aU2 = 0.0, aV1 = 0.0, aV2 = 0.0;
-+ aPntFWL.Parameters(aU1, aV1, aU2, aV2);
-+
-+ if( IsEqual(aU1, 0.0) || IsEqual(aU1, aPeriod))
-+ {
-+ theSlin.Exchange(1, aNumOfLine);
-+ break;
-+ }
-+ }
-+
-+ for(Standard_Integer aNumOfLine1 = 1; aNumOfLine1 <= theSlin.Length(); aNumOfLine1++)
-+ {
-+ const Handle(IntPatch_WLine)& aWLine1 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine1));
-+
-+ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
-+ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
-+ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
-+
-+ for(Standard_Integer aNPt = 1; aNPt <= theSPnt.Length(); aNPt++)
-+ {
-+ const IntSurf_PntOn2S aPntCur = theSPnt.Value(aNPt).PntOn2S();
-+
-+ if( aPntCur.IsSame(aPntFWL1, Precision::Confusion()) ||
-+ aPntCur.IsSame(aPntLWL1, Precision::Confusion()))
-+ {
-+ theSPnt.Remove(aNPt);
-+ aNPt--;
-+ }
-+ }
-+
-+ Standard_Boolean hasBeenRemoved = Standard_False;
-+ for(Standard_Integer aNumOfLine2 = aNumOfLine1 + 1; aNumOfLine2 <= theSlin.Length(); aNumOfLine2++)
-+ {
-+ const Handle(IntPatch_WLine)& aWLine2 = Handle(IntPatch_WLine)::DownCast(theSlin.Value(aNumOfLine2));
-+
-+ const Standard_Integer aNbPntsWL1 = aWLine1->NbPnts();
-+ const Standard_Integer aNbPntsWL2 = aWLine2->NbPnts();
-+
-+ const IntSurf_PntOn2S& aPntFWL1 = aWLine1->Point(1);
-+ const IntSurf_PntOn2S& aPntLWL1 = aWLine1->Point(aNbPntsWL1);
-+
-+ const IntSurf_PntOn2S& aPntFWL2 = aWLine2->Point(1);
-+ const IntSurf_PntOn2S& aPntLWL2 = aWLine2->Point(aNbPntsWL2);
-+
-+ if(aPntFWL1.IsSame(aPntFWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->InsertBefore(1, aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+
-+ if(aPntFWL1.IsSame(aPntLWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntFWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->InsertBefore(1, aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+
-+ if(aPntLWL1.IsSame(aPntFWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntFWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = 1; aNPt <= aNbPntsWL2; aNPt++)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->Add(aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+
-+ if(aPntLWL1.IsSame(aPntLWL2, Precision::Confusion()))
-+ {
-+ Standard_Real aU11 = 0.0, aU12 = 0.0, aV11 = 0.0, aV12 = 0.0;
-+ Standard_Real aU21 = 0.0, aU22 = 0.0, aV21 = 0.0, aV22 = 0.0;
-+
-+ aPntLWL1.Parameters(aU11, aV11, aU12, aV12);
-+ aPntLWL2.Parameters(aU21, aV21, aU22, aV22);
-+
-+ if( !(IsEqual(fmod(aU11, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU12, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU21, aPeriod), 0.0) ||
-+ IsEqual(fmod(aU22, aPeriod), 0.0) ||
-+ IsEqual(aU11, aUSurf1f) || IsEqual(aU11, aUSurf1l) ||
-+ IsEqual(aU21, aUSurf1f) || IsEqual(aU21, aUSurf1l) ||
-+ IsEqual(aU12, aUSurf2f) || IsEqual(aU12, aUSurf2l) ||
-+ IsEqual(aU22, aUSurf2f) || IsEqual(aU22, aUSurf2l)))
-+ {
-+ aWLine1->ClearVertexes();
-+ for(Standard_Integer aNPt = aNbPntsWL2; aNPt >= 1; aNPt--)
-+ {
-+ const IntSurf_PntOn2S& aPt = aWLine2->Point(aNPt);
-+ aWLine1->Curve()->Add(aPt);
-+ }
-+
-+ aWLine1->ComputeVertexParameters(theTol3D);
-+
-+ theSlin.Remove(aNumOfLine2);
-+ aNumOfLine2--;
-+ hasBeenRemoved = Standard_True;
-+
-+ continue;
-+ }
-+ }
-+ }
-+
-+ if(hasBeenRemoved)
-+ aNumOfLine1--;
-+
-+ //aWLine1->ComputeVertexParameters(theTol3D);
-+ }
-+ }//if(theSlin.Length() > 0)
-+
-+
- return Standard_True;
- }
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.cdl OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.cdl
---- OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.cdl 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.cdl 2015-01-16 12:59:50.000000000 +0300
-@@ -309,9 +309,21 @@
- ---C++: return const&
- returns HCurve2d from Adaptor2d;
-
-- Dump(me)
-+ ClearVertexes(me: mutable)
-+ is static;
-
-- is static;
-+ RemoveVertex(me: mutable;
-+ theIndex : Integer from Standard)
-+ is static;
-+
-+ InsertVertexBefore(me: mutable;
-+ theIndex : Integer from Standard;
-+ thePnt : Point from IntPatch)
-+ is static;
-+
-+ Dump(me)
-+
-+ is static;
-
-
- fields
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.lxx OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.lxx
---- OCCT-6.8.0_SRC/src/IntPatch/IntPatch_WLine.lxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntPatch/IntPatch_WLine.lxx 2015-01-16 12:59:50.000000000 +0300
-@@ -97,3 +97,27 @@
- {
- return svtx(Index);
- }
-+
-+inline void IntPatch_WLine::ClearVertexes()
-+{
-+ svtx.Clear();
-+}
-+
-+inline void IntPatch_WLine::RemoveVertex(const Standard_Integer theIndex)
-+{
-+ if((theIndex < 1) || (theIndex > NbVertex()))
-+ Standard_OutOfRange::Raise("Cannot delete not existing vertex");
-+ svtx.Remove(theIndex);
-+}
-+
-+inline void IntPatch_WLine::InsertVertexBefore( const Standard_Integer theIndex,
-+ const IntPatch_Point& thePnt)
-+{
-+ const Standard_Integer aNbVertexes = NbVertex();
-+ Standard_Integer anIndex = Max(theIndex, 1);
-+
-+ if(anIndex > aNbVertexes)
-+ svtx.Append(thePnt);
-+ else
-+ svtx.InsertBefore(theIndex, thePnt);
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cdl OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cdl
---- OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cdl 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cdl 2015-01-16 13:01:24.000000000 +0300
-@@ -119,6 +119,15 @@
-
- is static;
-
-+ IsSame(me; theOterPoint : PntOn2S from IntSurf;
-+ theTol3D, theTol2D: Real from Standard = 0.0)
-+
-+ ---Purpose: Returns TRUE if 2D- and 3D-coordinates of theOterPoint are equal to
-+ -- corresponding coordinates of me (with given tolerance).
-+ -- If theTol2D == 0.0 we will compare 3D-points only.
-+
-+ returns Boolean from Standard;
-+
-
- fields
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cxx OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cxx
---- OCCT-6.8.0_SRC/src/IntSurf/IntSurf_PntOn2S.cxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntSurf/IntSurf_PntOn2S.cxx 2015-01-16 12:59:51.000000000 +0300
-@@ -49,4 +49,31 @@
- }
-
-
-+Standard_Boolean IntSurf_PntOn2S::IsSame( const IntSurf_PntOn2S& theOterPoint,
-+ const Standard_Real theTol3D,
-+ const Standard_Real theTol2D) const
-+{
-+ if(pt.SquareDistance(theOterPoint.Value()) > theTol3D*theTol3D)
-+ return Standard_False;
-
-+ if(IsEqual(theTol2D, 0.0))
-+ {//We need not compare 2D-coordinates of the points
-+ return Standard_True;
-+ }
-+
-+ Standard_Real aU1 = 0.0, aV1 = 0.0, aU2 = 0.0, aV2 = 0.0;
-+ theOterPoint.Parameters(aU1, aV1, aU2, aV2);
-+
-+ gp_Pnt2d aP1(u1, v1), aP2(aU1, aV1);
-+
-+ if(!aP1.IsEqual(aP2, theTol2D))
-+ return Standard_False;
-+
-+ aP1.SetCoord(u2, v2);
-+ aP2.SetCoord(aU2, aV2);
-+
-+ if(!aP1.IsEqual(aP2, theTol2D))
-+ return Standard_False;
-+
-+ return Standard_True;
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntTools/IntTools_EdgeFace.cxx OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_EdgeFace.cxx
---- OCCT-6.8.0_SRC/src/IntTools/IntTools_EdgeFace.cxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_EdgeFace.cxx 2015-01-16 12:59:51.000000000 +0300
-@@ -1365,20 +1365,27 @@
- (const IntTools_CommonPrt& aCP,
- Standard_Real& aTx)
- {
-- Standard_Real aTF, aTL, Tol, U1f,U1l,V1f,V1l, af, al,aDist2, aMinDist2, aTm, aDist2New;
-- Standard_Real aEpsT;
-+ Standard_Real aTF, aTL, Tol, U1f,U1l,V1f,V1l;
-+ Standard_Real aEpsT, af, al,aDist2, aMinDist2, aTm, aDist2New;
- Standard_Boolean theflag=Standard_False;
- Standard_Integer aNbExt, i, iLower ;
--
-+ GeomAbs_CurveType aType;
-+ //
- aCP.Range1(aTF, aTL);
-+ aType=myC.GetType();
-+ //
- aEpsT=8.e-5;
-+ if (aType==GeomAbs_Line) {
-+ aEpsT=9.e-5;
-+ }
-+ //
- aTm=0.5*(aTF+aTL);
- aDist2=DistanceFunction(aTm);
- aDist2 *= aDist2;
-
- Tol = Precision::PConfusion();
-
-- const Handle(Geom_Curve)& Curve =BRep_Tool::Curve (myC.Edge(), af, al);
-+ const Handle(Geom_Curve)& Curve =BRep_Tool::Curve (myC.Edge(), af, al);
- const Handle(Geom_Surface)& Surface=BRep_Tool::Surface(myS.Face());
-
- Surface->Bounds(U1f,U1l,V1f,V1l);
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/IntTools/IntTools_FaceFace.cxx OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_FaceFace.cxx
---- OCCT-6.8.0_SRC/src/IntTools/IntTools_FaceFace.cxx 2014-11-11 17:46:54.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/IntTools/IntTools_FaceFace.cxx 2015-01-16 12:59:51.000000000 +0300
-@@ -1243,10 +1243,9 @@
- return;
- }
- }
-+ //
- // Do the Curve
--
--
-- typl=L->ArcType();
-+ //
- switch (typl) {
- //########################################
- // Line, Parabola, Hyperbola
-@@ -1276,10 +1275,14 @@
- //
- aNbParts=myLConstruct.NbParts();
- for (i=1; i<=aNbParts; i++) {
-+ Standard_Boolean bFNIt, bLPIt;
-+ //
- myLConstruct.Part(i, fprm, lprm);
--
-- if (!Precision::IsNegativeInfinite(fprm) &&
-- !Precision::IsPositiveInfinite(lprm)) {
-+ //
-+ bFNIt=Precision::IsNegativeInfinite(fprm);
-+ bLPIt=Precision::IsPositiveInfinite(lprm);
-+ //
-+ if (!bFNIt && !bLPIt) {
- //
- IntTools_Curve aCurve;
- //
-@@ -1309,7 +1312,7 @@
- //
- aCurve.SetFirstCurve2d(H1);
- }
--
-+ //
- if(myApprox2) {
- Handle (Geom2d_Curve) C2d;
- BuildPCurves(fprm,lprm,Tolpc,myHS2->ChangeSurface().Surface(),newc,C2d);
-@@ -1325,25 +1328,24 @@
- aCurve.SetSecondCurve2d(H1);
- }
- mySeqOfCurve.Append(aCurve);
-- } // end of if (!Precision::IsNegativeInfinite(fprm) && !Precision::IsPositiveInfinite(lprm))
-+ } //if (!bFNIt && !bLPIt) {
- else {
- // on regarde si on garde
- //
-- Standard_Boolean bFNIt, bLPIt;
- Standard_Real aTestPrm, dT=100.;
--
-- bFNIt=Precision::IsNegativeInfinite(fprm);
-- bLPIt=Precision::IsPositiveInfinite(lprm);
--
-+ //
- aTestPrm=0.;
--
- if (bFNIt && !bLPIt) {
- aTestPrm=lprm-dT;
- }
- else if (!bFNIt && bLPIt) {
- aTestPrm=fprm+dT;
- }
--
-+ else {
-+ // i.e, if (bFNIt && bLPIt)
-+ aTestPrm=IntTools_Tools::IntermediatePoint(-dT, dT);
-+ }
-+ //
- gp_Pnt ptref(newc->Value(aTestPrm));
- //
- GeomAbs_SurfaceType typS1 = myHS1->GetType();
-@@ -1353,8 +1355,7 @@
- typS1 == GeomAbs_SurfaceOfRevolution ||
- typS2 == GeomAbs_SurfaceOfExtrusion ||
- typS2 == GeomAbs_OffsetSurface ||
-- typS2 == GeomAbs_SurfaceOfRevolution)
-- {
-+ typS2 == GeomAbs_SurfaceOfRevolution) {
- Handle(Geom2d_BSplineCurve) H1;
- mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
- continue;
-@@ -1373,7 +1374,7 @@
- mySeqOfCurve.Append(IntTools_Curve(newc, H1, H1));
- }
- }
-- }// end of for (i=1; i<=myLConstruct.NbParts(); i++)
-+ }// for (i=1; i<=aNbParts; i++) {
- }// case IntPatch_Lin: case IntPatch_Parabola: case IntPatch_Hyperbola:
- break;
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/math/math_Recipes.cxx OCCT-6.8.0_SRC-patch/src/math/math_Recipes.cxx
---- OCCT-6.8.0_SRC/src/math/math_Recipes.cxx 2014-11-11 17:47:18.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/math/math_Recipes.cxx 2015-01-16 13:01:25.000000000 +0300
-@@ -177,7 +177,7 @@
- math_Vector& vv,
- Standard_Real TINY) {
-
-- Standard_Integer i, imax=0, j, k;
-+ Standard_Integer i, imax=1, j, k;
- Standard_Real big, dum, sum, temp;
-
- Standard_Integer n = a.RowNumber();
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver_7.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver_7.cxx
---- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver_7.cxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver_7.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -470,13 +470,6 @@
- }
- }
-
--void OpenGl_GraphicDriver::Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag)
--{
-- const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
-- if (aCView)
-- aCView->WS->UseTransparency(AFlag);
--}
--
- // =======================================================================
- // function : InvalidateBVHData
- // purpose :
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver.hxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver.hxx
---- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_GraphicDriver.hxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_GraphicDriver.hxx 2015-01-16 13:01:24.000000000 +0300
-@@ -167,7 +167,6 @@
- Standard_EXPORT void SetClipPlanes (const Graphic3d_CView& theCView);
- Standard_EXPORT void SetCamera (const Graphic3d_CView& theCView);
- Standard_EXPORT void SetVisualisation (const Graphic3d_CView& ACView);
-- Standard_EXPORT void Transparency (const Graphic3d_CView& ACView, const Standard_Boolean AFlag);
- Standard_EXPORT Standard_Boolean View (Graphic3d_CView& ACView);
- Standard_EXPORT void Environment (const Graphic3d_CView& ACView);
- Standard_EXPORT void ZBufferTriedronSetup (const Quantity_NameOfColor XColor = Quantity_NOC_RED, const Quantity_NameOfColor YColor = Quantity_NOC_GREEN, const Quantity_NameOfColor ZColor = Quantity_NOC_BLUE1, const Standard_Real SizeRatio = 0.8, const Standard_Real AxisDiametr = 0.05, const Standard_Integer NbFacettes = 12);
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_View.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_View.cxx
---- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_View.cxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_View.cxx 2015-01-16 12:59:55.000000000 +0300
-@@ -54,7 +54,7 @@
-
- OpenGl_View::OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext,
- OpenGl_StateCounter* theCounter)
--: mySurfaceDetail(Visual3d_TOD_NONE),
-+: mySurfaceDetail(Visual3d_TOD_ALL),
- myBackfacing(0),
- myBgTexture(myDefaultBgTexture),
- myBgGradient(myDefaultBgGradient),
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace_5.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace_5.cxx
---- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace_5.cxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace_5.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -119,7 +119,7 @@
- NamedStatus |= OPENGL_NS_2NDPASSNEED;
- }
-
-- if (myUseTransparency && aProps->trans != 1.0f)
-+ if (aProps->trans != 1.0f)
- {
- // render transparent
- myMatTmp.Diffuse.a() = aProps->trans;
-@@ -349,7 +349,7 @@
- ? TelCullNone
- : (TelCullMode )AspectFace_set->CullingMode();
- if (aCullingMode != TelCullNone
-- && myUseTransparency && !(NamedStatus & OPENGL_NS_2NDPASSDO))
-+ && !(NamedStatus & OPENGL_NS_2NDPASSDO))
- {
- // disable culling in case of translucent shading aspect
- if (AspectFace_set->IntFront().trans != 1.0f)
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.cxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.cxx
---- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.cxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -156,7 +156,6 @@
- myTransientDrawToFront (Standard_True),
- myBackBufferRestored (Standard_False),
- myIsImmediateDrawn (Standard_False),
-- myUseTransparency (Standard_False),
- myUseZBuffer (Standard_False),
- myUseDepthTest (Standard_True),
- myUseGLLight (Standard_True),
-@@ -255,15 +254,6 @@
- return Standard_True;
- }
-
--// =======================================================================
--// function : UseTransparency
--// purpose : call_togl_transparency
--// =======================================================================
--void OpenGl_Workspace::UseTransparency (const Standard_Boolean theFlag)
--{
-- myUseTransparency = theFlag;
--}
--
- //=======================================================================
- //function : ResetAppliedAspect
- //purpose : Sets default values of GL parameters in accordance with default aspects
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.hxx OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.hxx
---- OCCT-6.8.0_SRC/src/OpenGl/OpenGl_Workspace.hxx 2014-11-11 17:46:58.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/OpenGl/OpenGl_Workspace.hxx 2015-01-16 13:01:24.000000000 +0300
-@@ -184,7 +184,6 @@
- Image_PixMap& theImage,
- const Graphic3d_BufferType& theBufferType);
-
-- void UseTransparency (const Standard_Boolean theFlag);
- Standard_Boolean& UseZBuffer() { return myUseZBuffer; }
- Standard_Boolean& UseDepthTest() { return myUseDepthTest; }
- Standard_Boolean& UseGLLight() { return myUseGLLight; }
-@@ -671,7 +670,6 @@
- Standard_Boolean myTransientDrawToFront; //!< optimization flag for immediate mode (to render directly to the front buffer)
- Standard_Boolean myBackBufferRestored;
- Standard_Boolean myIsImmediateDrawn; //!< flag indicates that immediate mode buffer contains some data
-- Standard_Boolean myUseTransparency;
- Standard_Boolean myUseZBuffer;
- Standard_Boolean myUseDepthTest;
- Standard_Boolean myUseGLLight;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ProjLib/ProjLib_ProjectedCurve.cxx OCCT-6.8.0_SRC-patch/src/ProjLib/ProjLib_ProjectedCurve.cxx
---- OCCT-6.8.0_SRC/src/ProjLib/ProjLib_ProjectedCurve.cxx 2014-11-11 17:47:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ProjLib/ProjLib_ProjectedCurve.cxx 2015-01-16 12:59:57.000000000 +0300
-@@ -53,6 +53,7 @@
- #include <Geom2d_TrimmedCurve.hxx>
- #include <ElCLib.hxx>
- #include <GeomLib.hxx>
-+#include <Extrema_ExtPC.hxx>
-
- //=======================================================================
- //function : IsoIsDeg
-@@ -482,7 +483,16 @@
- IsTrimmed[0] = Standard_True;
- f = f + dt;
- myCurve = myCurve->Trim(f, l, Precision::Confusion());
-- Vsingular[0] = ElCLib::Parameter(L, P);
-+ // Searching the parameter on the basis curve for surface of revolution
-+ Extrema_ExtPC anExtr(P, mySurface->BasisCurve()->Curve(), myTolerance);
-+ if (anExtr.IsDone())
-+ {
-+ Standard_Integer anIndex = 1;
-+ while (!anExtr.IsMin(anIndex) && anIndex < anExtr.NbExt()) anIndex++;
-+ Vsingular[0] = anExtr.Point(anIndex).Parameter();
-+ }
-+ else
-+ Vsingular[0] = ElCLib::Parameter(L, P);
- //SingularCase[0] = 3;
- }
-
-@@ -492,7 +502,16 @@
- IsTrimmed[1] = Standard_True;
- l = l - dt;
- myCurve = myCurve->Trim(f, l, Precision::Confusion());
-- Vsingular[1] = ElCLib::Parameter(L, P);
-+ // Searching the parameter on the basis curve for surface of revolution
-+ Extrema_ExtPC anExtr(P, mySurface->BasisCurve()->Curve(), myTolerance);
-+ if (anExtr.IsDone())
-+ {
-+ Standard_Integer anIndex = 1;
-+ while (!anExtr.IsMin(anIndex) && anIndex < anExtr.NbExt()) anIndex++;
-+ Vsingular[1] = anExtr.Point(anIndex).Parameter();
-+ }
-+ else
-+ Vsingular[1] = ElCLib::Parameter(L, P);
- //SingularCase[1] = 4;
- }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/QABugs/QABugs_11.cxx OCCT-6.8.0_SRC-patch/src/QABugs/QABugs_11.cxx
---- OCCT-6.8.0_SRC/src/QABugs/QABugs_11.cxx 2014-11-11 17:47:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/QABugs/QABugs_11.cxx 2015-01-16 13:01:24.000000000 +0300
-@@ -236,10 +236,10 @@
- anAISCtx->AddOrRemoveCurrentObject(aSh4);
-
- //remove all this objects from context
-- anAISCtx->Clear(aSh1, Standard_False);
-- anAISCtx->Clear(aSh2, Standard_False);
-- anAISCtx->Clear(aSh3, Standard_False);
-- anAISCtx->Clear(aSh4, Standard_False);
-+ anAISCtx->Remove (aSh1, Standard_False);
-+ anAISCtx->Remove (aSh2, Standard_False);
-+ anAISCtx->Remove (aSh3, Standard_False);
-+ anAISCtx->Remove (aSh4, Standard_False);
- return 0;
- }
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/SelectMgr/SelectMgr_EntityOwner.cxx OCCT-6.8.0_SRC-patch/src/SelectMgr/SelectMgr_EntityOwner.cxx
---- OCCT-6.8.0_SRC/src/SelectMgr/SelectMgr_EntityOwner.cxx 2014-11-11 17:47:04.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/SelectMgr/SelectMgr_EntityOwner.cxx 2015-01-16 13:00:02.000000000 +0300
-@@ -129,7 +129,7 @@
-
- TopLoc_Location SelectMgr_EntityOwner::Location() const
- {
-- return !HasSelectable() ? TopLoc_Location() : TopLoc_Location(mySelectable->Transformation());
-+ return !HasLocation() ? TopLoc_Location() : TopLoc_Location(mySelectable->Transformation());
- }
-
- void SelectMgr_EntityOwner::ResetLocation()
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cdl OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cdl
---- OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cdl 2014-11-11 17:47:05.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cdl 2015-01-16 13:00:03.000000000 +0300
-@@ -135,6 +135,12 @@
- ---C++: inline
- ---Purpose: Returns (modifiable) the mode for applying
- -- ShapeFix::FixVertexPosition before all fixes, by default False.
-+
-+ FixVertexTolMode (me: mutable) returns Integer;
-+ ---C++: return &
-+ ---C++: inline
-+ ---Purpose: Returns (modifiable) the mode for fixing tolerances of vertices on whole shape
-+ -- after performing all fixes
- fields
-
- myResult : Shape from TopoDS is protected;
-@@ -147,6 +153,7 @@
- myFixWireMode : Integer is protected;
- myFixSameParameterMode : Integer is protected;
- myFixVertexPositionMode : Integer is protected;
-+ myFixVertexTolMode : Integer is protected;
- myStatus : Integer is protected;
-
- end Shape;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cxx OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cxx
---- OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.cxx 2014-11-11 17:47:05.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.cxx 2015-01-16 13:00:03.000000000 +0300
-@@ -53,6 +53,7 @@
- myFixWireMode = -1;
- myFixSameParameterMode = -1;
- myFixVertexPositionMode =0;
-+ myFixVertexTolMode = -1;
- myFixSolid = new ShapeFix_Solid;
- }
-
-@@ -71,6 +72,7 @@
- myFixSameParameterMode = -1;
- myFixSolid = new ShapeFix_Solid;
- myFixVertexPositionMode =0;
-+ myFixVertexTolMode = -1;
- Init(shape);
- }
-
-@@ -97,7 +99,7 @@
- Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
- {
- Standard_Integer savFixSmallAreaWireMode = 0;
--
-+ Standard_Integer savFixVertexTolMode = myFixVertexTolMode;
- Handle(ShapeFix_Face) fft = Handle(ShapeFix_Face)::DownCast( FixFaceTool() );
- if ( !fft.IsNull() ) {
- savFixSmallAreaWireMode = fft->FixSmallAreaWireMode();
-@@ -142,7 +144,7 @@
- TopoDS_Shape shape = myShape;
- Standard_Boolean savFixSameParameterMode = myFixSameParameterMode;
- myFixSameParameterMode = Standard_False;
--
-+ myFixVertexTolMode = Standard_False;
- Standard_Integer aShapesNb = 0;
- for ( TopoDS_Iterator anIter(S); anIter.More(); anIter.Next() )
- ++aShapesNb;
-@@ -159,6 +161,7 @@
- return Standard_False; // aborted execution
-
- myFixSameParameterMode = savFixSameParameterMode;
-+ myFixVertexTolMode = savFixVertexTolMode;
- myShape = shape;
- break;
- }
-@@ -242,6 +245,26 @@
- {
- SameParameter(myResult, Standard_False, theProgress);
- }
-+ if( NeedFix( myFixVertexTolMode))
-+ {
-+ Standard_Integer nbF = 0;
-+ TopExp_Explorer anExpF(myResult, TopAbs_FACE);
-+ for( ; anExpF.More() && nbF <= 1; anExpF.Next())
-+ nbF++;
-+ if( nbF > 1)
-+ {
-+ //fix for bug 0025455
-+ // for case when vertex belong to the different faces it is necessary to check vertices tolerances
-+ //after all fixes.
-+ //This fix it should be performed for example for case when cutting edge was performed.
-+
-+ Handle(ShapeFix_Edge) sfe = FixEdgeTool();
-+ TopExp_Explorer anExpE (myResult, TopAbs_EDGE);
-+ for ( ; anExpE.More(); anExpE.Next())
-+ sfe->FixVertexTolerance( TopoDS::Edge (anExpE.Current()));
-+
-+ }
-+ }
-
- if ( !fft.IsNull() )
- fft->FixSmallAreaWireMode() = savFixSmallAreaWireMode;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.lxx OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.lxx
---- OCCT-6.8.0_SRC/src/ShapeFix/ShapeFix_Shape.lxx 2014-11-11 17:47:05.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ShapeFix/ShapeFix_Shape.lxx 2015-01-16 13:00:03.000000000 +0300
-@@ -122,3 +122,13 @@
- {
- return myFixVertexPositionMode;
- }
-+
-+//=======================================================================
-+//function : FixVertexTolMode
-+//purpose :
-+//=======================================================================
-+
-+inline Standard_Integer& ShapeFix_Shape::FixVertexTolMode()
-+{
-+ return myFixVertexTolMode;
-+}
-\ No newline at end of file
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_Plane.cxx OCCT-6.8.0_SRC-patch/src/V3d/V3d_Plane.cxx
---- OCCT-6.8.0_SRC/src/V3d/V3d_Plane.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_Plane.cxx 2015-01-16 13:00:15.000000000 +0300
-@@ -70,7 +70,6 @@
- Graphic3d_MaterialAspect aPlastic (Graphic3d_NOM_PLASTIC);
- aPlastic.SetColor (theColor);
- aPlastic.SetTransparency (0.5);
-- theView->SetTransparency (Standard_True);
- anAsp->SetFrontMaterial (aPlastic);
- anAsp->SetInteriorStyle (Aspect_IS_HATCH);
- anAsp->SetHatchStyle (Aspect_HS_GRID_DIAGONAL_WIDE);
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_View_2.cxx OCCT-6.8.0_SRC-patch/src/V3d/V3d_View_2.cxx
---- OCCT-6.8.0_SRC/src/V3d/V3d_View_2.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_View_2.cxx 2015-01-16 13:01:25.000000000 +0300
-@@ -21,7 +21,6 @@
- --------------------------------
- 00-09-92 : GG ; Creation.
- 24-12-97 : FMN ; Suppression de GEOMLITE
-- 21-02-00 : GG ; Add Transparency() method
- 23-11-00 : GG ; Add IsActiveLight() and IsActivePlane() methods
-
- ************************************************************************/
-@@ -102,18 +101,6 @@
-
- }
-
--void V3d_View::SetTransparency(const Standard_Boolean AnActivity) {
--
-- MyTransparencyFlag = AnActivity;
-- MyView->SetTransparency(AnActivity);
--}
--
--
--Standard_Boolean V3d_View::Transparency() const {
--
-- return MyTransparencyFlag;
--}
--
- void V3d_View::InitActiveLights() {
- myActiveLightsIterator.Initialize(MyActiveLights);
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_View.cdl OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cdl
---- OCCT-6.8.0_SRC/src/V3d/V3d_View.cdl 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cdl 2015-01-16 13:01:25.000000000 +0300
-@@ -35,8 +35,6 @@
- -- -> Add SetProjModel() method.
- -- VKH - 15/11/99 : G004
- -- -> Add method Dump()
---- GG - IMP210200
---- -> Add Transparency() method
- -- THA - 17/08/00 Thomas HARTL <t-hartl@muenchen.matra-dtv.fr>
- -- -> Add Print method (works only under Windows).
- -- GG - IMP231100
-@@ -415,10 +413,6 @@
- ---Level: Public
- ---Purpose: Returns TRUE when the light is active in this view.
-
-- SetTransparency( me : mutable ; AnActivity : Boolean = Standard_False);
-- ---Level: Public
-- ---Purpose: Activate/Deactivate the transparency in this view.
--
- SetImmediateUpdate(me: mutable; theImmediateUpdate: Boolean from Standard)
- returns Boolean from Standard;
- ---Purpose: sets the immediate update mode and returns the previous one.
-@@ -1141,10 +1135,6 @@
- ---Level: Public
- -- purpose: return the current environment texture used
-
-- Transparency(me) returns Boolean from Standard;
-- ---Level: Public
-- ---Purpose: Returns the transparency activity.
--
- Visualization ( me ) returns TypeOfVisualization from V3d;
- ---Level: Public
- ---Purpose: Returns the current visualisation mode.
-@@ -1638,7 +1628,6 @@
- MyGridEchoStructure : Structure from Graphic3d;
- MyGridEchoGroup : Group from Graphic3d;
-
-- MyTransparencyFlag : Boolean from Standard;
- myImmediateUpdate: Boolean from Standard is protected;
-
- myXscreenAxis : Vector from Graphic3d;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/V3d/V3d_View.cxx OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cxx
---- OCCT-6.8.0_SRC/src/V3d/V3d_View.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/V3d/V3d_View.cxx 2015-01-16 13:00:15.000000000 +0300
-@@ -251,8 +251,6 @@
- aCamera->SetProjectionType ((Type == V3d_ORTHOGRAPHIC)
- ? Graphic3d_Camera::Projection_Orthographic
- : Graphic3d_Camera::Projection_Perspective);
--
-- MyTransparencyFlag = Standard_False;
- }
-
- //=============================================================================
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/ViewerTest/ViewerTest.cxx OCCT-6.8.0_SRC-patch/src/ViewerTest/ViewerTest.cxx
---- OCCT-6.8.0_SRC/src/ViewerTest/ViewerTest.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/ViewerTest/ViewerTest.cxx 2015-01-16 13:01:25.000000000 +0300
-@@ -241,7 +241,7 @@
- Handle(AIS_InteractiveObject)::DownCast (aMap.Find2 (theName));
-
- if (!anOldObj.IsNull())
-- aContextAIS->Clear (anOldObj, Standard_True);
-+ aContextAIS->Remove (anOldObj, Standard_True);
-
- // remove name and old object from map
- aMap.UnBind2 (theName);
-@@ -2751,7 +2751,7 @@
- }
- else
- {
-- anAISContext->Clear (anIO, Standard_False);
-+ anAISContext->Remove (anIO, Standard_False);
- aTexturedIO = new AIS_TexturedShape (DBRep::Get (theArgv[1]));
- GetMapOfAIS().UnBind1 (anIO);
- GetMapOfAIS().UnBind2 (aShapeName);
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ContextView.cxx OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ContextView.cxx
---- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ContextView.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ContextView.cxx 2015-01-16 13:00:15.000000000 +0300
-@@ -57,7 +57,7 @@
- MyVisual (Visual3d_TOV_WIREFRAME),
- MyLights (),
- MyTextureEnv(),
--MySurfaceDetail(Visual3d_TOD_NONE),
-+MySurfaceDetail(Visual3d_TOD_ALL),
- myClipPlanes()
- {
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cdl OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cdl
---- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cdl 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cdl 2015-01-16 13:00:15.000000000 +0300
-@@ -1045,15 +1045,6 @@
- -- or insufficient memory.
- -- Warning: Works only under Windows.
-
-- SetTransparency ( me : mutable;
-- AFlag : Boolean from Standard )
-- is static;
-- ---Level: Advanced
-- ---Purpose: if <AFlag> is Standard_True then the transparency
-- -- is managed in the view <me>.
-- -- Default Standard_False
-- ---Category: Internal methods
--
- ZBufferIsActivated ( me )
- returns Boolean from Standard
- is static;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cxx OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cxx
---- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_View.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_View.cxx 2015-01-16 13:00:15.000000000 +0300
-@@ -805,7 +805,6 @@
- {
- myGraphicDriver->ActivateView (MyCView);
- myGraphicDriver->Background (MyCView);
-- myGraphicDriver->Transparency (MyCView, myViewManager->Transparency());
-
- MyCView.Active = 1;
-
-@@ -1801,22 +1800,6 @@
- }
-
- // =======================================================================
--// function : SetTransparency
--// purpose :
--// =======================================================================
--void Visual3d_View::SetTransparency (const Standard_Boolean theActivity)
--{
-- if (IsDeleted()
-- || !IsDefined()
-- || !IsActive())
-- {
-- return;
-- }
--
-- myGraphicDriver->Transparency (MyCView, theActivity);
--}
--
--// =======================================================================
- // function : SetZBufferActivity
- // purpose :
- // =======================================================================
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cdl OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cdl
---- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cdl 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cdl 2015-01-16 13:00:15.000000000 +0300
-@@ -411,24 +411,6 @@
- -- if <AStructure> is displayed in <AProjector> and TOS_COMPUTED.
- ---Category: Private methods
-
-- Transparency ( me )
-- returns Boolean from Standard
-- is static;
-- ---Level: Advanced
-- ---Purpose: Returns Standard_True if the transparency
-- -- is activated in all activated views.
-- -- Default Standard_False
-- ---Category: Internal methods
--
-- SetTransparency ( me : mutable;
-- AFlag : Boolean from Standard )
-- is static;
-- ---Level: Advanced
-- ---Purpose: if <AFlag> is Standard_True then the transparency
-- -- is managed.
-- -- Default Standard_False
-- ---Category: Internal methods
--
- ZBufferAuto ( me )
- returns Boolean from Standard
- is static;
-@@ -473,7 +455,6 @@
-
- -- advanced
- MyZBufferAuto : Boolean from Standard;
-- MyTransparency : Boolean from Standard;
-
- -- Z layer indexes
- myLayerIds : MapOfInteger from TColStd;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cxx OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cxx
---- OCCT-6.8.0_SRC/src/Visual3d/Visual3d_ViewManager.cxx 2014-11-11 17:47:15.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/src/Visual3d/Visual3d_ViewManager.cxx 2015-01-16 13:01:25.000000000 +0300
-@@ -83,8 +83,7 @@
- Graphic3d_StructureManager (theDriver),
- MyDefinedView (),
- MyViewGenId (View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*(Visual3d_ViewManager::CurrentId ()-1),View_IDMIN+((View_IDMIN+View_IDMAX)/(Visual3d_ViewManager::Limit ()))*Visual3d_ViewManager::CurrentId ()-1),
--MyZBufferAuto (Standard_False),
--MyTransparency (Standard_False)
-+MyZBufferAuto (Standard_False)
- {
- // default layer is always presented in display layer sequence
- // it can not be removed
-@@ -558,24 +557,6 @@
- MyViewGenId.Free(aViewId);
- }
-
--void Visual3d_ViewManager::SetTransparency (const Standard_Boolean AFlag)
--{
-- if (MyTransparency && AFlag) return;
-- if (! MyTransparency && ! AFlag) return;
--
-- for(int i=1; i<=MyDefinedView.Length(); i++)
-- {
-- (MyDefinedView.Value(i))->SetTransparency(AFlag);
-- }
--
-- MyTransparency = AFlag;
--}
--
--Standard_Boolean Visual3d_ViewManager::Transparency () const
--{
-- return (MyTransparency);
--}
--
- void Visual3d_ViewManager::SetZBufferAuto (const Standard_Boolean AFlag)
- {
- if (MyZBufferAuto && AFlag) return;
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/boolean/bcut_complex/N9 OCCT-6.8.0_SRC-patch/tests/boolean/bcut_complex/N9
---- OCCT-6.8.0_SRC/tests/boolean/bcut_complex/N9 2014-11-11 17:47:21.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/boolean/bcut_complex/N9 2015-01-16 13:00:21.000000000 +0300
-@@ -1,8 +1,8 @@
- # Original bug : pro14942
- # Date : 26Aout98
-
--#CR23958 puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
--#CR23958 puts "TODO #22911 ALL: Error : The area of the resulting shape is"
-+puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
-+puts "TODO #22911 ALL: Error : The area of the resulting shape is"
-
- restore [locate_data_file CTO904_pro14942a.rle] a
- restore [locate_data_file pro14942b.rle] b
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/boolean/bfuse_complex/P1 OCCT-6.8.0_SRC-patch/tests/boolean/bfuse_complex/P1
---- OCCT-6.8.0_SRC/tests/boolean/bfuse_complex/P1 2014-11-11 17:47:22.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/boolean/bfuse_complex/P1 2015-01-16 13:00:23.000000000 +0300
-@@ -1,4 +1,5 @@
- puts "TODO ?OCC24157 ALL: Error : The area of the resulting shape is"
-+puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
- # cts17861
-
- restore [locate_data_file CTO900_cts17861a.rle] a
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/boolean/bopcommon_complex/J1 OCCT-6.8.0_SRC-patch/tests/boolean/bopcommon_complex/J1
---- OCCT-6.8.0_SRC/tests/boolean/bopcommon_complex/J1 2014-11-11 17:47:23.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/boolean/bopcommon_complex/J1 2015-01-16 13:00:24.000000000 +0300
-@@ -1,3 +1,6 @@
-+puts "TODO #22911 ALL: Error : The bopcommon is not valid. The area is"
-+puts "TODO #22911 ALL: Error : The area of the resulting shape is"
-+
- restore [locate_data_file a158] a
- restore [locate_data_file b148] b
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/begin OCCT-6.8.0_SRC-patch/tests/bugs/begin
---- OCCT-6.8.0_SRC/tests/bugs/begin 2014-11-11 17:47:29.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/begin 2015-01-16 13:01:25.000000000 +0300
-@@ -253,7 +253,7 @@
- }
-
- # Check if list of xdistcs-command is valid
--proc checkList {List Tolerance D_good} {
-+proc checkList {List Tolerance D_good Limit_Tol} {
- set L1 [llength ${List}]
- set L2 10
- set L3 5
-@@ -266,7 +266,14 @@
- set D [lindex ${List} ${j2}]
- #puts "i=${i} j1=${j1} j2=${j2} T=${T} D=${D}"
- if { [expr abs(${D} - ${D_good})] > ${Tolerance} } {
-- puts "Error: i=${i} T=${T} D=${D}"
-+ puts "Error : T=${T} D=${D}"
-+ }
-+
-+ if { ${Tolerance} > ${Limit_Tol} } {
-+ if { [expr abs(${D} - ${D_good})] > ${Limit_Tol}
-+ && [expr abs(${D} - ${D_good})] <= ${Tolerance} } {
-+ puts "Attention (critical value of tolerance) : T=${T} D=${D}"
-+ }
- }
- }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/heal/bug25455 OCCT-6.8.0_SRC-patch/tests/bugs/heal/bug25455
---- OCCT-6.8.0_SRC/tests/bugs/heal/bug25455 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/heal/bug25455 2015-01-16 13:00:32.000000000 +0300
-@@ -0,0 +1,21 @@
-+puts "============"
-+puts "OCC25455"
-+puts "============"
-+puts ""
-+######################################################
-+# fixshape works at the second attempt
-+######################################################
-+
-+restore [locate_data_file bug25455_rx.brep] rx
-+
-+fixshape rx rx
-+
-+set info [checkshape rx]
-+
-+# Resume
-+puts ""
-+if { [regexp {This shape seems to be valid} ${info}] } {
-+ puts "OK: fixshape works properly"
-+} else {
-+ puts "Error: fixshape works bad"
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_1 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_1
---- OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_1 2014-11-11 17:47:31.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_1 2015-01-16 13:01:25.000000000 +0300
-@@ -22,16 +22,16 @@
- renamevar p_1 result
-
- set status 0
-- set length 110.161
-- set nb_v_good 4
-- set nb_e_good 4
-+ set length 110.167
-+ set nb_v_good 1
-+ set nb_e_good 1
- set nb_w_good 1
- set nb_f_good 0
- set nb_sh_good 0
- set nb_sol_good 0
- set nb_compsol_good 0
- set nb_compound_good 0
-- set nb_shape_good 9
-+ set nb_shape_good 3
- }
-
- if { ${mistake} != 0 } {
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_2 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_2
---- OCCT-6.8.0_SRC/tests/bugs/modalg_1/bug16517_2 2014-11-11 17:47:31.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_1/bug16517_2 2015-01-16 13:01:25.000000000 +0300
-@@ -22,16 +22,16 @@
- renamevar p_2 result
- set status 0
-
-- set length 110.171
-- set nb_v_good 4
-- set nb_e_good 4
-+ set length 110.167
-+ set nb_v_good 1
-+ set nb_e_good 1
- set nb_w_good 1
- set nb_f_good 0
- set nb_sh_good 0
- set nb_sol_good 0
- set nb_compsol_good 0
- set nb_compound_good 0
-- set nb_shape_good 9
-+ set nb_shape_good 3
- }
-
- # Resume
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22864 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22864
---- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22864 2014-11-11 17:47:32.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22864 2015-01-16 13:00:34.000000000 +0300
-@@ -18,15 +18,15 @@
- #
- set status 0
- #
--set nb_v_good 8
--set nb_e_good 12
--set nb_w_good 4
--set nb_f_good 4
-+set nb_v_good 2
-+set nb_e_good 3
-+set nb_w_good 1
-+set nb_f_good 1
- set nb_sh_good 0
- set nb_sol_good 0
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 29
-+set nb_shape_good 8
- #
- set Numbers 11
- #
-@@ -95,7 +95,7 @@
- puts "Faulty ${BugNumber}"
- }
-
--set square 8444.76
-+set square 6606.88
- set 2dviewer 0
-
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22967 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22967
---- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug22967 2014-11-11 17:47:32.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug22967 2015-01-16 13:00:34.000000000 +0300
-@@ -7,7 +7,7 @@
- ###########################################################################################################
-
- set BugNumber OCC22967
--set check_value 3.46945e-006
-+set check_value 8.46459e-006
-
- restore [locate_data_file bug22967_Cylinder_1.brep] b1
- restore [locate_data_file bug22967_Scale_1.brep] b2
-@@ -54,6 +54,6 @@
- puts "OK ${BugNumber}"
- }
-
--set square 669221
-+set square 668843
- set 2dviewer 0
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug23218 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug23218
---- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug23218 2014-11-11 17:47:32.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug23218 2015-01-16 13:00:35.000000000 +0300
-@@ -19,7 +19,7 @@
- puts $result
- puts "Finish project operation ..."
-
--set GoodToleranceReached 2.4950140688989345e-006
-+set GoodToleranceReached 6.3315853638232248e-007
- regexp {Tolerance Reached=([-0-9.+eE]+)} $result full ToleranceReached
-
- proc GetPercent {Value GoodValue} {
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug472_3 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug472_3
---- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug472_3 2014-11-11 17:47:32.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug472_3 2015-01-16 13:00:35.000000000 +0300
-@@ -1,7 +1,7 @@
- #puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
- #puts "TODO OCC12345 ALL: Error : The square of result shape is"
--puts "TODO OCC12345 ALL: Error : The command is not valid"
--puts "TODO OCC12345 ALL: Error : Result shape is WRONG because it must contains"
-+#puts "TODO OCC12345 ALL: Error : The command is not valid"
-+#puts "TODO OCC12345 ALL: Error : Result shape is WRONG because it must contains"
-
- puts "========================"
- puts " OCC472 "
-@@ -20,8 +20,8 @@
-
- bfuse result b1 b2
-
--set nb_v_good 5
--set nb_e_edge 7
--set square 0
-+set nb_v_good 66
-+set nb_e_edge 107
-+set square 31657.5
- set 2dviewer 0
-
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug497_3 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug497_3
---- OCCT-6.8.0_SRC/tests/bugs/modalg_2/bug497_3 2014-11-11 17:47:32.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_2/bug497_3 2015-01-16 13:00:35.000000000 +0300
-@@ -15,5 +15,5 @@
-
- bcut result a_1 a_2
-
--set square 1773.6
-+set square 2471.48
- set 2dviewer 0
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24154 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24154
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24154 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24154 2015-01-16 13:01:25.000000000 +0300
-@@ -12,18 +12,19 @@
- bop b1 b2
- bopcut result
-
--set square 2.68434e+06
-+#set square 2.68434e+06
-+set square 5.21269e+06
- set volume 7.35468e+07
-
- # Analysis of "nbshapes res"
- set nb_v_good 18
--set nb_e_good 27
--set nb_w_good 11
--set nb_f_good 11
-+set nb_e_good 36
-+set nb_w_good 18
-+set nb_f_good 18
- set nb_sh_good 1
- set nb_sol_good 1
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 70
-+set nb_shape_good 93
-
- set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24798 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24798
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24798 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24798 2015-01-16 13:00:37.000000000 +0300
-@@ -12,17 +12,17 @@
- bop b1 b2
- bopcut result
-
--set square 1826.15
-+set square 1826.16
-
- # Analysis of "nbshapes res"
--set nb_v_good 49
--set nb_e_good 72
-+set nb_v_good 44
-+set nb_e_good 67
- set nb_w_good 29
- set nb_f_good 22
- set nb_sh_good 1
- set nb_sol_good 1
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 175
-+set nb_shape_good 165
-
- set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_common OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_common
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_common 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_common 2015-01-16 13:00:37.000000000 +0300
-@@ -43,16 +43,16 @@
- bfillds
- bbop result 0
-
--set square 10008.5
-+set square 10008.9
-
--set nb_v_good 260
--set nb_e_good 306
-+set nb_v_good 140
-+set nb_e_good 186
- set nb_w_good 126
- set nb_f_good 126
- set nb_sh_good 40
- set nb_sol_good 40
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 899
-+set nb_shape_good 659
-
- set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_cut OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_cut
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_cut 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_cut 2015-01-16 13:00:37.000000000 +0300
-@@ -45,14 +45,14 @@
-
- set square 103838
-
--set nb_v_good 280
--set nb_e_good 338
-+set nb_v_good 160
-+set nb_e_good 218
- set nb_w_good 142
- set nb_f_good 80
- set nb_sh_good 3
- set nb_sol_good 3
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 847
-+set nb_shape_good 607
-
- set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_fuse OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_fuse
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24825_fuse 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24825_fuse 2015-01-16 13:00:37.000000000 +0300
-@@ -46,14 +46,14 @@
-
- set square 157211
-
--set nb_v_good 280
--set nb_e_good 338
-+set nb_v_good 160
-+set nb_e_good 218
- set nb_w_good 142
- set nb_f_good 80
- set nb_sh_good 1
- set nb_sol_good 1
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 843
-+set nb_shape_good 603
-
- set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24981 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24981
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug24981 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug24981 2015-01-16 13:00:37.000000000 +0300
-@@ -20,14 +20,14 @@
- bfillds
- bbuild result
-
--set nb_v_good 268
--set nb_e_good 366
-+set nb_v_good 170
-+set nb_e_good 268
- set nb_w_good 243
- set nb_f_good 195
- set nb_sh_good 75
- set nb_sol_good 75
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 1223
-+set nb_shape_good 1027
-
- set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_11 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_11
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_11 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_11 2015-01-16 13:00:37.000000000 +0300
-@@ -6,6 +6,12 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # bopcurves command
-
- restore [locate_data_file bug25292_Input_0.brep] b1
-@@ -21,11 +27,17 @@
- #############################
-
- regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
-+
-+#This value must be equal to the analogical value in bug25292_11 and bug25292_12 of "bugs modalg_5" testgrid.
- set MaxTol 1.e-7
-+
-+#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 4
-+
- if {${Toler} > ${MaxTol}} {
- puts "Error: Tolerance is too big!"
- }
--set GoodNbCurv 7
-+
- if {${NbCurv} != ${GoodNbCurv}} {
- puts "Error: Curve Number is bad!"
- }
-@@ -34,105 +46,54 @@
-
- # 1
- puts ""
--puts "First curve"
-
- mksurface s1 f1
- mksurface s2 f2
-
--dlog reset
--dlog on
--xdistcs c_1 s1 0 1 10
--set Log1 [dlog get]
--
--set List1 [split ${Log1} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List1} ${Tolerance} ${D_good}
--
--# 2
--puts ""
--puts "Second curve"
--
--dlog reset
--dlog on
--xdistcs c_2 s1 0 1 10
--set Log2 [dlog get]
--
--set List2 [split ${Log2} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List2} ${Tolerance} ${D_good}
--
--# 3
--puts ""
--puts "Third curve"
--
--dlog reset
--dlog on
--xdistcs c_3 s1 0 1 10
--set Log3 [dlog get]
--
--set List3 [split ${Log3} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List3} ${Tolerance} ${D_good}
--
--# 4
--puts ""
--puts "Fourth curve"
--
--dlog reset
--dlog on
--xdistcs c_4 s1 0 1 10
--set Log4 [dlog get]
--
--set List4 [split ${Log4} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List4} ${Tolerance} ${D_good}
--
--# 5
--puts ""
--puts "Fifth curve"
--
--dlog reset
--dlog on
--xdistcs c_5 s1 0 1 10
--set Log5 [dlog get]
--
--set List5 [split ${Log5} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List5} ${Tolerance} ${D_good}
--
--# 6
--puts ""
--puts "Sixth curve"
--
--dlog reset
--dlog on
--xdistcs c_6 s1 0 1 10
--set Log6 [dlog get]
--
--set List6 [split ${Log6} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List6} ${Tolerance} ${D_good}
--
--# 7
--puts ""
--puts "Seventh curve"
--
--dlog reset
--dlog on
--xdistcs c_7 s1 0 1 10
--set Log7 [dlog get]
--
--set List7 [split ${Log7} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List7} ${Tolerance} ${D_good}
--
-+for {set i 1} {$i <= ${NbCurv}} {incr i} {
-+ set log [dump c_$i]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+
-+ puts "U1=${U1}"
-+ puts "U2=${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s1 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s2 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+}
-
- v2d
- 2dfit
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_12 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_12
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_12 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_12 2015-01-16 13:00:37.000000000 +0300
-@@ -1,5 +1,3 @@
--puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
--
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -8,6 +6,12 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # bopcurves command
-
- restore [locate_data_file bug25292_Input_0.brep] b1
-@@ -23,11 +27,17 @@
- #############################
-
- regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
-+
-+#This value must be equal to the analogical value in bug25292_11 and bug25292_12 of "bugs modalg_5" testgrid.
- set MaxTol 1.e-7
-+
-+#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 4
-+
- if {${Toler} > ${MaxTol}} {
- puts "Error: Tolerance is too big!"
- }
--set GoodNbCurv 7
-+
- if {${NbCurv} != ${GoodNbCurv}} {
- puts "Error: Curve Number is bad!"
- }
-@@ -36,112 +46,55 @@
-
- # 1
- puts ""
--puts "First curve"
-
- mksurface s1 f1
- mksurface s2 f2
-
--dlog reset
--dlog on
--xdistcs c_1 s1 0 1 10
--set Log1 [dlog get]
--
--set List1 [split ${Log1} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List1} ${Tolerance} ${D_good}
--
--# 2
--puts ""
--puts "Second curve"
--
--dlog reset
--dlog on
--xdistcs c_2 s1 0 1 10
--set Log2 [dlog get]
--
--set List2 [split ${Log2} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List2} ${Tolerance} ${D_good}
--
--# 3
--puts ""
--puts "Third curve"
--
--dlog reset
--dlog on
--xdistcs c_3 s1 0 1 10
--set Log3 [dlog get]
--
--set List3 [split ${Log3} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List3} ${Tolerance} ${D_good}
--
--# 4
--puts ""
--puts "Fourth curve"
--
--dlog reset
--dlog on
--xdistcs c_4 s1 0 1 10
--set Log4 [dlog get]
--
--set List4 [split ${Log4} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List4} ${Tolerance} ${D_good}
--
--# 5
--if { [info exist c_5] } {
--puts ""
--puts "Fifth curve"
--
--dlog reset
--dlog on
--xdistcs c_5 s1 0 1 10
--set Log5 [dlog get]
--
--set List5 [split ${Log5} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List5} ${Tolerance} ${D_good}
--}
--
--# 6
--if { [info exist c_6] } {
--puts ""
--puts "Sixth curve"
--
--dlog reset
--dlog on
--xdistcs c_6 s1 0 1 10
--set Log6 [dlog get]
--
--set List6 [split ${Log6} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List6} ${Tolerance} ${D_good}
-+for {set i 1} {$i <= ${NbCurv}} {incr i} {
-+ set log [dump c_$i]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+
-+ puts "U1=${U1}"
-+ puts "U2=${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s1 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s2 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
- }
-
--# 7
--if { [info exist c_7] } {
--puts ""
--puts "Seventh curve"
--
--dlog reset
--dlog on
--xdistcs c_7 s1 0 1 10
--set Log7 [dlog get]
--
--set List7 [split ${Log7} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List7} ${Tolerance} ${D_good}
--}
--
--
- v2d
- 2dfit
- set only_screen_axo 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_13 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_13
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_13 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_13 2015-01-16 13:00:37.000000000 +0300
-@@ -23,14 +23,14 @@
-
- set square 289.348
-
--set nb_v_good 12
--set nb_e_good 18
-+set nb_v_good 9
-+set nb_e_good 15
- set nb_w_good 10
- set nb_f_good 10
- set nb_sh_good 3
- set nb_sol_good 3
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 57
-+set nb_shape_good 51
-
- set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_14 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_14
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_14 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_14 2015-01-16 13:00:37.000000000 +0300
-@@ -1,7 +1,3 @@
--puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 12 vertices instead of 9"
--puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 18 edges instead of 15"
--puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 57 shapes instead of 51"
--
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -27,14 +23,14 @@
-
- set square 289.348
-
--set nb_v_good 12
--set nb_e_good 18
-+set nb_v_good 9
-+set nb_e_good 15
- set nb_w_good 10
- set nb_f_good 10
- set nb_sh_good 3
- set nb_sol_good 3
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 57
-+set nb_shape_good 51
-
- set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_15 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_15
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_15 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_15 2015-01-16 13:01:25.000000000 +0300
-@@ -6,8 +6,37 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+
- # intersect command
-
-+#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 4
-+
- restore [locate_data_file bug25292_Input_0.brep] b1
- restore [locate_data_file bug25292_Input_1.brep] b2
-
-@@ -20,11 +49,98 @@
- mksurface s2 f2
-
- #################
--intersect i s1 s2
-+intersect res s1 s2
- #################
--
--if { [info exist i_7] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_16 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_16
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_16 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_16 2015-01-16 13:01:25.000000000 +0300
-@@ -1,5 +1,3 @@
--puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
--
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -8,8 +6,37 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+
- # intersect command
-
-+#This value must be equal to the analogical value in bug25292_11, bug25292_12, bug25292_15 and bug25292_16 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 4
-+
- restore [locate_data_file bug25292_Input_0.brep] b1
- restore [locate_data_file bug25292_Input_1.brep] b2
-
-@@ -22,11 +49,99 @@
- mksurface s2 f2
-
- #################
--intersect i s2 s1
-+intersect res s2 s1
- #################
-
--if { [info exist i_7] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_21 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_21
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_21 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_21 2015-01-16 13:00:37.000000000 +0300
-@@ -6,6 +6,12 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # bopcurves command
-
- restore [locate_data_file bug25292_Input_3.brep] b1
-@@ -17,66 +23,74 @@
- copy b2_1 f2
-
- #########################
--set log [bopcurves f1 f2]
-+set log [bopcurves f1 f2 -2d]
- #########################
-
- regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
-+
-+#This value must be equal to the analogical value in bug25292_21 and bug25292_22 of "bugs modalg_5" testgrid.
- set MaxTol 1.e-7
-+
-+#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 2
-+
- if {${Toler} > ${MaxTol}} {
- puts "Error: Tolerance is too big!"
- }
--set GoodNbCurv 3
-+
- if {${NbCurv} != ${GoodNbCurv}} {
- puts "Error: Curve Number is bad!"
- }
-
- #-------------
-
--# 1
--puts ""
--puts "First curve"
--
- mksurface s1 f1
- mksurface s2 f2
-
--dlog reset
--dlog on
--xdistcs c_1 s1 0 1 10
--set Log1 [dlog get]
--
--set List1 [split ${Log1} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List1} ${Tolerance} ${D_good}
--
--# 2
--puts ""
--puts "Second curve"
--
--dlog reset
--dlog on
--xdistcs c_2 s1 0 1 10
--set Log2 [dlog get]
--
--set List2 [split ${Log2} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List2} ${Tolerance} ${D_good}
--
--# 3
--puts ""
--puts "Third curve"
--
--dlog reset
--dlog on
--xdistcs c_3 s1 0 1 10
--set Log3 [dlog get]
--
--set List3 [split ${Log3} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List3} ${Tolerance} ${D_good}
--
-+for {set i 1} {$i <= ${NbCurv}} {incr i} {
-+ set log [dump c_$i]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+
-+ puts "U1=${U1}"
-+ puts "U2=${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s1 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s2 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+}
-
- smallview
- fit
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_22 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_22
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_22 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_22 2015-01-16 13:00:37.000000000 +0300
-@@ -1,5 +1,3 @@
--puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
--
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -8,6 +6,12 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # bopcurves command
-
- restore [locate_data_file bug25292_Input_3.brep] b1
-@@ -19,69 +23,75 @@
- copy b2_1 f2
-
- #########################
--set log [bopcurves f2 f1]
-+set log [bopcurves f2 f1 -2d]
- #########################
-
- regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
-+
-+#This value must be equal to the analogical value in bug25292_21 and bug25292_22 of "bugs modalg_5" testgrid.
- set MaxTol 1.e-7
-+
-+#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 2
-+
- if {${Toler} > ${MaxTol}} {
- puts "Error: Tolerance is too big!"
- }
--set GoodNbCurv 3
-+
- if {${NbCurv} != ${GoodNbCurv}} {
- puts "Error: Curve Number is bad!"
- }
-
- #-------------
-
--# 1
--puts ""
--puts "First curve"
--
- mksurface s1 f1
- mksurface s2 f2
-
--dlog reset
--dlog on
--xdistcs c_1 s1 0 1 10
--set Log1 [dlog get]
--
--set List1 [split ${Log1} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List1} ${Tolerance} ${D_good}
--
--# 2
--puts ""
--puts "Second curve"
--
--dlog reset
--dlog on
--xdistcs c_2 s1 0 1 10
--set Log2 [dlog get]
--
--set List2 [split ${Log2} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List2} ${Tolerance} ${D_good}
--
--# 3
--if { [info exist c_3] } {
--puts ""
--puts "Third curve"
--
--dlog reset
--dlog on
--xdistcs c_3 s1 0 1 10
--set Log3 [dlog get]
--
--set List3 [split ${Log3} {TD= \t\n}]
--set Tolerance 1.0e-7
--set D_good 0.
--checkList ${List3} ${Tolerance} ${D_good}
-+for {set i 1} {$i <= ${NbCurv}} {incr i} {
-+ set log [dump c_$i]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+
-+ puts "U1=${U1}"
-+ puts "U2=${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s1 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s2 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance 1.0e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
- }
-
--
- smallview
- fit
- set only_screen_axo 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_23 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_23
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_23 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_23 2015-01-16 13:00:37.000000000 +0300
-@@ -21,16 +21,17 @@
- bfillds
- bbuild result
-
-+#These values must be equal to the analogical values in bug25292_23 and bug25292_24 of "bugs modalg_5" testgrid.
- set square 31.6797
-
--set nb_v_good 11
--set nb_e_good 20
-+set nb_v_good 10
-+set nb_e_good 19
- set nb_w_good 13
- set nb_f_good 13
- set nb_sh_good 3
- set nb_sol_good 3
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 64
-+set nb_shape_good 62
-
- set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_24 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_24
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_24 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_24 2015-01-16 13:00:37.000000000 +0300
-@@ -1,8 +1,3 @@
--puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 11 vertices instead of 10"
--puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 20 edges instead of 19"
--puts "TODO OCC225404 Debian60-64 Windows: Error : Result shape is WRONG because it must contains 64 shapes instead of 62"
--
--
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -26,16 +21,17 @@
- bfillds
- bbuild result
-
-+#These values must be equal to the analogical values in bug25292_23 and bug25292_24 of "bugs modalg_5" testgrid.
- set square 31.6797
-
--set nb_v_good 11
--set nb_e_good 20
-+set nb_v_good 10
-+set nb_e_good 19
- set nb_w_good 13
- set nb_f_good 13
- set nb_sh_good 3
- set nb_sol_good 3
- set nb_compsol_good 0
- set nb_compound_good 1
--set nb_shape_good 64
-+set nb_shape_good 62
-
- set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_25 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_25
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_25 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_25 2015-01-16 13:01:25.000000000 +0300
-@@ -6,8 +6,37 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+
- # intersect command
-
-+#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 2
-+
- restore [locate_data_file bug25292_Input_3.brep] b1
- restore [locate_data_file bug25292_Input_11.brep] b2
-
-@@ -20,11 +49,100 @@
- mksurface s2 f2
-
- #################
--intersect i s1 s2
-+intersect res s1 s2
- #################
-
--if { [info exist i_3] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-+
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_26 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_26
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_26 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_26 2015-01-16 13:01:25.000000000 +0300
-@@ -1,5 +1,3 @@
--puts "TODO OCC225404 Debian60-64 Windows: Error: Curve Number is bad!"
--
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -8,8 +6,37 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+
- # intersect command
-
-+#This value must be equal to the analogical value in bug25292_21, bug25292_22, bug25292_25 and bug25292_26 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 2
-+
- restore [locate_data_file bug25292_Input_3.brep] b1
- restore [locate_data_file bug25292_Input_11.brep] b2
-
-@@ -22,12 +49,99 @@
- mksurface s2 f2
-
- #################
--intersect i s2 s1
-+intersect res s2 s1
- #################
-
--if { [info exist i_3] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.1e-7
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
--
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_31 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_31
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_31 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_31 2015-01-16 13:01:25.000000000 +0300
-@@ -6,6 +6,12 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # bopcurves command
-
- restore [locate_data_file bug25292_f1.brep] f1
-@@ -16,48 +22,69 @@
- #############################
-
- regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
--set MaxTol 1.e-3
-+
-+#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
-+set MaxTol 3.e-4
-+
-+#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 1
-+
- if {${Toler} > ${MaxTol}} {
- puts "Error: Tolerance is too big!"
- }
--set GoodNbCurv 2
- if {${NbCurv} != ${GoodNbCurv}} {
- puts "Error: Curve Number is bad!!"
- }
-
- #-------------
-
--# 1
--puts ""
--puts "First curve"
--
- mksurface s1 f1
- mksurface s2 f2
-
--dlog reset
--dlog on
--xdistcs c_1 s1 0 1 10
--set Log1 [dlog get]
--
--set List1 [split ${Log1} {TD= \t\n}]
--set Tolerance 1.0e-4
--set D_good 0.
--checkList ${List1} ${Tolerance} ${D_good}
--
--# 2
--puts ""
--puts "Second curve"
--
--dlog reset
--dlog on
--xdistcs c_2 s1 0 1 10
--set Log2 [dlog get]
--
--set List2 [split ${Log2} {TD= \t\n}]
--set Tolerance 1.0e-4
--set D_good 0.
--checkList ${List2} ${Tolerance} ${D_good}
--
-+for {set i 1} {$i <= ${NbCurv}} {incr i} {
-+ set log [dump c_$i]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+
-+ puts "U1=${U1}"
-+ puts "U2=${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s1 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance MaxTol
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s2 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance MaxTol
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+}
-
- smallview
- fit
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_32 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_32
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_32 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_32 2015-01-16 13:01:25.000000000 +0300
-@@ -1,3 +1,5 @@
-+puts "TODO OCC25331 Debian60-64: Error: Tolerance is too big!"
-+
- puts "================"
- puts "OCC25292"
- puts "================"
-@@ -6,6 +8,12 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # bopcurves command
-
- restore [locate_data_file bug25292_f1.brep] f1
-@@ -16,48 +24,69 @@
- #############################
-
- regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
--set MaxTol 1.e-3
-+
-+#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
-+set MaxTol 3.e-4
-+
-+#This value must be equal to the analogical value in bug25292_31 and bug25292_32 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 1
-+
- if {${Toler} > ${MaxTol}} {
- puts "Error: Tolerance is too big!"
- }
--set GoodNbCurv 2
- if {${NbCurv} != ${GoodNbCurv}} {
- puts "Error: Curve Number is bad!!"
- }
-
- #-------------
-
--# 1
--puts ""
--puts "First curve"
--
- mksurface s1 f1
- mksurface s2 f2
-
--dlog reset
--dlog on
--xdistcs c_1 s1 0 1 10
--set Log1 [dlog get]
--
--set List1 [split ${Log1} {TD= \t\n}]
--set Tolerance 1.0e-4
--set D_good 0.
--checkList ${List1} ${Tolerance} ${D_good}
--
--# 2
--puts ""
--puts "Second curve"
--
--dlog reset
--dlog on
--xdistcs c_2 s1 0 1 10
--set Log2 [dlog get]
--
--set List2 [split ${Log2} {TD= \t\n}]
--set Tolerance 1.0e-4
--set D_good 0.
--checkList ${List2} ${Tolerance} ${D_good}
--
-+for {set i 1} {$i <= ${NbCurv}} {incr i} {
-+ set log [dump c_$i]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+
-+ puts "U1=${U1}"
-+ puts "U2=${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s1 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance MaxTol
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs c_$i s2 ${U1} ${U2} 10
-+ set Log2 [dlog get]
-+ set List2 [split ${Log2} {TD= \t\n}]
-+ set Tolerance MaxTol
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List2} ${Tolerance} ${D_good} ${Limit_Tol}
-+}
-
- smallview
- fit
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_33 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_33
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_33 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_33 2015-01-16 13:00:37.000000000 +0300
-@@ -6,8 +6,37 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+
- # intersect command
-
-+#This value must be equal to the analogical value in bug25292_33 and bug25292_34 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 1
-+
- restore [locate_data_file bug25292_f1.brep] f1
- restore [locate_data_file bug25292_f2.brep] f2
-
-@@ -15,11 +44,99 @@
- mksurface s2 f2
-
- #################
--intersect i s1 s2
-+intersect res s1 s2
- #################
-
--if { [info exist i] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_34 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_34
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_34 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_34 2015-01-16 13:00:37.000000000 +0300
-@@ -6,8 +6,37 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+
- # intersect command
-
-+#This value must be equal to the analogical value in bug25292_33 and bug25292_34 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 1
-+
- restore [locate_data_file bug25292_f1.brep] f1
- restore [locate_data_file bug25292_f2.brep] f2
-
-@@ -15,11 +44,99 @@
- mksurface s2 f2
-
- #################
--intersect i s2 s1
-+intersect res s2 s1
- #################
-
--if { [info exist i] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 1.0e-6
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_35 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_35
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_35 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_35 2015-01-16 13:01:25.000000000 +0300
-@@ -6,8 +6,38 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # intersect command for trimmed surfaces
-
-+#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 2
-+
- restore [locate_data_file bug25292_f1.brep] f1
- restore [locate_data_file bug25292_f2.brep] f2
-
-@@ -21,11 +51,99 @@
- trim s2t s2 0. 1.570796326795 -275 275
-
- ###################
--intersect k s1t s2t
-+intersect res s1t s2t
- ###################
-
--if { [info exist k_2] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_36 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_36
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25292_36 2014-11-11 17:47:34.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25292_36 2015-01-16 13:01:25.000000000 +0300
-@@ -6,8 +6,38 @@
- # Face/Face intersection algorithm gives different results for different order of the arguments
- #######################################################################
-
-+proc GetRange { curve } {
-+ global U1
-+ global U2
-+
-+ set log [uplevel dump $curve]
-+
-+ regexp {Degree +([-0-9.+eE]+), +([-0-9.+eE]+) Poles, +([-0-9.+eE]+)} ${log} full Degree Poles KnotsPoles
-+ puts "Degree=${Degree}"
-+ puts "Poles=${Poles}"
-+ puts "KnotsPoles=${KnotsPoles}"
-+ puts ""
-+
-+ set Knot 1
-+ set exp_string "Knots :\n\n +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U1 Mult1
-+
-+ set Knot ${KnotsPoles}
-+ set exp_string " +${Knot} : +(\[-0-9.+eE\]+) +(\[-0-9.+eE\]+)"
-+ regexp ${exp_string} ${log} full U2 Mult2
-+}
-+
-+puts "##############################"
-+puts "#!!!Search \"Attention\" keyword on this web-page for additional checking!!!"
-+puts "##############################"
-+puts ""
-+puts ""
-+
- # intersect command for trimmed surfaces
-
-+#This value must be equal to the analogical value in bug25292_35 and bug25292_36 of "bugs modalg_5" testgrid.
-+set GoodNbCurv 2
-+
- restore [locate_data_file bug25292_f1.brep] f1
- restore [locate_data_file bug25292_f2.brep] f2
-
-@@ -21,11 +51,99 @@
- trim s2t s2 0. 1.570796326795 -275 275
-
- ###################
--intersect k s2t s1t
-+intersect res s2t s1t
- ###################
-
--if { [info exist k_2] } {
-- puts "OK: Curve Number is good!"
-+set che [whatis res]
-+set ind [string first "3d curve" $che]
-+if {${ind} >= 0} {
-+ #Only variable "res" exists
-+
-+ if { $GoodNbCurv == 1 } {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
-+
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res s2 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
- } else {
-- puts "Error: Curve Number is bad!"
-+ set ic 1
-+ set AllowRepeate 1
-+ while { $AllowRepeate != 0 } {
-+ set che [whatis res_$ic]
-+ set ind [string first "3d curve" $che]
-+ if {${ind} < 0} {
-+ set AllowRepeate 0
-+ } else {
-+ set U1 0.0
-+ set U2 0.0
-+
-+ GetRange res_$ic
-+
-+ puts "U1 = ${U1}"
-+ puts "U2 = ${U2}"
-+
-+ if {[expr {$U2 - $U1}] < 1.0e-20} {
-+ puts "Error: Wrong curve's range!"
-+ }
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s1 ${U1} ${U2} 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ dlog reset
-+ dlog on
-+ xdistcs res_$ic s2 0 1 10
-+ set Log1 [dlog get]
-+ set List1 [split ${Log1} {TD= \t\n}]
-+ set Tolerance 3.0e-4
-+ set Limit_Tol 1.0e-7
-+ set D_good 0.
-+ checkList ${List1} ${Tolerance} ${D_good} ${Limit_Tol}
-+
-+ incr ic
-+ }
-+ }
-+
-+ if {[expr {$ic - 1}] == $GoodNbCurv} {
-+ puts "OK: Curve Number is good!"
-+ } else {
-+ puts "Error: Curve Number is bad!"
-+ }
- }
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25432 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25432
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25432 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25432 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,33 @@
-+puts "============"
-+puts "OCC25432"
-+puts "============"
-+puts ""
-+#########################################################################
-+# Wrong result obtained by MakerVolume operator.
-+#########################################################################
-+
-+restore [locate_data_file bug25432_qz.brep] q
-+
-+explode q f
-+mkvolume result q_1 q_2 q_3 q_4 q_5 q_6 q_7 q_8 q_9 q_10 q_11 -ni
-+
-+regexp {Mass +: +([-0-9.+eE]+)} [vprops result] full volume
-+
-+set expected_volume 0.26776
-+set tol_abs_volume 1.0e-4
-+set tol_rel_volume 0.0001
-+checkreal "Volume" ${volume} ${expected_volume} ${tol_abs_volume} ${tol_rel_volume}
-+
-+set square 3.59972
-+
-+set nb_v_good 12
-+set nb_e_good 20
-+set nb_w_good 11
-+set nb_f_good 11
-+set nb_sh_good 2
-+set nb_sol_good 2
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 59
-+
-+set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25449 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25449
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25449 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25449 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,31 @@
-+puts "================"
-+puts "OCC25449"
-+puts "================"
-+puts ""
-+#######################################################################
-+# Excess vertex in result of General Fuse operation.
-+#######################################################################
-+
-+restore [locate_data_file bug25449_fz351.brep] b1
-+restore [locate_data_file bug25449_ez679.brep] b2
-+
-+bclearobjects
-+bcleartools
-+baddobjects b1 b2
-+
-+bfillds -t
-+bbuild result
-+
-+set square 21.1115
-+
-+set nb_v_good 4
-+set nb_e_good 4
-+set nb_w_good 1
-+set nb_f_good 1
-+set nb_sh_good 0
-+set nb_sol_good 0
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 11
-+
-+set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_1 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_1
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_1 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_1 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,26 @@
-+puts "================"
-+puts "OCC25450"
-+puts "================"
-+puts ""
-+####################################
-+# Common operation returns wrong shape
-+####################################
-+
-+restore [locate_data_file bug25450_Shape.brep] a
-+
-+explode a
-+bcommon result a_1 a_2
-+
-+set square 142153
-+
-+set nb_v_good 8
-+set nb_e_good 12
-+set nb_w_good 4
-+set nb_f_good 4
-+set nb_sh_good 1
-+set nb_sol_good 0
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 30
-+
-+set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_2 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_2
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25450_2 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25450_2 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,27 @@
-+puts "================"
-+puts "OCC25450"
-+puts "================"
-+puts ""
-+####################################
-+# Common operation returns wrong shape
-+####################################
-+
-+restore [locate_data_file bug25450_b1.brep] b1
-+restore [locate_data_file bug25450_b2.brep] b2
-+
-+bop b1 b2
-+bopcommon result
-+
-+set square 35538.3
-+
-+set nb_v_good 4
-+set nb_e_good 4
-+set nb_w_good 1
-+set nb_f_good 1
-+set nb_sh_good 1
-+set nb_sol_good 0
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 12
-+
-+set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25456 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25456
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25456 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25456 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,17 @@
-+puts "============"
-+puts "OCC25456"
-+puts "============"
-+puts ""
-+###############################
-+## BOPAlgo_CheckerSI reports an error on the given shape
-+###############################
-+
-+restore [locate_data_file bug25456_shape.brep] a
-+
-+set info [bopcheck a]
-+
-+if {[string compare ${info} " This shape seems to be OK.\n"] == 0} {
-+ puts "OK: BOPAlgo_CheckerSI report is good"
-+} else {
-+ puts "Error : BOPAlgo_CheckerSI report is wrong"
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_1 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_1
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_1 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_1 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,31 @@
-+puts "========"
-+puts "OCC25465"
-+puts "========"
-+puts ""
-+################################################
-+# Excess vertex in the result of CUT operation
-+################################################
-+
-+restore [locate_data_file OCC25465_Gorivo.brep] b1
-+restore [locate_data_file OCC25465_Translation_1.brep] b2
-+
-+explode b1 f
-+explode b2 f
-+set bug_info [bopcurves b1_3 b2_4]
-+bop b1 b2
-+bopcut result
-+
-+# It is strictly forbidden to change nb_v_good and nb_e_good values (see OCC25465)
-+set nb_v_good 11
-+set nb_e_good 17
-+set nb_w_good 8
-+set nb_f_good 8
-+set nb_sh_good 1
-+set nb_sol_good 1
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 47
-+
-+if {[lindex $bug_info 2] != 3} {
-+ puts "ERROR: OCC25465 is reproduced."
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_2 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_2
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25465_2 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25465_2 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,31 @@
-+puts "========"
-+puts "OCC25465"
-+puts "========"
-+puts ""
-+################################################
-+# Excess vertex in the result of CUT operation
-+################################################
-+
-+restore [locate_data_file OCC25465_t_boite1.brep] b1
-+restore [locate_data_file OCC25465_c_cyl.brep] b2
-+
-+explode b1 f
-+explode b2 f
-+set bug_info [bopcurves b1_6 b2_1]
-+bop b1 b2
-+bopcut result
-+
-+# It is strictly forbidden to change nb_v_good and nb_e_good values (see OCC25465)
-+set nb_v_good 13
-+set nb_e_good 20
-+set nb_w_good 11
-+set nb_f_good 8
-+set nb_sh_good 1
-+set nb_sol_good 1
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 55
-+
-+if {[lindex $bug_info 2] != 2} {
-+ puts "ERROR: OCC25465 is reproduced."
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25480 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25480
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25480 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25480 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,26 @@
-+puts "============"
-+puts "OCC25480"
-+puts "============"
-+puts ""
-+#######################################################################
-+# Incorrect result of BRepOffsetAPI_MakePipe
-+#######################################################################
-+
-+restore [locate_data_file bug25480_part1.brep] a
-+restore [locate_data_file bug25480_part2.brep] b
-+
-+pipe result b a 1
-+
-+set square 48441
-+
-+set nb_v_good 224
-+set nb_e_good 392
-+set nb_w_good 196
-+set nb_f_good 196
-+set nb_sh_good 14
-+set nb_sol_good 14
-+set nb_compsol_good 0
-+set nb_compound_good 8
-+set nb_shape_good 1044
-+
-+set 2dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25488 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25488
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25488 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25488 2015-01-16 13:01:25.000000000 +0300
-@@ -0,0 +1,34 @@
-+puts "========"
-+puts "OCC25488"
-+puts "========"
-+puts ""
-+######################################################
-+# Wrong result of two trimmed cylinders intersection
-+######################################################
-+
-+set Tolerance 3.0e-7
-+set D_good 0.
-+set Limit_Tol 1.0e-7
-+
-+restore [locate_data_file OCC25488_sb1_1t.draw] sb1
-+restore [locate_data_file OCC25488_sb2_1t.draw] sb2
-+
-+set bug_info [intersect res sb1 sb2]
-+
-+set i 0
-+while {$i != [llength $bug_info]} {
-+ set res_i [lindex $bug_info $i]
-+ dlog reset
-+ dlog on
-+ xdistcs ${res_i} sb1 0 1 10
-+ set BugLog [dlog get]
-+ set BugList [split ${BugLog} {TD= \t\n}]
-+ checkList ${BugList} ${Tolerance} ${D_good} ${Limit_Tol}
-+ dlog reset
-+ dlog on
-+ xdistcs ${res_i} sb2 0 1 10
-+ set BugLog [dlog get]
-+ set BugList [split ${BugLog} {TD= \t\n}]
-+ checkList ${BugList} ${Tolerance} ${D_good} ${Limit_Tol}
-+ set i [expr {$i + 1}]
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25505 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25505
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25505 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25505 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,39 @@
-+puts "============"
-+puts "OCC25505"
-+puts "============"
-+puts ""
-+###############################
-+## General Fuse produces self-intersection shape
-+###############################
-+
-+restore [locate_data_file bug25505_q.brep] q
-+
-+explode q
-+
-+bclearobjects
-+bcleartools
-+baddobjects q_1 q_2 q_3 q_4
-+bfillds
-+bbuild result
-+
-+set info [bopcheck result]
-+
-+if {[string compare ${info} " This shape seems to be OK.\n"] == 0} {
-+ puts "OK: General Fuse produces good shape"
-+} else {
-+ puts "Error : General Fuse produces self-intersection shape"
-+}
-+
-+set square 68796.4
-+
-+set nb_v_good 14
-+set nb_e_good 21
-+set nb_w_good 9
-+set nb_f_good 9
-+set nb_sh_good 7
-+set nb_sol_good 4
-+set nb_compsol_good 0
-+set nb_compound_good 1
-+set nb_shape_good 65
-+
-+set 3dviewer 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25592 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25592
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25592 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25592 2015-01-16 13:00:38.000000000 +0300
-@@ -0,0 +1,50 @@
-+puts "============"
-+puts "OCC25592"
-+puts "============"
-+puts ""
-+######################################################
-+# Bad result of Fillet operation
-+######################################################
-+
-+restore [locate_data_file bug25592_tshape.brep] t
-+explode t e
-+shape c c
-+add t_4 c
-+add t_6 c
-+fillet r t 30 c
-+explode r f
-+
-+set info1 [bopargcheck r_2 #f]
-+if { [regexp "to be valid for BOP" ${info1}] == 1 } {
-+ puts "1. OK : Good result of Fillet operation\n"
-+} else {
-+ puts "1. Error : Bad result of Fillet operation\n"
-+}
-+
-+set info2 [bopargcheck r_1 #f]
-+if { [regexp "to be valid for BOP" ${info2}] == 1 } {
-+ puts "2. OK : Good result of Fillet operation\n"
-+} else {
-+ puts "2. Error : Bad result of Fillet operation\n"
-+}
-+
-+set info3 [bopargcheck r_6 #f]
-+if { [regexp "to be valid for BOP" ${info3}] == 1 } {
-+ puts "3. OK : Good result of Fillet operation\n"
-+} else {
-+ puts "3. Error : Bad result of Fillet operation\n"
-+}
-+
-+set info4 [bopargcheck r_7 #f]
-+if { [regexp "to be valid for BOP" ${info4}] == 1 } {
-+ puts "4. OK : Good result of Fillet operation\n"
-+} else {
-+ puts "4. Error : Bad result of Fillet operation\n"
-+}
-+
-+set info5 [bopargcheck r_9 #f]
-+if { [regexp "to be valid for BOP" ${info5}] == 1 } {
-+ puts "5. OK : Good result of Fillet operation\n"
-+} else {
-+ puts "5. Error : Bad result of Fillet operation\n"
-+}
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25657 OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25657
---- OCCT-6.8.0_SRC/tests/bugs/modalg_5/bug25657 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/modalg_5/bug25657 2015-01-16 13:01:25.000000000 +0300
-@@ -0,0 +1,25 @@
-+puts "========"
-+puts "OCC25657"
-+puts "========"
-+puts ""
-+###########################################################################################
-+# Bad result of Fillet operation
-+###########################################################################################
-+
-+restore [locate_data_file bug25657_r4.brep] r4
-+explode r4 e
-+shape c c
-+add r4_15 c
-+fillet res r4 20 c
-+
-+explode res f
-+
-+pcurve res_2
-+# exception
-+
-+pcurve res_5
-+# exception
-+
-+smallview
-+fit
-+set only_screen_axo 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_1 OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_1
---- OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_1 2014-11-11 17:47:35.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_1 2015-01-16 13:00:39.000000000 +0300
-@@ -1,3 +1,5 @@
-+puts "TODO CR25432 ALL: Error : The square of result shape is"
-+
- puts "================"
- puts "OCC26"
- puts "================"
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_2 OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_2
---- OCCT-6.8.0_SRC/tests/bugs/moddata_2/bug26_2 2014-11-11 17:47:35.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/moddata_2/bug26_2 2015-01-16 13:00:39.000000000 +0300
-@@ -1,3 +1,5 @@
-+puts "TODO CR25432 ALL: Error : The square of result shape is"
-+
- puts "================"
- puts "OCC26"
- puts "================"
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/moddata_3/bug25494 OCCT-6.8.0_SRC-patch/tests/bugs/moddata_3/bug25494
---- OCCT-6.8.0_SRC/tests/bugs/moddata_3/bug25494 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/moddata_3/bug25494 2015-01-16 13:00:40.000000000 +0300
-@@ -0,0 +1,14 @@
-+puts "================"
-+puts "OCC25494"
-+puts "================"
-+puts ""
-+#######################################################################
-+# Wrong result obtained by projection algorithm
-+#######################################################################
-+
-+restore [locate_data_file bug25494_s.draw] s
-+restore [locate_data_file bug25494_c.draw] c
-+
-+project c2d c s
-+
-+dump c2d
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/vis/bug25492 OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25492
---- OCCT-6.8.0_SRC/tests/bugs/vis/bug25492 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25492 2015-01-16 13:00:41.000000000 +0300
-@@ -0,0 +1,32 @@
-+puts "============"
-+puts "CR25492"
-+puts "============"
-+puts ""
-+#######################################################################
-+# The selected subshape does not have topological relationship
-+# with orginal shape in OCC680
-+#######################################################################
-+pload ALL
-+
-+set isEqual 0
-+vinit
-+box aShape 5 5 5 3 3 3
-+vdisplay aShape
-+vfit
-+vselmode 4 1
-+vselect 100 200
-+vpickselected aSub
-+explode aShape F
-+
-+
-+for {set i 1} {$i <= 6 } {incr i} {
-+ set aRes [compare aShape_$i aSub];
-+ if { [lsearch $aRes equal] != -1} {
-+ set isEqual 1
-+ }
-+}
-+
-+if {$isEqual == 0} {
-+puts "Error: No selected sub-shape was found in exploded sub-shapes"
-+}
-+set only_screen 1
-diff -Naur --exclude=CVS --exclude=.git OCCT-6.8.0_SRC/tests/bugs/vis/bug25528 OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25528
---- OCCT-6.8.0_SRC/tests/bugs/vis/bug25528 1970-01-01 03:00:00.000000000 +0300
-+++ OCCT-6.8.0_SRC-patch/tests/bugs/vis/bug25528 2015-01-16 13:00:41.000000000 +0300
-@@ -0,0 +1,25 @@
-+puts "============"
-+puts "OCC25528"
-+puts "============"
-+puts ""
-+####################################################################################
-+# Visualization - Exception on removing an interactive object from
-+# a local context
-+# vremove -local <obj_name> crashes if there is an opened local context
-+####################################################################################
-+
-+pload ALL
-+box b 1 2 3
-+vinit
-+vdisplay b
-+vfit
-+
-+# opening a local context for local selection
-+vselmode b 4 1
-+# Select a face just to simulate the scenario used in a real application
-+vselect 200 200
-+# This line should not lead to exception
-+vremove -local b
-+
-+# Screenshot should be empty (box removed successfully)
-+vdump ${imagedir}/${casename}.png