From 871e0404dfa0904e11d8b07b16ce53df432e78c4 Mon Sep 17 00:00:00 2001 From: vsr Date: Mon, 19 Jan 2015 13:36:07 +0300 Subject: [PATCH] Add patch for OCCT 6.8.0 --- config_files/patches/OCCT-6.8.0_SRC.patch | 10480 ++++++++++++++++++++ 1 file changed, 10480 insertions(+) create mode 100644 config_files/patches/OCCT-6.8.0_SRC.patch diff --git a/config_files/patches/OCCT-6.8.0_SRC.patch b/config_files/patches/OCCT-6.8.0_SRC.patch new file mode 100644 index 0000000..667301a --- /dev/null +++ b/config_files/patches/OCCT-6.8.0_SRC.patch @@ -0,0 +1,10480 @@ +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 + #include + #include ++#include + #include + #include + +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 ++ + 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 : ++ //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 + #include + #include ++#include + #include + #include + 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 is Standard_True then the transparency +- //! is managed in the view . +- //! Default Standard_False +- Standard_EXPORT void SetTransparency (const Standard_Boolean AFlag) ; +- + //! Returns Standard_True if the ZBuffer is activated + //! in the view 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 is displayed in 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 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 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 + + //#include +@@ -71,28 +50,6 @@ + + #include + +-// 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"<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 : "<DisplayedObjects(theMap); +- cout<<"\tIn Local Context "<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 ; +- // then make sure is displayed and maybe highlighted; +- // Finally, activate selection mode 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 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<DynamicType()->Name()<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 +- 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 ++ 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 : "<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 <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 : "<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 <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 : "<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 <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 : "<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 <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 <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 : "<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 <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 : "<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 : "<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 : "<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 ++ + 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 : ++ //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 +@@ -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 + #include + #include ++#include + + //======================================================================= + //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 + -- -> 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 is Standard_True then the transparency +- -- is managed in the view . +- -- 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 is displayed in 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 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 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 -- 2.39.2