aboutsummaryrefslogtreecommitdiff
path: root/graphics/OpenCASCADE/opencascade-6.3.0sp6.diff
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/OpenCASCADE/opencascade-6.3.0sp6.diff')
-rw-r--r--graphics/OpenCASCADE/opencascade-6.3.0sp6.diff6563
1 files changed, 6563 insertions, 0 deletions
diff --git a/graphics/OpenCASCADE/opencascade-6.3.0sp6.diff b/graphics/OpenCASCADE/opencascade-6.3.0sp6.diff
new file mode 100644
index 000000000000..b192e9e32e79
--- /dev/null
+++ b/graphics/OpenCASCADE/opencascade-6.3.0sp6.diff
@@ -0,0 +1,6563 @@
+diff -Naur OpenCASCADE6.3.0/ros/config.h.in OpenCASCADE6.3.0sp6/ros/config.h.in
+--- OpenCASCADE6.3.0/ros/config.h.in 2008-09-02 11:27:00.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/config.h.in 2009-05-29 09:01:37.000000000 +0200
+@@ -87,6 +87,9 @@
+ /* Define to 1 if you have the <libc.h> header file. */
+ #undef HAVE_LIBC_H
+
++/* Define to 1 if you have the `dl' library (-ldl). */
++#undef HAVE_LIBDL
++
+ /* Define to 1 if you have the `pthread' library (-lpthread). */
+ #undef HAVE_LIBPTHREAD
+
+diff -Naur OpenCASCADE6.3.0/ros/configure.in OpenCASCADE6.3.0sp6/ros/configure.in
+--- OpenCASCADE6.3.0/ros/configure.in 2008-09-09 17:49:10.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/configure.in 2009-05-29 09:01:37.000000000 +0200
+@@ -67,6 +67,12 @@
+ CSF_ThreadLibs_LIB=-lpthread
+ AC_SUBST(CSF_ThreadLibs_LIB)
+
++#-----------------------------------------------------------------------------
++# dl library is required
++#-----------------------------------------------------------------------------
++AC_CHECK_LIB([dl],[dlopen],[],[AC_MSG_ERROR([dl library is required])])
++CSF_SOCKETLibs_LIB=-ldl
++
+ #------------------------------------------------------------------------------
+ # Get Tcl and TK configuration information from tclConfig.sh.
+ #------------------------------------------------------------------------------
+@@ -102,12 +108,15 @@
+ LDFLAGS="$LDFLAGS -lstdc++";;
+ SunOS*) CXXFLAGS="$CXXFLAGS -Usun -DSOLARIS -instances=static"
+ CFLAGS="$CFLAGS -Usun -DSOLARIS -instances=static"
+- LDFLAGS="$LDFLAGS -instances=static";;
++ LDFLAGS="$LDFLAGS -instances=static"
++ CSF_SOCKETLibs_LIB="-lnsl ${CSF_SOCKETLibs_LIB}";;
+ OSF1*) CXXFLAGS="$CXXFLAGS -DDECOSF1 -D__USE_STD_IOSTREAM -D_RWSTD_NO_EXCEPTIONS"
+ CFLAGS="$CFLAGS -std1 -DDECOSF1"
+ LD=$CXX;;
+ *) ;;
+ esac
++AC_SUBST(CSF_SOCKETLibs_LIB)
++
+ AC_SUBST(platform)
+ AC_LANG([C++])
+
+@@ -370,32 +379,6 @@
+ fi
+ AM_CONDITIONAL( HAVE_GL, [test "xyes" = "x$HAVE_GL"] )
+
+-#---------------------------------------------------------------------
+-#
+-# Check for DPS libraries
+-#
+-#
+-#---------------------------------------------------------------------
+-CSF_dpsLibs_INCLUDES="$X_INCLUDE"
+-CSF_dpsLibs_LIB="$X_LIBS"
+-if test "xno" = "x$HAVE_X11"; then
+- HAVE_DPS=no
+-else
+- AC_CHECK_HEADER( [DPS/dpsXclient.h], [HAVE_DPS_INC=yes], [HAVE_DPS_INC=no] )
+- AC_CHECK_LIB( [dps], [DPSInitialize], [HAVE_DPS_LIB=yes], [HAVE_DPS_LIB=no] )
+- HAVE_DPS=yes
+- if test "xno" = "x$HAVE_DPS_INC"; then
+- HAVE_DPS=no
+- AC_MSG_NOTICE("Specify CPPFLAGS=-I<dps_include_dir> to enable DPS support")
+- fi
+- if test "xno" = "x$HAVE_DPS_LIB"; then
+- HAVE_DPS=no
+- AC_MSG_NOTICE("Specify LDFLAGS=-L<dps_lib_dir> to enable DPS support")
+- else
+- CSF_dpsLibs_LIB="$CSF_dpsLibs_LIB -ldps"
+- fi
+-fi
+-
+ CFLAGS="$CFLAGS_save"
+ CXXFLAGS="$CXXFLAGS_save"
+ CPPFLAGS="$CPPFLAGS_save"
+@@ -632,7 +615,6 @@
+ AC_SUBST(LDFLAGS)
+
+
+-CSF_SOCKETLibs_LIB=""
+ CSF_XwLibs_LIB="$X_LIBS"
+
+ AC_SUBST(CSF_SOCKETLibs_LIB)
+diff -Naur OpenCASCADE6.3.0/ros/drv/BRepMesh/BRepMesh_FastDiscret.jxx OpenCASCADE6.3.0sp6/ros/drv/BRepMesh/BRepMesh_FastDiscret.jxx
+--- OpenCASCADE6.3.0/ros/drv/BRepMesh/BRepMesh_FastDiscret.jxx 2008-09-09 17:59:57.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/drv/BRepMesh/BRepMesh_FastDiscret.jxx 2009-04-09 11:54:11.000000000 +0200
+@@ -25,9 +25,6 @@
+ #ifndef _BRepMesh_ListOfVertex_HeaderFile
+ #include <BRepMesh_ListOfVertex.hxx>
+ #endif
+-#ifndef _TColStd_ListOfReal_HeaderFile
+-#include <TColStd_ListOfReal.hxx>
+-#endif
+ #ifndef _BRepMesh_Classifier_HeaderFile
+ #include <BRepMesh_Classifier.hxx>
+ #endif
+diff -Naur OpenCASCADE6.3.0/ros/drv/IntPatch/IntPatch_Intersection_0.cxx OpenCASCADE6.3.0sp6/ros/drv/IntPatch/IntPatch_Intersection_0.cxx
+--- OpenCASCADE6.3.0/ros/drv/IntPatch/IntPatch_Intersection_0.cxx 2008-09-09 18:02:29.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/drv/IntPatch/IntPatch_Intersection_0.cxx 2009-04-09 11:54:18.000000000 +0200
+@@ -75,6 +75,9 @@
+ #ifndef _IntPatch_TheRLineOfIntersection_HeaderFile
+ #include <IntPatch_TheRLineOfIntersection.hxx>
+ #endif
++#ifndef _IntPatch_TheALineToWLineOfIntersection_HeaderFile
++#include <IntPatch_TheALineToWLineOfIntersection.hxx>
++#endif
+ #ifndef _IntPatch_TheArcFunctionOfIntersection_HeaderFile
+ #include <IntPatch_TheArcFunctionOfIntersection.hxx>
+ #endif
+@@ -144,9 +147,6 @@
+ #ifndef _IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection_HeaderFile
+ #include <IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection.hxx>
+ #endif
+-#ifndef _IntPatch_TheALineToWLineOfIntersection_HeaderFile
+-#include <IntPatch_TheALineToWLineOfIntersection.hxx>
+-#endif
+ #ifndef _IntPatch_TheLineConstructorOfIntersection_HeaderFile
+ #include <IntPatch_TheLineConstructorOfIntersection.hxx>
+ #endif
+@@ -192,6 +192,8 @@
+ #define IntPatch_TheWLine_hxx <IntPatch_TheWLineOfIntersection.hxx>
+ #define IntPatch_TheRLine IntPatch_TheRLineOfIntersection
+ #define IntPatch_TheRLine_hxx <IntPatch_TheRLineOfIntersection.hxx>
++#define IntPatch_TheALineToWLine IntPatch_TheALineToWLineOfIntersection
++#define IntPatch_TheALineToWLine_hxx <IntPatch_TheALineToWLineOfIntersection.hxx>
+ #define IntPatch_TheArcFunction IntPatch_TheArcFunctionOfIntersection
+ #define IntPatch_TheArcFunction_hxx <IntPatch_TheArcFunctionOfIntersection.hxx>
+ #define IntPatch_TheSOnBounds IntPatch_TheSOnBoundsOfIntersection
+@@ -272,8 +274,6 @@
+ #define IntPatch_ThePWalkingInterOfThePPInt_hxx <IntPatch_ThePWalkingInterOfThePPIntOfIntersection.hxx>
+ #define IntPatch_PrmPrmIntersection_T3BitsOfThePPInt IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection
+ #define IntPatch_PrmPrmIntersection_T3BitsOfThePPInt_hxx <IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection.hxx>
+-#define IntPatch_TheALineToWLine IntPatch_TheALineToWLineOfIntersection
+-#define IntPatch_TheALineToWLine_hxx <IntPatch_TheALineToWLineOfIntersection.hxx>
+ #define IntPatch_TheLineConstructor IntPatch_TheLineConstructorOfIntersection
+ #define IntPatch_TheLineConstructor_hxx <IntPatch_TheLineConstructorOfIntersection.hxx>
+ #define Handle_IntPatch_SequenceNodeOfSequenceOfPoint Handle_IntPatch_SequenceNodeOfSequenceOfPointOfIntersection
+diff -Naur OpenCASCADE6.3.0/ros/inc/Aspect_GraphicCallbackProc.hxx OpenCASCADE6.3.0sp6/ros/inc/Aspect_GraphicCallbackProc.hxx
+--- OpenCASCADE6.3.0/ros/inc/Aspect_GraphicCallbackProc.hxx 2003-05-30 18:55:57.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/inc/Aspect_GraphicCallbackProc.hxx 2009-10-03 01:00:46.000000000 +0200
+@@ -15,6 +15,13 @@
+ #define OCC_REDRAW_WINDOWAREA 2
+ #define OCC_REDRAW_BITMAP 3
+
++/*
++ This flag, when bitwise OR`ed with the "reason" value,
++ informs the callback that it is called before redrawing the overlayer .
++ Otherwise, the callback is invoked after the overlayer is redrawn.
++*/
++#define OCC_PRE_OVERLAY 0x8000
++
+ typedef struct {
+ int reason;
+ int wsID;
+diff -Naur OpenCASCADE6.3.0/ros/inc/BRepFill_Sweep.hxx OpenCASCADE6.3.0sp6/ros/inc/BRepFill_Sweep.hxx
+--- OpenCASCADE6.3.0/ros/inc/BRepFill_Sweep.hxx 2008-09-09 17:59:36.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/inc/BRepFill_Sweep.hxx 2009-10-03 01:00:51.000000000 +0200
+@@ -28,6 +28,15 @@
+ #ifndef _Standard_Real_HeaderFile
+ #include <Standard_Real.hxx>
+ #endif
++#ifndef _GeomFill_ApproxStyle_HeaderFile
++#include <GeomFill_ApproxStyle.hxx>
++#endif
++#ifndef _GeomAbs_Shape_HeaderFile
++#include <GeomAbs_Shape.hxx>
++#endif
++#ifndef _Standard_Integer_HeaderFile
++#include <Standard_Integer.hxx>
++#endif
+ #ifndef _TopoDS_Shape_HeaderFile
+ #include <TopoDS_Shape.hxx>
+ #endif
+@@ -52,15 +61,6 @@
+ #ifndef _BRepFill_TransitionStyle_HeaderFile
+ #include <BRepFill_TransitionStyle.hxx>
+ #endif
+-#ifndef _GeomFill_ApproxStyle_HeaderFile
+-#include <GeomFill_ApproxStyle.hxx>
+-#endif
+-#ifndef _GeomAbs_Shape_HeaderFile
+-#include <GeomAbs_Shape.hxx>
+-#endif
+-#ifndef _Standard_Integer_HeaderFile
+-#include <Standard_Integer.hxx>
+-#endif
+ class BRepFill_LocationLaw;
+ class BRepFill_SectionLaw;
+ class TopTools_HArray2OfShape;
+@@ -136,7 +136,7 @@
+ //! Degmax : The maximum degree in v requiered on the surface <br>
+ //! Segmax : The maximum number of span in v requiered on <br>
+ //! the surface. <br>
+-Standard_EXPORT void Build(const BRepFill_TransitionStyle Transition = BRepFill_Modified,const GeomFill_ApproxStyle Approx = GeomFill_Location,const GeomAbs_Shape Continuity = GeomAbs_C2,const Standard_Integer Degmax = 10,const Standard_Integer Segmax = 30) ;
++Standard_EXPORT void Build(const BRepFill_TransitionStyle Transition = BRepFill_Modified,const GeomFill_ApproxStyle Approx = GeomFill_Location,const GeomAbs_Shape Continuity = GeomAbs_C2,const Standard_Integer Degmax = 11,const Standard_Integer Segmax = 30) ;
+
+ //! Say if the Shape is Build. <br>
+ Standard_EXPORT Standard_Boolean IsDone() const;
+@@ -176,10 +176,13 @@
+ //
+
+
+-Standard_EXPORT Standard_Boolean BuildWire(const BRepFill_TransitionStyle Transition,const GeomFill_ApproxStyle Approx,const GeomAbs_Shape Continuity,const Standard_Integer Degmax,const Standard_Integer Segmax) ;
++Standard_EXPORT Standard_Boolean CorrectApproxParameters() ;
++
++
++Standard_EXPORT Standard_Boolean BuildWire(const BRepFill_TransitionStyle Transition) ;
+
+
+-Standard_EXPORT Standard_Boolean BuildShell(const BRepFill_TransitionStyle Transition,const Standard_Integer Vf,const Standard_Integer Vl,const GeomFill_ApproxStyle Approx,const GeomAbs_Shape Continuity,const Standard_Integer Degmax,const Standard_Integer Segmax,const Standard_Real ExtendFirst = 0.0,const Standard_Real ExtendLast = 0.0) ;
++Standard_EXPORT Standard_Boolean BuildShell(const BRepFill_TransitionStyle Transition,const Standard_Integer Vf,const Standard_Integer Vl,const Standard_Real ExtendFirst = 0.0,const Standard_Real ExtendLast = 0.0) ;
+
+
+ Standard_EXPORT void PerformCorner(const Standard_Integer Index,const BRepFill_TransitionStyle Transition,const Handle(TopTools_HArray2OfShape)& Bounds) ;
+@@ -204,6 +207,10 @@
+ Standard_Real myTolAngular;
+ Standard_Real myAngMin;
+ Standard_Real myAngMax;
++GeomFill_ApproxStyle myApproxStyle;
++GeomAbs_Shape myContinuity;
++Standard_Integer myDegmax;
++Standard_Integer mySegmax;
+ TopoDS_Shape myShape;
+ Handle_BRepFill_LocationLaw myLoc;
+ Handle_BRepFill_SectionLaw mySec;
+diff -Naur OpenCASCADE6.3.0/ros/inc/BRepMesh_FastDiscret.hxx OpenCASCADE6.3.0sp6/ros/inc/BRepMesh_FastDiscret.hxx
+--- OpenCASCADE6.3.0/ros/inc/BRepMesh_FastDiscret.hxx 2008-09-09 17:59:57.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/inc/BRepMesh_FastDiscret.hxx 2009-10-03 01:00:52.000000000 +0200
+@@ -105,7 +105,6 @@
+ class Geom2d_Curve;
+ class TopoDS_Vertex;
+ class BRepMesh_ListOfVertex;
+-class TColStd_ListOfReal;
+ class BRepMesh_Classifier;
+ class TColStd_ListOfInteger;
+ class BRepMesh_Delaun;
+@@ -285,9 +284,6 @@
+ Standard_EXPORT void Add(const TopoDS_Vertex& theVert,const TopoDS_Face& face,const Handle(BRepAdaptor_HSurface)& S) ;
+
+
+-Standard_EXPORT void InternalVerticesForRectangle(const Handle(BRepAdaptor_HSurface)& caro,BRepMesh_ListOfVertex& inter,const TColStd_ListOfReal& u1pars,const TColStd_ListOfReal& u2pars,const TColStd_ListOfReal& v1pars,const TColStd_ListOfReal& v2pars) ;
+-
+-
+ Standard_EXPORT void InternalVertices(const Handle(BRepAdaptor_HSurface)& caro,BRepMesh_ListOfVertex& inter,const Standard_Real defedge,const BRepMesh_Classifier& classifier) ;
+
+
+diff -Naur OpenCASCADE6.3.0/ros/inc/IntPatch_Intersection.hxx OpenCASCADE6.3.0sp6/ros/inc/IntPatch_Intersection.hxx
+--- OpenCASCADE6.3.0/ros/inc/IntPatch_Intersection.hxx 2008-09-09 18:02:29.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/inc/IntPatch_Intersection.hxx 2009-10-03 01:02:19.000000000 +0200
+@@ -85,6 +85,7 @@
+ class IntPatch_TheALineOfIntersection;
+ class IntPatch_TheWLineOfIntersection;
+ class IntPatch_TheRLineOfIntersection;
++class IntPatch_TheALineToWLineOfIntersection;
+ class IntPatch_TheArcFunctionOfIntersection;
+ class IntPatch_TheSOnBoundsOfIntersection;
+ class IntPatch_ThePathPointOfTheSOnBoundsOfIntersection;
+@@ -108,7 +109,6 @@
+ class IntPatch_TheInterfPolyhedronOfThePPIntOfIntersection;
+ class IntPatch_ThePWalkingInterOfThePPIntOfIntersection;
+ class IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection;
+-class IntPatch_TheALineToWLineOfIntersection;
+ class IntPatch_TheLineConstructorOfIntersection;
+ class IntSurf_ListOfPntOn2S;
+ class IntPatch_Line;
+@@ -260,6 +260,8 @@
+ #define IntPatch_TheWLine_hxx <IntPatch_TheWLineOfIntersection.hxx>
+ #define IntPatch_TheRLine IntPatch_TheRLineOfIntersection
+ #define IntPatch_TheRLine_hxx <IntPatch_TheRLineOfIntersection.hxx>
++#define IntPatch_TheALineToWLine IntPatch_TheALineToWLineOfIntersection
++#define IntPatch_TheALineToWLine_hxx <IntPatch_TheALineToWLineOfIntersection.hxx>
+ #define IntPatch_TheArcFunction IntPatch_TheArcFunctionOfIntersection
+ #define IntPatch_TheArcFunction_hxx <IntPatch_TheArcFunctionOfIntersection.hxx>
+ #define IntPatch_TheSOnBounds IntPatch_TheSOnBoundsOfIntersection
+@@ -340,8 +342,6 @@
+ #define IntPatch_ThePWalkingInterOfThePPInt_hxx <IntPatch_ThePWalkingInterOfThePPIntOfIntersection.hxx>
+ #define IntPatch_PrmPrmIntersection_T3BitsOfThePPInt IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection
+ #define IntPatch_PrmPrmIntersection_T3BitsOfThePPInt_hxx <IntPatch_PrmPrmIntersection_T3BitsOfThePPIntOfIntersection.hxx>
+-#define IntPatch_TheALineToWLine IntPatch_TheALineToWLineOfIntersection
+-#define IntPatch_TheALineToWLine_hxx <IntPatch_TheALineToWLineOfIntersection.hxx>
+ #define IntPatch_TheLineConstructor IntPatch_TheLineConstructorOfIntersection
+ #define IntPatch_TheLineConstructor_hxx <IntPatch_TheLineConstructorOfIntersection.hxx>
+ #define Handle_IntPatch_SequenceNodeOfSequenceOfPoint Handle_IntPatch_SequenceNodeOfSequenceOfPointOfIntersection
+@@ -392,6 +392,8 @@
+ #undef IntPatch_TheWLine_hxx
+ #undef IntPatch_TheRLine
+ #undef IntPatch_TheRLine_hxx
++#undef IntPatch_TheALineToWLine
++#undef IntPatch_TheALineToWLine_hxx
+ #undef IntPatch_TheArcFunction
+ #undef IntPatch_TheArcFunction_hxx
+ #undef IntPatch_TheSOnBounds
+@@ -472,8 +474,6 @@
+ #undef IntPatch_ThePWalkingInterOfThePPInt_hxx
+ #undef IntPatch_PrmPrmIntersection_T3BitsOfThePPInt
+ #undef IntPatch_PrmPrmIntersection_T3BitsOfThePPInt_hxx
+-#undef IntPatch_TheALineToWLine
+-#undef IntPatch_TheALineToWLine_hxx
+ #undef IntPatch_TheLineConstructor
+ #undef IntPatch_TheLineConstructor_hxx
+ #undef Handle_IntPatch_SequenceNodeOfSequenceOfPoint
+diff -Naur OpenCASCADE6.3.0/ros/inc/IntPatch_PrmPrmIntersection.gxx OpenCASCADE6.3.0sp6/ros/inc/IntPatch_PrmPrmIntersection.gxx
+--- OpenCASCADE6.3.0/ros/inc/IntPatch_PrmPrmIntersection.gxx 2008-07-18 16:59:37.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/inc/IntPatch_PrmPrmIntersection.gxx 2009-10-03 01:02:19.000000000 +0200
+@@ -32,14 +32,14 @@
+ Standard_Real& u2,
+ Standard_Real& v2);
+
+-//xf
++
+ static
+ void AdjustOnPeriodic(const TheSurface& Surf1,
+ const TheSurface& Surf2,
+ IntPatch_SequenceOfLine& aSLin);
+-//xt
++
+ //==================================================================================
+-// function : Constructor
++// function :
+ // purpose :
+ //==================================================================================
+ IntPatch_PrmPrmIntersection::IntPatch_PrmPrmIntersection(): done(Standard_False)
+@@ -1677,8 +1677,7 @@
+ }
+ }
+ }
+- //--printf("\n\n1 Dist3[0]=%5.5g,u3[0]=%5.5g,v3[0]=%5.5g , Dist3[1]=%5.5g,u3[1]=%5.5g,v3[1]=%5.5g ,Dist3[2]=%5.5g,u3[2]=%5.5g,v3[2]=%5.5g\n",
+- //-- Dist3[0],u3[0],v3[0] , Dist3[1],u3[1],v3[1] ,Dist3[2],u3[2],v3[2]);
++ //
+ Standard_Real U1_3 = (u3[0]+u3[1]+u3[2])/3.0;
+ Standard_Real V1_3 = (v3[0]+v3[1]+v3[2])/3.0;
+
+@@ -1712,8 +1711,7 @@
+ }
+ }
+ }
+- //printf("\n2 Dist3[0]=%5.5g,u3[0]=%5.5g,v3[0]=%5.5g , Dist3[1]=%5.5g,u3[1]=%5.5g,v3[1]=%5.5g ,Dist3[2]=%5.5g,u3[2]=%5.5g,v3[2]=%5.5g\n",
+- // Dist3[0],u3[0],v3[0] , Dist3[1],u3[1],v3[1] ,Dist3[2],u3[2],v3[2]);
++ //
+ Standard_Real U2_3 = (u3[0]+u3[1]+u3[2])/3.0;
+ Standard_Real V2_3 = (v3[0]+v3[1]+v3[2])/3.0;
+
+@@ -1725,7 +1723,6 @@
+ }
+ }
+ while(ok);
+- //-- cout<<"\n *** "<<Compt<<" Points de *1 ** 2* ds la grille UVP"<<ComptTrouve<<endl; Compt=0;
+ }
+
+ //==================================================================================
+@@ -1764,7 +1761,7 @@
+ if (ClearFlag)
+ SLin.Clear();
+ // modified by NIZHNY-AMV Tue Oct 18 12:37:02 2005.END
+-
++ //
+ //IntPolyh_Intersection Interference(Surf1,NbU1,NbV1,Surf2,NbU2,NbV2);
+ // IntPolyh_Intersection Interference(Surf1, anUpars1, aVpars1,
+ // Surf2, anUpars2, aVpars2);
+@@ -1775,15 +1772,16 @@
+ pInterference = new IntPolyh_Intersection(Surf1,NbU1,NbV1,Surf2,NbU2,NbV2);
+ }
+ else {
+- pInterference = new IntPolyh_Intersection( Surf1, anUpars1, aVpars1,
++ pInterference = new IntPolyh_Intersection(Surf1, anUpars1, aVpars1,
+ Surf2, anUpars2, aVpars2 );
+ }
+ if ( !pInterference ) {
+ done = Standard_False;
+ return;
+ }
++ //
+ IntPolyh_Intersection& Interference = *pInterference;
+-
++ //
+ done = Interference.IsDone();
+ if( !done ) {
+ if ( pInterference ) {
+@@ -1792,7 +1790,7 @@
+ }
+ return;
+ }
+-
++
+ Standard_Real Deflection2 = Deflection*Deflection;
+ Standard_Integer nbLigSec = Interference.NbSectionLines();
+ Standard_Integer nbTanZon = Interference.NbTangentZones();
+@@ -1828,11 +1826,18 @@
+ }
+ }
+ } while(triok==Standard_False);
+-
++ //
+ for( ls = 1; ls <= nbLigSec; ls++) {
+- Standard_Integer nbp = Interference.NbPointsInLine(TabL[ls]);
+- Standard_Integer *TabPtDep = new Standard_Integer [nbp+1];
+- Standard_Integer ilig;
++ Standard_Integer nbp, ilig, *TabPtDep;
++ //
++ nbp = Interference.NbPointsInLine(TabL[ls]);
++ //modified by NIZNHY-PKV Fri Sep 5 15:19:28 2008f
++ if (!nbp) {
++ continue;
++ }
++ //modified by NIZNHY-PKV Fri Sep 5 15:19:31 2008t
++ TabPtDep = new Standard_Integer [nbp+1];
++ //
+ for( ilig = 1; ilig <= nbp; ilig++ )
+ TabPtDep[ilig]=0;
+
+@@ -1864,9 +1869,8 @@
+ Standard_Integer nbps2 = (nbp>3)? (nbp/2) : 1;
+ Standard_Integer NombreDePointsDeDepartDuCheminement = 0;
+ Standard_Boolean lignetrouvee=Standard_False;
+- // const Standard_Integer NbDePointsDeDepartDuChmLimit = 3;
+ const Standard_Integer NbDePointsDeDepartDuChmLimit = 5;
+-
++ //
+ do {
+ NombreDePointsDeDepartDuCheminement++;
+ switch (NombreDePointsDeDepartDuCheminement) {
+@@ -1891,7 +1895,7 @@
+ nbps2 = NombreDePointsDeDepartDuCheminement-3;
+ NombreDePointsDeDepartDuCheminement++;
+ }
+-
++ //
+ if(TabPtDep[nbps2] == 0) {
+ TabPtDep[nbps2] = 1;
+ Interference.GetLinePoint(TabL[ls],nbps2,_x,_y,_z,U1,V1,U2,V2,incidence);
+@@ -1966,7 +1970,6 @@
+ Standard_Boolean bPWIsDone;
+ Standard_Integer iPWNbPoints, aNbPointsVer;
+ Standard_Real aD11, aD12, aD21, aD22, aDx;
+-
+ //
+ bPWIsDone=PW.IsDone();
+ //xt
+@@ -2023,12 +2026,8 @@
+ }
+ }
+ }
+-// if(Point3dDebut.Distance(verPointDebut.Value()) <= TolTangency) {
+-// if(Point3dFin.Distance(verPointFin.Value()) <= TolTangency)
+-// RejetLigne = Standard_True;
+-// }
+ }
+-
++ //
+ if(!RejetLigne) {
+ IntSurf_TypeTrans trans1,trans2;
+ Standard_Real locu,locv;
+@@ -2227,10 +2226,9 @@
+ delete [] TabL;
+
+ }// if nbLigSec >= 1
+-
+- //xf
++ //
+ AdjustOnPeriodic(Surf1, Surf2, SLin);
+- //xt
++ //
+
+ //--------------------------------------------------------------------
+ //-- Calcul des parametres approches a partir des Zones De Tangence --
+diff -Naur OpenCASCADE6.3.0/ros/inc/InterfaceGraphic_tgl_all.h OpenCASCADE6.3.0sp6/ros/inc/InterfaceGraphic_tgl_all.h
+--- OpenCASCADE6.3.0/ros/inc/InterfaceGraphic_tgl_all.h 2003-02-04 07:34:21.000000000 +0100
++++ OpenCASCADE6.3.0sp6/ros/inc/InterfaceGraphic_tgl_all.h 2009-10-03 01:02:23.000000000 +0200
+@@ -9,11 +9,16 @@
+ #ifndef INTERFACEGRAPHIC_TGL_ALL_H
+ #define INTERFACEGRAPHIC_TGL_ALL_H
+
+-typedef int Tint;
+-typedef float Tfloat;
+-typedef char Tchar;
+-typedef char Tbool;
+-typedef unsigned int Tuint;
++typedef int Tint;
++typedef float Tfloat;
++/* PCD 04/07/07 */
++typedef double Tdouble;
++/* Tchar is treated as a signed char in visualization code,
++therefore it should be made signed explicitly, as on Linux
++-funsigned-char option is specified when building OCCT */
++typedef signed char Tchar;
++typedef char Tbool;
++typedef unsigned int Tuint;
+
+ #define TGL_SP 1
+ #define TGL_DP 0
+@@ -37,6 +42,7 @@
+ #define TNotDone 0
+
+ typedef Tfloat Tmatrix3[4][4];
++
+ typedef enum
+ {
+ TPreConcatenate,
+diff -Naur OpenCASCADE6.3.0/ros/inc/WNT_Window.hxx OpenCASCADE6.3.0sp6/ros/inc/WNT_Window.hxx
+--- OpenCASCADE6.3.0/ros/inc/WNT_Window.hxx 2008-09-09 18:08:22.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/inc/WNT_Window.hxx 2009-10-03 01:03:31.000000000 +0200
+@@ -104,6 +104,12 @@
+ //! Warning: The position and size for the creation of the window <br>
+ //! are defined in Device Screen Unit (DSU) <br>
+ //! floating [0,1] space. <br>
++//! <br>
++//! As 3D view window is the main purpose of this class, <br>
++//! and 3D view does not need its background to be drawn <br>
++//! by the system, by default the window background is not drawn. <br>
++//! This can be overridden by calling ClearFlags( WDF_NOERASEBKGRND ). <br>
++//! See also WNT_WndProc.cxx and InterfaceGraphic_WNT.hxx. <br>
+ class WNT_Window : public Aspect_Window {
+
+ public:
+@@ -256,9 +262,13 @@
+ Standard_EXPORT void SetPos(const Standard_Integer X,const Standard_Integer Y,const Standard_Integer X1,const Standard_Integer Y1) ;
+
+ //! Sets user defined flags in the extra window data area. <br>
++//! Supported flags WDF_* are listed in InterfaceGraphic_WNT.hxx <br>
++//! In particular, the window backround can be turned off using this method. <br>
+ Standard_EXPORT void SetFlags(const Standard_Integer aFlags) ;
+
+ //! Reset specified flags in the extra window data area. <br>
++//! Supported flags WDF_* are listed in InterfaceGraphic_WNT.hxx <br>
++//! In particular, the window backround can be turned on using this method. <br>
+ Standard_EXPORT void ResetFlags(const Standard_Integer aFlags) ;
+
+ //! Returns the BackingStore capability for this Window. <br>
+diff -Naur OpenCASCADE6.3.0/ros/src/Aspect/Aspect_GraphicCallbackProc.hxx OpenCASCADE6.3.0sp6/ros/src/Aspect/Aspect_GraphicCallbackProc.hxx
+--- OpenCASCADE6.3.0/ros/src/Aspect/Aspect_GraphicCallbackProc.hxx 2003-05-30 18:55:57.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/Aspect/Aspect_GraphicCallbackProc.hxx 2009-10-03 01:03:55.000000000 +0200
+@@ -15,6 +15,13 @@
+ #define OCC_REDRAW_WINDOWAREA 2
+ #define OCC_REDRAW_BITMAP 3
+
++/*
++ This flag, when bitwise OR`ed with the "reason" value,
++ informs the callback that it is called before redrawing the overlayer .
++ Otherwise, the callback is invoked after the overlayer is redrawn.
++*/
++#define OCC_PRE_OVERLAY 0x8000
++
+ typedef struct {
+ int reason;
+ int wsID;
+diff -Naur OpenCASCADE6.3.0/ros/src/BOPTools/BOPTools_Tools.cxx OpenCASCADE6.3.0sp6/ros/src/BOPTools/BOPTools_Tools.cxx
+--- OpenCASCADE6.3.0/ros/src/BOPTools/BOPTools_Tools.cxx 2004-08-06 19:11:25.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BOPTools/BOPTools_Tools.cxx 2009-10-03 01:03:55.000000000 +0200
+@@ -464,16 +464,27 @@
+ //
+ aNewSR=aSR;
+ //
++ //modified by NIZNHY-PKV Tue Feb 10 08:47:03 2009f
++ aBC.Initialize(aE1);
++ aCT=aBC.GetType();
++ if (aCT==GeomAbs_Line) {
++ return;
++ }
++ //modified by NIZNHY-PKV Tue Feb 10 08:47:06 2009t
++ //
+ dT=Precision::PConfusion();
+ aTF=aSR.First();
+ aTL=aSR.Last();
+ //
++ //modified by NIZNHY-PKV Tue Feb 10 08:47:39 2009f
++ /*
+ aBC.Initialize(aE1);
+ aCT=aBC.GetType();
++ */
++ //modified by NIZNHY-PKV Tue Feb 10 08:47:43 2009t
+ //
+ aTolE1=BRep_Tool::Tolerance(aE1);
+ aTolE2=BRep_Tool::Tolerance(aE2);
+-
+ //
+ for(i=0; i<2; ++i) {
+ aRes = 2.*(aTolE1 + aTolE2);
+diff -Naur OpenCASCADE6.3.0/ros/src/BOPTools/BOPTools_Tools3D_1.cxx OpenCASCADE6.3.0sp6/ros/src/BOPTools/BOPTools_Tools3D_1.cxx
+--- OpenCASCADE6.3.0/ros/src/BOPTools/BOPTools_Tools3D_1.cxx 2008-05-08 15:08:45.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BOPTools/BOPTools_Tools3D_1.cxx 2009-10-03 01:03:55.000000000 +0200
+@@ -106,7 +106,6 @@
+ //
+ aETol = BRep_Tool::Tolerance(aE);
+ aFTol = BRep_Tool::Tolerance(aF);
+- //modified by NIZNHY-PKV Fri Mar 28 15:09:30 2008f
+ // pkv NPAL19220
+ GeomAdaptor_Surface aGAS(aS);
+ aTS=aGAS.GetType();
+@@ -115,12 +114,10 @@
+ aFTol=aETol;
+ }
+ }
+- //modified by NIZNHY-PKV Fri Mar 28 15:09:43 2008t
+- if( aETol > 1.e-5 && aFTol > 1.e-5 ) {
+- //modified by NIZNHY-PKV Fri Mar 28 15:09:52 2008f
+- //GeomAdaptor_Surface aGAS(aS);
+- //aTS=aGAS.GetType();
+- //modified by NIZNHY-PKV Fri Mar 28 15:10:01 2008t
++ //modified by NIZNHY-PKV Thu Mar 19 14:15:15 2009f
++ if( aETol > 1.e-5 || aFTol > 1.e-5 ) {
++ //if( aETol > 1.e-5 && aFTol > 1.e-5 ) {
++ //modified by NIZNHY-PKV Thu Mar 19 14:15:24 2009t
+ //pkv/103/D7
+ if(aTS!=GeomAbs_Sphere) {
+ gp_Vec2d transVec( aDP );
+diff -Naur OpenCASCADE6.3.0/ros/src/BRep/BRep_Tool.cxx OpenCASCADE6.3.0sp6/ros/src/BRep/BRep_Tool.cxx
+--- OpenCASCADE6.3.0/ros/src/BRep/BRep_Tool.cxx 2008-06-27 17:50:44.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BRep/BRep_Tool.cxx 2009-10-03 01:03:55.000000000 +0200
+@@ -28,6 +28,7 @@
+ #include <ElSLib.hxx>
+ #include <Geom_Plane.hxx>
+ #include <Geom_RectangularTrimmedSurface.hxx>
++#include <Geom_OffsetSurface.hxx>
+ #include <Geom_TrimmedCurve.hxx>
+ #include <Geom2d_TrimmedCurve.hxx>
+ #include <ProjLib_ProjectedCurve.hxx>
+@@ -41,6 +42,11 @@
+ #include <Poly_Polygon2D.hxx>
+ #include <Poly_PolygonOnTriangulation.hxx>
+
++//modified by NIZNHY-PKV Fri Oct 17 14:13:29 2008f
++static
++ Standard_Boolean IsPlane(const Handle(Geom_Surface)& aS);
++//modified by NIZNHY-PKV Fri Oct 17 14:13:33 2008t
++//
+ //=======================================================================
+ //function : Surface
+ //purpose : Returns the geometric surface of the face. Returns
+@@ -698,6 +704,12 @@
+ const Handle(Geom_Surface)& S,
+ const TopLoc_Location& L)
+ {
++ //modified by NIZNHY-PKV Fri Oct 17 12:16:58 2008f
++ if (IsPlane(S)) {
++ return Standard_False;
++ }
++ //modified by NIZNHY-PKV Fri Oct 17 12:16:54 2008t
++ //
+ TopLoc_Location l = L.Predivided(E.Location());
+
+ // find the representation
+@@ -1496,13 +1508,11 @@
+ Standard_NoSuchObject::Raise("BRep_Tool:: no parameters on surface");
+ return gp_Pnt2d(0,0);
+ }
+-
+ //=======================================================================
+ //function : IsClosed
+ //purpose : Returns <True> if S if flaged Closed, if S is a
+ // Solid,Shell or Compound returns <True> is S has no free boundaries.
+ //=======================================================================
+-
+ Standard_Boolean BRep_Tool::IsClosed(const TopoDS_Shape& S)
+ {
+ if (S.ShapeType() == TopAbs_SHELL || S.ShapeType() == TopAbs_SOLID ||
+@@ -1519,3 +1529,33 @@
+ }
+ return (S.Closed());
+ }
++
++//modified by NIZNHY-PKV Fri Oct 17 14:09:58 2008 f
++//=======================================================================
++//function : IsPlane
++//purpose :
++//=======================================================================
++Standard_Boolean IsPlane(const Handle(Geom_Surface)& aS)
++{
++ Standard_Boolean bRet;
++ Handle(Geom_Plane) aGP;
++ Handle(Geom_RectangularTrimmedSurface) aGRTS;
++ Handle(Geom_OffsetSurface) aGOFS;
++ //
++ aGRTS=Handle(Geom_RectangularTrimmedSurface)::DownCast(aS);
++ aGOFS=Handle(Geom_OffsetSurface)::DownCast(aS);
++ //
++ if(!aGOFS.IsNull()) {
++ aGP=Handle(Geom_Plane)::DownCast(aGOFS->BasisSurface());
++ }
++ else if(!aGRTS.IsNull()) {
++ aGP=Handle(Geom_Plane)::DownCast(aGRTS->BasisSurface());
++ }
++ else {
++ aGP=Handle(Geom_Plane)::DownCast(aS);
++ }
++ //
++ bRet=!aGP.IsNull();
++ //
++ return bRet;
++}
+diff -Naur OpenCASCADE6.3.0/ros/src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cxx OpenCASCADE6.3.0sp6/ros/src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cxx
+--- OpenCASCADE6.3.0/ros/src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cxx 2006-08-11 19:00:41.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BRepBuilderAPI/BRepBuilderAPI_Sewing.cxx 2009-10-03 08:33:16.000000000 +0200
+@@ -4331,11 +4331,17 @@
+ Standard_Real first2d=0., last2d=0.,first2d1=0,last2d1=0.;
+ Handle(Geom2d_Curve) c2d = BRep_Tool::CurveOnSurface(sec, fac, first2d, last2d);
+ if (c2d.IsNull()) continue;
+-
++ Handle(Geom2d_Curve) c2d1;
+ Standard_Boolean isSeam = BRep_Tool::IsClosed(sec,fac);
++
++ //gka - Convert to BSpline was commented because
++ //it is not necessary to create BSpline instead of Lines or cIrcles.
++ //Besides after conversion circles to BSpline
++ //it is necessary to recompute parameters of cutting because paramerization of created
++ //BSpline curve differs from parametrization of circle.
+
+ // Convert pcurve to BSpline
+- Handle(Geom2d_BSplineCurve) c2dBSP,c2dBSP1;
++ /*Handle(Geom2d_BSplineCurve) c2dBSP,c2dBSP1;
+ if (c2d->IsKind(STANDARD_TYPE(Geom2d_BSplineCurve))) {
+ c2dBSP = Handle(Geom2d_BSplineCurve)::DownCast(c2d);
+ }
+@@ -4347,34 +4353,37 @@
+ }
+ else c2dBSP = Geom2dConvert::CurveToBSplineCurve(c2d);
+ }
+- if (c2dBSP.IsNull()) continue;
++ if (c2dBSP.IsNull()) continue;*/
+ //gka fix for bug OCC12203 21.04.06 addition second curve for seam edges
++
+ if(isSeam)
+ {
+ TopoDS_Edge secRev = TopoDS::Edge(sec.Reversed());
+
+- Handle(Geom2d_Curve) c2d1 = BRep_Tool::CurveOnSurface(secRev, fac, first2d1, last2d1);
++ c2d1 = BRep_Tool::CurveOnSurface(secRev, fac, first2d1, last2d1);
+ if (c2d1.IsNull()) continue;
+- if (c2d1->IsKind(STANDARD_TYPE(Geom2d_BSplineCurve))) {
++
++ /*if (c2d1->IsKind(STANDARD_TYPE(Geom2d_BSplineCurve))) {
+ c2dBSP1 = Handle(Geom2d_BSplineCurve)::DownCast(c2d1);
+ }
+ else {
+ if (first > (c2d1->FirstParameter() + Precision::PConfusion()) ||
+ last < (c2d1->LastParameter() - Precision::PConfusion())) {
+ Handle(Geom2d_TrimmedCurve) TC = new Geom2d_TrimmedCurve(c2d1, first, last);
+- c2dBSP1 = Geom2dConvert::CurveToBSplineCurve(TC);
++ //c2dBSP1 = Geom2dConvert::CurveToBSplineCurve(TC);
+ }
+- else c2dBSP1 = Geom2dConvert::CurveToBSplineCurve(c2d);
++ //else c2dBSP1 = Geom2dConvert::CurveToBSplineCurve(c2d);
+
+- }
++ }*/
+ }
+
+- first2d = c2dBSP->FirstParameter();
++ /*first2d = c2dBSP->FirstParameter();
+ last2d = c2dBSP->LastParameter();
++
+ if(!c2dBSP1.IsNull()) {
+ first2d1 = c2dBSP1->FirstParameter();
+ last2d1 = c2dBSP1->LastParameter();
+- }
++ }*/
+
+ // Update cutting sections
+ Handle(Geom2d_Curve) c2dNew,c2d1New;
+@@ -4386,23 +4395,24 @@
+ BRep_Tool::Range(edge, par1, par2);
+
+ // Cut BSpline pcurve
+- try {
+-
+- c2dNew = Handle(Geom2d_Curve)::DownCast(c2dBSP->Copy());
+- Handle(Geom2d_BSplineCurve)::DownCast(c2dNew)->Segment(Max(first2d,par1),Min(par2,last2d));
+- if(!c2dBSP1.IsNull()) {
+- c2d1New = Handle(Geom2d_Curve)::DownCast(c2dBSP1->Copy());
+- Handle(Geom2d_BSplineCurve)::DownCast(c2d1New)->Segment(Max(first2d1,par1),Min(par2,last2d1));
++ // try {
++ c2dNew = Handle(Geom2d_Curve)::DownCast(c2d->Copy());
++ //c2dNew = Handle(Geom2d_Curve)::DownCast(c2dBSP->Copy());
++ //Handle(Geom2d_BSplineCurve)::DownCast(c2dNew)->Segment(Max(first2d,par1),Min(par2,last2d));
++ if(!c2d1.IsNull()) { //if(!c2dBSP1.IsNull()) {
++ c2d1New = Handle(Geom2d_Curve)::DownCast(c2d1->Copy());
++ //c2d1New = Handle(Geom2d_Curve)::DownCast(c2dBSP1->Copy());
++ //Handle(Geom2d_BSplineCurve)::DownCast(c2d1New)->Segment(Max(first2d1,par1),Min(par2,last2d1));
+ }
+- }
+- catch (Standard_Failure) {
++ //}
++ /*catch (Standard_Failure) {
+ #ifdef DEB
+ cout << "Exception in CreateSections: segment [" << par1 << "," << par2 << "]: ";
+ Standard_Failure::Caught()->Print(cout); cout << endl;
+ #endif
+ Handle(Geom2d_TrimmedCurve) c2dT = new Geom2d_TrimmedCurve(c2dNew,Max(first2d,par1),Min(par2,last2d));
+ c2dNew = c2dT;
+- }
++ }*/
+
+
+ if(!isSeam && c2d1New.IsNull())
+diff -Naur OpenCASCADE6.3.0/ros/src/BRepFill/BRepFill_CompatibleWires.cxx OpenCASCADE6.3.0sp6/ros/src/BRepFill/BRepFill_CompatibleWires.cxx
+--- OpenCASCADE6.3.0/ros/src/BRepFill/BRepFill_CompatibleWires.cxx 2006-12-08 17:05:41.000000000 +0100
++++ OpenCASCADE6.3.0sp6/ros/src/BRepFill/BRepFill_CompatibleWires.cxx 2009-10-03 01:03:56.000000000 +0200
+@@ -562,7 +562,38 @@
+ }
+ }
+
++static void BuildConnectedEdges(const TopoDS_Wire& aWire,
++ const TopoDS_Edge& StartEdge,
++ const TopoDS_Vertex& StartVertex,
++ TopTools_ListOfShape& ConnectedEdges)
++{
++ TopTools_IndexedDataMapOfShapeListOfShape MapVE;
++ TopExp::MapShapesAndAncestors(aWire, TopAbs_VERTEX, TopAbs_EDGE, MapVE);
++ TopoDS_Edge CurEdge = StartEdge;
++ TopoDS_Vertex CurVertex = StartVertex;
++ TopoDS_Vertex Origin, V1, V2;
++ TopExp::Vertices(StartEdge, V1, V2);
++ Origin = (V1.IsSame(StartVertex))? V2 : V1;
+
++ for (;;)
++ {
++ TopTools_ListIteratorOfListOfShape itE( MapVE.FindFromKey(CurVertex) );
++ for (; itE.More(); itE.Next())
++ {
++ TopoDS_Edge anEdge = TopoDS::Edge(itE.Value());
++ if (!anEdge.IsSame(CurEdge))
++ {
++ ConnectedEdges.Append(anEdge);
++ TopExp::Vertices(anEdge, V1, V2);
++ CurVertex = (V1.IsSame(CurVertex))? V2 : V1;
++ CurEdge = anEdge;
++ break;
++ }
++ }
++ if (CurVertex.IsSame(Origin))
++ break;
++ }
++}
+
+ //=======================================================================
+ //function : BRepFill_CompatibleWires
+@@ -994,34 +1025,32 @@
+
+ BRepLib_MakeWire MW;
+
+- for(anExp.Init(wire); anExp.More(); anExp.Next()) {
+-
+- TopoDS_Edge ECur = anExp.Current();
+- TopoDS_Vertex VF,VL;
+- TopExp::Vertices(ECur,VF,VL,Standard_True);
+- Standard_Real U1 = BRep_Tool::Parameter(VF,ECur);
+- Standard_Real U2 = BRep_Tool::Parameter(VL,ECur);
+- BRepAdaptor_Curve Curve(ECur);
+- gp_Pnt PPs = Curve.Value(0.1*(U1+9*U2));
+- TopTools_ListIteratorOfListOfShape itF(MapVLV(VF)),itL(MapVLV(VL));
+- Standard_Integer rang = ideb;
+- while (rang < i) {
+- itF.Next();
+- itL.Next();
+- rang++;
+- }
+- TopoDS_Vertex V1 = TopoDS::Vertex(itF.Value()),
+- V2 = TopoDS::Vertex(itL.Value());
+- TopoDS_Edge Esol;
+- Standard_Real scalmax=0.;
+- BRepTools_WireExplorer anExp2;
+-
+- for(anExp2.Init(TopoDS::Wire(myWork(i))); anExp2.More(); anExp2.Next()) {
+-
+- TopoDS_Edge E = TopoDS::Edge(anExp2.Current());
++ anExp.Init(wire);
++ TopoDS_Edge ECur = anExp.Current();
++ TopoDS_Vertex VF,VL;
++ TopExp::Vertices(ECur,VF,VL,Standard_True);
++ Standard_Real U1 = BRep_Tool::Parameter(VF,ECur);
++ Standard_Real U2 = BRep_Tool::Parameter(VL,ECur);
++ BRepAdaptor_Curve Curve(ECur);
++ gp_Pnt PPs = Curve.Value(0.1*(U1+9*U2));
++ TopTools_ListIteratorOfListOfShape itF(MapVLV(VF)),itL(MapVLV(VL));
++ Standard_Integer rang = ideb;
++ while (rang < i) {
++ itF.Next();
++ itL.Next();
++ rang++;
++ }
++ TopoDS_Vertex V1 = TopoDS::Vertex(itF.Value()), V2 = TopoDS::Vertex(itL.Value());
++ TopoDS_Edge Esol;
++ Standard_Real scalmax=0.;
++ TopoDS_Iterator itW( myWork(i) );
++
++ for(; itW.More(); itW.Next())
++ {
++ TopoDS_Edge E = TopoDS::Edge(itW.Value());
+ TopoDS_Vertex VVF,VVL;
+ TopExp::Vertices(E,VVF,VVL,Standard_True);
+-
++
+ // tri des edges candidates
+ Standard_Real scal1,scal2;
+ if ( (V1.IsSame(VVF)&&V2.IsSame(VVL)) || (V2.IsSame(VVF)&&V1.IsSame(VVL)) ) {
+@@ -1055,17 +1084,59 @@
+ scalmax = scal2;
+ TopoDS_Shape aLocalShape = E.Reversed();
+ Esol = TopoDS::Edge(aLocalShape);
+-// Esol = TopoDS::Edge(E.Reversed());
+ }
+-
+ }
++ if (!Esol.IsNull())
++ break;
+ }
+- MW.Add(Esol);
++ MW.Add(Esol);
++
++ TopTools_ListOfShape ConnectedEdges;
++ BuildConnectedEdges( TopoDS::Wire(myWork(i)), Esol, V2, ConnectedEdges );
++
++ TopTools_ListIteratorOfListOfShape itCE(ConnectedEdges);
++ for(; anExp.More(), itCE.More(); anExp.Next(), itCE.Next())
++ {
++ ECur = anExp.Current();
++ TopExp::Vertices(ECur,VF,VL,Standard_True);
++ U1 = BRep_Tool::Parameter(VF,ECur);
++ U2 = BRep_Tool::Parameter(VL,ECur);
++ Curve.Initialize(ECur);
++ PPs = Curve.Value(0.1*(U1+9*U2));
+
+- }
++ TopoDS_Edge E = TopoDS::Edge(itCE.Value());
++ TopoDS_Vertex VVF,VVL;
++ TopExp::Vertices(E,VVF,VVL,Standard_True);
+
++ // tri des edges candidates
++ Standard_Real scal1,scal2;
++ U1 = BRep_Tool::Parameter(VVF,E);
++ U2 = BRep_Tool::Parameter(VVL,E);
++ Curve.Initialize(E);
++ gp_Pnt PP1 = Curve.Value(0.1*(U1+9*U2));
++ gp_Pnt PP2 = Curve.Value(0.1*(9*U1+U2));
++
++ for (rang=i;rang>ideb;rang--) {
++ Transform(WithRotation, PP1,
++ Pos->Value(rang), Axe->Value(rang),
++ Pos->Value(rang-1), Axe->Value(rang-1), PP1);
++ Transform(WithRotation, PP2,
++ Pos->Value(rang), Axe->Value(rang),
++ Pos->Value(rang-1), Axe->Value(rang-1), PP2);
++ }
++ gp_Vec Ns(Pos->Value(ideb),PPs);
++ Ns = Ns.Normalized();
++ gp_Vec N1(Pos->Value(ideb),PP1);
++ N1 = N1.Normalized();
++ gp_Vec N2(Pos->Value(ideb),PP2);
++ N2 = N2.Normalized();
++ scal1 = N1.Dot(Ns);
++ scal2 = N2.Dot(Ns);
++ if (scal2>scal1)
++ E.Reverse();
++ MW.Add(E);
++ }
+ myWork(i) = MW.Wire();
+-
+ }
+
+ // sections bouclantes ?
+diff -Naur OpenCASCADE6.3.0/ros/src/BRepFill/BRepFill_Sweep.cdl OpenCASCADE6.3.0sp6/ros/src/BRepFill/BRepFill_Sweep.cdl
+--- OpenCASCADE6.3.0/ros/src/BRepFill/BRepFill_Sweep.cdl 2003-05-30 18:54:10.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BRepFill/BRepFill_Sweep.cdl 2009-10-03 01:03:56.000000000 +0200
+@@ -69,7 +69,7 @@
+ Transition : TransitionStyle = BRepFill_Modified;
+ Approx : ApproxStyle = GeomFill_Location;
+ Continuity : Shape from GeomAbs = GeomAbs_C2;
+- Degmax : Integer = 10;
++ Degmax : Integer = 11;
+ Segmax : Integer = 30);
+
+ ---Purpose: Build the Sweeep Surface
+@@ -87,19 +87,16 @@
+ -- Segmax : The maximum number of span in v requiered on
+ -- the surface.
+
++ CorrectApproxParameters(me: in out)
++ returns Boolean is private;
++
+ BuildWire(me : in out;
+- Transition : TransitionStyle;
+- Approx : ApproxStyle;
+- Continuity : Shape from GeomAbs;
+- Degmax, Segmax : Integer)
++ Transition : TransitionStyle)
+ returns Boolean is private;
+
+ BuildShell(me : in out;
+ Transition : TransitionStyle;
+ Vf, Vl : Integer;
+- Approx : ApproxStyle;
+- Continuity : Shape from GeomAbs;
+- Degmax, Segmax : Integer;
+ ExtendFirst : Real = 0.0;
+ ExtendLast : Real = 0.0)
+ returns Boolean is private;
+@@ -153,7 +150,11 @@
+ myTol2d : Real;
+ myTolAngular : Real;
+ myAngMin : Real;
+- myAngMax : Real;
++ myAngMax : Real;
++ myApproxStyle : ApproxStyle from GeomFill;
++ myContinuity : Shape from GeomAbs;
++ myDegmax : Integer;
++ mySegmax : Integer;
+ myShape : Shape from TopoDS;
+ myLoc : LocationLaw from BRepFill;
+ mySec : SectionLaw from BRepFill;
+diff -Naur OpenCASCADE6.3.0/ros/src/BRepFill/BRepFill_Sweep.cxx OpenCASCADE6.3.0sp6/ros/src/BRepFill/BRepFill_Sweep.cxx
+--- OpenCASCADE6.3.0/ros/src/BRepFill/BRepFill_Sweep.cxx 2007-02-09 18:14:09.000000000 +0100
++++ OpenCASCADE6.3.0sp6/ros/src/BRepFill/BRepFill_Sweep.cxx 2009-10-03 01:03:56.000000000 +0200
+@@ -1667,6 +1667,11 @@
+ SetTolerance(1.e-4);
+ SetAngularControl();
+ myAuxShape.Clear();
++
++ myApproxStyle = GeomFill_Location;
++ myContinuity = GeomAbs_C2;
++ myDegmax = 11;
++ mySegmax = 30;
+ }
+
+ //=======================================================================
+@@ -1734,16 +1739,43 @@
+ myAngMax = Min (MaxAngle, 6.28);
+ }
+
++///=======================================================================
++//function : CorrectApproxParameters
++//purpose :
++//=======================================================================
++ Standard_Boolean BRepFill_Sweep::CorrectApproxParameters()
++{
++ TopoDS_Wire thePath = myLoc->Wire();
++ GeomAbs_Shape NewCont = myContinuity;
++ Standard_Integer NewSegmax = mySegmax;
++
++ TopoDS_Iterator iter(thePath);
++ for (; iter.More(); iter.Next())
++ {
++ TopoDS_Edge anEdge = TopoDS::Edge(iter.Value());
++ BRepAdaptor_Curve aBAcurve(anEdge);
++ GeomAbs_Shape aContinuity = aBAcurve.Continuity();
++ Standard_Integer aNbInterv = aBAcurve.NbIntervals(GeomAbs_CN);
++ if (aContinuity < NewCont)
++ NewCont = aContinuity;
++ if (aNbInterv > NewSegmax)
++ NewSegmax = aNbInterv;
++ }
++
++ Standard_Boolean Corrected = Standard_False;
++ if (NewCont != myContinuity || NewSegmax != mySegmax)
++ Corrected = Standard_True;
++ myContinuity = NewCont;
++ mySegmax = NewSegmax;
++ return Corrected;
++}
++
+ //=======================================================================
+ //function : BuildWire
+ //purpose : Construit un wire par balayage
+ //======================================================================
+- Standard_Boolean
+- BRepFill_Sweep::BuildWire(const BRepFill_TransitionStyle Transition,
+- const GeomFill_ApproxStyle Approx,
+- const GeomAbs_Shape Continuity,
+- const Standard_Integer Degmax,
+- const Standard_Integer Segmax)
++ Standard_Boolean BRepFill_Sweep::
++ BuildWire(const BRepFill_TransitionStyle Transition)
+ {
+ Standard_Integer ipath, isec = 1;
+ gp_Pnt P1;//, P2;
+@@ -1775,7 +1807,7 @@
+ // Courbe par iso valeur
+ GeomFill_Sweep Sweep(myLoc->Law(ipath), KPart);
+ Sweep.SetTolerance(myTol3d, myBoundTol, myTol2d, myTolAngular);
+- Sweep.Build(mySec->Law(isec), Approx, Continuity, Degmax, Segmax);
++ Sweep.Build(mySec->Law(isec), myApproxStyle, myContinuity, myDegmax, mySegmax);
+ if (!Sweep.IsDone())
+ return Standard_False;
+ S = Sweep.Surface();
+@@ -1871,10 +1903,6 @@
+ BuildShell(const BRepFill_TransitionStyle Transition,
+ const Standard_Integer IFirst,
+ const Standard_Integer ILast,
+- const GeomFill_ApproxStyle Approx,
+- const GeomAbs_Shape Continuity,
+- const Standard_Integer Degmax,
+- const Standard_Integer Segmax,
+ const Standard_Real ExtendFirst,
+ const Standard_Real ExtendLast)
+ {
+@@ -1955,7 +1983,7 @@
+ }
+
+ for(isec=1; isec<=NbLaw; isec++) {
+- Sweep.Build(mySec->Law(isec), Approx, Continuity, Degmax, Segmax);
++ Sweep.Build(mySec->Law(isec), myApproxStyle, myContinuity, myDegmax, mySegmax);
+ if (!Sweep.IsDone())
+ return Standard_False;
+ TabS(isec,ipath) = Sweep.Surface();
+@@ -2448,9 +2476,16 @@
+ const Standard_Integer Degmax,
+ const Standard_Integer Segmax)
+ {
++ myApproxStyle = Approx;
++ myContinuity = Continuity;
++ myDegmax = Degmax;
++ mySegmax = Segmax;
++
++ CorrectApproxParameters();
++
+ // Wire
+- if (mySec->IsVertex()) isDone = BuildWire(Transition, Approx, Continuity,
+- Degmax, Segmax);
++ if (mySec->IsVertex()) isDone = BuildWire(Transition);
++
+ else { // Shell
+ Standard_Integer NbTrous = myLoc->NbHoles(myTol3d),
+ NbPath = myLoc->NbLaw(),
+@@ -2476,8 +2511,7 @@
+ if (NbTrous==1) Extend = EvalExtrapol(1, Transition);
+ isDone = BuildShell(Transition,
+ 1, NbPath+1,
+- Approx, Continuity,
+- Degmax, Segmax, Extend, Extend);
++ Extend, Extend);
+ }
+ else { // On le fait bout par bout
+ Standard_Integer IFirst = 1, ILast;
+@@ -2487,8 +2521,6 @@
+ else ILast = Trous->Value(ii);
+ isDone = BuildShell(Transition,
+ IFirst, ILast,
+- Approx, Continuity,
+- Degmax, Segmax,
+ EvalExtrapol(IFirst, Transition),
+ EvalExtrapol(ILast, Transition));
+ if (IFirst>1) {
+diff -Naur OpenCASCADE6.3.0/ros/src/BRepMesh/BRepMesh_FastDiscret.cdl OpenCASCADE6.3.0sp6/ros/src/BRepMesh/BRepMesh_FastDiscret.cdl
+--- OpenCASCADE6.3.0/ros/src/BRepMesh/BRepMesh_FastDiscret.cdl 2008-07-25 16:03:13.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BRepMesh/BRepMesh_FastDiscret.cdl 2009-10-03 01:03:56.000000000 +0200
+@@ -145,16 +145,6 @@
+ returns Boolean;
+
+
+- InternalVerticesForRectangle
+- (me : mutable;
+- caro : HSurface from BRepAdaptor;
+- inter : in out ListOfVertex from BRepMesh;
+- u1pars : ListOfReal from TColStd;
+- u2pars : ListOfReal from TColStd;
+- v1pars : ListOfReal from TColStd;
+- v2pars : ListOfReal from TColStd)
+- is static private;
+-
+ InternalVertices
+ (me : mutable;
+ caro : HSurface from BRepAdaptor;
+diff -Naur OpenCASCADE6.3.0/ros/src/BRepMesh/BRepMesh_FastDiscret.cxx OpenCASCADE6.3.0sp6/ros/src/BRepMesh/BRepMesh_FastDiscret.cxx
+--- OpenCASCADE6.3.0/ros/src/BRepMesh/BRepMesh_FastDiscret.cxx 2008-08-15 15:54:05.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/BRepMesh/BRepMesh_FastDiscret.cxx 2009-10-03 01:03:56.000000000 +0200
+@@ -280,6 +280,7 @@
+ TopTools_SequenceOfShape aShSeq;
+
+ TopoDS_Iterator exW(face);
++
+ for (; exW.More(); exW.Next()) {
+ const TopoDS_Shape& aWire = exW.Value();
+ if (aWire.ShapeType() != TopAbs_WIRE)
+@@ -623,39 +624,14 @@
+ myUParam.Clear(); myVParam.Clear();
+
+ BRepMesh_IDMapOfNodeOfDataStructureOfDelaun aMoveNodes(myvemap.Extent());
+- //cout << "UVparam" << endl;
+- Standard_Real eps = Precision::PConfusion();
+- Standard_Integer nbu1 = 0, nbu2 = 0, nbv1 = 0, nbv2 = 0, nbtot = 0;
+- Standard_Boolean IsRectangle = Standard_False;
+- TColStd_ListOfReal U1Params, U2Params, V1Params, V2Params;
+
+ for (i = 1; i <= structure->NbNodes(); i++)
+ {
+ const BRepMesh_Vertex& v = structure->GetNode(i);
+ p2d = v.Coord();
+ if (useUVParam) {
+- //cout << p2d.X() << " " << p2d.Y() << endl;
+- Standard_Real u = p2d.X(), v = p2d.Y();
+- myUParam.Add(u);
+- myVParam.Add(v);
+-
+- ++nbtot;
+- if(Abs(u - myumin) <= eps) {
+- ++nbu1;
+- V1Params.Append(v);
+- }
+- if(Abs(u - myumax) <= eps) {
+- ++nbu2;
+- V2Params.Append(v);
+- }
+- if(Abs(v - myvmin) <= eps) {
+- ++nbv1;
+- U1Params.Append(u);
+- }
+- if(Abs(v - myvmax) <= eps) {
+- ++nbv2;
+- U2Params.Append(u);
+- }
++ myUParam.Add(p2d.X());
++ myVParam.Add(p2d.Y());
+ }
+ gp_XY res;
+ res.SetCoord((p2d.X()-minX)/deltaX,(p2d.Y()-minY)/deltaY);
+@@ -666,12 +642,6 @@
+ }
+ structure->ReplaceNodes(aMoveNodes);
+
+- if(useUVParam) {
+- Standard_Integer nb = nbu1 + nbu2 + nbv1 + nbv2 - 4;
+- if((nbu1 == nbu2) && (nbv1 == nbv2) && (nbtot == nb)) IsRectangle = Standard_True;
+- }
+-
+-
+ Standard_Boolean rajout;
+
+ switch (thetype)
+@@ -719,14 +689,9 @@
+ }
+
+ if(rajout){
+- if(IsRectangle) {
+- InternalVerticesForRectangle(gFace, mylistver, U1Params, U2Params, V1Params, V2Params);
+- }
+- else {
+- InternalVertices(gFace, mylistver, defface,*classifier);
+- }
++ InternalVertices(gFace, mylistver, defface,*classifier);
+
+- if (mylistver.Extent() > 0) {
++ if (mylistver.Extent() > 0) {
+ BRepMesh_Array1OfVertexOfDelaun verttab(1, mylistver.Extent());
+ BRepMesh_ListIteratorOfListOfVertex itVer(mylistver);
+ ipn = 1;
+@@ -1909,78 +1874,73 @@
+
+ // Sort sequence of U parameters
+ TColStd_SequenceOfReal ParamU;
+- ParamU.Append(myumin); ParamU.Append(myumax);
+- Standard_Integer ParamULength = 2;
++ Standard_Integer ParamULength = 1;
+ const Standard_Integer LenU = myUParam.Extent();
+- const Standard_Real ddu = 0.02*(myumax-myumin);
++
++ Standard_Real ddu = caro->UResolution(defface);
+
+ Standard_Real U1, U2;
+
++ TColStd_Array1OfReal uprs(1, LenU);
+ for (j = 1; j <= LenU; j++)
+ {
+- pp = myUParam(j);
++ uprs(j) = myUParam(j);
++ }
++ SortTools_ShellSortOfReal aSorter;
++ TCollection_CompareOfReal aCompare;
++ aSorter.Sort(uprs, aCompare);
+
+- U1 = ParamU.Value(1);
+- for (i = 2; i <= ParamULength; i++)
++ U1 = uprs(1);
++ ParamU.Append(U1);
++ for (j = 2; j <= LenU; j++)
++ {
++ U2 = uprs(j);
++ if ((U2-U1) > ddu)
+ {
+- U2 = ParamU.Value(i);
+- if (pp < U2)
+- {
+- if ((U2-pp) < ddu)
+- {
+- ParamU(i) = pp;
+- }
+- else if ((pp-U1) > ddu)
+- {
+- ParamU.InsertBefore(i, pp);
+- ParamULength++;
+- }
+- else if (i != 2)
+- {
+- ParamU(i-1) = pp;
+- }
+- break;
+- }
++ ParamU.Append(U2);
+ U1 = U2;
++ ParamULength++;
+ }
+ }
+-
++ if(uprs(LenU)-ParamU(ParamULength)>Precision::Confusion())
++ {
++ ParamU.Append(uprs(LenU));
++ ParamULength++;
++ }
++
+ // Sort sequence of V parameters
+ TColStd_SequenceOfReal ParamV;
+- ParamV.Append(myvmin); ParamV.Append(myvmax);
+- Standard_Integer ParamVLength = 2;
++ Standard_Integer ParamVLength = 1;
+ const Standard_Integer LenV = myVParam.Extent();
+- const Standard_Real ddv = 0.02*(myvmax-myvmin);
++
++ Standard_Real ddv = caro->VResolution(defface);
+
+ Standard_Real V1, V2;
++
++ TColStd_Array1OfReal vprs(1, LenV);
+ for (j = 1; j <= LenV; j++)
+ {
+- pp = myVParam(j);
++ vprs(j) = myVParam(j);
++ }
++ aSorter.Sort(vprs, aCompare);
+
+- V1 = ParamV.Value(1);
+- for (i = 2; i <= ParamVLength; i++)
++ V1 = vprs(1);
++ ParamV.Append(V1);
++ for (j = 2; j <= LenV; j++)
++ {
++ V2 = vprs(j);
++ if ((V2-V1) > ddv)
+ {
+- V2 = ParamV.Value(i);
+- if (pp < V2)
+- {
+- if ((V2-pp) < ddv)
+- {
+- ParamV(i) = pp;
+- }
+- else if ((pp-V1) > ddv)
+- {
+- ParamV.InsertBefore(i, pp);
+- ParamVLength++;
+- }
+- else if (i != 2)
+- {
+- ParamV(i-1) = pp;
+- }
+- break;
+- }
++ ParamV.Append(V2);
+ V1 = V2;
++ ParamVLength++;
+ }
+ }
++ if(vprs(LenV)-ParamV(ParamVLength)>Precision::Confusion())
++ {
++ ParamV.Append(vprs(LenV));
++ ParamVLength++;
++ }
+
+ // controle des isos U et insertion eventuelle:
+
+@@ -2192,84 +2152,6 @@
+ }
+
+ //=======================================================================
+-//function : InternalVerticesForRectangle
+-//purpose :
+-//=======================================================================
+-void BRepMesh_FastDiscret::
+- InternalVerticesForRectangle(const Handle(BRepAdaptor_HSurface)& caro,
+- BRepMesh_ListOfVertex& InternalV,
+- const TColStd_ListOfReal& U1Params,
+- const TColStd_ListOfReal& U2Params,
+- const TColStd_ListOfReal& V1Params,
+- const TColStd_ListOfReal& V2Params)
+-{
+- BRepMesh_Vertex newV;
+- gp_XY p2d;
+- gp_Pnt p3d;
+-
+-
+- Standard_Integer i, j, nbu = U1Params.Extent(),
+- nbv = V1Params.Extent();
+- TColStd_Array1OfReal u1prs(1, nbu), u2prs(1, nbu),
+- v1prs(1, nbv), v2prs(1,nbv);
+- TColStd_ListIteratorOfListOfReal Itu1(U1Params), Itu2(U2Params),
+- Itv1(V1Params), Itv2(V2Params);
+- for(i = 1; Itu1.More(); Itu1.Next(), Itu2.Next(),++i) {
+- u1prs(i) = Itu1.Value();
+- u2prs(i) = Itu2.Value();
+- }
+- for(i = 1; Itv1.More(); Itv1.Next(), Itv2.Next(),++i) {
+- v1prs(i) = Itv1.Value();
+- v2prs(i) = Itv2.Value();
+- }
+-
+- SortTools_ShellSortOfReal aSorter;
+- TCollection_CompareOfReal aCompare;
+- aSorter.Sort(u1prs, aCompare);
+- aSorter.Sort(u2prs, aCompare);
+- aSorter.Sort(v1prs, aCompare);
+- aSorter.Sort(v2prs, aCompare);
+-
+- gp_XY f00(u1prs(1), v1prs(1));
+- gp_XY f01(u2prs(1), v1prs(nbv));
+- gp_XY f10(u1prs(nbu), v2prs(1));
+- gp_XY f11(u2prs(nbu), v2prs(nbv));
+-
+- Standard_Real cu = 1./(nbu-1), cv = 1./(nbv-1);
+-
+- //Linear Coons-Gordon interpolation for inner points
+- Standard_Real x, y, x1, y1;
+- for(i = 2, x = cu; i < nbu; ++i, x += cu) {
+- x1 = 1.-x;
+- gp_XY fx0(u1prs(i), v1prs(1));
+- gp_XY fx1(u2prs(i), v1prs(nbv));
+-
+- for(j = 2, y = cv; j < nbv; ++j, y += cv) {
+- y1 = 1.-y;
+-
+- gp_XY f0y(u1prs(1), v1prs(j));
+- gp_XY f1y(u1prs(nbu), v2prs(j));
+-
+- gp_XY fxy = y1*fx0 + y*fx1 + x1*f0y + x*f1y -
+- (x1*(y1*f00 + y*f01) + x*(y1*f10 + y*f11));
+-
+- // Record 3d point
+- BRepMesh_GeomTool::D0(caro, fxy.X(), fxy.Y(), p3d);
+- nbLocat++;
+- Location3d.Bind(nbLocat, p3d);
+- // Record 2d point
+- p2d.SetCoord((fxy.X()-myumin)/deltaX, (fxy.Y()-myvmin)/deltaY);
+- newV.Initialize(p2d, nbDomains, nbLocat, MeshDS_Free);
+- InternalV.Append(newV);
+- }
+- }
+-
+-
+-
+-}
+-
+-
+-//=======================================================================
+ //function : Control
+ //purpose :
+ //=======================================================================
+diff -Naur OpenCASCADE6.3.0/ros/src/Extrema/Extrema_ExtPElC.cxx OpenCASCADE6.3.0sp6/ros/src/Extrema/Extrema_ExtPElC.cxx
+--- OpenCASCADE6.3.0/ros/src/Extrema/Extrema_ExtPElC.cxx 2002-12-06 19:00:53.000000000 +0100
++++ OpenCASCADE6.3.0sp6/ros/src/Extrema/Extrema_ExtPElC.cxx 2009-10-03 01:04:01.000000000 +0200
+@@ -107,15 +107,13 @@
+ Usol[1] = Usol[0] + PI;
+
+ Standard_Real myuinf = Uinf;
+- //modified by NIZNHY-PKV Fri Apr 20 15:03:28 2001 f
+- //Standard_Real TolU = Tol*C.Radius();
+ Standard_Real TolU, aR;
+ aR=C.Radius();
+ TolU=Precision::Infinite();
+ if (aR > gp::Resolution()) {
+ TolU= Tol/aR;
+ }
+- //modified by NIZNHY-PKV Fri Apr 20 15:03:32 2001 t
++ //
+ ElCLib::AdjustPeriodic(Uinf, Uinf+2*PI, Precision::PConfusion(), myuinf, Usol[0]);
+ ElCLib::AdjustPeriodic(Uinf, Uinf+2*PI, Precision::PConfusion(), myuinf, Usol[1]);
+ if (((Usol[0]-2*PI-Uinf) < TolU) && ((Usol[0]-2*PI-Uinf) > -TolU)) Usol[0] = Uinf;
+@@ -140,6 +138,10 @@
+ }
+ //=============================================================================
+
++//=======================================================================
++//function : Extrema_ExtPElC
++//purpose :
++//=======================================================================
+ Extrema_ExtPElC::Extrema_ExtPElC (const gp_Pnt& P,
+ const gp_Elips& C,
+ const Standard_Real Tol,
+@@ -151,6 +153,10 @@
+
+
+
++//=======================================================================
++//function : Perform
++//purpose :
++//=======================================================================
+ void Extrema_ExtPElC::Perform (const gp_Pnt& P,
+ const gp_Elips& C,
+ const Standard_Real Tol,
+@@ -176,31 +182,57 @@
+ cette equation.
+ -----------------------------------------------------------------------------*/
+ {
++ Standard_Integer NoSol, NbSol;
++ Standard_Real A, B, OPpMagn, aTx, aD2x, aTol2;
++ gp_Pnt aPx;
++ //
+ myDone = Standard_False;
+ myNbExt = 0;
+-
+-// 1- Projection du point P dans le plan de l ellipse -> Pp ...
+-
++ //
++ aTol2=Tol*Tol;
++ //
++ // 0-
++ //modified by NIZNHY-PKV Fri Feb 13 09:37:33 2009f
++ aTx=ElCLib::Parameter(C, P);
++ aPx=ElCLib::Value(aTx, C);
++ aD2x=P.SquareDistance(aPx);
++ if (aD2x < aTol2) {
++ myDone = Standard_True;
++ myValue[myNbExt]=sqrt(aD2x);
++ myIsMin[myNbExt]=Standard_True;
++ myPoint[myNbExt]=Extrema_POnCurv(aTx ,aPx);
++ myNbExt=1;
++ return;
++ }
++ //modified by NIZNHY-PKV Fri Feb 13 09:37:37 2009t
++ //
++ // 1- Projection du point P dans le plan de l ellipse -> Pp ...
+ gp_Pnt O = C.Location();
+ gp_Vec Axe (C.Axis().Direction());
+ gp_Vec Trsl = Axe.Multiplied(-(gp_Vec(O,P).Dot(Axe)));
+ gp_Pnt Pp = P.Translated(Trsl);
+-
+-// 2- Calculs des solutions ...
+-
+- Standard_Integer NoSol, NbSol;
+- Standard_Real A = C.MajorRadius();
+- Standard_Real B = C.MinorRadius();
++ //
++ // 2- Calculs des solutions ...
++
++ //
++ A = C.MajorRadius();
++ B = C.MinorRadius();
++
+ gp_Vec OPp (O,Pp);
+- Standard_Real OPpMagn = OPp.Magnitude();
+- if (OPpMagn < Tol) { if (Abs(A-B) < Tol) { return; } }
++ OPpMagn = OPp.SquareMagnitude();
++ if (OPpMagn < aTol2) {
++ if (Abs(A-B) < Tol) {
++ return;
++ }
++ }
+ Standard_Real X = OPp.Dot(gp_Vec(C.XAxis().Direction()));
+ Standard_Real Y = OPp.Dot(gp_Vec(C.YAxis().Direction()));
+ // Standard_Real Y = Sqrt(OPpMagn*OPpMagn-X*X);
+
+ Standard_Real ko2 = (B*B-A*A)/2., ko3 = -B*Y, ko4 = A*X;
+- if(Abs(ko3) < 1.e-16*Max(Abs(ko2), Abs(ko3))) ko3 = 0.0;
+-
++ if(Abs(ko3) < 1.e-16*Max(Abs(ko2), Abs(ko3))) {
++ ko3 = 0.;
++ }
+ // math_TrigonometricFunctionRoots Sol(0.,(B*B-A*A)/2.,-B*Y,A*X,0.,Uinf,Usup);
+ math_TrigonometricFunctionRoots Sol(0.,ko2, ko3, ko4, 0.,Uinf,Usup);
+
+@@ -313,10 +345,7 @@
+ if (!DejaEnr) {
+ TbExt[myNbExt] = Cu;
+ myValue[myNbExt] = Cu.Distance(P);
+-// modified by NIZHNY-EAP Fri Oct 29 12:53:37 1999 ___BEGIN___
+-// myIsMin[myNbExt] = (NoSol == 0);
+ myIsMin[myNbExt] = myValue[myNbExt] < P.Distance(ElCLib::Value(Us+1,C));
+-// modified by NIZHNY-EAP Fri Oct 29 12:53:39 1999 ___END___
+ myPoint[myNbExt] = Extrema_POnCurv(Us,Cu);
+ myNbExt++;
+ }
+@@ -407,10 +436,7 @@
+ if (!DejaEnr) {
+ TbExt[myNbExt] = Cu;
+ myValue[myNbExt] = Cu.Distance(P);
+-// modified by NIZHNY-EAP Fri Oct 29 12:55:16 1999 ___BEGIN___
+-// myIsMin[myNbExt] = (NoSol == 0);
+ myIsMin[myNbExt] = myValue[myNbExt] < P.Distance(ElCLib::Value(Us+1,C));
+-// modified by NIZHNY-EAP Fri Oct 29 12:55:18 1999 ___END___
+ myPoint[myNbExt] = Extrema_POnCurv(Us,Cu);
+ myNbExt++;
+ }
+diff -Naur OpenCASCADE6.3.0/ros/src/GeomFill/GeomFill_NSections.cxx OpenCASCADE6.3.0sp6/ros/src/GeomFill/GeomFill_NSections.cxx
+--- OpenCASCADE6.3.0/ros/src/GeomFill/GeomFill_NSections.cxx 2006-08-11 19:00:53.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/GeomFill/GeomFill_NSections.cxx 2009-10-03 01:04:05.000000000 +0200
+@@ -942,6 +942,12 @@
+ sameaxis = (C1.Axis().IsParallel(D,1.e-4));
+ }
+ isconic = samedir && linearrad && sameaxis;
++ //// Modified by jgv, 18.02.2009 for OCC20866 ////
++ Standard_Real first1 = AC1.FirstParameter(), last1 = AC1.LastParameter();
++ Standard_Real first2 = AC2.FirstParameter(), last2 = AC2.LastParameter();
++ isconic = (Abs(first1-first2) <= Precision::PConfusion() &&
++ Abs(last1-last2) <= Precision::PConfusion());
++ //////////////////////////////////////////////////
+ }
+ }
+
+diff -Naur OpenCASCADE6.3.0/ros/src/IntPatch/IntPatch_PrmPrmIntersection.gxx OpenCASCADE6.3.0sp6/ros/src/IntPatch/IntPatch_PrmPrmIntersection.gxx
+--- OpenCASCADE6.3.0/ros/src/IntPatch/IntPatch_PrmPrmIntersection.gxx 2008-07-18 16:59:37.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/IntPatch/IntPatch_PrmPrmIntersection.gxx 2009-10-03 01:04:13.000000000 +0200
+@@ -32,14 +32,14 @@
+ Standard_Real& u2,
+ Standard_Real& v2);
+
+-//xf
++
+ static
+ void AdjustOnPeriodic(const TheSurface& Surf1,
+ const TheSurface& Surf2,
+ IntPatch_SequenceOfLine& aSLin);
+-//xt
++
+ //==================================================================================
+-// function : Constructor
++// function :
+ // purpose :
+ //==================================================================================
+ IntPatch_PrmPrmIntersection::IntPatch_PrmPrmIntersection(): done(Standard_False)
+@@ -1677,8 +1677,7 @@
+ }
+ }
+ }
+- //--printf("\n\n1 Dist3[0]=%5.5g,u3[0]=%5.5g,v3[0]=%5.5g , Dist3[1]=%5.5g,u3[1]=%5.5g,v3[1]=%5.5g ,Dist3[2]=%5.5g,u3[2]=%5.5g,v3[2]=%5.5g\n",
+- //-- Dist3[0],u3[0],v3[0] , Dist3[1],u3[1],v3[1] ,Dist3[2],u3[2],v3[2]);
++ //
+ Standard_Real U1_3 = (u3[0]+u3[1]+u3[2])/3.0;
+ Standard_Real V1_3 = (v3[0]+v3[1]+v3[2])/3.0;
+
+@@ -1712,8 +1711,7 @@
+ }
+ }
+ }
+- //printf("\n2 Dist3[0]=%5.5g,u3[0]=%5.5g,v3[0]=%5.5g , Dist3[1]=%5.5g,u3[1]=%5.5g,v3[1]=%5.5g ,Dist3[2]=%5.5g,u3[2]=%5.5g,v3[2]=%5.5g\n",
+- // Dist3[0],u3[0],v3[0] , Dist3[1],u3[1],v3[1] ,Dist3[2],u3[2],v3[2]);
++ //
+ Standard_Real U2_3 = (u3[0]+u3[1]+u3[2])/3.0;
+ Standard_Real V2_3 = (v3[0]+v3[1]+v3[2])/3.0;
+
+@@ -1725,7 +1723,6 @@
+ }
+ }
+ while(ok);
+- //-- cout<<"\n *** "<<Compt<<" Points de *1 ** 2* ds la grille UVP"<<ComptTrouve<<endl; Compt=0;
+ }
+
+ //==================================================================================
+@@ -1764,7 +1761,7 @@
+ if (ClearFlag)
+ SLin.Clear();
+ // modified by NIZHNY-AMV Tue Oct 18 12:37:02 2005.END
+-
++ //
+ //IntPolyh_Intersection Interference(Surf1,NbU1,NbV1,Surf2,NbU2,NbV2);
+ // IntPolyh_Intersection Interference(Surf1, anUpars1, aVpars1,
+ // Surf2, anUpars2, aVpars2);
+@@ -1775,15 +1772,16 @@
+ pInterference = new IntPolyh_Intersection(Surf1,NbU1,NbV1,Surf2,NbU2,NbV2);
+ }
+ else {
+- pInterference = new IntPolyh_Intersection( Surf1, anUpars1, aVpars1,
++ pInterference = new IntPolyh_Intersection(Surf1, anUpars1, aVpars1,
+ Surf2, anUpars2, aVpars2 );
+ }
+ if ( !pInterference ) {
+ done = Standard_False;
+ return;
+ }
++ //
+ IntPolyh_Intersection& Interference = *pInterference;
+-
++ //
+ done = Interference.IsDone();
+ if( !done ) {
+ if ( pInterference ) {
+@@ -1792,7 +1790,7 @@
+ }
+ return;
+ }
+-
++
+ Standard_Real Deflection2 = Deflection*Deflection;
+ Standard_Integer nbLigSec = Interference.NbSectionLines();
+ Standard_Integer nbTanZon = Interference.NbTangentZones();
+@@ -1828,11 +1826,18 @@
+ }
+ }
+ } while(triok==Standard_False);
+-
++ //
+ for( ls = 1; ls <= nbLigSec; ls++) {
+- Standard_Integer nbp = Interference.NbPointsInLine(TabL[ls]);
+- Standard_Integer *TabPtDep = new Standard_Integer [nbp+1];
+- Standard_Integer ilig;
++ Standard_Integer nbp, ilig, *TabPtDep;
++ //
++ nbp = Interference.NbPointsInLine(TabL[ls]);
++ //modified by NIZNHY-PKV Fri Sep 5 15:19:28 2008f
++ if (!nbp) {
++ continue;
++ }
++ //modified by NIZNHY-PKV Fri Sep 5 15:19:31 2008t
++ TabPtDep = new Standard_Integer [nbp+1];
++ //
+ for( ilig = 1; ilig <= nbp; ilig++ )
+ TabPtDep[ilig]=0;
+
+@@ -1864,9 +1869,8 @@
+ Standard_Integer nbps2 = (nbp>3)? (nbp/2) : 1;
+ Standard_Integer NombreDePointsDeDepartDuCheminement = 0;
+ Standard_Boolean lignetrouvee=Standard_False;
+- // const Standard_Integer NbDePointsDeDepartDuChmLimit = 3;
+ const Standard_Integer NbDePointsDeDepartDuChmLimit = 5;
+-
++ //
+ do {
+ NombreDePointsDeDepartDuCheminement++;
+ switch (NombreDePointsDeDepartDuCheminement) {
+@@ -1891,7 +1895,7 @@
+ nbps2 = NombreDePointsDeDepartDuCheminement-3;
+ NombreDePointsDeDepartDuCheminement++;
+ }
+-
++ //
+ if(TabPtDep[nbps2] == 0) {
+ TabPtDep[nbps2] = 1;
+ Interference.GetLinePoint(TabL[ls],nbps2,_x,_y,_z,U1,V1,U2,V2,incidence);
+@@ -1966,7 +1970,6 @@
+ Standard_Boolean bPWIsDone;
+ Standard_Integer iPWNbPoints, aNbPointsVer;
+ Standard_Real aD11, aD12, aD21, aD22, aDx;
+-
+ //
+ bPWIsDone=PW.IsDone();
+ //xt
+@@ -2023,12 +2026,8 @@
+ }
+ }
+ }
+-// if(Point3dDebut.Distance(verPointDebut.Value()) <= TolTangency) {
+-// if(Point3dFin.Distance(verPointFin.Value()) <= TolTangency)
+-// RejetLigne = Standard_True;
+-// }
+ }
+-
++ //
+ if(!RejetLigne) {
+ IntSurf_TypeTrans trans1,trans2;
+ Standard_Real locu,locv;
+@@ -2227,10 +2226,9 @@
+ delete [] TabL;
+
+ }// if nbLigSec >= 1
+-
+- //xf
++ //
+ AdjustOnPeriodic(Surf1, Surf2, SLin);
+- //xt
++ //
+
+ //--------------------------------------------------------------------
+ //-- Calcul des parametres approches a partir des Zones De Tangence --
+diff -Naur OpenCASCADE6.3.0/ros/src/IntTools/IntTools_BeanBeanIntersector.cxx OpenCASCADE6.3.0sp6/ros/src/IntTools/IntTools_BeanBeanIntersector.cxx
+--- OpenCASCADE6.3.0/ros/src/IntTools/IntTools_BeanBeanIntersector.cxx 2007-06-22 16:09:36.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/IntTools/IntTools_BeanBeanIntersector.cxx 2009-10-03 01:04:14.000000000 +0200
+@@ -297,6 +297,41 @@
+ aCriteria2=myCriteria*myCriteria;
+ aNbRanges=myRangeManager.Length();
+ //
++ //modified by NIZNHY-PKV Tue Mar 24 11:13:42 2009f
++ {
++ GeomAbs_CurveType aCT1, aCT2;
++ //
++ aCT1=myCurve1.GetType();
++ aCT2=myCurve2.GetType();
++
++ if (aCT1==GeomAbs_BSplineCurve &&
++ aCT2==GeomAbs_BSplineCurve) {
++ Standard_Real aST, aST1, aSx, aSz;
++ //
++ aST1=myLastParameter1-myFirstParameter1;
++ if (aST1>aPPC) {
++ aSz=1.e-4;
++ aST=0.;
++ for(i=1; i<=aNbRanges; ++i) {
++ iFlag=myRangeManager.Flag(i);
++ if(iFlag==4) {
++ aRange=myRangeManager.Range(i);
++ aST=aST+aRange.Last()-aRange.First();
++ }
++ }
++ aSx=1.-aST/aST1;
++ if (aSx<aSz) {
++ aRange.SetFirst(myFirstParameter1);
++ aRange.SetLast(myLastParameter1);
++ myResults.Append(aRange);
++ myIsDone = Standard_True;
++ return;
++ }
++ }
++ }
++ }
++ //modified by NIZNHY-PKV Tue Mar 24 11:13:44 2009t
++ //
+ for(i=1; i<=aNbRanges; ++i) {
+ iFlag=myRangeManager.Flag(i);
+ //
+@@ -621,18 +656,10 @@
+ anExtrema.Points(k, P1, P2);
+ aPrm1=P1.Parameter();
+ aPrm2=P2.Parameter();
+- //modified by NIZNHY-PKV Tue Jun 5 15:47:13 2007f
+- /*
+- if((aPrm1 >= 0.) && (aPrm1 <= aDistance) &&
+- (aPrm2 >= 0.) && (aPrm2 <= aD)) {
+- isintersection = Standard_True;
+- }
+- */
+ if((aPrm1 >= -aMaxDistance) && (aPrm1 <= aDistance+aMaxDistance) &&
+ (aPrm2 >= -aMaxDistance) && (aPrm2 <= aD+aMaxDistance)) {
+ isintersection = Standard_True;
+ }
+- //modified by NIZNHY-PKV Tue Jun 5 15:47:17 2007t
+ else { // 2
+ Extrema_ExtPElC aPointProjector;
+
+diff -Naur OpenCASCADE6.3.0/ros/src/IntTools/IntTools_FaceFace.cxx OpenCASCADE6.3.0sp6/ros/src/IntTools/IntTools_FaceFace.cxx
+--- OpenCASCADE6.3.0/ros/src/IntTools/IntTools_FaceFace.cxx 2008-07-18 16:59:40.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/IntTools/IntTools_FaceFace.cxx 2009-10-03 01:04:14.000000000 +0200
+@@ -1,8 +1,4 @@
+-// Modified by skv - Tue Jul 11 16:41:33 2006 OCC12627
+-// Modified by skv - Mon Jul 12 16:16:15 2004 OCC6277
+-// Modified by ofv - Mon Nov 9 16:31:15 2004 OCC6766 fix
+-// Modified by ofv - Mon Dec 23 16:31:15 2004 OCC6766 fix reg
+-
++
+ #include <IntTools_FaceFace.ixx>
+ #include <BRep_Tool.hxx>
+ #include <IntTools_Curve.hxx>
+@@ -101,6 +97,7 @@
+ #include <TColgp_SequenceOfPnt2d.hxx>
+ #include <TColStd_HArray1OfReal.hxx>
+ #include <GeomAdaptor_Curve.hxx>
++#include <IntSurf_PntOn2S.hxx>
+
+ static
+ void TolR3d(const TopoDS_Face& ,
+@@ -341,7 +338,7 @@
+ void IntTools_FaceFace::Perform(const TopoDS_Face& F1,
+ const TopoDS_Face& F2)
+ {
+- Standard_Boolean hasCone, RestrictLine, bIsDone;
++ Standard_Boolean RestrictLine, bIsDone, hasCone;
+ Standard_Integer aNbLin, aNbPnts, i;
+ Standard_Real TolArc, TolTang, Deflection, UVMaxStep;
+ Standard_Real umin, umax, vmin, vmax;
+@@ -426,25 +423,11 @@
+ //
+ myHS1->ChangeSurface().Load(S1, umin, umax, vmin, vmax);
+ //
+- //modified by NIZNHY-PKV Thu Jul 3 14:50:28 2008f
+- /*
+- if(S1==S2) {
+- myHS2 = myHS1;
+- }
+- else {
+- BRepTools::UVBounds(F2, umin, umax, vmin, vmax);
+- //
+- CorrectSurfaceBoundaries(F2, (aTolF1 + aTolF2) * 2., umin, umax, vmin, vmax);
+- //
+- myHS2->ChangeSurface().Load(S2, umin, umax, vmin, vmax);
+- }
+- */
+ BRepTools::UVBounds(F2, umin, umax, vmin, vmax);
+ //
+ CorrectSurfaceBoundaries(F2, (aTolF1 + aTolF2) * 2., umin, umax, vmin, vmax);
+ //
+ myHS2->ChangeSurface().Load(S2, umin, umax, vmin, vmax);
+- //modified by NIZNHY-PKV Thu Jul 3 14:50:36 2008t
+ }
+ //
+ dom1 = new IntTools_TopolTool(myHS1);
+@@ -452,7 +435,17 @@
+ //
+ myLConstruct.Load(dom1, dom2, myHS1, myHS2);
+ //
++ //Deflection = 0.085;
+ Deflection = (hasCone) ? 0.085 : 0.1;
++ //modified by NIZNHY-PKV Fri Feb 20 09:10:17 2009f
++ if (aType1==GeomAbs_BSplineSurface &&
++ aType2==GeomAbs_BSplineSurface) {
++ if (myHS1->IsUClosed() && myHS1->IsUPeriodic() &&
++ myHS2->IsUClosed() && myHS2->IsUPeriodic()) {
++ Deflection=0.085;
++ }
++ }
++ //modified by NIZNHY-PKV Fri Feb 20 09:12:11 2009t
+ UVMaxStep = 0.001;
+ //
+ myIntersector.SetTolerances(TolArc, TolTang, UVMaxStep, Deflection);
+@@ -496,18 +489,7 @@
+ }
+ }
+ }
+- //
+- //modified by NIZNHY-PKV Thu Jul 3 14:51:04 2008f
+- /*
+- if(myHS1 == myHS2) {
+- myIntersector.Perform(myHS1, dom1, TolArc, TolTang);
+- }
+- else {
+- myIntersector.Perform(myHS1, dom1, myHS2, dom2, TolArc, TolTang, myListOfPnts, RestrictLine);
+- }
+- */
+ myIntersector.Perform(myHS1, dom1, myHS2, dom2, TolArc, TolTang, myListOfPnts, RestrictLine);
+- //modified by NIZNHY-PKV Thu Jul 3 14:51:09 2008t
+ //
+ bIsDone=myIntersector.IsDone();
+ if (bIsDone) {
+@@ -648,6 +630,18 @@
+ if(!myListOfPnts.IsEmpty()) {
+ bAvoidLineConstructor = Standard_True;
+ }
++
++ Standard_Integer nbp = aWLine->NbPnts();
++ const IntSurf_PntOn2S& p1 = aWLine->Point(1);
++ const IntSurf_PntOn2S& p2 = aWLine->Point(nbp);
++
++ const gp_Pnt& P1 = p1.Value();
++ const gp_Pnt& P2 = p2.Value();
++
++ if(P1.SquareDistance(P2) < 1.e-14) {
++ bAvoidLineConstructor = Standard_False;
++ }
++
+ }
+ //
+ // Line Constructor
+@@ -1320,14 +1314,14 @@
+ GeomAbs_SurfaceType typs1, typs2;
+ typs1 = myHS1->Surface().GetType();
+ typs2 = myHS2->Surface().GetType();
+-
++ //
+ if(typs1 == GeomAbs_Plane) {
+ theapp3d.Perform(myHS1, myHS2, WL, Standard_False,Standard_True, myApprox2,ifprm,ilprm);
+ }
+ else if(typs2 == GeomAbs_Plane) {
+ theapp3d.Perform(myHS1,myHS2,WL,Standard_False,myApprox1,Standard_True,ifprm,ilprm);
+ }
+- else {
++ else {
+ //
+ if (myHS1 != myHS2){
+ if ((typs1==GeomAbs_BezierSurface || typs1==GeomAbs_BSplineSurface) &&
+@@ -2321,76 +2315,7 @@
+ return !bFlag;
+ }
+
+-//=========================================================================
+-// static function : ComputePurgedWLine
+-// purpose : Removes equal points (leave one of equal points) from theWLine
+-// and recompute vertex parameters.
+-// Returns new WLine or null WLine if the number
+-// of the points is less than 2.
+-//=========================================================================
+-Handle(IntPatch_TheWLineOfIntersection) ComputePurgedWLine(const Handle(IntPatch_TheWLineOfIntersection)& theWLine) {
+- Handle(IntPatch_TheWLineOfIntersection) aResult;
+- Handle(IntPatch_TheWLineOfIntersection) aLocalWLine;
+- Handle(IntPatch_TheWLineOfIntersection) aTmpWLine = theWLine;
+-
+- Handle(IntSurf_LineOn2S) aLineOn2S = new IntSurf_LineOn2S();
+- aLocalWLine = new IntPatch_TheWLineOfIntersection(aLineOn2S, Standard_False);
+- Standard_Integer i, k, v, nb, nbvtx;
+- nbvtx = theWLine->NbVertex();
+- nb = theWLine->NbPnts();
+-
+- for(i = 1; i <= nb; i++) {
+- aLineOn2S->Add(theWLine->Point(i));
+- }
+-
+- for(v = 1; v <= nbvtx; v++) {
+- aLocalWLine->AddVertex(theWLine->Vertex(v));
+- }
+-
+- for(i = 1; i <= aLineOn2S->NbPoints(); i++) {
+- Standard_Integer aStartIndex = i + 1;
+- Standard_Integer anEndIndex = i + 5;
+- nb = aLineOn2S->NbPoints();
+- anEndIndex = (anEndIndex > nb) ? nb : anEndIndex;
+-
+- if((aStartIndex >= nb) || (anEndIndex <= 1)) {
+- continue;
+- }
+- k = aStartIndex;
+-
+- while(k <= anEndIndex) {
+-
+- if(i != k) {
+- IntSurf_PntOn2S p1 = aLineOn2S->Value(i);
+- IntSurf_PntOn2S p2 = aLineOn2S->Value(k);
+-
+- if(p1.Value().IsEqual(p2.Value(), gp::Resolution())) {
+- aTmpWLine = aLocalWLine;
+- aLocalWLine = new IntPatch_TheWLineOfIntersection(aLineOn2S, Standard_False);
+-
+- for(v = 1; v <= aTmpWLine->NbVertex(); v++) {
+- IntPatch_ThePointOfIntersection aVertex = aTmpWLine->Vertex(v);
+- Standard_Integer avertexindex = (Standard_Integer)aVertex.ParameterOnLine();
+-
+- if(avertexindex >= k) {
+- aVertex.SetParameter(aVertex.ParameterOnLine() - 1.);
+- }
+- aLocalWLine->AddVertex(aVertex);
+- }
+- aLineOn2S->RemovePoint(k);
+- anEndIndex--;
+- continue;
+- }
+- }
+- k++;
+- }
+- }
+
+- if(aLineOn2S->NbPoints() > 1) {
+- aResult = aLocalWLine;
+- }
+- return aResult;
+-}
+
+ //=======================================================================
+ //function : TolR3d
+@@ -3711,3 +3636,86 @@
+
+ return Standard_True;
+ }
++//modified by NIZNHY-PKV Thu Feb 12 11:54:18 2009f
++//=========================================================================
++// static function : ComputePurgedWLine
++// purpose : Removes equal points (leave one of equal points) from theWLine
++// and recompute vertex parameters.
++// Returns new WLine or null WLine if the number
++// of the points is less than 2.
++//=========================================================================
++Handle(IntPatch_TheWLineOfIntersection)
++ ComputePurgedWLine(const Handle(IntPatch_TheWLineOfIntersection)& theWLine)
++{
++ Standard_Integer i, k, v, nbvtx, aStartIndex, anEndIndex, avertexindex, aNbP;
++ Standard_Real aD2, aTol2;
++ Handle(IntPatch_TheWLineOfIntersection) aResult, aLocalWLine, aTmpWLine;
++ Handle(IntSurf_LineOn2S) aLineOn2S;
++ IntSurf_PntOn2S p1, p2;
++ //
++ aTol2=gp::Resolution();// ? but it was so
++ //
++ aLineOn2S = new IntSurf_LineOn2S();
++ aLocalWLine = new IntPatch_TheWLineOfIntersection(aLineOn2S, Standard_False);
++ //
++ aNbP = theWLine->NbPnts();
++ for(i = 1; i <= aNbP; i++) {
++ aLineOn2S->Add(theWLine->Point(i));
++ }
++ //
++ nbvtx = theWLine->NbVertex();
++ for(v = 1; v <= nbvtx; v++) {
++ aLocalWLine->AddVertex(theWLine->Vertex(v));
++ }
++ //
++ aTmpWLine = theWLine;
++ aNbP=aLineOn2S->NbPoints();
++ for(i = 1; i <= aNbP; i++) {
++ aStartIndex = i + 1;
++ anEndIndex = i + 5;
++ //
++ anEndIndex = (anEndIndex > aNbP) ? aNbP : anEndIndex;
++ //if((aStartIndex >= aNbP) || (anEndIndex <= 1)) {//ft
++ if((aStartIndex > aNbP) || (anEndIndex <= 1)) {
++ continue;
++ }
++ //
++ k = aStartIndex;
++ while(k <= anEndIndex) {
++ if(i != k) {
++ p1 = aLineOn2S->Value(i);
++ p2 = aLineOn2S->Value(k);
++ const gp_Pnt& aP1=p1.Value();
++ const gp_Pnt& aP2=p2.Value();
++ aD2=aP1.SquareDistance(aP2);
++ if (aD2<aTol2) {
++ aTmpWLine = aLocalWLine;
++ aLocalWLine = new IntPatch_TheWLineOfIntersection(aLineOn2S, Standard_False);
++
++ for(v = 1; v <= aTmpWLine->NbVertex(); v++) {
++ IntPatch_ThePointOfIntersection aVertex = aTmpWLine->Vertex(v);
++ avertexindex = (Standard_Integer)aVertex.ParameterOnLine();
++
++ if(avertexindex >= k) {
++ aVertex.SetParameter(aVertex.ParameterOnLine() - 1.);
++ }
++ aLocalWLine->AddVertex(aVertex);
++ }
++ //
++ aLineOn2S->RemovePoint(k);
++ aNbP=aLineOn2S->NbPoints();
++ anEndIndex--;
++ continue;
++ } //if (aD2<aTol2)
++ } //if(i != k)
++ k++;
++ } //while(k <= anEndIndex)
++ } //
++ //
++ aNbP=aLineOn2S->NbPoints();
++ if(aNbP>1) {
++ aResult = aLocalWLine;
++ }
++ return aResult;
++}
++//modified by NIZNHY-PKV Thu Feb 12 11:54:21 2009t
+diff -Naur OpenCASCADE6.3.0/ros/src/IntTools/IntTools_Tools.cxx OpenCASCADE6.3.0sp6/ros/src/IntTools/IntTools_Tools.cxx
+--- OpenCASCADE6.3.0/ros/src/IntTools/IntTools_Tools.cxx 2007-06-08 16:33:26.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/IntTools/IntTools_Tools.cxx 2009-10-03 01:04:14.000000000 +0200
+@@ -199,7 +199,7 @@
+ Standard_Integer IntTools_Tools::SplitCurve(const IntTools_Curve& IC,
+ IntTools_SequenceOfCurves& aCvs)
+ {
+- Handle (Geom_Curve) aC3D =IC.Curve();
++ Handle (Geom_Curve) aC3D =IC.Curve();
+ if(aC3D.IsNull())
+ return 0;
+ //
+@@ -213,11 +213,21 @@
+ }
+
+ Standard_Real aF, aL, aMid;
+-
++
++ //
+ aF=aC3D->FirstParameter();
+- aL=aC3D-> LastParameter();
++ aL=aC3D->LastParameter();
+ aMid=0.5*(aF+aL);
+-
++ //modified by NIZNHY-PKV Thu Feb 5 08:26:58 2009 f
++ GeomAdaptor_Curve aGAC(aC3D);
++ GeomAbs_CurveType aCT=aGAC.GetType();
++ if (aCT==GeomAbs_BSplineCurve ||
++ aCT==GeomAbs_BezierCurve) {
++ //aMid=0.5*aMid;
++ aMid=IntTools_Tools::IntermediatePoint(aF, aL);
++ }
++ //modified by NIZNHY-PKV Thu Feb 5 08:27:00 2009 t
++ //
+ Handle(Geom_Curve) aC3DNewF, aC3DNewL;
+ aC3DNewF =new Geom_TrimmedCurve (aC3D, aF, aMid);
+ aC3DNewL =new Geom_TrimmedCurve (aC3D, aMid, aL);
+diff -Naur OpenCASCADE6.3.0/ros/src/InterfaceGraphic/InterfaceGraphic_tgl_all.h OpenCASCADE6.3.0sp6/ros/src/InterfaceGraphic/InterfaceGraphic_tgl_all.h
+--- OpenCASCADE6.3.0/ros/src/InterfaceGraphic/InterfaceGraphic_tgl_all.h 2003-02-04 07:34:21.000000000 +0100
++++ OpenCASCADE6.3.0sp6/ros/src/InterfaceGraphic/InterfaceGraphic_tgl_all.h 2009-10-03 01:04:14.000000000 +0200
+@@ -9,11 +9,16 @@
+ #ifndef INTERFACEGRAPHIC_TGL_ALL_H
+ #define INTERFACEGRAPHIC_TGL_ALL_H
+
+-typedef int Tint;
+-typedef float Tfloat;
+-typedef char Tchar;
+-typedef char Tbool;
+-typedef unsigned int Tuint;
++typedef int Tint;
++typedef float Tfloat;
++/* PCD 04/07/07 */
++typedef double Tdouble;
++/* Tchar is treated as a signed char in visualization code,
++therefore it should be made signed explicitly, as on Linux
++-funsigned-char option is specified when building OCCT */
++typedef signed char Tchar;
++typedef char Tbool;
++typedef unsigned int Tuint;
+
+ #define TGL_SP 1
+ #define TGL_DP 0
+@@ -37,6 +42,7 @@
+ #define TNotDone 0
+
+ typedef Tfloat Tmatrix3[4][4];
++
+ typedef enum
+ {
+ TPreConcatenate,
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_GraphicDriver.cxx OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_GraphicDriver.cxx
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_GraphicDriver.cxx 2008-06-02 16:04:17.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_GraphicDriver.cxx 2009-10-03 01:04:22.000000000 +0200
+@@ -1,38 +1,38 @@
++/*
++ File OpenGl_GraphicDriver.cxx
++ Created Mardi 28 janvier 1997
++ Author CAL
+
+-// File OpenGl_GraphicDriver.cxx
+-// Created Mardi 28 janvier 1997
+-// Author CAL
++-Copyright MatraDatavision 1997
+
+-//-Copyright MatraDatavision 1997
++-Version
+
+-//-Version
++-Design Declaration des variables specifiques aux Drivers
++-Warning Un driver encapsule les Pex, Phigs et OpenGl drivers
+
+-//-Design Declaration des variables specifiques aux Drivers
++-References
+
+-//-Warning Un driver encapsule les Pex, Phigs et OpenGl drivers
++-Language C++ 2.0
+
+-//-References
++-Declarations
+
+-//-Language C++ 2.0
+-
+-//-Declarations
+-
+-// for the class
++ for the class
++*/
+ #include <OpenGl_GraphicDriver.ixx>
+
+ #ifdef WNT
+ #include <malloc.h>
+ #endif
+-
+-//-Aliases
+-
+-//-Global data definitions
+-
+-// Pour eviter de "mangler" MetaGraphicDriverFactory, le nom de la
+-// fonction qui cree un Graphic3d_GraphicDriver.
+-// En effet, ce nom est recherche par la methode DlSymb de la
+-// classe OSD_SharedLibrary dans la methode SetGraphicDriver de la
+-// classe Graphic3d_GraphicDevice
++/*
++-Aliases
++-Global data definitions
++
++ Pour eviter de "mangler" MetaGraphicDriverFactory, le nom de la
++ fonction qui cree un Graphic3d_GraphicDriver.
++ En effet, ce nom est recherche par la methode DlSymb de la
++ classe OSD_SharedLibrary dans la methode SetGraphicDriver de la
++ classe Graphic3d_GraphicDevice
++*/
+ extern "C" {
+ #ifdef WNT /* disable MS VC++ warning on C-style function returning C++ object */
+ #pragma warning(push)
+@@ -44,22 +44,25 @@
+ (const Standard_CString AShrName) {
+ Handle(OpenGl_GraphicDriver) aOpenDriver = new OpenGl_GraphicDriver (AShrName);
+ return aOpenDriver;
+-// return new OpenGl_GraphicDriver (AShrName);
++/* return new OpenGl_GraphicDriver (AShrName); */
+ }
+ #ifdef WNT
+ #pragma warning(pop)
+ #endif
+ }
+
+-//-Constructors
++/*-Constructors */
+
+ OpenGl_GraphicDriver::OpenGl_GraphicDriver (const Standard_CString AShrName):Graphic3d_GraphicDriver (AShrName)
+ {
+-
++ /* Change this if traceing OpenGl_GraphicDriver method calls is needed */
++#if 0
++ SetTrace(1);
++#endif
++
+ #ifdef WNT
+ _set_sbh_threshold(1016);
+ #endif
+-
+ }
+
+-//-Methods, in order
++/*-Methods, in order */
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_LightBox.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_LightBox.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_LightBox.c 2001-09-21 09:57:39.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_LightBox.c 2009-10-03 01:04:22.000000000 +0200
+@@ -56,8 +56,10 @@
+ /*
+ * Constantes
+ */
+-
++#ifndef DEBUG
+ #define DEBUG 0
++#endif
++
+ #define NO_PRINT_DEBUG
+
+ #define GROW_SIZE_WKS 10
+@@ -554,16 +556,12 @@
+ void LightOn(void)
+ {
+ #ifdef PRINT_DEBUG
+- if (!lightOn)
+- printf("LightOn() \n");
+- else
+- printf("LightOn() inutile \n");
++ if(IsLightOn())
++ printf("LightOn(): lighting already enabled!");
++ else
++ printf("LightOn() succeeded");
+ #endif
+- if (!lightOn)
+- {
+- glEnable(GL_LIGHTING);
+- lightOn = GL_TRUE;
+- }
++ glEnable(GL_LIGHTING);
+ }
+
+
+@@ -574,16 +572,12 @@
+ void LightOff(void)
+ {
+ #ifdef PRINT_DEBUG
+- if (lightOn)
+- printf("LightOff() \n");
+- else
+- printf("LightOff() inutile \n");
++ if(!IsLightOn())
++ printf("LightOff(): lighting already disabled!");
++ else
++ printf("LightOff() succeeded");
+ #endif
+- if (lightOn)
+- {
+- glDisable(GL_LIGHTING);
+- lightOn = GL_FALSE;
+- }
++ glDisable(GL_LIGHTING);
+ }
+ /*-----------------------------------------------------------------*/
+
+@@ -593,6 +587,6 @@
+
+ GLboolean IsLightOn(void)
+ {
+- return (lightOn);
++ return glIsEnabled(GL_LIGHTING);
+ }
+ /*-----------------------------------------------------------------*/
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_PrimitiveArray.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_PrimitiveArray.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_PrimitiveArray.c 2008-08-15 15:54:06.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_PrimitiveArray.c 2009-10-03 01:04:23.000000000 +0200
+@@ -473,7 +473,7 @@
+ if( pfc ) glColor3fv ( pfc[i].rgb );
+ if( renderMode == GL_FEEDBACK )
+ draw_primitive_elements( p, draw_mode, p->bounds[i],
+- GL_UNSIGNED_INT, (GLenum*) &p->edges[n]);
++ GL_UNSIGNED_INT,(GLenum*) &p->edges[n]);
+ else
+ glDrawElements( draw_mode, p->bounds[i],
+ GL_UNSIGNED_INT, &p->edges[n]);
+@@ -493,7 +493,7 @@
+ } else if( p->num_edges > 0 ) {
+ if( renderMode == GL_FEEDBACK )
+ draw_primitive_elements( p, draw_mode, p->num_edges,
+- GL_UNSIGNED_INT, (GLenum*) &p->edges[0]);
++ GL_UNSIGNED_INT,(GLenum*) &p->edges[0]);
+ else
+ glDrawElements( draw_mode, p->num_edges,
+ GL_UNSIGNED_INT, p->edges);
+@@ -809,8 +809,8 @@
+ {
+ Tint i, j, n;
+ Tint edge_type=0, line_type_preserve=0;
+- Tfloat edge_width=0, line_width_preserve=0;
+- /*GLboolean texture_on;*/
++ Tfloat edge_width=0, line_width_preserve=0;
++ /* GLboolean texture_on;*/
+
+ GLint renderMode;
+
+@@ -875,7 +875,7 @@
+ #endif
+ if( renderMode == GL_FEEDBACK )
+ draw_primitive_elements( p, draw_mode, p->bounds[i],
+- GL_UNSIGNED_INT, (GLenum*) &p->edges[n]);
++ GL_UNSIGNED_INT, (GLenum*)&p->edges[n]);
+ else
+ glDrawElements( draw_mode, p->bounds[i],
+ GL_UNSIGNED_INT, &p->edges[n]);
+@@ -903,7 +903,7 @@
+ #endif
+ if( renderMode == GL_FEEDBACK )
+ draw_primitive_elements( p, draw_mode, p->num_edges,
+- GL_UNSIGNED_INT, (GLenum*) p->edges);
++ GL_UNSIGNED_INT,(GLenum*) p->edges);
+ else
+ glDrawElements( draw_mode, p->num_edges,
+ GL_UNSIGNED_INT, p->edges);
+@@ -1641,7 +1641,7 @@
+ for( i=n=0 ; i<p->num_bounds ; i++ ) {
+ if( renderMode == GL_FEEDBACK )
+ draw_primitive_elements( p, draw_mode, p->bounds[i],
+- GL_UNSIGNED_INT, (GLenum*) &p->edges[n]);
++ GL_UNSIGNED_INT,(GLenum*) &p->edges[n]);
+ else
+ glDrawElements( draw_mode, p->bounds[i],
+ GL_UNSIGNED_INT, &p->edges[n]);
+@@ -1659,7 +1659,7 @@
+ } else if( p->num_edges > 0 ) {
+ if( renderMode == GL_FEEDBACK )
+ draw_primitive_elements( p, draw_mode, p->num_edges,
+- GL_UNSIGNED_INT, (GLenum*) p->edges);
++ GL_UNSIGNED_INT,(GLenum*) p->edges);
+ else
+ glDrawElements( draw_mode, p->num_edges,
+ GL_UNSIGNED_INT, p->edges);
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_attri.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_attri.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_attri.c 2008-06-27 17:50:05.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_attri.c 2009-10-03 01:04:22.000000000 +0200
+@@ -57,11 +57,11 @@
+ ************************************************************************/
+
+ #define BUC60577 /*GG_101099 Enable to compute correctly
+-// transparency with more than one object in the view.
++ transparency with more than one object in the view.
+ */
+
+ #define IMP190100 /*GG Push and Pop polyline type and width
+-// attributes correctly.
++ attributes correctly.
+ */
+
+ #define G003 /*EUG degeneration mode management
+@@ -192,8 +192,8 @@
+ TEL_ALIGN_DATA TextAlign;
+ /*OCC7456 abd 14.12.2004 Text alingnment attributes */
+ Tint PolymarkerType;
+- Tint InteriorReflectanceEquation;
+- Tint BackInteriorReflectanceEquation;
++ Tint InteriorReflectanceEquation;
++ Tint BackInteriorReflectanceEquation;
+ TEL_SURF_PROP SurfaceAreaProperties;
+ TEL_SURF_PROP BackSurfaceAreaProperties;
+ TelCullMode FaceCullingMode;
+@@ -267,8 +267,8 @@
+ 0 }, /*Vertical Text Alignment*/
+ /*OCC7456 abd 14.12.2004 Text alingnment attributes */
+ TEL_PM_PLUS, /* PolymarkerType */
+- CALL_PHIGS_REFL_NONE, /* InteriorReflectanceEquation */
+- CALL_PHIGS_REFL_NONE, /* BackInteriorReflectanceEquation */
++ CALL_PHIGS_REFL_NONE, /* InteriorReflectanceEquation */
++ CALL_PHIGS_REFL_NONE, /* BackInteriorReflectanceEquation */
+ { 0.2F, 0.8F, 0.1F, 0.0F, /* Coef d eclairage */
+ 1.0F, 10.0F, 0.0F,
+ 1, 1, 1, 0, 0, /* Etat des eclairage */
+@@ -849,7 +849,7 @@
+ #ifdef GER61394
+ if( antiAliasingMode & 2 ) glEnable(GL_POLYGON_SMOOTH);
+ #endif
+- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
++ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable (GL_BLEND);
+ }
+ }
+@@ -1454,7 +1454,7 @@
+ /* ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate ) */
+ /*case TelTransformPersistenceFlag:
+ k[ i ] -> data.ldata = attri_tail->TransPersFlag;
+- //transform_persistence_begin( attri_tail->TransPersFlag );
++ transform_persistence_begin( attri_tail->TransPersFlag );
+ break;
+ */
+ case TelTransformPersistence:
+@@ -1539,7 +1539,7 @@
+ printf(" controle mode rm == CALL_PHIGS_REFL_NONE : %d\n", rm == CALL_PHIGS_REFL_NONE);
+ #endif
+
+- if( rm == CALL_PHIGS_REFL_NONE ) return;
++ if( rm == CALL_PHIGS_REFL_NONE ) return;
+
+ /*
+ * Gestion de la transparence
+@@ -1785,7 +1785,7 @@
+ }
+ else
+ {
+- newDiff3 = 1.0F;
++ newDiff3 = 1.0F;
+ if (SecondPassDo)
+ {
+ newDiff3 = prop->env_reflexion;
+@@ -1803,11 +1803,24 @@
+ differs from the previous value */
+ if ( mDiff[0] != 0.0 || mDiff[1] != 0.0 || mDiff[2] != 0.0
+ || fabs(mDiff[3] - newDiff3) > 0.01 )
++
+ {
+ mDiff[0] = 0.0F;
+ mDiff[1] = 0.0F;
+ mDiff[2] = 0.0F;
+ mDiff[3] = newDiff3;
++
++ if (SecondPassDo)
++ {
++ mDiff[3] = prop->env_reflexion;
++ }
++ else
++ {
++ if (need_trans) mDiff[3] = prop->trans;
++ /* si le materiau reflechi la scene environnante,
++ alors il faudra faire une seconde passe */
++ if (prop->env_reflexion != 0.0) SecondPassNeeded = 1;
++ }
+
+ glMaterialfv(face, GL_DIFFUSE, mDiff);
+ #ifdef TRACE_MATERIAL
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_execstruct.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_execstruct.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_execstruct.c 2005-09-16 19:35:46.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_execstruct.c 2009-10-03 01:04:23.000000000 +0200
+@@ -28,8 +28,11 @@
+ 16-06-2000 : ATS,GG : G005 : Some conditions for execution of PARRAY primitives
+
+ ************************************************************************/
++#ifdef DEBUG
++#define TRACE
++#define TRACE_EXEC
++#endif
+
+-#define xTRACE
+ #define G003 /* EUG 16-09-99 G003 ZBufferAuto treatment
+ */
+
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_initelem.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_initelem.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_initelem.c 2005-09-16 19:35:47.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_initelem.c 2009-10-03 01:04:22.000000000 +0200
+@@ -982,14 +982,14 @@
+ Tint i, k1, k2, offset;
+ unsigned char raster[] = {
+
+- 0x08,0x00,
+- 0x08,0x00,
+- 0x08,0x00,
+- 0x08,0x00,
+- 0xff,0x80,
+- 0x08,0x00,
+- 0x08,0x00,
+- 0x08,0x00,
++ 0x08,0x00,
++ 0x08,0x00,
++ 0x08,0x00,
++ 0x08,0x00,
++ 0xff,0x80,
++ 0x08,0x00,
++ 0x08,0x00,
++ 0x08,0x00,
+ 0x08,0x00, /* PLUS 9x9 = 1.0 */
+
+ 0x04,0x00,
+@@ -2193,8 +2193,6 @@
+ #ifdef OCC7667
+ GLsizei w, h, size, j;
+ #endif
+-
+-
+ k1 = i / TEL_NO_OF_SIZES;
+ k2 = i % TEL_NO_OF_SIZES;
+ offset = array[k1][k2].offset;
+@@ -2207,9 +2205,14 @@
+ glNewList( (GLuint) array[k1][k2].str[0]+markerBase, GL_COMPILE);
+
+ #ifdef OCC7667
+- glBitmap( w, h, (float)(array[k1][k2].width) / ( float )2.0,
++
++#if 1
++ glBitmap( w, h, (float)(array[k1][k2].width) / ( float )2.0,
+ (float)(array[k1][k2].height) / ( float )2.0,
+ ( float )30.0, ( float )30.0, (const GLubyte *) &raster[offset]);
++#else
++ glBitmap( w, h, (float) (w / 2), (float) (h / 2), 30.0f, 30.0f, (const GLubyte *) &raster[offset]);
++#endif
+
+ glPassThrough( GL2PS_MARKER );
+ glPassThrough( ( GLfloat ) array[k1][k2].width );
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_subrvis.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_subrvis.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_subrvis.c 2005-03-18 16:17:17.000000000 +0100
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_subrvis.c 2009-10-03 01:04:23.000000000 +0200
+@@ -60,17 +60,17 @@
+
+ #ifdef WNT
+ #define BUC60579 /*GG_240999 Under WNT,resets the ws attributes for each
+-// created view-manager and not only for the first
++ created view-manager and not only for the first
+ */
+ #endif
+
+ #define IMP190100 /*GG Reverse the front & back depth cueing planes
+-// position.
++ position.
+ */
+
+ #define RIC120302 /*GG Use TxglSetWindow instead TxglCreateWindow
+-// when a GLXContext is given
+-// Add call_subr_displayCB function
++ when a GLXContext is given
++ Add call_subr_displayCB function
+ */
+
+ #define BUC61044 /* 25/10/01 SAV ; added functionality to control gl depth testing
+@@ -735,8 +735,17 @@
+ call_subr_close_ws( CALL_DEF_VIEW * aview )
+ {
+ CMN_KEY_DATA key;
++
++/* PCD 26/06/07 ------ Starts */
+ #ifdef OCC1188
+ tsm_bg_texture texture;
++#endif
++ /* make sure the proper rendering context is current */
++ TsmGetWSAttri( aview->WsId, WSWindow, &key );
++ TxglWinset( call_thedisplay, (Window) key.ldata );
++
++#ifdef OCC1188
++/* PCD 26/06/07 ------ Ends */
+
+ TsmGetWSAttri( aview->WsId, WSBgTexture, &key );
+ texture = key.pdata;
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_tXfm.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_tXfm.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_tXfm.c 2008-08-15 15:54:07.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_tXfm.c 2009-10-03 01:04:23.000000000 +0200
+@@ -3,24 +3,24 @@
+ FONCTION :
+ ----------
+ File OpenGl_tXfm.c :
+-
++
+
+ REMARQUES:
+- ----------
+-
+- Dans la methode alloc_new_font() des que l'on depasse
++ ----------
++
++ Dans la methode alloc_new_font() des que l'on depasse
+ (last_font > CACHE_SIZE) les performances s'ecroulent.
+-
++
+
+ HISTORIQUE DES MODIFICATIONS :
+ --------------------------------
+ xx-xx-xx : xxx ; Creation.
+ 26-06-96 : FMN ; Correction des textes clippes. On utilise glXUseXFont()
+- 27-06-96 : FMN ; Correction hauteur des textes.
++ 27-06-96 : FMN ; Correction hauteur des textes.
+ 14-02-97 : FMN ; Suppression de MYGLXUSEXFONT
+ 12-09-97 : CAL ; Protection si tXfmfindfont echoue.
+ modifs dans tXfmfindfont, tXfmsetfont et tXfmprstr
+- 02-11-98 : FMN ; PRO12916: Desactivation de la gestion du CharacterExpansionFactor
++ 02-11-98 : FMN ; PRO12916: Desactivation de la gestion du CharacterExpansionFactor
+ qui n'est pas implementee. Ce point sera traite de maniere
+ complete avec l'utilisation d'une librairie specifique
+ de type GLC. Pour le moment il est preferable de le
+@@ -89,14 +89,14 @@
+ #else
+ #define MAX_X11_COORD (1 << 15)
+ #endif
+-
++
+ #define MAX_GLYPHS_PER_GRAB 512 /* this is big enough for 2^9 glyph character sets */
+
+ /*----------------------------------------------------------------------*/
+ /*
+ * Prototypes fonctions internes
+ */
+-
++
+ static int getXfontind(float *, float , int );
+ static void getXsizefromstr(float *, char **, int );
+ static txfmfonthandle alloc_new_font(char *);
+@@ -111,77 +111,84 @@
+ static txfmfonthandle tXfmfontset[CACHE_SIZE];
+
+ static int last_font = 0;
+-static FontEntry fontEntry[] =
++static FontEntry fontEntry[] =
+ {
+ {"Courier",
+ "-adobe-courier-medium-r-normal--*-*-*-*-*-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ 0},
++ {"Courier-Bold",
++ "-adobe-courier-bold-r-normal--*-*-*-*-*-*-iso8859-1",
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Times-Roman",
+ "-adobe-times-medium-r-normal--*-*-*-*-*-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Times-Bold",
+ "-adobe-times-bold-r-normal--*-*-*-*-*-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Times-Italic",
+ "-adobe-times-medium-i-normal--*-*-*-*-*-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Times-BoldItalic",
+ "-adobe-times-bold-i-normal--*-*-*-*-*-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"ZapfChancery-MediumItalic",
+ "-adobe-itc zapf chancery-medium-i-normal--*-*-*-*-*-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Symbol",
+ "-adobe-symbol-medium-r-normal--*-*-*-*-*-*-adobe-fontspecific",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"ZapfDingbats",
+ "-adobe-itc zapf dingbats-medium-r-normal--*-*-*-*-*-*-adobe-fontspecific",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Rock",
+ "-sgi-rock-medium-r-normal--*-*-*-*-p-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0},
+ {"Iris",
+ "--iris-medium-r-normal--*-*-*-*-m-*-iso8859-1",
+- { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
+- 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
++ { 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F,
++ 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F},
+ 0}
+ };
+
+@@ -196,16 +203,16 @@
+ {
+ int dir = 0, asc = 0, des = 0;
+ XCharStruct mes;
+-
++
+ if (current_fonthandle != NULL && current_fonthandle->fontInfo != NULL && str != NULL )
+ {
+ XTextExtents(current_fonthandle->fontInfo, str, strlen(str), &dir, &asc, &des, &mes);
+
+ #ifdef TRACE
+- printf("XTextExtents::asc = %d des = %d width = %d \n", asc, des, mes.width);
++ printf("XTextExtents::asc = %d des = %d width = %d \n", asc, des, mes.width);
+ #endif
+ *Ascent = current_fonthandle->fontInfo->ascent;
+- *Descent = current_fonthandle->fontInfo->descent;
++ *Descent = current_fonthandle->fontInfo->descent;
+ *Width = mes.width;
+ }
+ else
+@@ -234,10 +241,10 @@
+ req_size = bestfont_size*1.36F; /* 98/72 dpi*/
+ #endif
+
+- /*
+- * Verifie que la (fonte,taille) n'ont pas deja ete traite
++ /*
++ * Verifie que la (fonte,taille) n'ont pas deja ete traite
+ */
+-
++
+ for (i=0, a=0; i < last_font && !found_font; i++) {
+ if(strcmp(tXfmfontset[i]->fontname, fontname) == 0) {
+ if((tXfmfontset[i]->charsize) == req_size) {
+@@ -254,10 +261,10 @@
+ }
+ if (found_font) return (current_fonthandle);
+
+- /*
++ /*
+ * Recherche dans les fontes disponibles: fontEntry
+ */
+-
++
+ for (i=0 ; i< NUM_FONT_ENTRIES ; i++) {
+ if( strcmp(fontname, fontEntry[i].name) == 0 ) {
+ found_entry = 1;
+@@ -296,7 +303,7 @@
+ break;
+ }
+ }
+-
++
+ if (found_font) return (current_fonthandle);
+
+ fonthandle = alloc_new_font(fontname);
+@@ -328,7 +335,7 @@
+
+ fonthandle = current_fonthandle;
+
+- isNeedUpdate = 0; /* = 1 if doesn't exist font or
++ isNeedUpdate = 0; /* = 1 if doesn't exist font or
+ if needs for regenerate font ( Number of LastFont is exeeds maxFontSize,
+ i.e.fonthandle->dirty = 1 ) */
+ if ( fonthandle->listBase ) {
+@@ -337,14 +344,14 @@
+ isNeedUpdate = 0;
+ pBase = fonthandle->listBase; /*OCC6247*/
+ /*return(fonthandle->listBase);*/ /*OCC6247*/
+- }
++ }
+ else /* dirty , reutilise fonthandle */
+- {
++ {
+ isNeedUpdate = 1;
+ pBase = fonthandle->listBase;
+ }
+- }
+- else
++ }
++ else
+ {
+ isNeedUpdate = 1; /* Nouvelle fonte */
+ pBase = glGenLists(NUM_CHAR_FONT);
+@@ -371,10 +378,10 @@
+ fonthandle->listBase = pBase;
+ fonthandle->dirty = 0;
+ fonthandle->fontInfo = fontInfo;
+-
++
+ fonthandle->xscale = txfmxscale;
+ fonthandle->yscale = txfmyscale;
+-
++
+ /* XFreeFont( fonthandle->dpy, fontInfo); */
+ return(pBase);
+ }
+@@ -398,7 +405,7 @@
+
+ /* OCC7456 abd 14.12.2004 Text alignment attributes */
+
+- if (Base == 0)
++ if (Base == 0)
+ return;
+
+ /* OCC7456 abd 14.12.2004 Text alignment attributes */
+@@ -455,9 +462,9 @@
+ glGetIntegerv( GL_VIEWPORT, (GLint*)viewport );
+
+ gluProject( x, y, z, (GLdouble*)modelMatrix, (GLdouble*)projMatrix, (GLint*)viewport, &xw, &yw, &zw );
+- gluUnProject( xw - xdis, yw - ydis, zw,
++ gluUnProject( xw - xdis, yw - ydis, zw,
+ (GLdouble*)modelMatrix, (GLdouble*)projMatrix, (GLint*)viewport,
+- &xv, &yv, &zv );
++ &xv, &yv, &zv );
+ glRasterPos3d(xv, yv, zv);
+
+ /*OCC7456 abd 14.12.2004 Text alignment attributes */
+@@ -466,11 +473,11 @@
+ /* SAMTECH modif -- Geoff Levner 19/7/2007 -- added render mode test */
+ glGetIntegerv(GL_RENDER_MODE, &renderMode);
+ if (renderMode == GL_FEEDBACK) {
+- exportText( (char*) str, current_fontname,
+- current_fonthandle->charsize * call_tox_getpitchsize(),
+- x, y, z, GL_FALSE );
+- glRasterPos3f( x, y, z );
+- }
++ exportText((char*) str, current_fontname,
++ current_fonthandle->charsize * call_tox_getpitchsize(),
++ x, y, z, GL_FALSE );
++ glRasterPos3f( x, y, z );
++ }
+ #endif
+
+ glPushAttrib(GL_LIST_BIT);
+@@ -600,7 +607,7 @@
+ #endif
+
+ typedef struct _font_handle {
+-
++
+ GLuint listBase;
+ HGLRC curRC;
+ float xScale;
+@@ -632,7 +639,7 @@
+ float charRatios[MAX_NB_CHARS];
+ } TM_FONT_HANDLE;
+ #endif
+-
++
+ typedef struct _font_entry {
+
+ char* name;
+@@ -674,9 +681,9 @@
+ static int useTexFont = 0;
+ static int curTexFont = -1;
+ TEL_POINT char_offsets[4] =
+- { { 0., 0., 0. },
+- { 0., 0., 0. },
+- { 0., 0., 0. },
++ { { 0., 0., 0. },
++ { 0., 0., 0. },
++ { 0., 0., 0. },
+ { 0., 0., 0. } };
+
+ #endif
+@@ -695,13 +702,13 @@
+ void sizeString(char *str, GLint *Width, GLint *Ascent, GLint *Descent)
+ {
+ /* int dir, asc, des;*/
+-
++
+ if (curFont != -1)
+ {
+- *Ascent = (int)fontEntry[ curFont ].fs[ curSize ].lHeight
++ *Ascent = (int)fontEntry[ curFont ].fs[ curSize ].lHeight
+ - (int)fontEntry[ curFont ].fs[ curSize ].lInternalLeading
+ - (int)fontEntry[ curFont ].fs[ curSize ].lDescent;
+- *Descent = (int)fontEntry[ curFont ].fs[ curSize ].lDescent;
++ *Descent = (int)fontEntry[ curFont ].fs[ curSize ].lDescent;
+ *Width = fontEntry[ curFont ].fs[ curSize ].lWidth * strlen(str);
+ }
+ else
+@@ -711,7 +718,7 @@
+ *Width = 0;
+ }
+ #ifdef TRACE
+- printf("sizeString::asc = %d des = %d width = %d \n", *Ascent, *Descent, *Width);
++ printf("sizeString::asc = %d des = %d width = %d \n", *Ascent, *Descent, *Width);
+ #endif
+ }
+
+@@ -720,12 +727,18 @@
+
+ /* loadTexFont(): Prepares a square texture containing glyphs for the given font */
+
+-/* Current limitations:
++/* Current limitations:
+ - texture of fixed size 256 x 256 pixels is used,
+ - each glyph occupies a 16 x 16 square in the texture,
+ - fixed font height (16) is used for texture creation */
++
++
++
++
+ static GLint loadTexFont(char* fontName, TM_FONT_HANDLE* fontHandle)
+ {
++
++
+ GLint tex_id = -1;
+ HFONT font;
+ HDC hMemDC, hDC = NULL;
+@@ -734,13 +747,15 @@
+ BITMAPINFO bi;
+ HBITMAP hBmp, hOldBmp;
+ const int spacing = 2; /* spacing between characters in a string */
+- GLubyte fontBits [256 * 256 * 3]; /* font bitmap array: RGB */
+- GLubyte ifontBits[256 * 256 * 2]; /* texture array: luminance and alpha */
++ /* DFA 2007-04-17 make these static to prevent stack overflow. */
++ static GLubyte fontBits [256 * 256 * 3]; /* font bitmap array: RGB */
++ static GLubyte ifontBits[256 * 256 * 2]; /* texture array: luminance and alpha */
+ int charWidths[MAX_NB_CHARS];
+
+ if ( !fontHandle )
+ return tex_id;
+
++
+ memset(fontHandle, 0, sizeof(TM_FONT_HANDLE));
+
+ fontHandle->curRC = wglGetCurrentContext();
+@@ -766,7 +781,7 @@
+ hDC = wglGetCurrentDC();
+ hMemDC = CreateCompatibleDC(hDC);
+ hBmp = CreateCompatibleBitmap(hDC, fontHandle->texSize, fontHandle->texSize);
+- hOldBmp = (HBITMAP)SelectObject(hMemDC, hBmp);
++ hOldBmp = (HBITMAP)SelectObject(hMemDC, hBmp);
+ SelectObject(hMemDC, font);
+ SetTextColor(hMemDC, RGB(255, 255, 255));
+ SetBkColor (hMemDC, RGB(0, 0, 0));
+@@ -791,7 +806,7 @@
+ bi.bmiHeader.biHeight = -fontHandle->texSize;
+ bi.bmiHeader.biWidth = fontHandle->texSize;
+ bi.bmiHeader.biCompression = BI_RGB;
+- SelectObject(hMemDC, hOldBmp);
++ SelectObject(hMemDC, hOldBmp);
+ num = GetDIBits(hMemDC, hBmp, 0, fontHandle->texSize, fontBits, &bi, DIB_RGB_COLORS);
+
+ /* prepare an array of alpha and luminance values */
+@@ -803,38 +818,51 @@
+ }
+
+ /* create the font texture */
++
++ /*BUG OCC13611 - remember parameters of texture mapping*/
++ glPushAttrib( GL_ENABLE_BIT | GL_TEXTURE_BIT );
++
+ glGenTextures(1, &tex_id);
+ glBindTexture(GL_TEXTURE_2D, tex_id);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
+ GL_REPEAT);
+- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
+ GL_NEAREST);
+- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
++ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+ GL_NEAREST);
+
+- glTexImage2D(GL_TEXTURE_2D,
+- 0,
++ glTexImage2D(GL_TEXTURE_2D,
++ 0,
+ GL_INTENSITY,
+- fontHandle->texSize,
+- fontHandle->texSize,
+- 0,
+- GL_LUMINANCE_ALPHA,
+- GL_UNSIGNED_BYTE,
++ fontHandle->texSize,
++ fontHandle->texSize,
++ 0,
++ GL_LUMINANCE_ALPHA,
++ GL_UNSIGNED_BYTE,
+ ifontBits);
+
+ fontHandle->textureId = tex_id;
+
++ glPopAttrib();
++
++ /*
++ * free windows resources
++ */
++ DeleteObject(font);
++ DeleteObject(hBmp);
++ DeleteDC(hMemDC);
++
+ return tex_id;
+ }
+
+
+-/* texPrint(): displays a string using texture <tex_id>,
++/* texPrint(): displays a string using texture <tex_id>,
+ <offsets> is used to convert quickly 16-pixel offset in viewport co-ordinates
+ to offsets in world co-ordinates */
+
+-/* Current limitations:
++/* Current limitations:
+ - texture of fixed size 256 x 256 pixels is used */
+ static void texPrint( Tchar* data, TM_FONT_HANDLE* fontHandle, TEL_POINT* offsets )
+ {
+@@ -862,11 +890,11 @@
+
+ glBindTexture(GL_TEXTURE_2D, fontHandle->textureId);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+-
++
+ l = strlen(data);
+
+ glBegin(GL_QUADS);
+-
++
+ for (i = 0; i < l; i++)
+ {
+ code = data[i];
+@@ -880,7 +908,7 @@
+ tx1 = b / divisor;
+ ty0 = c / divisor;
+ ty1 = d / divisor;
+-
++
+ glTexCoord2f(tx0, ty0);
+ glVertex3f(x, y, z);
+ glTexCoord2f(tx1, ty0);
+@@ -906,15 +934,17 @@
+ void WNTUseTexMappedFont( int flag )
+ {
+ int i;
+-
+ if (flag && !useTexFont && curFont != -1)
+ {
+ FONT_ENTRY* fe = &fontEntry[curFont];
+ HGLRC curRC = wglGetCurrentContext();
+
+ for (i = 0; i < MAX_FONT_TEXTURES; i++ )
+- {
+- if (fe->tfh[i].curRC == curRC)
++ {
++ /*BUG OCC15715*/
++ /* Looking for an existing texture for the current RC or the first empty item in
++ the texture cache (with curRC == 0) */
++ if (fe->tfh[i].curRC == curRC ||fe->tfh[i].curRC == 0)
+ break;
+ }
+
+@@ -924,10 +954,14 @@
+ glDeleteTextures(1, &(fe->tfh[i].textureId));
+ }
+
+- if ( fe->tfh[i].curRC != curRC || fe->tfh[i].textureId == 0)
+- loadTexFont( fe->lfFaceName, &(fe->tfh[i]) );
++ if ( fe->tfh[i].curRC !=curRC || fe->tfh[i].textureId == 0){
++ loadTexFont( fe->lfFaceName, &(fe->tfh[i]) );
++ }
++
++
++
++ curTexFont = i;
+
+- curTexFont = i;
+ }
+
+ useTexFont = flag;
+@@ -958,14 +992,14 @@
+ #ifdef OCC2934
+ texLoadNeeded = (useTexFont && curFont != i);
+ #endif
+-
++
+ fs = &( fontEntry[ i ].fs[ 0 ] );
+ curFont = i;
+
+ for ( i = 0; i < MAX_FONT_SIZES; ++i ) {
+-
++
+ if ( fs[ i ].charSize == 0 ) {
+-
++
+ curSize = i;
+
+ loadNewFont ( &( fs[ i ].fh[ 0 ] ), bestSize, TRUE );
+@@ -973,36 +1007,36 @@
+ break;
+
+ } else if ( fs[ i ].charSize == bestSize ) {
+-
++
+ curSize = i;
+ updateSizeUsage ();
+-
+- break;
+-
++
++ break;
++
+ } /* end if */
+-
++
+ } /* end for */
+
+ if ( i == MAX_FONT_SIZES ) {
+-
++
+ min_val = UINT_MAX;
+ min_idx = 0;
+-
++
+ for ( i = 0; i < MAX_FONT_SIZES; ++i )
+-
++
+ if ( fs[ i ].useCount < min_val ) {
+-
++
+ min_val = fs -> useCount;
+- min_idx = i;
+-
++ min_idx = i;
++
+ } /* end if */
+
+ curSize = min_idx;
+
+ loadNewFont ( &( fs[ min_idx ].fh[ 0 ] ), bestSize, TRUE );
+-
++
+ } /* end if */
+-
++
+ } /* end else */
+
+ #ifdef OCC2934
+@@ -1012,8 +1046,11 @@
+ HGLRC curRC = wglGetCurrentContext();
+
+ for (i = 0; i < MAX_FONT_TEXTURES; i++ )
+- {
+- if (fe->tfh[i].curRC == curRC)
++ {
++ /*BUG OCC15715*/
++ /* Looking for an existing texture for the current RC or the first empty item in
++ the texture cache (with curRC == 0) */
++ if (fe->tfh[i].curRC == curRC ||fe->tfh[i].curRC == 0)
+ break;
+ }
+
+@@ -1023,8 +1060,11 @@
+ glDeleteTextures(1, &(fe->tfh[i].textureId));
+ }
+
+- if ( fe->tfh[i].curRC != curRC || fe->tfh[i].textureId == 0)
+- loadTexFont( fe->lfFaceName, &(fe->tfh[i]) );
++
++ if ( fe->tfh[i].curRC != curRC || fe->tfh[i].textureId == 0){
++ loadTexFont( fe->lfFaceName, &(fe->tfh[i]) );
++
++ }
+
+ curTexFont = i;
+ }
+@@ -1054,13 +1094,13 @@
+ fh[ i ].yScale == yScale &&
+ fh[ i ].curRC == hGLRC
+ ) {
+-
++
+ retVal = fh[ i ].listBase;
+ curScale = i;
+ updateScaleUsage ();
+-
+- break;
+-
++
++ break;
++
+ } else if ( fh[ i ].xScale == 0.0F && fh[ i ].yScale == 0.0F ) {
+
+ newScale = TRUE;
+@@ -1069,7 +1109,7 @@
+ } /* end if */
+
+ if ( !retVal ) {
+-
++
+ if ( newScale ) {
+
+ fh[ i ].xScale = xScale;
+@@ -1080,19 +1120,19 @@
+ loadNewFont ( &fh[ i ], 0.0F, FALSE );
+
+ retVal = fh[ i ].listBase;
+-
++
+ } else {
+-
++
+ min_val = UINT_MAX;
+ min_idx = 0;
+-
+- for ( i = 0; i < MAX_FONT_SCALES; ++i )
+-
+- if ( fh[ i ].useCount < min_val ) {
+-
++
++ for ( i = 0; i < MAX_FONT_SCALES; ++i )
++
++ if ( fh[ i ].useCount < min_val ) {
++
+ min_val = fh -> useCount;
+- min_idx = i;
+-
++ min_idx = i;
++
+ } /* end if */
+
+ fh[ min_idx ].xScale = xScale;
+@@ -1101,7 +1141,7 @@
+ curScale = i;
+
+ loadNewFont ( &fh[ min_idx ], 0.0F, FALSE );
+-
++
+ retVal = fh[ min_idx ].listBase;
+
+ } /* end else ( newScale . . . ) */
+@@ -1188,10 +1228,10 @@
+ /* SAMTECH modif -- Geoff Levner 19/7/2007 -- added render mode test */
+ glGetIntegerv(GL_RENDER_MODE, &renderMode);
+ if (renderMode == GL_FEEDBACK) {
+- exportText( str, fontEntry[curFont].name,
+- ( GLfloat )fontEntry[ curFont ].fs[ curSize ].lHeight,
+- x, y, z, is2d!=0 );
+- }
++ exportText( str, fontEntry[curFont].name,
++ ( GLfloat )fontEntry[ curFont ].fs[ curSize ].lHeight,
++ x, y, z, is2d!=0 );
++}
+ #endif
+
+ #ifdef OCC2934
+@@ -1205,7 +1245,7 @@
+ glPushMatrix();
+
+ glTranslatef(x, y, z);
+-
++
+ texPrint( str, &(fontEntry[curFont].tfh[curTexFont]), char_offsets );
+
+ /* Restore previous matrices */
+@@ -1227,12 +1267,12 @@
+ glGetIntegerv( GL_VIEWPORT, (GLint*)viewport );
+
+ gluProject( x, y, z, (GLdouble*)modelMatrix, (GLdouble*)projMatrix, (GLint*)viewport, &xw, &yw, &zw );
+- gluUnProject( xw - xdis, yw - ydis, zw,
++ gluUnProject( xw - xdis, yw - ydis, zw,
+ (GLdouble*)modelMatrix, (GLdouble*)projMatrix, (GLint*)viewport,
+- &xv, &yv, &zv );
++ &xv, &yv, &zv );
+ glRasterPos3d(xv, yv, zv);
+ /*OCC7456 abd 14.12.2004 Text alingnment attributes */
+- //glRasterPos3f(x, y, z);
++ /*glRasterPos3f(x, y, z); */
+ }
+ #endif
+
+@@ -1262,10 +1302,10 @@
+ glPixelTransferi ( GL_MAP_COLOR, GL_TRUE );
+
+ glCallLists ( lstrlen ( str ), GL_UNSIGNED_BYTE, str );
+-
+- /*san -- 12/11/2004 -- OCC7190 Texture-mapped fonts don't work,
++
++ /*san -- 12/11/2004 -- OCC7190 Texture-mapped fonts don't work,
+ as soon as any old-style (bitmap) text is displayed */
+- glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
++ glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
+
+ glDisable ( GL_ALPHA_TEST );
+
+@@ -1287,18 +1327,18 @@
+ ZeroMemory ( ( PVOID )&lf, sizeof ( LOGFONT ) );
+
+ if ( newSize ) {
+-
++
+ fhTemp = fontEntry[ curFont ].fs[ curSize ].fh;
+
+ for ( i = 0; i < MAX_FONT_SCALES; ++i )
+-
++
+ if ( fhTemp[ i ].listBase ) {
+
+ glDeleteLists (fhTemp[ i ].listBase, fontEntry[ curFont ].fs[ curSize ].listRange);
+ ZeroMemory ( ( PVOID )&fhTemp[ i ], sizeof ( FONT_HANDLE ) );
+
+ } else
+-
++
+ break;
+
+ fh -> xScale = 1.0F;
+@@ -1333,14 +1373,14 @@
+ fontEntry[ curFont ].fs[ curSize ].lInternalLeading = tm.tmInternalLeading;
+ fontEntry[ curFont ].fs[ curSize ].lDescent = tm.tmDescent;
+
+- }
+- else
++ }
++ else
+ { /* new scale */
+-
++
+ if ( fh -> listBase )
+
+ glDeleteLists (fh -> listBase, fontEntry[ curFont ].fs[ curSize ].listRange);
+-
++
+ lf.lfHeight = ( LONG )( fontEntry[ curFont ].fs[ curSize ].lHeight * fh -> yScale );
+ lf.lfWidth = ( LONG )( fontEntry[ curFont ].fs[ curSize ].lWidth * fh -> xScale );
+ lf.lfCharSet = ANSI_CHARSET;
+@@ -1359,7 +1399,7 @@
+ DeleteObject ( hFont );
+
+ fh -> curRC = wglGetCurrentContext ();
+-
++
+ } /* end else ( newSize . . . ) */
+
+ } /* end loadNewFont */
+@@ -1372,8 +1412,8 @@
+
+ if ( fontEntry[ curFont ].fs[ curSize ].useCount == UINT_MAX )
+ for ( i = 0; i < MAX_FONT_SIZES; ++i )
+- fontEntry[ curFont ].fs[ i ].useCount >>= 1;
+-
++ fontEntry[ curFont ].fs[ i ].useCount >>= 1;
++
+ ++fontEntry[ curFont ].fs[ curSize ].useCount;
+
+ } /* end updateSizeUsage */
+@@ -1386,7 +1426,7 @@
+
+ if ( fontEntry[ curFont ].fs[ curSize ].fh[ curScale ].useCount == UINT_MAX )
+ for ( i = 0; i < MAX_FONT_SCALES; ++i )
+- fontEntry[ curFont ].fs[ curSize ].fh[ i ].useCount >>= 1;
++ fontEntry[ curFont ].fs[ curSize ].fh[ i ].useCount >>= 1;
+
+ ++fontEntry[ curFont ].fs[ curSize ].fh[ curScale ].useCount;
+
+@@ -1424,7 +1464,7 @@
+ glRasterPos2f( x, y );
+ else
+ glRasterPos3f( x, y, z );
+-
++
+ glBitmap( 1, 1, 0, 0, 0, 0, &zero );
+
+ glPassThrough( height );
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_telem_util.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_telem_util.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_telem_util.c 2008-07-25 16:03:54.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_telem_util.c 2009-10-03 01:04:22.000000000 +0200
+@@ -3,18 +3,18 @@
+ FONCTION :
+ ----------
+ File OpenGl_telem_util :
+-
++
+
+ REMARQUES:
+- ----------
+-
++ ----------
++
+
+ HISTORIQUE DES MODIFICATIONS :
+ --------------------------------
+ xx-xx-xx : xxx ; Creation.
+ 07-02-96 : FMN ; - Ajout trace
+ - Suppression code inutile
+- 08-03-96 : FMN ; - Ajout include manquant
++ 08-03-96 : FMN ; - Ajout include manquant
+ 01-04-96 : CAL ; Integration MINSK portage WNT
+ 15-04-96 : CAL ; Integration travail PIXMAP de Jim ROTH
+ 22-04-96 : FMN ; Ajout TelReadImage TelDrawImage
+@@ -35,7 +35,7 @@
+ 18-07-97 : FMN ; Utilisation de la toolkit sur les lights
+ 07-10-97 : FMN ; Simplification WNT + correction Transient
+ 05-12-97 : FMN ; PRO11168: Suppression TglActiveWs pour project/unproject
+- 23-12-97 : FMN ; Suppression TelSetFrontFaceAttri et TelSetBackFaceAttri
++ 23-12-97 : FMN ; Suppression TelSetFrontFaceAttri et TelSetBackFaceAttri
+ 30-12-97 : FMN ; CTS18312: Correction back material
+ 04-05-98 : CAL ; Contournement bug SGI octane bavure de pixels (PRO12899)
+ 30-09-98 : CAL ; Optimisation pour eviter de charger inutilement
+@@ -49,8 +49,9 @@
+ ************************************************************************/
+
+ #define IMP190100 /*GG To avoid too many REDRAW in immediat mode,
+-// Add TelMakeFrontAndBackBufCurrent() function
++ Add TelMakeFrontAndBackBufCurrent() function
+ */
++#define QTOCC_PATCH
+
+ /*----------------------------------------------------------------------*/
+ /*
+@@ -104,7 +105,7 @@
+ /*
+ * Variables statiques
+ */
+-
++
+ static Tint call_back_buffer_restored = TOff;
+
+ #ifndef WNT
+@@ -233,10 +234,10 @@
+ TelRemdupnames(Tint *ls, Tint num )
+ {
+ register Tint *ap, *bp, n;
+-
++
+ if( num < 2 )
+ return num;
+-
++
+ ap = bp = ls+1;
+ n = num-1;
+ while( n-- )
+@@ -246,7 +247,7 @@
+ else
+ bp++;
+ }
+-
++
+ return ap-ls;
+ }
+
+@@ -255,9 +256,9 @@
+ #define GPRECIS 0.000001
+ Tint TelGetPolygonNormal(tel_point pnts, Tint* indexs, Tint npnt, Tfloat *norm ) {
+ Tint status=0;
+-
++
+ norm[0] = norm[1] = norm[2] = 0.;
+- if( npnt > 2 ) {
++ if( npnt > 2 ) {
+ Tfloat a[3], b[3], c[3];
+ Tint i,j,i0,ii=0,jj;
+
+@@ -314,7 +315,7 @@
+ void
+ TelGetNormal(Tfloat *data1, Tfloat *data2, Tfloat *data3, Tfloat *norm ) {
+ Tfloat a[3], b[3];
+-
++
+ vecsub( a, data2, data1 );
+ vecsub( b, data3, data2 );
+ veccrs( norm, a, b );
+@@ -326,12 +327,12 @@
+ TelIsBackFace(Tmatrix3 n, Tfloat *nrm )
+ {
+ Tfloat r[4], m[4];
+-
++
+ veccpy(m,nrm);
+ m[3] = ( float )1.0;
+-
++
+ TelTranpt3( r, m, n );
+-
++
+ return r[2] < 0.0;
+ }
+
+@@ -384,7 +385,7 @@
+ {
+ register long i, j;
+ Tfloat sum;
+-
++
+ for( i = 0; i < 4; i++ )
+ {
+ for( j = 0, sum = ( float )0.0; j < 4; j++ )
+@@ -428,15 +429,15 @@
+ }
+ else
+ {
+- glDrawBuffer(GL_FRONT_AND_BACK);
+- glClearColor(bgcolr, bgcolg, bgcolb, ( float )1.0);
+- glClear(GL_COLOR_BUFFER_BIT);
++ /* QTOCC_PATCH by PCD: the frame buffer should not be cleared here
++ to avoid flicker. It is cleared properly in TelClearViews()
++ called by call_func_redraw_all_structs_begin() */
+ glDrawBuffer(GL_BACK);
+ }
+ #else
+- glDrawBuffer(GL_FRONT_AND_BACK);
+- glClearColor(bgcolr, bgcolg, bgcolb, ( float )1.0);
+- glClear(GL_COLOR_BUFFER_BIT);
++ /* QTOCC_PATCH by PCD: the frame buffer should not be cleared here
++ to avoid flicker. It is cleared properly in TelClearViews()
++ called by call_func_redraw_all_structs_begin() */
+ glDrawBuffer(GL_BACK);
+ #endif /* WNT */
+ }
+@@ -446,6 +447,7 @@
+ glClear(GL_COLOR_BUFFER_BIT);
+ }
+ return;
++
+ }
+
+
+@@ -455,7 +457,7 @@
+ #ifndef WNT
+
+ CMN_KEY_DATA data;
+-
++
+ if (TelTestPixmapDB())
+ {
+ glFlush();
+@@ -468,9 +470,9 @@
+ TsmGetWSAttri( ws, WSWindow, &data );
+ glXSwapBuffers ( call_thedisplay, data.ldata );
+ }
+-
++
+ #else
+-
++
+ SwapBuffers ( wglGetCurrentDC () );
+ TelFlush(0);
+
+@@ -545,7 +547,7 @@
+ glLoadIdentity ();
+
+ TelDisable (ws);
+- if (flag)
++ if (flag)
+ {
+ /*
+ * calcul de la projection de la boite
+@@ -565,7 +567,7 @@
+ && (TelProjectionRaster (ws, xm, ym, ZM, &xr[4], &yr[4]) == TSuccess)
+ && (TelProjectionRaster (ws, xm, YM, ZM, &xr[5], &yr[5]) == TSuccess)
+ && (TelProjectionRaster (ws, XM, YM, ZM, &xr[6], &yr[6]) == TSuccess)
+- && (TelProjectionRaster (ws, XM, ym, ZM, &xr[7], &yr[7]) == TSuccess))
++ && (TelProjectionRaster (ws, XM, ym, ZM, &xr[7], &yr[7]) == TSuccess))
+ {
+ xmr = ymr = (float ) shortreallast ();
+ XMR = YMR = (float ) shortrealfirst ();
+@@ -581,7 +583,7 @@
+ /* pour eviter les bavures de pixels ! */
+ xmr--;ymr--;
+ XMR++;YMR++;
+-
++
+ /*
+ * Ajout CAL : 10/05/96
+ * Si les MinMax viennent d'un ensemble de markers
+@@ -594,7 +596,7 @@
+ */
+ xmr -= CALL_DEF_DELTA; ymr -= CALL_DEF_DELTA;
+ XMR += CALL_DEF_DELTA; YMR += CALL_DEF_DELTA;
+-
++
+ /*
+ * Le rectangle projete peut-etre clippe
+ */
+@@ -619,7 +621,7 @@
+ if (ymr < 0) { height = (GLsizei) (YMR+1); ymr = 0; }
+ if (XMR > w) { width = (GLsizei) (w-xmr+1); }
+ if (YMR > h) { height = (GLsizei) (h-ymr+1); }
+-
++
+ /* cas ou les 2 coins sont en dehors de la fenetre */
+ if (XMR < 0) { xmr = 0; width = height = 1; }
+ if (YMR < 0) { ymr = 0; width = height = 1; }
+@@ -639,7 +641,7 @@
+ glCopyPixels ((GLint) xmr, (GLint) ymr, width, height, GL_COLOR);
+ /* TelFlush (1); */
+ }
+- else
++ else
+ {
+ glDrawBuffer (to);
+ /* TelClearViews (ws); */
+@@ -650,7 +652,7 @@
+ /* TelFlush (1); */
+ }
+ }
+- else
++ else
+ {
+ glDrawBuffer (to);
+ /* TelClearViews (ws); */
+@@ -666,7 +668,7 @@
+ glPopMatrix ();
+ glMatrixMode (GL_MODELVIEW);
+ glPopMatrix ();
+-
++
+ glDrawBuffer (GL_BACK);
+ return;
+ }
+@@ -694,17 +696,17 @@
+ gluOrtho2D ((GLdouble) 0., (GLdouble) w, 0., (GLdouble) h);
+ glMatrixMode (GL_MODELVIEW);
+ glLoadIdentity ();
+-
+- glReadBuffer(from);
+-
++
++ glReadBuffer(from);
++
+ glRasterPos2i (posx, posy);
+ TelDisable (ws);
+ glReadPixels (posx, posy, width, height, GL_RGBA, GL_UNSIGNED_BYTE, image);
+ TelEnable (ws);
+-
+- glReadBuffer(GL_BACK);
++
++ glReadBuffer(GL_BACK);
+ }
+-
++
+ return;
+ }
+
+@@ -731,16 +733,16 @@
+ gluOrtho2D ((GLdouble) 0., (GLdouble) w, 0., (GLdouble) h);
+ glMatrixMode (GL_MODELVIEW);
+ glLoadIdentity ();
+-
++
+ glDrawBuffer(to);
+-
++
+ glRasterPos2i (posx, posy);
+ TelDisable (ws);
+ glDrawPixels (width, height, GL_RGBA, GL_UNSIGNED_BYTE, image);
+ TelEnable (ws);
+
+- glDrawBuffer(GL_BACK);
+- }
++ glDrawBuffer(GL_BACK);
++ }
+ return;
+ }
+
+@@ -769,13 +771,13 @@
+ gluOrtho2D ((GLdouble) 0., (GLdouble) w, 0., (GLdouble) h);
+ glMatrixMode (GL_MODELVIEW);
+ glLoadIdentity ();
+-
++
+ glRasterPos2i (posx, posy);
+ TelDisable (ws);
+ glReadPixels (posx, posy, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, depths);
+ TelEnable (ws);
+ }
+-
++
+ return;
+ }
+
+@@ -811,7 +813,7 @@
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_FOG);
+ LightOff();
+-
++
+ glDisable(GL_LOGIC_OP);
+ glDisable(GL_STENCIL_TEST);
+ glDisable(GL_TEXTURE_1D);
+@@ -825,7 +827,7 @@
+ glPixelTransferi(GL_BLUE_BIAS, 0);
+ glPixelTransferi(GL_ALPHA_SCALE, 1);
+ glPixelTransferi(GL_ALPHA_BIAS, 0);
+-
++
+ /*
+ * Disable extensions that could slow down glDrawPixels.
+ * (Actually, you should check for the presence of the proper
+@@ -859,15 +861,15 @@
+ CMN_KEY_DATA key;
+ Tint vid; /* View index */
+ TEL_VIEW_REP vrep; /* View definition */
+-
++
+ GLint status;
+-
++
+ int i, j, k;
+ GLdouble objx, objy, objz;
+ GLdouble modelMatrix[16], projMatrix[16];
+ GLint viewport[4];
+ GLdouble winx, winy, winz;
+-
++
+ vid = ws;
+
+ if (TelGetViewRepresentation (ws, vid, &vrep) != TSuccess)
+@@ -908,7 +910,7 @@
+ *yr = ( Tfloat )winy;
+ return TSuccess;
+ }
+- else
++ else
+ {
+ *xr = 0.0F;
+ *yr = 0.0F;
+@@ -924,7 +926,7 @@
+ CMN_KEY_DATA key;
+ Tint vid; /* View index */
+ TEL_VIEW_REP vrep; /* View definition */
+-
++
+ int i, j, k;
+ GLdouble objx, objy, objz;
+ GLdouble modelMatrix[16], projMatrix[16];
+@@ -965,7 +967,7 @@
+
+ status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
+ &objx, &objy, &objz);
+-
++
+ if (status == GL_TRUE) {
+ *x = ( Tfloat )objx;
+ *y = ( Tfloat )objy;
+@@ -991,7 +993,7 @@
+ CMN_KEY_DATA key;
+ Tint vid; /* View index */
+ TEL_VIEW_REP vrep; /* View definition */
+-
++
+ int i, j, k;
+ GLdouble objx, objy, objz;
+ GLdouble objx1, objy1, objz1;
+@@ -1033,7 +1035,7 @@
+
+ status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
+ &objx, &objy, &objz);
+-
++
+ if (status == GL_TRUE) {
+ *x = ( Tfloat )objx;
+ *y = ( Tfloat )objy;
+@@ -1042,7 +1044,7 @@
+ winz = ( GLdouble ) -10.0;
+ status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
+ &objx1, &objy1, &objz1);
+-
++
+ if (status == GL_TRUE) {
+ *dx = ( Tfloat )(objx-objx1);
+ *dy = ( Tfloat )(objy-objy1);
+@@ -1075,7 +1077,7 @@
+ TelFlush(Tint wait)
+ {
+ if (wait)
+- {
++ {
+ #ifdef TRACE
+ printf("OPENGL: TelFlush: glFinish \n");
+ #endif
+@@ -1096,21 +1098,21 @@
+ TelIsBackFacePerspective(Tmatrix3 n, Tfloat *p1, Tfloat *p2, Tfloat *p3 )
+ {
+ Tfloat r1[4], r2[4], r3[4], m[4], norm[4];
+-
++
+ veccpy( m, p1 );
+ m[3] = ( float )1.0;
+ TelTranpt3( r1, m, n );
+ r1[0] /= r1[3];
+ r1[1] /= r1[3];
+ r1[2] /= r1[3];
+-
++
+ veccpy( m, p2 );
+ m[3] = ( float )1.0;
+ TelTranpt3( r2, m, n );
+ r2[0] /= r2[3];
+ r2[1] /= r2[3];
+ r2[2] /= r2[3];
+-
++
+ veccpy( m, p3 );
+ m[3] = ( float )1.0;
+ TelTranpt3( r3, m, n );
+@@ -1118,7 +1120,7 @@
+ r3[1] /= r3[3];
+ r3[2] /= r3[3];
+ TelGetNormal( r1, r2, r3, norm );
+-
++
+ return norm[2] < 0.0;
+ }
+
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_togl_inquireplane.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_togl_inquireplane.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_togl_inquireplane.c 2001-09-21 09:57:49.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_togl_inquireplane.c 2009-10-03 01:04:23.000000000 +0200
+@@ -1,7 +1,10 @@
+ #define GER61454 /*GG 14-09-99 Activates the model clipping planes
+-// GG 110800 UNDER LINUX and MESA 3.2, nothing can be done until
+-// gl context is open first.
++ GG 110800 UNDER LINUX and MESA 3.2, nothing can be done until
++ gl context is open first.
+ */
++#ifdef DEBUG
++#include <stdio.h>
++#endif
+
+ #include <OpenGl_tgl_all.h>
+ #include <OpenGl_tgl.h>
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_togl_redraw.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_togl_redraw.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_togl_redraw.c 2008-07-04 17:36:17.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_togl_redraw.c 2009-10-03 01:04:22.000000000 +0200
+@@ -24,19 +24,21 @@
+ 02.01.100 : JR : = 0 for Integer and = NULL for pointers
+ 02.02.100 " #include <GL/glu.h> for declaration of gluErrorString
+ 07-03-00 : GG : G004 use the already created pixmap.
+- Enable two side lighting before redrawing in pixmap.
++ Enable two side lighting before redrawing in pixmap.
+
+ ************************************************************************/
+
+-#define G004 /* VKH 15-11-99 redrawing view to a large pixmap
++#define G004 /* VKH 15-11-99 redrawing view to a large pixmap
+ */
+
+-#define IMP100701 /* GG Enable to display the view in
+- a pixamp with the required depth.
++#define IMP100701 /* GG Enable to display the view in
++ a pixamp with the required depth.
+ */
+
+-#define RIC120302 /* GG Enable to use the application display
+-// callback at end of traversal
++#define RIC120302 /* GG Enable to use the application display
++ callback at end of traversal
++ Modified P. Dolbey 09/06/07 to call back
++ before redrawing the overlayer
+ */
+
+ /*----------------------------------------------------------------------*/
+@@ -62,7 +64,7 @@
+ CALL_DEF_LAYER * anunderlayer,
+ CALL_DEF_LAYER * anoverlayer
+
+- Redraws all the structures displayed in the specified view.
++ Redraws all the structures displayed in the specified view.
+
+ call_togl_redraw_area (aview, anunderlayer, anoverlayer, x, y, width, height)
+ CALL_DEF_VIEW * aview,
+@@ -70,8 +72,8 @@
+ CALL_DEF_LAYER * anoverlayer,
+ int x,y,width,height
+
+- Redraws all the structures displayed in the specified view area
+- defined by it upper-left corner and pixel size.
++ Redraws all the structures displayed in the specified view area
++ defined by it upper-left corner and pixel size.
+ */
+
+ #ifdef G004
+@@ -88,17 +90,18 @@
+ int nBitsPerPixel);
+
+ extern GLboolean OpenGl_AVIWriter_AllowWriting();
++
+ #endif
+ GLboolean g_fBitmap;
+-#endif /*G004*/
++#endif /*G004*/
+
+
+ void EXPORT
+ call_togl_redraw
+ (
+- CALL_DEF_VIEW * aview,
+- CALL_DEF_LAYER * anunderlayer,
+- CALL_DEF_LAYER * anoverlayer
++ CALL_DEF_VIEW * aview,
++ CALL_DEF_LAYER * anunderlayer,
++ CALL_DEF_LAYER * anoverlayer
+ )
+ {
+ CMN_KEY_DATA data;
+@@ -106,25 +109,33 @@
+
+ if ( TsmGetWSAttri (aview->WsId, WSWindow, &data) != TSuccess ) return;
+ #ifdef G004
+- if ( !aview->DefBitmap.bitmap ) { /* redrawing view to the window */
+-#endif
+- if (TxglWinset (call_thedisplay, (Window) data.ldata) == TSuccess) {
+- call_func_redraw_all_structs_begin (aview->WsId);
+- if (anunderlayer->ptrLayer)
+- call_togl_redraw_layer2d (aview, anunderlayer);
+- call_func_redraw_all_structs_proc (aview->WsId);
+- if (anoverlayer->ptrLayer)
+- call_togl_redraw_layer2d (aview, anoverlayer);
+-#ifdef RIC120302
+- call_subr_displayCB(aview,OCC_REDRAW_WINDOW);
++ if ( !aview->DefBitmap.bitmap ) { /* redrawing view to the window */
+ #endif
+- call_func_redraw_all_structs_end (aview->WsId, swap);
+- call_togl_redraw_immediat_mode (aview);
+- }
++ if (TxglWinset (call_thedisplay, (Window) data.ldata) == TSuccess) {
++ call_func_redraw_all_structs_begin (aview->WsId);
++ if (anunderlayer->ptrLayer)
++ call_togl_redraw_layer2d (aview, anunderlayer);
++ call_func_redraw_all_structs_proc (aview->WsId);
++
++ /* Proposed by P.Dolbey and revised to keep also the old callback */
++ #ifdef RIC120302
++ call_subr_displayCB(aview, OCC_REDRAW_WINDOW | OCC_PRE_OVERLAY );
++ #endif
++
++ if (anoverlayer->ptrLayer)
++ call_togl_redraw_layer2d (aview, anoverlayer);
++
++ #ifdef RIC120302
++ call_subr_displayCB(aview,OCC_REDRAW_WINDOW);
++ #endif
++
++ call_func_redraw_all_structs_end (aview->WsId, swap);
++ call_togl_redraw_immediat_mode (aview);
++ }
+ #ifdef G004
+- } else {
+- CMN_KEY_DATA pixdata;
+- GLenum errorcode = 0;
++ } else {
++ CMN_KEY_DATA pixdata;
++ GLenum errorcode = 0;
+ #ifndef WNT
+ int n,sdesc[11];
+ XVisualInfo* XVInfo = NULL;
+@@ -134,8 +145,8 @@
+
+ XGetWindowAttributes ( call_thedisplay, (Window)data.ldata , &wattr );
+ #ifdef IMP100701
+- if( aview->DefBitmap.depth > 0 )
+- wattr.depth = aview->DefBitmap.depth;
++ if( aview->DefBitmap.depth > 0 )
++ wattr.depth = aview->DefBitmap.depth;
+ #endif
+ n = 0;
+ sdesc[n] = GLX_RGBA; n++;
+@@ -151,33 +162,33 @@
+ sdesc[n] = ( wattr.depth <= 8 ) ? 0 : 1; n++;
+ sdesc[n] = GLX_BLUE_SIZE; n++;
+ sdesc[n] = ( wattr.depth <= 8 ) ? 0 : 1; n++;
+-#ifdef BUG /* Redraw always in single buffer mode and don't swap ! */
++#ifdef BUG /* Redraw always in single buffer mode and don't swap ! */
+ char string[CALL_DEF_STRING_LENGTH];
+ if ( !call_util_osd_getenv ("CALL_OPENGL_NO_DBF", string, CALL_DEF_STRING_LENGTH) )
+ { sdesc[n] = GLX_DOUBLEBUFFER; n++; }
+ #endif
+- sdesc[n] = None; n++;
+-
+- XVInfo = glXChooseVisual ( call_thedisplay, DefaultScreen(call_thedisplay), sdesc );
+- if ( !XVInfo ) {
+- fprintf ( stderr, "Visual not available\n" );
+- return;
+- }
++ sdesc[n] = None; n++;
+
+- theContext = glXCreateContext ( call_thedisplay, XVInfo, NULL, GL_FALSE );
+-
+- theGLXPixmap = glXCreateGLXPixmap ( call_thedisplay, XVInfo, aview->DefBitmap.bitmap );
+-
+- if ( ! glXMakeCurrent (call_thedisplay, theGLXPixmap, theContext) )
+- {
+- errorcode = glGetError ();
+- fprintf ( stderr, "glXMakeCurrent failed: %d %s\n", errorcode, gluErrorString(errorcode) );
+- return;
+- }
++ XVInfo = glXChooseVisual ( call_thedisplay, DefaultScreen(call_thedisplay), sdesc );
++ if ( !XVInfo ) {
++ fprintf ( stderr, "Visual not available\n" );
++ return;
++ }
++
++ theContext = glXCreateContext ( call_thedisplay, XVInfo, NULL, GL_FALSE );
++
++ theGLXPixmap = glXCreateGLXPixmap ( call_thedisplay, XVInfo, aview->DefBitmap.bitmap );
++
++ if ( ! glXMakeCurrent (call_thedisplay, theGLXPixmap, theContext) )
++ {
++ errorcode = glGetError ();
++ fprintf ( stderr, "glXMakeCurrent failed: %d %s\n", errorcode, gluErrorString(errorcode) );
++ return;
++ }
+ #else /* WindowsXX code here */
+ HGLRC hglrc_old = wglGetCurrentContext ();
+ HDC hdc_old = wglGetCurrentDC ();
+- HDC hdc = (HDC) aview->DefBitmap.bitmap;
++ HDC hdc = (HDC) aview->DefBitmap.bitmap;
+ HGLRC hglrc = wglCreateContext (hdc);
+
+ if ( !hglrc || !wglMakeCurrent (hdc, hglrc) )
+@@ -187,51 +198,58 @@
+ return;
+ }
+ #endif
+- pixdata.ldata = aview->DefBitmap.width;
+- if ( TsmSetWSAttri (aview->WsId, WSWidth, &pixdata) != TSuccess ) return;
+- pixdata.ldata = aview->DefBitmap.height;
+- if ( TsmSetWSAttri (aview->WsId, WSHeight, &pixdata) != TSuccess ) return;
+-
+- /* generate new display lists */
+- TsmInitAttributes();
+-
+- glLightModeli((GLenum)GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
+-
+- glMatrixMode ( GL_MODELVIEW );
+- glViewport ( 0, 0, aview->DefBitmap.width, aview->DefBitmap.height );
+-
+- glDrawBuffer ( GL_FRONT );
+-
+- /* redrawing ... */
+- g_fBitmap = GL_TRUE;
+- call_func_redraw_all_structs_begin (aview->WsId);
+- if (anunderlayer->ptrLayer)
+- call_togl_redraw_layer2d (aview, anunderlayer);
+- call_func_redraw_all_structs_proc (aview->WsId);
+- if (anoverlayer->ptrLayer)
+- call_togl_redraw_layer2d (aview, anoverlayer);
+-#ifdef RIC120302
+- call_subr_displayCB(aview,OCC_REDRAW_BITMAP);
+-#endif
+- call_func_redraw_all_structs_end (aview->WsId, 0);
++ pixdata.ldata = aview->DefBitmap.width;
++ if ( TsmSetWSAttri (aview->WsId, WSWidth, &pixdata) != TSuccess ) return;
++ pixdata.ldata = aview->DefBitmap.height;
++ if ( TsmSetWSAttri (aview->WsId, WSHeight, &pixdata) != TSuccess ) return;
++
++ /* generate new display lists */
++ TsmInitAttributes();
++
++ glLightModeli((GLenum)GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
++
++ glMatrixMode ( GL_MODELVIEW );
++ glViewport ( 0, 0, aview->DefBitmap.width, aview->DefBitmap.height );
++
++ glDrawBuffer ( GL_FRONT );
++
++ /* redrawing ... */
++ g_fBitmap = GL_TRUE;
++ call_func_redraw_all_structs_begin (aview->WsId);
++ if (anunderlayer->ptrLayer)
++ call_togl_redraw_layer2d (aview, anunderlayer);
++ call_func_redraw_all_structs_proc (aview->WsId);
++
++ /* Proposed by P.Dolbey and revised to keep also the old callback */
++ #ifdef RIC120302
++ call_subr_displayCB(aview,OCC_REDRAW_BITMAP |OCC_PRE_OVERLAY);
++ #endif
++
++ if (anoverlayer->ptrLayer)
++ call_togl_redraw_layer2d (aview, anoverlayer);
++
++ #ifdef RIC120302
++ call_subr_displayCB(aview,OCC_REDRAW_BITMAP);
++ #endif
++
++ call_func_redraw_all_structs_end (aview->WsId, 0);
+
+- call_togl_redraw_immediat_mode (aview);
+- g_fBitmap = GL_FALSE;
++ call_togl_redraw_immediat_mode (aview);
++ g_fBitmap = GL_FALSE;
+
+- glFinish();
++ glFinish();
+
+- /* cleaning up ... */
++ /* cleaning up ... */
+ #ifndef WNT
+- glXMakeCurrent ( call_thedisplay, None, NULL );
+- glXDestroyContext ( call_thedisplay, theContext );
+- glXDestroyGLXPixmap ( call_thedisplay, theGLXPixmap );
++ glXMakeCurrent ( call_thedisplay, None, NULL );
++ glXDestroyContext ( call_thedisplay, theContext );
++ glXDestroyGLXPixmap ( call_thedisplay, theGLXPixmap );
+ #else
+- wglMakeCurrent ( hdc_old, hglrc_old );
+- wglDeleteContext ( hglrc );
++ wglMakeCurrent ( hdc_old, hglrc_old );
++ wglDeleteContext ( hglrc );
+ #endif
+- }
+-#endif /*G004*/
+-
++ }
++#endif /*G004*/
+ #ifdef WNT
+ if (OpenGl_AVIWriter_AVIWriter &&
+ OpenGl_AVIWriter_AllowWriting() /*aview->Context.ZBufferActivity*/)
+@@ -256,16 +274,16 @@
+ }
+ #endif
+
+- return;
++ return;
+ }
+
+ void EXPORT
+ call_togl_redraw_area
+ (
+- CALL_DEF_VIEW * aview,
+- CALL_DEF_LAYER * anunderlayer,
+- CALL_DEF_LAYER * anoverlayer,
+- int x, int y, int width, int height
++ CALL_DEF_VIEW * aview,
++ CALL_DEF_LAYER * anunderlayer,
++ CALL_DEF_LAYER * anoverlayer,
++ int x, int y, int width, int height
+ )
+ {
+ CMN_KEY_DATA data;
+@@ -273,36 +291,44 @@
+ /*
+ When the exposure area size is > window size / 2 do a full redraw.
+ */
+- if( width*height >
+- (int)(aview->DefWindow.dx*aview->DefWindow.dy)/2 ) {
+- call_togl_redraw(aview,anunderlayer,anoverlayer);
+- return;
+- }
++ if( width*height >
++ (int)(aview->DefWindow.dx*aview->DefWindow.dy)/2 ) {
++ call_togl_redraw(aview,anunderlayer,anoverlayer);
++ return;
++ }
+ /*
+ Or redraw only the area in the front buffer
+ */
+- TsmGetWSAttri (aview->WsId, WSWindow, &data);
+- if (TxglWinset (call_thedisplay, (Window) data.ldata) == TSuccess) {
+- GLint buffer;
+- glGetIntegerv(GL_DRAW_BUFFER,&buffer);
+- if( buffer != GL_FRONT ) glDrawBuffer (GL_FRONT);
+- glEnable( GL_SCISSOR_TEST );
+- glScissor( (GLint)x,
+- (GLint)((int)aview->DefWindow.dy - (y+height)),
+- (GLsizei)width, (GLsizei)height);
+- call_func_redraw_all_structs_begin (aview->WsId);
+- if (anunderlayer->ptrLayer)
+- call_togl_redraw_layer2d (aview, anunderlayer);
+- call_func_redraw_all_structs_proc (aview->WsId);
+- if (anoverlayer->ptrLayer)
+- call_togl_redraw_layer2d (aview, anoverlayer);
+-#ifdef RIC120302
+- call_subr_displayCB(aview,OCC_REDRAW_WINDOWAREA);
+-#endif
+- call_func_redraw_all_structs_end (aview->WsId, 0);
+- call_togl_redraw_immediat_mode (aview);
+- glFlush();
+- glDisable( GL_SCISSOR_TEST );
+- if( buffer != GL_FRONT ) glDrawBuffer (buffer);
+- }
++ TsmGetWSAttri (aview->WsId, WSWindow, &data);
++ if (TxglWinset (call_thedisplay, (Window) data.ldata) == TSuccess) {
++ GLint buffer;
++ glGetIntegerv(GL_DRAW_BUFFER,&buffer);
++ if( buffer != GL_FRONT ) glDrawBuffer (GL_FRONT);
++ glEnable( GL_SCISSOR_TEST );
++ glScissor( (GLint)x,
++ (GLint)((int)aview->DefWindow.dy - (y+height)),
++ (GLsizei)width, (GLsizei)height);
++ call_func_redraw_all_structs_begin (aview->WsId);
++ if (anunderlayer->ptrLayer)
++ call_togl_redraw_layer2d (aview, anunderlayer);
++ call_func_redraw_all_structs_proc (aview->WsId);
++
++ /* Proposed by P.Dolbey and revised to keep also the old callback */
++ #ifdef RIC120302
++ call_subr_displayCB(aview,OCC_REDRAW_WINDOWAREA|OCC_PRE_OVERLAY);
++ #endif
++
++ if (anoverlayer->ptrLayer)
++ call_togl_redraw_layer2d (aview, anoverlayer);
++
++ #ifdef RIC120302
++ call_subr_displayCB(aview,OCC_REDRAW_WINDOWAREA );
++ #endif
++
++ call_func_redraw_all_structs_end (aview->WsId, 0);
++ call_togl_redraw_immediat_mode (aview);
++ glFlush();
++ glDisable( GL_SCISSOR_TEST );
++ if( buffer != GL_FRONT ) glDrawBuffer (buffer);
++ }
+ }
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_togl_unproject_raster.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_togl_unproject_raster.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_togl_unproject_raster.c 2008-07-25 16:03:54.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_togl_unproject_raster.c 2009-10-03 01:04:23.000000000 +0200
+@@ -41,7 +41,12 @@
+ Tint xr, yr;
+
+ xr = ixr;
+- yr = yM-ym-iyr;
++ /*
++ Patched by P.Dolbey: the window pixel height decreased by one
++ in order for yr to remain within valid coordinate range [0; Ym -1]
++ where Ym means window pixel height.
++ */
++ yr = (yM-1)-ym-iyr;
+ result = TelUnProjectionRaster (wsid, xr, yr, x, y, z);
+
+ if (result == TSuccess)
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_triedron.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_triedron.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_triedron.c 2005-04-21 15:09:04.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_triedron.c 2009-10-03 01:04:22.000000000 +0200
+@@ -31,7 +31,9 @@
+
+ #define OCC2934 /* SAN 22/01/04 Texture-mapped fonts on WNT */
+
+-#define OCC7667 /* asl Export to vector graphic file
++#define OCC7667 /* asl Export to vector graphic file */
++
++#define QTOCC_PATCH /* Active QtOPENCASCADE patches */
+
+ /*----------------------------------------------------------------------*/
+ /*
+@@ -42,6 +44,9 @@
+ #include <X11/Xlib.h>
+ #endif
+ #include <OpenGl_tgl_all.h>
++/* SAN */
++#include <OpenGl_tgl_tox.h>
++/* SAN */
+
+
+ #include <stddef.h>
+@@ -306,6 +311,18 @@
+ GLint mode;
+ char AxeName[2]="X\0";
+
++#ifdef QTOCC_PATCH /* PCD 10/02/08 */
++ /* Fix to problem with clipping planes chopping off pieces of the triedron */
++#ifdef QT_OCC_PATCH_ADDON /* VSR 27/02/09 - roll back: performance regression */
++ GLboolean isPlaneActive[GL_MAX_CLIP_PLANES ];
++
++ /* Backup the clip planes. */
++ for (ii = 0; ii < GL_MAX_CLIP_PLANES ; ii++) {
++ isPlaneActive[ii] = glIsEnabled(GL_CLIP_PLANE0 + ii);
++ glDisable(GL_CLIP_PLANE0 + ii);
++ }
++#endif /* VSR 27/02/09 */
++#endif /* PCD 10/02/08 */
+
+ /*
+ * Lecture des Init. du Triedre
+@@ -480,6 +497,16 @@
+ glLineWidth (TriedronWidth);
+ #endif
+
++#ifdef QTOCC_PATCH /* Fotis Sioutis 2007-11-14 15:06
++ I have also seen in previous posts that the view trihedron in V3d_WIREFRAME mode
++ changes colors depending on the state of the view. This behaviour can be easily
++ corrected by altering call_triedron_redraw function in OpenGl_triedron.c of TKOpengl.
++ The only change needed is to erase the LightOff() function that is called before the
++ Axis name drawing and move this function call just before the initial axis drawing.
++ Below is the code portion with the modification.I don't know if this is considered to
++ be a bug but anyway i believe it might help some of you out there.*/
++ LightOff();
++#endif
+
+ /* dessin des axes */
+ glBegin(GL_LINES);
+@@ -695,6 +722,17 @@
+ #endif
+ */
+
++#ifdef QTOCC_PATCH /* PCD 10/02/08 */
++#ifdef QT_OCC_PATCH_ADDON /* VSR 27/02/09 - roll back: performance regression */
++ /* Recover the clip planes */
++ for (ii = 0; ii < GL_MAX_CLIP_PLANES ; ii++) {
++ if (isPlaneActive[ii]) {
++ glEnable(GL_CLIP_PLANE0 + ii);
++ }
++ }
++#endif /* VSR 27/02/09 */
++#endif /* PCD 10/02/08 */
++
+ /*
+ * restauration du contexte des matrices
+ */
+@@ -763,6 +801,21 @@
+ GLdouble aAxisDiametr = 0.05;
+ ZBUF_STRUCT* aParam;
+
++#ifdef QTOCC_PATCH
++ GLint df; /* PCD 17/06/07 */
++ GLfloat aNULLColor[] = { 0.0, 0.0, 0.0, 0.0f }; /* FS 21/01/08 */
++ /* Fix to problem with clipping planes chopping off pieces of the triedron */
++ GLboolean isPlaneActive[GL_MAX_CLIP_PLANES ]; /* PCD 10/02/08 */
++ int i;
++#ifdef QT_OCC_PATCH_ADDON /* VSR 27/02/09 - roll back: performance regression */
++
++ /* Backup the clip planes. */
++ for (i = 0; i < GL_MAX_CLIP_PLANES ; i++) {
++ isPlaneActive[i] = glIsEnabled(GL_CLIP_PLANE0 + i);
++ glDisable(GL_CLIP_PLANE0 + i);
++ }
++#endif /* VSR 27/02/09 */
++#endif
+
+ /*
+ * Lecture des Init. du Triedre
+@@ -830,8 +883,16 @@
+ (GLdouble *)modelMatrix, (GLdouble *)projMatrix, aViewPort,
+ &aWinCoord[0], &aWinCoord[1], &aWinCoord[2]);
+
++#ifdef QTOCC_PATCH /* PCD 29/09/2008 */
++ /* Simple code modification recommended by Fotis Sioutis and Peter Dolbey */
++ /* to remove the irritating default behaviour of triedrons using V3d_ZBUFFER */
++ /* which causes the glyph to jump around the screen when the origin moves offscreen. */
++ isWithinView = GL_FALSE;
++#else
++ /* Original code */
+ isWithinView = !((aWinCoord[0]<aViewPort[0]) || (aWinCoord[0]>aViewPort[2]) ||
+ (aWinCoord[1]<aViewPort[1]) || (aWinCoord[1]>aViewPort[3]));
++#endif
+
+ if (!isWithinView) {
+ /* Annulate translation matrix */
+@@ -908,9 +969,18 @@
+
+ aIsDepthEnabled = glIsEnabled(GL_DEPTH_TEST);
+ #ifndef BUG
+- aIsDepthMaskEnabled = glIsEnabled(GL_DEPTH_WRITEMASK);
++
++#ifdef QTOCC_PATCH /*PCD 02/07/07 */
++ /* GL_DEPTH_WRITEMASK is not a valid argument to glIsEnabled, the */
++ /* original code is shown to be broken when run under an OpenGL debugger */
++ /* like GLIntercept. This is the correct way to retrieve the mask value. */
++ glGetBooleanv(GL_DEPTH_WRITEMASK, &aIsDepthMaskEnabled);
++#else
++ aIsDepthMaskEnabled = glIsEnabled(GL_DEPTH_WRITEMASK);
+ #endif
+
++#endif
++
+ /* Create cylinder for axis */
+ gluQuadricDrawStyle(aQuadric, GLU_FILL); /* smooth shaded */
+ gluQuadricNormals(aQuadric, GLU_FLAT);
+@@ -924,7 +994,11 @@
+ glEndList();
+ /* Central sphere */
+ glNewList(startList + 2, GL_COMPILE);
+- gluSphere(aQuadric, aCylinderDiametr, NbFacettes, NbFacettes);
++#ifdef QTOCC_PATCH
++ gluSphere(aQuadric, aCylinderDiametr * 2, NbFacettes, NbFacettes);
++#else
++ gluSphere(aQuadric, aCylinderDiametr, NbFacettes, NbFacettes);
++#endif
+ glEndList();
+ /* End disk */
+ gluQuadricOrientation(aQuadric,GLU_INSIDE); /*szv*/
+@@ -932,13 +1006,43 @@
+ gluDisk(aQuadric, aCylinderDiametr, aConeDiametr, NbFacettes, 1/*szv:2*/);
+ glEndList();
+
++#ifdef QTOCC_PATCH
++ /* Store previous attributes */
++ glPushAttrib(GL_LIGHTING_BIT | GL_POLYGON_BIT);
++ LightOn();
++#else
+ LightOn();
+
+ /* Store previous attributes */
+ glPushAttrib(GL_LIGHTING_BIT | GL_POLYGON_BIT);
++#endif
+
+ glCullFace(GL_BACK);
+ glEnable(GL_CULL_FACE);
++
++#ifdef QTOCC_PATCH /*Fotis Sioutis | 2008-01-21 10:55
++ In the function call_zbuffer_triedron_redraw of TKOpengl,
++ the z buffered trihedron changes colors in case there
++ is an object in the scene that has an explicit material
++ attached to it.In the trihedron display loop,
++ GL_COLOR_MATERIAL is enabled, but only the GL_DIFFUSE
++ parameter is utilized in glColorMaterial(...).
++ This causes the last ambient,specular and emission values
++ used, to stay at the stack and applied to the trihedron
++ (which causes the color change).
++ A fix is proposed , to change GL_DIFFUSE to
++ GL_AMBIENT_AND_DIFFUSE in glColorMaterial call in
++ line 946.The above of course will leave unchanged
++ the SPECULAR and EMISSION values.
++ Another proposal which would fix 100% the problem
++ is to use glMaterial instead of glColor on the trihedron
++ drawing loop. */
++ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, aNULLColor);
++ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, aNULLColor);
++ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, aNULLColor);
++
++ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0.);
++#endif
+
+ glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+ glEnable(GL_COLOR_MATERIAL);
+@@ -955,12 +1059,16 @@
+ #endif
+ #ifndef BUG
+ if (!aIsDepthMaskEnabled) {
+- glEnable(GL_DEPTH_WRITEMASK);
++ /* This is how the depthmask needs to be re-enabled...*/
++ glDepthMask(GL_TRUE);
++ /* ...and not this stuff below */
+ }
+ #endif
+
+ glMatrixMode(GL_MODELVIEW);
+-
++#ifdef QTOCC_PATCH /* PCD 17/06/07 */
++ glGetIntegerv (GL_DEPTH_FUNC, &df);
++#else
+ /*szv:if (isWithinView) {*/
+ glDepthFunc(GL_GREATER);
+ glPushMatrix();
+@@ -1010,6 +1118,20 @@
+
+ glDepthFunc(GL_LESS);
+ /*szv:}*/
++#endif
++
++#ifdef QTOCC_PATCH
++ for (i = 0; i < 2; i++) /* PCD 11/02/08 Two pass method */
++ {
++ if (i == 0) /* First pass */
++ {
++ glDepthFunc(GL_ALWAYS);
++ }
++ else
++ {
++ glDepthFunc(GL_LEQUAL);
++ }
++#endif
+
+ glPushMatrix();
+ glPushMatrix();
+@@ -1043,20 +1165,34 @@
+ glCallList(startList + 3);
+ glCallList(startList + 1);
+ glPopMatrix();
++
++#ifdef QTOCC_PATCH
++ }
++#endif
+
+ if (!aIsDepthEnabled)
+ glDisable(GL_DEPTH_TEST);
+ #ifndef BUG
+ if (!aIsDepthMaskEnabled)
++
++#ifdef QTOCC_PATCH /*PCD 02/07/07 */
++ glDepthMask(GL_FALSE);
++#else
+ glDisable(GL_DEPTH_WRITEMASK);
+ #endif
+
++#endif
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_COLOR_MATERIAL);
+
+ gluDeleteQuadric(aQuadric);
+ glColor3fv (TriedronColor);
+
++#ifdef QTOCC_PATCH /* PCD 11/02/08 */
++ /* Always write the text */
++ glDepthFunc(GL_ALWAYS);
++#endif
++
+ glPopAttrib();
+
+ /* fleches au bout des axes (= cones de la couleur demandee) */
+@@ -1074,6 +1210,10 @@
+
+ /* init font */
+ #ifndef WNT
++ /* OCC20802 - Specify explicitly the font of small height to be used for axis names.
++ Otherwise, axis names might become too large if the current font
++ has unsuitable parameters */
++ tXfmfindfont( call_thedisplay, "Courier-Bold", 1. );
+ fontBase = tXfmsetfont (1.0F, 1.0F);
+ #else
+ fontBase = WNTSetFont (1.0F, 1.0F);
+@@ -1165,6 +1305,21 @@
+ #endif
+ */
+
++#ifdef QTOCC_PATCH
++ /*PCD 17/06/07 */
++ glDepthFunc(df);
++
++ /* PCD 10/02/08 */
++ /* Recover the clip planes */
++#ifdef QT_OCC_PATCH_ADDON /* VSR 27/02/09 - roll back: performance regression */
++ for (i = 0; i < GL_MAX_CLIP_PLANES ; i++) {
++ if (isPlaneActive[i]) {
++ glEnable(GL_CLIP_PLANE0 + i);
++ }
++ }
++#endif /* VSR 27/02/09 */
++#endif
++
+ if (!isWithinView) { /* restore matrix */
+ glMatrixMode (GL_PROJECTION);
+ glPopMatrix ();
+diff -Naur OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_view.c OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_view.c
+--- OpenCASCADE6.3.0/ros/src/OpenGl/OpenGl_view.c 2008-07-25 16:03:53.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/OpenGl/OpenGl_view.c 2009-10-03 01:04:23.000000000 +0200
+@@ -53,8 +53,8 @@
+ ************************************************************************/
+
+ #define BUC60920 /* GG 010601
+-// Change the z buffer comparaison for minimizing
+-// unavailable or unviewable drawing of pixels in the same plane
++ Change the z buffer comparaison for minimizing
++ unavailable or unviewable drawing of pixels in the same plane
+ */
+
+ #define BUC61044 /* 25/10/01 SAV ; added functionality to control gl depth testing
+@@ -104,6 +104,7 @@
+ /* OCC18942: The new perspective projection matrix is off by default */
+ EXPORT extern GLboolean env_sym_perspective; /* defined in OpenGl_togl_begin.c */
+
++
+ /*----------------------------------------------------------------------*/
+ /*
+ * Constantes
+@@ -196,15 +197,16 @@
+ Tlimit3 *clip_limit
+ )
+ {
+- Tfloat gx, gy, xsf, ysf, zsf;
+- Tfloat fpd, bpd;
+-
++ Tdouble gx, gy, xsf, ysf, zsf;
++ Tdouble fpd, bpd;
++
+ /* OCC18942 */
+ Tfloat n, f, r, l, t, b, Zprp, dx, dy, VPD;
+
+ /* FSXXX */
+ /* GLint gdtmp; */
+ Tlimit3 vp = { ( float )-1.0, ( float )1.0, ( float )-1.0, ( float )1.0, ( float )1.0, ( float )-1.0 };
++
+ Tmatrix3 pmat = { { ( float )1.0, ( float )0.0, ( float )0.0, ( float )0.0 },
+ { ( float )0.0, ( float )1.0, ( float )0.0, ( float )0.0 },
+ { ( float )0.0, ( float )0.0, ( float )1.0, ( float )0.0 },
+@@ -292,21 +294,21 @@
+ mapping->viewport.ymin, mapping->viewport.ymax);
+ #endif
+
++
+ /* projection matrix */
+ if( mapping->proj == TelParallel )
+ {
+-
+ pmat[2][0] = -gx; pmat[3][0] = mapping->vpd*gx;
+ pmat[2][1] = -gy; pmat[3][1] = mapping->vpd*gy;
+ }
+- else if ( !env_sym_perspective )/* TelPerspective */
++ else if ( !env_sym_perspective)/* TelPerspective */
+ {
+ pmat[0][0] = pmat[1][1] = mapping->prp[2] - mapping->vpd;
+- pmat[2][0] = -gx;
+- pmat[2][1] = -gy;
++ pmat[2][0] = -gx;
++ pmat[2][1] = -gy;
+ pmat[2][3] = ( float )-1.0;
+- pmat[3][0] = mapping->vpd * gx;
+- pmat[3][1] = mapping->vpd * gy;
++ pmat[3][0] = mapping->vpd * gx;
++ pmat[3][1] = mapping->vpd * gy;
+ pmat[3][3] = mapping->prp[2];
+
+ /* modify the next two cells to change clipping policy */
+@@ -316,7 +318,7 @@
+ pmat[3][2] = fpd * bpd;
+ }
+ }
+- /* OCC18942: New approach to calculation of mapping (projection) matrix */
++ /* OCC18942: New approach to calculation of mapping (projection) matrix */
+ else
+ {
+ dx = mapping->window.xmax - mapping->window.xmin;
+@@ -400,16 +402,18 @@
+ zsf = (vp.zmax - vp.zmin) / (fpd - bpd);
+
+ /* map matrix */
+- mmat[0][0] = xsf, mmat[1][1] = ysf, mmat[2][2] = zsf;
++ mmat[0][0] = xsf;
++ mmat[1][1] = ysf;
++ mmat[2][2] = zsf;
+ mmat[3][0] = vp.xmin - xsf*mapping->window.xmin;
+ mmat[3][1] = vp.ymin - ysf*mapping->window.ymin;
+ mmat[3][2] = vp.zmin - zsf*bpd;
+
+ /* multiply to obtain mapping matrix */
+- TelMultiplymat3( mat, pmat, mmat );
+-
++ TelMultiplymat3( mat, pmat, mmat );
++
+ #ifdef PRINT
+- printf( "mapping_matrix :\n" );
++ printf( "mapping_matrix :\n");
+ pr_matrix(mat);
+ #endif
+ }
+@@ -458,10 +462,10 @@
+ TsmSetWSAttri( Wsid, WSViews, &key ); /* Set defined view data*/
+ }
+
+- /* copy view definition to storage table record */
+- /* NOTE: Use the matrices already calculated and stored in vrep */
+- vptr->vrep = *vrep;
+-
++ /* copy view definition to storage table record */
++ /* NOTE: Use the matrices already calculated and stored in vrep */
++ vptr->vrep = *vrep;
++
+ #ifdef CAL_100498
+ /* compute inverse transformation matrix */
+ TelEvalInverseMatrix( vrep->extra.vrp, vrep->extra.vpn, vrep->extra.vup,
+@@ -551,7 +555,8 @@
+ Tmatrix3 rmat /* Out: Orientation Matrix */
+ )
+ {
+- Tfloat u[3], v[3], n[3], f;
++ Tfloat u[3], v[3], n[3], f;
++
+
+ /* view plane normal of zero length */
+ if( vecmag(vpn) == 0.0 )
+@@ -636,7 +641,7 @@
+ void
+ TelEvalViewMappingMatrixPick( tel_view_mapping mapping /* View Mapping */,
+ Tint *error_ind /* Out: Error Indicator */,
+- Tmatrix3 mat /* Out: Mapping Matrix */,
++ Tmatrix3 mat /* Out: Mapping Matrix */,
+ Tfloat cx,
+ Tfloat cy
+ )
+@@ -762,6 +767,7 @@
+ Debug tool
+ +*/
+
++
+ #ifdef DEB
+ void
+ pr_matrix( Tmatrix3 mat )
+@@ -855,7 +861,7 @@
+ printf("OpenGl_view.c::TelSetViewIndex::glMatrixMode(GL_PROJECTION) \n");
+ #endif
+ glMatrixMode(GL_PROJECTION);
+- glLoadMatrixf((GLfloat *) vptr->vrep.mapping_matrix );
++ glLoadMatrixf((GLfloat *) vptr->vrep.mapping_matrix );
+
+ #ifdef TRACE_MAT
+ printf( "\nTelSetViewIndex WS : %d, view : %d", Wsid, Vid );
+diff -Naur OpenCASCADE6.3.0/ros/src/V3d/V3d_ColorScale.cxx OpenCASCADE6.3.0sp6/ros/src/V3d/V3d_ColorScale.cxx
+--- OpenCASCADE6.3.0/ros/src/V3d/V3d_ColorScale.cxx 2008-07-18 16:59:38.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/V3d/V3d_ColorScale.cxx 2009-10-03 01:04:52.000000000 +0200
+@@ -1,8 +1,8 @@
+-// File: V3d_ColorScale.cxx
+-// Created: Tue Jun 22 17:44:25 2004
+-// Author: STV
+-//Copyright: Open Cascade 2004
+-
++/* File: V3d_ColorScale.cxx
++ Created: Tue Jun 22 17:44:25 2004
++ Author: STV
++ Copyright: Open Cascade 2004
++*/
+ #include <V3d_ColorScale.ixx>
+
+ #include <V3d_View.hxx>
+@@ -38,8 +38,9 @@
+
+ void V3d_ColorScale::Erase()
+ {
++
+ myDisplay = Standard_False;
+- UpdateColorScale();
++ UpdateColorScale();
+ }
+
+ Standard_Boolean V3d_ColorScale::IsDisplayed() const
+@@ -47,6 +48,7 @@
+ return myDisplay;
+ }
+
++
+ void V3d_ColorScale::UpdateColorScale()
+ {
+ myLayerMgr->Compute();
+@@ -89,24 +91,24 @@
+ Standard_Integer aTextH = GetTextHeight();
+ Standard_Integer aWidth, anAscent, aDescent;
+ TextSize(aText, aTextH, aWidth, anAscent, aDescent);
+-// Standard_Integer anAscent = 3 * aTextH / 4;
++/* Standard_Integer anAscent = 3 * aTextH / 4; */
+ theLayer->DrawText( theText.ToCString(), X, Y + anAscent, aTextH);
+-// theLayer->DrawText( theText.ToCString(), X, Y, aTextH );
++/* theLayer->DrawText( theText.ToCString(), X, Y, aTextH ); */
+ }
+
+ Standard_Integer V3d_ColorScale::TextWidth( const TCollection_ExtendedString& aText ) const
+ {
+ Standard_Integer aWidth, anAscent, aDescent;
+ TextSize(aText, GetTextHeight(), aWidth, anAscent, aDescent);
+-// return 5 * aText.Length();
++/* return 5 * aText.Length(); */
+ return aWidth;
+ }
+
+ Standard_Integer V3d_ColorScale::TextHeight( const TCollection_ExtendedString& aText ) const
+ {
+ Standard_Integer aWidth, anAscent, aDescent;
+-// static Standard_Integer TextHeight = 10;
+-// return TextHeight;
++/* static Standard_Integer TextHeight = 10; */
++/* return TextHeight; */
+ TextSize(aText, GetTextHeight(), aWidth, anAscent, aDescent);
+ return anAscent+aDescent;
+ }
+@@ -114,28 +116,27 @@
+ void V3d_ColorScale::TextSize (const TCollection_ExtendedString& AText, const Standard_Integer AHeight, Standard_Integer& AWidth, Standard_Integer& AnAscent, Standard_Integer& ADescent) const
+ {
+ const Handle(Visual3d_Layer) &theLayer = myLayerMgr->Overlay();
+- if ( !theLayer.IsNull() ) {
++ if ( !theLayer.IsNull() ) {
+ Standard_Real aWidth, anAscent, aDescent;
+ TCollection_AsciiString theText( AText.ToExtString(), '?' );
+ theLayer->TextSize(theText.ToCString(),AHeight,aWidth,anAscent,aDescent);
+- AWidth = (Standard_Integer)aWidth;
+- AnAscent = (Standard_Integer)anAscent;
+- ADescent = (Standard_Integer)aDescent;
++ AWidth = (Standard_Integer) aWidth;
++ AnAscent = (Standard_Integer) anAscent;
++ ADescent = (Standard_Integer) aDescent;
+ }
+ else {
+ AWidth=AnAscent=ADescent=0;
+ }
+ }
+
+-void V3d_ColorScale::DrawScale ()
++void V3d_ColorScale::DrawScale()
+ {
+- const Handle(V3d_View) &theView = myLayerMgr->View();
++ const Handle(V3d_View) &theView = myLayerMgr->View();
+ if ( theView.IsNull() )
+ return;
+-
+ const Handle(Aspect_Window) &theWin = theView->Window();
+ if ( theWin.IsNull() )
+- return;
++ return;
+
+ Standard_Integer WinWidth( 0 ), WinHeight( 0 );
+ theWin->Size( WinWidth, WinHeight );
+@@ -147,4 +148,5 @@
+ const Standard_Integer H = RealToInt(GetHeight() * WinHeight);
+
+ Aspect_ColorScale::DrawScale( theView->BackgroundColor(), X, Y, W, H );
++
+ }
+diff -Naur OpenCASCADE6.3.0/ros/src/V3d/V3d_View.cxx OpenCASCADE6.3.0sp6/ros/src/V3d/V3d_View.cxx
+--- OpenCASCADE6.3.0/ros/src/V3d/V3d_View.cxx 2008-08-15 15:54:10.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/V3d/V3d_View.cxx 2009-10-03 01:04:52.000000000 +0200
+@@ -63,71 +63,71 @@
+
+ ************************************************************************/
+
+-#define GER61351 //GG_15/12/99 Add SetBackgroundColor()
+-// and BackgroundColor() methods
++#define GER61351 /*GG_15/12/99 Add SetBackgroundColor()
++ and BackgroundColor() methods */
+
+
+-#define IMP240100 //GG
+-// -> Remove PixToRef() method ,use
+-// instead the equivalent Convert() method.
+-// -> Rename RefToPix() to Convert() method.
+-// -> Remove the grid computation in Convert()
+-// method. Use instead the NEW ConvertToGrid() methods.
+-// Reason is the Convert() method is call by
+-// StdSelect_ViewSelector3d_Pick() from
+-// AIS_InteractiveContext() and it's not possible
+-// to select an object vertex when the grid is active!
+-// -> Remove grid echo marker definition
+-// (reported in the viewer)
+-// -> Add SetProjModel() methods.
+-
+-#define G003 //EUG 04-10-99
+-// -> computed mode management
+-// Add SetComputedMode(..) method
+-// -> animation mode management
+-// Add SetAnimationMode()
+-// -> backfacing management
+-// Add SetBackFacingModel() method
+-
+-#define G004 //VKH 15-11-99
+-// -> Add Dump() methods
+-// -> GG 07/03/00 Use the new MMSize()
+-// method from Aspect_Window class.
+-
+-#define IMP210200 //GG Add Transparency() method
+-
+-#define IMP250200 //GG With SetDepth() method, when the requested
+-// depth is < 0.,
+-// move the view ref point and the eye,instead
+-// only the eye.
+-
+-#define IMP020300 //GG Don't use ZFitAll in during Rotation
+-// for perf improvment
+-
+-#define IMP210600 //GG Avoid to have infinite loop when call Rotation() method
+-// without call before StartRotation().
+-// This problem occurs when CTRL MB3 is maintain press betwwen 2 views.
+-
+-#define IMP250900 //GG Enable rotation around screen Z axis when
+-// rotation begin far the center of the screen.
+-// Thanks to Patrick REGINSTER (SAMTECH)
+-// GG 21/12/00 Due to a regression on the previous specifications
+-// this new functionnality is right now deactivated
+-// by default (see StartRotation(...,zRotationThreshold)
+-// method.
+-
+-#define BUC60952 //GG Enable to rotate around the view axis
+-// and the required view point
+-
+-#define RIC120302 //GG Add a NEW SetWindow method which enable
+-// to connect a graphic widget and context to OGL.
++#define IMP240100 /*/GG
++ -> Remove PixToRef() method ,use
++ instead the equivalent Convert() method.
++ -> Rename RefToPix() to Convert() method.
++ -> Remove the grid computation in Convert()
++ method. Use instead the NEW ConvertToGrid() methods.
++ Reason is the Convert() method is call by
++ StdSelect_ViewSelector3d_Pick() from
++ AIS_InteractiveContext() and it's not possible
++ to select an object vertex when the grid is active!
++ -> Remove grid echo marker definition
++ (reported in the viewer)
++ -> Add SetProjModel() methods.
++ */
++#define G003 /*EUG 04-10-99
++ -> computed mode management
++ Add SetComputedMode(..) method
++ -> animation mode management
++ Add SetAnimationMode()
++ -> backfacing management
++ Add SetBackFacingModel() method */
++
++#define G004 /*VKH 15-11-99
++ -> Add Dump() methods
++ -> GG 07/03/00 Use the new MMSize()
++ method from Aspect_Window class. */
++
++#define IMP210200 /*GG Add Transparency() method */
++
++#define IMP250200 /*GG With SetDepth() method, when the requested
++ depth is < 0.,
++ move the view ref point and the eye,instead
++ only the eye. */
++
++#define IMP020300 /*GG Don't use ZFitAll in during Rotation
++ for perf improvment */
++
++#define IMP210600 /*GG Avoid to have infinite loop when call Rotation() method
++ without call before StartRotation().
++ This problem occurs when CTRL MB3 is maintain press betwwen 2 views. */
++
++#define IMP250900 /*GG Enable rotation around screen Z axis when
++ rotation begin far the center of the screen.
++ Thanks to Patrick REGINSTER (SAMTECH)
++ GG 21/12/00 Due to a regression on the previous specifications
++ this new functionnality is right now deactivated
++ by default (see StartRotation(...,zRotationThreshold)
++ method.
++ */
++#define BUC60952 /*GG Enable to rotate around the view axis
++ and the required view point */
++
++#define RIC120302 /*GG Add a NEW SetWindow method which enable
++ to connect a graphic widget and context to OGL.*/
+
+-#define IMP260302 //GG To avoid conflicting in Window destructor
+-// nullify this handle in Remove method
++#define IMP260302 /*GG To avoid conflicting in Window destructor
++ nullify this handle in Remove method */
+
+-#define OCC280 //SAV fix for FitAll problem in the perspective view.
++#define OCC280 /*SAV fix for FitAll problem in the perspective view. */
+
+-#define OCC1188 //SAV Added methods to set background image
++#define OCC1188 /*SAV Added methods to set background image */
+
+ /*----------------------------------------------------------------------*/
+ /*
+@@ -150,11 +150,10 @@
+ #include <TColStd_Array2OfReal.hxx>
+ #include <Visual3d_TransientManager.hxx>
+ #include <Precision.hxx>
+-
+-// S3892
++/* S3892 */
+ #include <Graphic3d_AspectMarker3d.hxx>
+
+-// S3603
++/* S3603*/
+ #include <Aspect_GenericColorMap.hxx>
+ #include <Aspect_TypeMap.hxx>
+ #include <Aspect_WidthMap.hxx>
+@@ -172,13 +171,13 @@
+ # define V3d_FLAG_ANIMATION 0x00000001
+ # define V3d_FLAG_DEGENERATION 0x00000002
+ # define V3d_FLAG_COMPUTATION 0x00000004
+-#endif // G003
++#endif /* G003 */
+
+-// Tumble
++/* Tumble*/
+ #include <OSD_Timer.hxx>
+ static OSD_Timer FullTimer;
+
+-// Perspective
++/* Perspective */
+ #include <OSD_Environment.hxx>
+
+ /*----------------------------------------------------------------------*/
+@@ -189,8 +188,8 @@
+ #define Zmargin 1.
+ #define DEUXPI (2.*Standard_PI)
+
+-// en cas NO_TRACE_ECHO et de NO_TRACE_POINTS, dans V3d_View_4.cxx ET dans
+-// V3d_View.cxx, virer MyGridEchoStructure et MyGridEchoGroup dans le cdl
++/* en cas NO_TRACE_ECHO et de NO_TRACE_POINTS, dans V3d_View_4.cxx ET dans */
++/* V3d_View.cxx, virer MyGridEchoStructure et MyGridEchoGroup dans le cdl */
+ #define NO_TRACE_ECHO
+ #define NO_TRACE_POINTS
+
+@@ -270,10 +269,10 @@
+ return MyProjReferencePoint;
+ }
+ #define MyProjReferencePoint _MyProjReferencePoint()
+-#endif // LOPTIM
++#endif /* LOPTIM */
+
+ /*----------------------------------------------------------------------*/
+-//-Constructors
++/*-Constructors*/
+
+ V3d_View::V3d_View(const Handle(V3d_Viewer)& VM, const V3d_TypeOfView Type ) :
+ MyType ( Type ),
+@@ -284,33 +283,33 @@
+ myActiveLightsIterator(),
+ myActivePlanesIterator(),
+ SwitchSetFront(Standard_False),
+-MyTrsf (1, 4, 1, 4), // S3892
++MyTrsf (1, 4, 1, 4), /* S3892 */
+ MyProjModel(V3d_TPM_SCREEN)
+ #if defined(TRACE_POINTS)
+-,MyGridEchoStructure (new Graphic3d_Structure (VM->Viewer ())), // S3892
+-MyGridEchoGroup (new Graphic3d_Group (MyGridEchoStructure)) // S3892
++,MyGridEchoStructure (new Graphic3d_Structure (VM->Viewer ())), /* S3892 */
++MyGridEchoGroup (new Graphic3d_Group (MyGridEchoStructure)) /* S3892 */
+ #endif
+ {
+
+ myImmediateUpdate = Standard_False;
+ MyView = new Visual3d_View(MyViewer->Viewer());
+
+- // { Debut de recuperation de la definition du ViewContext.
+- // Pas de MyViewContext = MyView->Context() ;
+- // pour permettre a MyView->SetContext de comparer
+- // l'ancien contexte et le nouveau.
+- // Pas de probleme pour MyViewMapping, MyViewOrientation
+- // car MyView->SetViewMapping et MyView->SetViewOrientation
+- // ne cherchent pas a optimiser les modifications apportees
+- // au viewmapping et au vieworientation.
++ /* { Debut de recuperation de la definition du ViewContext.
++ Pas de MyViewContext = MyView->Context() ;
++ pour permettre a MyView->SetContext de comparer
++ l'ancien contexte et le nouveau.
++ Pas de probleme pour MyViewMapping, MyViewOrientation
++ car MyView->SetViewMapping et MyView->SetViewOrientation
++ ne cherchent pas a optimiser les modifications apportees
++ au viewmapping et au vieworientation. */
+
+- // Aliasing
++ /* Aliasing*/
+ if ((MyView->Context ()).AliasingIsOn ())
+ MyViewContext.SetAliasingOn ();
+ else
+ MyViewContext.SetAliasingOff ();
+
+- // DepthCueing
++ /* DepthCueing */
+ MyViewContext.SetDepthCueingBackPlane
+ ((MyView->Context ()).DepthCueingBackPlane ());
+ MyViewContext.SetDepthCueingFrontPlane
+@@ -321,7 +320,7 @@
+ else
+ MyViewContext.SetDepthCueingOff ();
+
+- // ZClipping
++ /* ZClipping */
+ MyViewContext.SetZClippingBackPlane
+ ((MyView->Context ()).ZClippingBackPlane ());
+ MyViewContext.SetZClippingFrontPlane
+@@ -337,14 +336,14 @@
+ else
+ MyViewContext.SetBackZClippingOff ();
+
+- // Visualisation et Shading Model
++ /* Visualisation et Shading Model */
+ MyViewContext.SetModel ((MyView->Context ()).Model ());
+ MyViewContext.SetVisualization ((MyView->Context ()).Visualization ());
+
+- // Texture Mapping
++ /* Texture Mapping
+ MyViewContext.SetSurfaceDetail (MyView->Context ().SurfaceDetail ());
+ MyViewContext.SetTextureEnv (MyView->Context ().TextureEnv ());
+- // } Fin de recuperation de la definition du ViewContext.
++ /* } Fin de recuperation de la definition du ViewContext. */
+
+ MyViewMapping = MyView->ViewMapping() ;
+ MyViewOrientation = MyView->ViewOrientation() ;
+@@ -371,7 +370,7 @@
+ Init();
+ myImmediateUpdate = Standard_True;
+
+- // S3892
++ /* S3892 */
+ #ifndef IMP240100
+ #if defined(TRACE_POINTS)
+ Handle(Graphic3d_AspectMarker3d) MarkerAttrib = new Graphic3d_AspectMarker3d ();
+@@ -380,11 +379,11 @@
+ MarkerAttrib->SetType (Aspect_TOM_STAR);
+ MyGridEchoStructure->SetPrimitivesAspect (MarkerAttrib);
+ #endif
+-#endif //IMP240100
++#endif /*IMP240100 */
+
+ #ifdef G003
+ MyAnimationFlags = 0;
+-#endif // G003
++#endif /* G003 */
+
+ #ifdef IMP210200
+ MyTransparencyFlag = Standard_False;
+@@ -402,11 +401,11 @@
+ myActiveLightsIterator(),
+ myActivePlanesIterator(),
+ SwitchSetFront(Standard_False),
+-MyTrsf (1, 4, 1, 4), // S3892
++MyTrsf (1, 4, 1, 4), /* S3892 */
+ MyProjModel(V3d_TPM_SCREEN)
+ #if defined(TRACE_POINTS)
+-,MyGridEchoStructure (new Graphic3d_Structure (VM->Viewer ())), // S3892
+-MyGridEchoGroup (new Graphic3d_Group (MyGridEchoStructure)) // S3892
++,MyGridEchoStructure (new Graphic3d_Structure (VM->Viewer ())), /* S3892 */
++MyGridEchoGroup (new Graphic3d_Group (MyGridEchoStructure)) /* S3892 */
+ #endif
+ {
+
+@@ -432,7 +431,7 @@
+ Init();
+ myImmediateUpdate = Standard_True;
+
+- // S3892
++ /* S3892 */
+ #ifndef IMP240100
+ #if defined(TRACE_ECHO)
+ Handle(Graphic3d_AspectMarker3d) MarkerAttrib = new Graphic3d_AspectMarker3d ();
+@@ -441,7 +440,7 @@
+ MarkerAttrib->SetType (Aspect_TOM_STAR);
+ MyGridEchoStructure->SetPrimitivesAspect (MarkerAttrib);
+ #endif
+-#endif //IMP240100
++#endif /*IMP240100 */
+
+ #ifdef G003
+ MyAnimationFlags = 0;
+@@ -450,7 +449,7 @@
+
+ /*----------------------------------------------------------------------*/
+
+-//-Methods, in order
++/*-Methods, in order */
+
+ void V3d_View::SetMagnify(const Handle(Aspect_Window)& TheWindow,
+ const Handle(V3d_View)& aPreviousView,
+@@ -483,34 +482,34 @@
+ "V3d_View::SetWindow, window of view already defined");
+
+ MyView->SetWindow(TheWindow) ;
+- // SetWindow effectue un SetRatio et modifie le
+- // ViewMapping et ViewMappingDefault de MyView.
++ /* SetWindow effectue un SetRatio et modifie le */
++ /* ViewMapping et ViewMappingDefault de MyView. */
+ MyViewMapping = MyView->ViewMapping() ;
+ MyView->SetContext(MyViewContext) ;
+ MyView->SetViewMapping(MyViewMapping) ;
+ MyView->SetViewOrientation(MyViewOrientation) ;
+ MyView->SetBackground(MyBackground) ;
+ MyViewer->SetViewOn(this) ;
+- //MyView->SetViewMappingDefault();
++ /*MyView->SetViewMappingDefault(); */
+ #ifdef TRACE_POINTS
+- MyGridEchoStructure->SetInfiniteState (Standard_True); // S3892
+- MyGridEchoStructure->Display (); // S3892
++ MyGridEchoStructure->SetInfiniteState (Standard_True); /* S3892*/
++ MyGridEchoStructure->Display (); /* S3892*/
+ #endif
+ MyView->Redraw() ;
+ MyWindow = TheWindow;
+ }
+
+-// RIC120302
++/* RIC120302 */
+ /*----------------------------------------------------------------------*/
+
+-void V3d_View::SetWindow(const Handle(Aspect_Window)& aWindow,
+- const Aspect_RenderingContext aContext,
++void V3d_View::SetWindow(const Handle(Aspect_Window)& aWindow,
++ const Aspect_RenderingContext aContext,
+ const Aspect_GraphicCallbackProc& aDisplayCB,
+- const Standard_Address aClientData)
+-{
++ const Standard_Address aClientData) {
++
+ Standard_MultiplyDefined_Raise_if( MyView->IsDefined(),
+- "V3d_View::SetWindow, "
+- "window of view already defined");
++ "V3d_View::SetWindow, "
++ "window of view already defined");
+ MyView->SetWindow(aWindow, aContext, aDisplayCB, aClientData) ;
+ MyViewMapping = MyView->ViewMapping() ;
+ MyView->SetContext(MyViewContext) ;
+@@ -521,7 +520,7 @@
+ MyView->Redraw() ;
+ MyWindow = aWindow;
+ }
+-// RIC120302
++/* RIC120302 */
+
+ /*----------------------------------------------------------------------*/
+
+@@ -557,8 +556,8 @@
+ Standard_Boolean TheStatus = Standard_True ;
+
+ if( MyView->IsDefined() ) {
+- // CAL 6/11/98
+- // Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ;
++ /* CAL 6/11/98 */
++ /* Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ; */
+ Standard_Integer Nstruct = MyView->NumberOfDisplayedStructures() ;
+ if( Nstruct > 0 ) TheStatus = Standard_False ;
+ }
+@@ -583,13 +582,13 @@
+ /*----------------------------------------------------------------------*/
+
+ void V3d_View::MustBeResized() {
+- if ( !MyLayerMgr.IsNull() )
++ if ( !MyLayerMgr.IsNull() )
+ MyLayerMgr->Resized();
+
+ if( MyView->IsDefined() ) {
+ MyView->Resized() ;
+ MyViewMapping = MyView->ViewMapping();
+- // MyView->SetViewMappingDefault();
++ /* MyView->SetViewMappingDefault(); */
+ MyView->Redraw();
+ }
+ }
+@@ -609,7 +608,7 @@
+ MyBackground.SetColor( C );
+ if ( MyView->IsDefined() )
+ MyView->SetBackground( MyBackground );
+- if ( !MyLayerMgr.IsNull() )
++ if ( !MyLayerMgr.IsNull() )
+ MyLayerMgr->Resized();
+ #endif
+ }
+@@ -622,9 +621,9 @@
+ MyBackground.SetColor( Color );
+ if ( MyView->IsDefined() )
+ MyView->SetBackground( MyBackground );
+- //szv: Why?
++ /*szv: Why?*/
+ if ( !MyLayerMgr.IsNull() )
+- MyLayerMgr->Resized();
++ MyLayerMgr->Resized();
+ }
+ #endif
+
+@@ -906,7 +905,7 @@
+ void V3d_View::Rotate(const Standard_Real angle, const Standard_Boolean Start) {
+
+ Standard_Real Angle = angle ;
+-// Graphic3d_Vertex Vrp ;
++/* Graphic3d_Vertex Vrp ;*/
+ Graphic3d_Vector Vpn,Vup ;
+ TColStd_Array2OfReal Matrix(0,3,0,3) ;
+
+@@ -990,7 +989,7 @@
+ #ifdef IMP020300
+ SetZSize(0.) ;
+ #else
+- // Check ZClipping planes
++ /* Check ZClipping planes */
+ Standard_Real Zmax ;
+ Vrp.Coord(Xat,Yat,Zat) ;
+ Zmax = Sqrt( Xat*Xat + Yat*Yat + Zat*Zat) ;
+@@ -1051,7 +1050,7 @@
+ #ifdef IMP020300
+ SetZSize(0.) ;
+ #else
+- // Check ZClipping planes
++ /* Check ZClipping planes */
+ Standard_Real Zmax ;
+ Vrp.Coord(Xat,Yat,Zat) ;
+ Zmax = Sqrt( Xat*Xat + Yat*Yat + Zat*Zat ) ;
+@@ -1129,8 +1128,8 @@
+ Standard_Boolean update = myImmediateUpdate;
+ myImmediateUpdate = Standard_False;
+ if( MyProjModel == V3d_TPM_WALKTHROUGH ) {
+- //FMN desactivation temp SetTwist(Angle) ;
+- // Set des infos.
++ /*FMN desactivation temp SetTwist(Angle) ; */
++ /* Set des infos. */
+ MyView->SetViewOrientation(MyViewOrientation) ;
+ MyView->SetViewMapping(MyViewMapping) ;
+ } else {
+@@ -1139,7 +1138,7 @@
+ #ifdef IMP020300
+ SetZSize(0.) ;
+ #else
+- // Check ZClipping planes
++ /* Check ZClipping planes */
+ Standard_Real Zmax = Sqrt( X*X + Y*Y + Z*Z ) ;
+ if( Zmax > MyViewMapping.FrontPlaneDistance() &&
+ MyProjModel == V3d_TPM_SCREEN ) {
+@@ -1178,12 +1177,12 @@
+ MyViewMapping.SetProjectionReferencePoint(MyProjReferencePoint);
+ }
+
+- // Check ZClipping planes
++ /* Check ZClipping planes */
+ Standard_Real Xat,Yat,Zat,Xpn,Ypn,Zpn,Xeye,Yeye,Zeye ;
+ MyViewReferencePoint.Coord(Xat,Yat,Zat) ;
+ MyViewReferencePlane.Coord(Xpn,Ypn,Zpn) ;
+ #ifdef IMP250200
+- if( Depth < 0. ) { // Move the view ref point instead the eye.
++ if( Depth < 0. ) { /* Move the view ref point instead the eye. */
+ Xeye = Xpn*Zrp + Xat ; Yeye = Ypn*Zrp + Yat ; Zeye = Zpn*Zrp + Zat ;
+ Zrp = Abs(Depth) ;
+ Xat = Xeye - Xpn*Zrp ; Yat = Yeye - Ypn*Zrp ; Zat = Zeye - Zpn*Zrp;
+@@ -1240,7 +1239,7 @@
+
+ MyViewReferencePlane = V3d::GetProjAxis(Orientation) ;
+ MyViewOrientation.SetViewReferencePlane(MyViewReferencePlane) ;
+- // MSV 14.03.2007: reset ViewReferencePoint to debug LH3D14955
++ /* MSV 14.03.2007: reset ViewReferencePoint to debug LH3D14955 */
+ MyViewOrientation.SetViewReferencePoint(Graphic3d_Vertex(0,0,0));
+ Standard_Real Xpn=0;
+ Standard_Real Ypn=0;
+@@ -1290,8 +1289,8 @@
+ Standard_Boolean update = myImmediateUpdate;
+ myImmediateUpdate = Standard_False;
+ if( MyProjModel == V3d_TPM_WALKTHROUGH ) {
+- //FMN desactivation temp SetTwist(Angle) ;
+- // Set des infos.
++ /*FMN desactivation temp SetTwist(Angle) ; */
++ /* Set des infos. */
+ MyView->SetViewOrientation(MyViewOrientation) ;
+ MyView->SetViewMapping(MyViewMapping) ;
+ } else {
+@@ -1302,7 +1301,7 @@
+ SetZSize(0.) ;
+ #else
+ ImmediateUpdate();
+- // Check ZClipping planes
++ /* Check ZClipping planes */
+ Standard_Real Zmax = Sqrt( X*X + Y*Y + Z*Z ) ;
+ if( Zmax > MyViewMapping.FrontPlaneDistance() &&
+ MyProjModel == V3d_TPM_SCREEN ) {
+@@ -1397,13 +1396,13 @@
+
+ MyView->ViewOrientationReset() ;
+ MyViewOrientation = MyView->ViewOrientation() ;
+-//OCC4844
+-//#ifdef IMP020300
+-// Update();
+-//#else
++/*OCC4844 */
++/*#ifdef IMP020300
++ Update();
++#else */
+ ImmediateUpdate();
+-//#endif
+-//OCC4844
++/*#endif
++OCC4844 */
+ }
+
+ void V3d_View::Reset( const Standard_Boolean update ) {
+@@ -1529,7 +1528,7 @@
+ MyViewMapping.SetFrontPlaneDistance(Zmax) ;
+ MyViewMapping.SetBackPlaneDistance(-Zmax) ;
+
+- // OCC18942
++ /* OCC18942 */
+ if( MyProjModel != V3d_TPM_WALKTHROUGH ) {
+ MyViewMapping.SetViewPlaneDistance(MyType == V3d_PERSPECTIVE ? 0. : Zmax) ;
+ }
+@@ -1541,7 +1540,7 @@
+ MyViewContext.SetZClippingBackPlane(Back) ;
+ MyView->SetContext(MyViewContext) ;
+ }
+-//printf(" *** SetZSize(%f)\n",Zmax);
++/*printf(" *** SetZSize(%f)\n",Zmax); */
+ }
+
+ void V3d_View::SetZoom(const Standard_Real Coef,const Standard_Boolean Start) {
+@@ -1556,8 +1555,8 @@
+ MyWindowWidth = Abs(Umax - Umin) ;
+ MyWindowHeight = Abs(Vmax - Vmin) ;
+ }
+-
+- // ensure that zoom will not be too small or too big
++
++ /* ensure that zoom will not be too small or too big */
+ Standard_Real coef = Coef;
+ if ( MyWindowWidth < coef * Precision::Confusion() )
+ coef = MyWindowWidth / Precision::Confusion();
+@@ -1567,7 +1566,7 @@
+ coef = MyWindowHeight / Precision::Confusion();
+ else if ( MyWindowHeight > coef * 1e12 )
+ coef = MyWindowHeight / 1e12;
+-
++
+ Dxv = MyWindowWidth/coef;
+ Dyv = MyWindowHeight/coef;
+ Umin = MyXwindowCenter - Dxv/2. ; Umax = MyXwindowCenter + Dxv/2. ;
+@@ -1607,7 +1606,7 @@
+ MyView->ViewManager()->SetUpdateMode(updateMode);
+
+ MyView->MinMaxValues(Xmin,Ymin,Zmin,Xmax,Ymax,Zmax) ;
+-
++
+ Standard_Real LIM = ShortRealLast() -1.;
+ if (Abs(Xmin) > LIM || Abs(Ymin) > LIM || Abs(Zmin) > LIM
+ || Abs(Xmax) > LIM || Abs(Ymax) > LIM || Abs(Zmax) > LIM ) {
+@@ -1650,10 +1649,10 @@
+ Standard_Real Xmin,Ymin,Zmin,Xmax,Ymax,Zmax ;
+ Standard_Real DxvOld,DyvOld,DxvNew,DyvNew,RapOld,RapNew ;
+ Standard_Integer Xpixel,Ypixel;
+- // CAL 6/11/98
+- // Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ;
++ /* CAL 6/11/98 */
++ /* Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ; */
+ Standard_Integer Nstruct = MyView->NumberOfDisplayedStructures() ;
+- //Standard_Integer Xleft,Yup,Xright,Ylow ;
++ /*Standard_Integer Xleft,Yup,Xright,Ylow ; */
+ Standard_Integer nbPasse = 2;
+
+ if( (Nstruct <= 0) || (Coef < 0.) || (Coef > 1.) ) {
+@@ -1662,12 +1661,12 @@
+ #endif
+ return ;
+ }
+- // Update() ;
++ /* Update() ; */
+ MyProjReferencePoint = MyViewMapping.ProjectionReferencePoint() ;
+ MyProjReferencePoint.Coord(Xrp,Yrp,Zrp) ;
+ if( MyView->IsDefined() ) {
+- //MyWindow->Position(Xleft,Yup,Xright,Ylow) ;
+- //DxvOld = Abs(Xright - Xleft) ; DyvOld = Abs(Yup - Ylow) ;
++ /*MyWindow->Position(Xleft,Yup,Xright,Ylow) ; */
++ /*DxvOld = Abs(Xright - Xleft) ; DyvOld = Abs(Yup - Ylow) ;*/
+ MyWindow->Size(Xpixel,Ypixel);
+ DxvOld = Xpixel; DyvOld = Ypixel;
+ } else {
+@@ -1742,7 +1741,7 @@
+ }
+
+ nbPasse--;
+- } // while
++ } /* while */
+
+ if(FitZ) {
+ ZFitAll(Zmargin);
+@@ -1760,8 +1759,8 @@
+
+ Standard_Real Xmin,Ymin,Zmin,Xmax,Ymax,Zmax,U,V,W ;
+ Standard_Real Umin,Vmin,Wmin,Umax,Vmax,Wmax ;
+- // CAL 6/11/98
+- // Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ;
++ /* CAL 6/11/98 */
++ /* Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ; */
+ Standard_Integer Nstruct = MyView->NumberOfDisplayedStructures() ;
+
+ if( MyType == V3d_PERSPECTIVE ) {
+@@ -1782,8 +1781,8 @@
+ ImmediateUpdate();
+ return ;
+ }
+- // CAL 6/11/98
+- // Cas ou la vue ne contient qu'un point
++ /* CAL 6/11/98 */
++ /* Cas ou la vue ne contient qu'un point */
+ if (Xmin == Xmax && Ymin == Ymax && Zmin == Zmax) {
+ ImmediateUpdate();
+ return ;
+@@ -1869,12 +1868,12 @@
+ Vmin = Min(V,Vmin) ; Vmax = Max(V,Vmax) ;
+ Wmin = Min(W,Wmin) ; Wmax = Max(W,Wmax) ;
+
+- // Adjust Z size
++ /* Adjust Z size */
+ Wmax = Max(Abs(Wmin),Abs(Wmax)) ;
+ Dz = 2.*Wmax + Margin * Wmax;
+
+- // Compute depth value
+- Dx = Abs(Umax - Umin) ; Dy = Abs(Vmax - Vmin) ; // Dz = Abs(Wmax - Wmin);
++ /* Compute depth value */
++ Dx = Abs(Umax - Umin) ; Dy = Abs(Vmax - Vmin) ; /* Dz = Abs(Wmax - Wmin); */
+ Dx += Margin * Dx; Dy += Margin * Dy;
+ Size = Sqrt(Dx*Dx + Dy*Dy + Dz*Dz);
+ if( Size > 0. ) {
+@@ -1885,6 +1884,7 @@
+ ImmediateUpdate();
+ }
+
++
+ void V3d_View::FitAll(const Standard_Real Xmin, const Standard_Real Ymin, const Standard_Real Xmax, const Standard_Real Ymax) {
+ FitAll(MyWindow,Xmin,Ymin,Xmax,Ymax);
+ #ifndef IMP020300
+@@ -1906,9 +1906,9 @@
+ void V3d_View::SetViewMapping(const Visual3d_ViewMapping& VM)
+ {
+ MyViewMapping = VM;
+- // ajust view type according to mapping projection
+- // NOTE: Might be dangerous, potentially conflicts with the C++ view class
+- // (orthographic or perspective)! Use with care!
++ /* ajust view type according to mapping projection */
++ /* NOTE: Might be dangerous, potentially conflicts with the C++ view class */
++ /* (orthographic or perspective)! Use with care!*/
+ if ( VM.Projection() == Visual3d_TOP_PERSPECTIVE )
+ MyType = V3d_PERSPECTIVE;
+ else MyType = V3d_ORTHOGRAPHIC;
+@@ -1917,6 +1917,7 @@
+ ImmediateUpdate();
+ }
+
++
+ void V3d_View::SetViewMappingDefault() {
+ MyView->SetViewMapping(MyViewMapping) ;
+ MyView->SetViewMappingDefault();
+@@ -1962,34 +1963,36 @@
+ Yv = Vmin + Dyv*(Standard_Real)(Dyw-Yp)/(Standard_Real)Dyw ;
+ }
+
+-Standard_Integer V3d_View::Convert(const Standard_Real Vv) const
++Standard_Integer V3d_View::Convert(const Standard_Real Vv) const
+ {
++
+ V3d_UnMapped_Raise_if( !MyView->IsDefined(), "view has no window");
+
+ Standard_Integer Dxw, Dyw;
+ MyWindow->Size(Dxw,Dyw);
+-
++
+ Standard_Real Umin,Umax,Vmin,Vmax;
+ MyViewMapping.WindowLimit(Umin,Vmin,Umax,Vmax) ;
+ Standard_Real Dxv = Umax - Umin;
+ return RealToInt ( Dxw * Vv / Dxv );
++
+ }
+
+-void V3d_View::Convert(const Standard_Real Xv, const Standard_Real Yv, Standard_Integer& Xp, Standard_Integer& Yp) const
++void V3d_View::Convert(const Standard_Real Xv, const Standard_Real Yv, Standard_Integer& Xp, Standard_Integer& Yp) const
+ {
+ V3d_UnMapped_Raise_if( !MyView->IsDefined(), "view has no window");
+
+ Standard_Integer Dxw, Dyw;
+ MyWindow->Size(Dxw,Dyw);
+-
++
+ Standard_Real Umin,Umax,Vmin,Vmax;
+ MyViewMapping.WindowLimit(Umin,Vmin,Umax,Vmax) ;
+ Standard_Real Dxv = Umax - Umin;
+ Standard_Real Dyv = Vmax - Vmin;
+
+- // CAL 15/12/93 warning: double assigned to int
++ /* CAL 15/12/93 warning: double assigned to int */
+ Xp = RealToInt (Dxw*(Xv - Umin)/Dxv);
+- // CAL 15/12/93 warning: double assigned to int
++ /* CAL 15/12/93 warning: double assigned to int */
+ Yp = Dyw - RealToInt (Dyw*(Yv - Vmin)/Dyv);
+ }
+
+@@ -2068,22 +2071,22 @@
+ (MyViewer->Viewer())->ConvertCoord(MyWindow,Vrp,Xp,Yp) ;
+ }
+
+-void V3d_View::Project(const Standard_Real X, const Standard_Real Y, const Standard_Real Z, Standard_Real &Xp, Standard_Real &Yp) const
+-{
+- if ( MyType != V3d_PERSPECTIVE )
++void V3d_View::Project(const Standard_Real X, const Standard_Real Y, const Standard_Real Z, Standard_Real &Xp, Standard_Real &Yp) const {
++
++ if ( MyType != V3d_PERSPECTIVE )
+ {
+- // use old implementation
++ /* use old implementation */
+ Standard_Real Zp;
+ MyView->Projects( X, Y, Z, Xp, Yp, Zp );
+ }
+ else
+ {
+- // NKV - Using raster projection
++ /* NKV - Using raster projection */
+ Standard_Integer Xpx, Ypx;
+ Convert(X, Y, Z, Xpx, Ypx);
+ Convert(Xpx, Ypx, Xp, Yp);
+ }
+-}
++}
+
+ void V3d_View::BackgroundColor(const Quantity_TypeOfColor Type,Standard_Real& V1, Standard_Real& V2, Standard_Real& V3)const {
+
+@@ -2151,8 +2154,8 @@
+
+ Standard_Real Wmin,Wmax,U,V,W ;
+ Standard_Real Xmin,Ymin,Zmin,Xmax,Ymax,Zmax ;
+- // CAL 6/11/98
+- // Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ;
++ /* CAL 6/11/98 */
++ /* Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ; */
+ Standard_Integer Nstruct = MyView->NumberOfDisplayedStructures() ;
+
+ if( Nstruct ) {
+@@ -2188,8 +2191,8 @@
+ }
+
+ Standard_Integer V3d_View::MinMax(Standard_Real& Xmin, Standard_Real& Ymin, Standard_Real& Zmin, Standard_Real& Xmax, Standard_Real& Ymax, Standard_Real& Zmax) const {
+- // CAL 6/11/98
+- // Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ;
++ /* CAL 6/11/98 */
++ /* Standard_Integer Nstruct = (MyView->DisplayedStructures())->Extent() ;*/
+ Standard_Integer Nstruct = MyView->NumberOfDisplayedStructures() ;
+
+ if( Nstruct ) {
+@@ -2206,8 +2209,8 @@
+ Graphic3d_MapOfStructure MySetOfStructures;
+
+ MyView->DisplayedStructures (MySetOfStructures);
+- //JMB MySetOfStructures.Clear ();
+- //JMBMySetOfStructures.Union (()->Set ());
++ /*JMB MySetOfStructures.Clear (); */
++ /*JMBMySetOfStructures.Union (()->Set ()); */
+ Nstruct = MySetOfStructures.Extent() ;
+
+ Graphic3d_MapIteratorOfMapOfStructure MyIterator(MySetOfStructures) ;
+@@ -2489,15 +2492,15 @@
+ MyViewMapping.SetFrontPlaneDistance(size);
+ MyViewMapping.SetBackPlaneDistance(-size);
+
+- // keep view plane at front plane distance
++ /* keep view plane at front plane distance */
+ MyViewMapping.SetViewPlaneDistance(MyType == V3d_PERSPECTIVE ? 0. : size);
+
+- // set window limits
++ /* set window limits */
+ Umin = Left; Umax = Right;
+ Vmin = Bottom; Vmax = Top;
+ MyViewMapping.SetWindowLimit(Left, Bottom, Right, Top);
+
+- // Update window center
++ /* Update window center */
+ if ( MyType == V3d_PERSPECTIVE ) {
+ Xrp = Yrp = 0.0;
+ }
+@@ -2508,10 +2511,11 @@
+ MyViewMapping.SetProjectionReferencePoint(MyProjReferencePoint);
+
+ MyView->SetViewMapping(MyViewMapping) ;
+-// SetZSize(0.);
++/* SetZSize(0.); */
+ ImmediateUpdate();
+ }
+
++
+ Handle(Visual3d_View) V3d_View::View() const {
+
+ return MyView ;
+@@ -2527,6 +2531,7 @@
+ return MyViewOrientation;
+ }
+
++
+ Standard_Boolean V3d_View::ScreenAxis( const Graphic3d_Vector &Vpn, const Graphic3d_Vector &Vup, Graphic3d_Vector &Xaxe, Graphic3d_Vector &Yaxe, Graphic3d_Vector &Zaxe) {
+ Standard_Real Xpn,Ypn,Zpn,Xup,Yup,Zup ;
+ Standard_Real dx1,dy1,dz1,dx2,dy2,dz2,xx,yy,zz ;
+@@ -2570,14 +2575,14 @@
+ Standard_Boolean V3d_View::Multiply (const TColStd_Array2OfReal& Left, const TColStd_Array2OfReal& Right, TColStd_Array2OfReal& Matrix) {
+
+ Standard_Integer llr = Left.LowerRow ();
+-//Standard_Integer lur = Left.UpperRow ();
++/*Standard_Integer lur = Left.UpperRow (); */
+ Standard_Integer llc = Left.LowerCol ();
+ Standard_Integer luc = Left.UpperCol ();
+
+ Standard_Integer rlr = Right.LowerRow ();
+ Standard_Integer rur = Right.UpperRow ();
+ Standard_Integer rlc = Right.LowerCol ();
+-//Standard_Integer ruc = Right.UpperCol ();
++/*Standard_Integer ruc = Right.UpperCol (); */
+
+ Standard_Integer mlr = Matrix.LowerRow ();
+ Standard_Integer mur = Matrix.UpperRow ();
+@@ -2588,7 +2593,7 @@
+
+ InitMatrix (Result);
+
+- // Left et Right incompatibles
++ /* Left et Right incompatibles */
+ if (luc - llc + 1 != rur - rlr + 1)
+ return Standard_False;
+
+@@ -2681,7 +2686,7 @@
+ Graphic3d_Vertex PP ;
+ Standard_Real X,Y,Z,XX,YY,ZZ ;
+
+- // CAL. S3892
++ /* CAL. S3892 */
+ Standard_Integer lr, ur, lc, uc;
+ lr = Matrix.LowerRow ();
+ ur = Matrix.UpperRow ();
+@@ -2709,7 +2714,7 @@
+ Graphic3d_Vector VV ;
+ Standard_Real X,Y,Z,XX,YY,ZZ ;
+
+- // CAL. S3892
++ /* CAL. S3892 */
+ Standard_Integer lr, ur, lc, uc;
+ lr = Matrix.LowerRow ();
+ ur = Matrix.UpperRow ();
+@@ -2782,15 +2787,15 @@
+ Standard_Real Umin,Umax,Vmin,Vmax,Xrp,Yrp,Zrp ;
+ Standard_Real DxvOld,DyvOld,DxvNew,DyvNew,RapOld,RapNew ;
+ Standard_Integer Xpixel,Ypixel;
+- //Standard_Integer Xleft,Yup,Xright,Ylow ;
++ /*Standard_Integer Xleft,Yup,Xright,Ylow ; */
+
+ Viewer_BadValue_Raise_if( (Xmin == Xmax) || (Ymin == Ymax) ,
+ "V3d_View::FitAll, Window Size is NULL");
+
+ MyProjReferencePoint = MyViewMapping.ProjectionReferencePoint() ;
+ MyProjReferencePoint.Coord(Xrp,Yrp,Zrp) ;
+- //aWindow->Position(Xleft,Yup,Xright,Ylow) ;
+- //DxvOld = Abs(Xright - Xleft) ; DyvOld = Abs(Yup - Ylow) ;
++ /*aWindow->Position(Xleft,Yup,Xright,Ylow) ; */
++ /*DxvOld = Abs(Xright - Xleft) ; DyvOld = Abs(Yup - Ylow) ;*/
+ aWindow->Size(Xpixel,Ypixel);
+ DxvOld = Xpixel; DyvOld = Ypixel;
+
+@@ -2838,7 +2843,7 @@
+ if( zRotationThreshold > 0. ) {
+ Standard_Real dx = Abs(sx - rx/2.);
+ Standard_Real dy = Abs(sy - ry/2.);
+-// if( dx > rx/3. || dy > ry/3. ) zRotation = Standard_True;
++/* if( dx > rx/3. || dy > ry/3. ) zRotation = Standard_True; */
+ Standard_Real dd = zRotationThreshold * (rx + ry)/2.;
+ if( dx > dd || dy > dd ) zRotation = Standard_True;
+ }
+@@ -2875,7 +2880,7 @@
+ #else
+ myImmediateUpdate = Standard_False;
+ Rotate(dx/rx, dy/ry, 0., gx, gy, gz, Standard_False);
+- ZFitAll (Zmargin); //Don't do that, perf improvment
++ ZFitAll (Zmargin); /*Don't do that, perf improvment */
+ myImmediateUpdate = Standard_True;
+ ImmediateUpdate();
+ #endif
+@@ -2884,7 +2889,7 @@
+ void V3d_View::SetAnimationModeOn () {
+ #ifdef G003
+ if ( MyAnimationFlags & V3d_FLAG_ANIMATION ) {
+- if( ComputedMode() ) { // Deactivates computed mode during animation
++ if( ComputedMode() ) { /* Deactivates computed mode during animation */
+ MyAnimationFlags |= V3d_FLAG_COMPUTATION;
+ Standard_Boolean immediatUpdate = myImmediateUpdate;
+ myImmediateUpdate = Standard_False;
+@@ -2903,7 +2908,7 @@
+ if ( MyAnimationFlags & V3d_FLAG_ANIMATION ) {
+ MyView -> SetAnimationModeOff ();
+ if ( MyAnimationFlags & V3d_FLAG_COMPUTATION ) {
+- // Reactivates computed mode after animation
++ /* Reactivates computed mode after animation */
+ MyAnimationFlags &= ~V3d_FLAG_COMPUTATION;
+ SetComputedMode(Standard_True);
+ } else if( MyAnimationFlags & V3d_FLAG_DEGENERATION ) {
+@@ -2935,7 +2940,7 @@
+ else
+ MyAnimationFlags &= ~V3d_FLAG_DEGENERATION;
+
+-} // end V3d_View :: SetAnimationMode
++} /* end V3d_View :: SetAnimationMode */
+
+ Standard_Boolean V3d_View::AnimationMode( Standard_Boolean& isDegenerate ) const {
+
+@@ -2985,13 +2990,13 @@
+ Update ();
+ }
+
+-} // end V3d_View :: SetComputedMode
++} /* end V3d_View :: SetComputedMode */
+
+ Standard_Boolean V3d_View :: ComputedMode () const {
+
+ return MyView -> ComputedMode ();
+
+-} // end V3d_View :: ComputedMode
++} /* end V3d_View :: ComputedMode */
+
+ void V3d_View :: SetBackFacingModel (
+ const V3d_TypeOfBackfacingModel aModel
+@@ -2999,13 +3004,13 @@
+
+ MyView -> SetBackFacingModel ( Visual3d_TypeOfBackfacingModel(aModel) );
+ Redraw();
+-} // end V3d_View :: SetBackFacingModel
++} /* end V3d_View :: SetBackFacingModel */
+
+ V3d_TypeOfBackfacingModel V3d_View :: BackFacingModel () const {
+
+ return V3d_TypeOfBackfacingModel(MyView -> BackFacingModel ());
+
+-} // end V3d_View :: BackFacingModel
++} /* end V3d_View :: BackFacingModel */
+ #endif
+
+ Standard_Boolean V3d_View::TransientManagerBeginDraw(const Standard_Boolean DoubleBuffer,const Standard_Boolean RetainMode) const {
+@@ -3047,7 +3052,7 @@
+ }
+
+ void V3d_View::Plot() {
+-// cout << "Appel a Plot de Visual3d_View" << endl;
++/* cout << "Appel a Plot de Visual3d_View" << endl; */
+
+ Viewer_BadValue_Raise_if( !MyPlotter.IsNull(), "view has no plotter");
+
+@@ -3102,7 +3107,7 @@
+ new WNT_WDriver (Handle(WNT_Window)::DownCast(MyWindow));
+ #else
+ new Xw_Driver (Handle(Xw_Window)::DownCast(MyWindow));
+-#endif // WNT
++#endif /* WNT */
+ Quantity_Factor aScale;
+ Quantity_Length thePixel;
+ Quantity_Parameter theWWidth, theWHeight;
+@@ -3115,18 +3120,18 @@
+ if (aPlotScale == 0.) {
+ aScale = Min (thePWidth / theWWidth, thePHeight / theWHeight);
+ } else {
+- // To be changed !!!!!!!!!!!!!!!
++ /* To be changed !!!!!!!!!!!!!!! */
+ aScale = Min (thePWidth / theWWidth, thePHeight / theWHeight);
+ }
+
+- // Set default maps (color, type, etc) for plotter driver
++ /* Set default maps (color, type, etc) for plotter driver*/
+ aPlotterDriver -> SetColorMap ( new Aspect_GenericColorMap () );
+ aPlotterDriver -> SetTypeMap ( new Aspect_TypeMap () );
+ aPlotterDriver -> SetWidthMap ( new Aspect_WidthMap () );
+ aPlotterDriver -> SetFontMap ( new Aspect_FontMap () );
+ aPlotterDriver -> SetMarkMap ( new Aspect_MarkMap () );
+
+- // Set backgroung to white, unihiglight if any
++ /* Set backgroung to white, unihiglight if any */
+ Quantity_Parameter theRed, theGreen, theBlue;
+ Handle(TColStd_HSequenceOfInteger) theFlags;
+ Graphic3d_MapOfStructure theStructures;
+@@ -3148,7 +3153,7 @@
+ }
+ Redraw ();
+
+- // Dump the view
++ /* Dump the view */
+ if (aPlotterDriver->IsKind(STANDARD_TYPE(PlotMgt_ImageDriver))) {
+ aFileToDump = aPlotterDriver->PlotFileName();
+ } else {
+@@ -3169,7 +3174,7 @@
+ SetBackgroundColor (Quantity_TOC_RGB, theRed, theGreen, theBlue);
+ Redraw ();
+
+- // Draw imagefile by plotter driver
++ /* Draw imagefile by plotter driver */
+ aPlotterDriver -> SetPixelSize (thePixel);
+ aPlotterDriver -> BeginDraw ();
+ aPlotterDriver -> DrawImageFile (
+@@ -3189,7 +3194,7 @@
+ #include <Graphic3d_GraphicDriver.hxx>
+ #include <Visual3d_Layer.hxx>
+
+-////////////////////////////////////////////////////////////////
++/*//////////////////////////////////////////////////////////////*/
+ Standard_Boolean V3d_View::Dump ( const Standard_CString aFile )
+ {
+ Standard_Boolean isDone;
+@@ -3205,16 +3210,16 @@
+ return isDone;
+ }
+
+-////////////////////////////////////////////////////////////////
++/*///////////////////////////////////////////////////////////////*/
+ Standard_Boolean V3d_View::Dump ( const Standard_CString aFile,
+ const Aspect_FormatOfSheetPaper aFormat)
+ {
+ Standard_Boolean isDone = Standard_False;
+- // convert Aspect_FormatOfSheetPaper size to pixel ...
++ /* convert Aspect_FormatOfSheetPaper size to pixel ...*/
+ Quantity_Length theSPWidth, theSPHeight;
+ Aspect::ValuesOfFOSP ( aFormat, theSPWidth, theSPHeight );
+
+- // adjusting to the ratio width/height ...
++ /* adjusting to the ratio width/height ...*/
+ Quantity_Length theWinWidth, theWinHeight;
+ MyWindow->MMSize ( theWinWidth, theWinHeight );
+ Standard_Integer thePixelWidth, thePixelHeight;
+@@ -3236,18 +3241,18 @@
+ Xw_PixMap aBitmap ( MyWindow, thePixelWidth, thePixelHeight );
+ #endif
+
+- // add bitmap ID and size to the MyCView structure ...
++ /* add bitmap ID and size to the MyCView structure ...*/
+ cView->DefBitmap.bitmap = aBitmap.PixmapID();
+ cView->DefBitmap.width = thePixelWidth;
+ cView->DefBitmap.height = thePixelHeight;
+
+ Redraw ();
+
+- // deactivate the bitmap ID in the MyCView structure ...
++ /* deactivate the bitmap ID in the MyCView structure ...*/
+ cView->DefBitmap.bitmap = Aspect_Handle(NULL);
+ cView->DefBitmap.width = 0;
+ cView->DefBitmap.height = 0;
+-#endif // IMP100701
++#endif /* IMP100701*/
+
+ Standard_Real gammaValue = 1.0;
+ OSD_Environment envGamma("CSF_GAMMA_CORRECTION");
+@@ -3258,7 +3263,7 @@
+ }
+ return isDone;
+ }
+-#endif //G004
++#endif /*G004*/
+
+ ////////////////////////////////////////////////////////////////
+ Handle(Aspect_PixMap) V3d_View::ToPixMap (const Standard_Integer aWidth,
+@@ -3273,26 +3278,26 @@
+ theBitmap = new Xw_PixMap ( MyWindow, aWidth, aHeight, aCDepth );
+ #endif
+
+- //szv: save mapping
++ /*szv: save mapping*/
+ Visual3d_ViewMapping prevMapping = MyView->ViewMapping();
+
+- //szv: get mapping frame
++ /*szv: get mapping frame*/
+ Standard_Real PUmin, PVmin, PUmax, PVmax;
+ prevMapping.WindowLimit(PUmin,PVmin,PUmax,PVmax);
+
+- //szv: calculate expansion
++ /*szv: calculate expansion*/
+ Standard_Real Umin = PUmin, Vmin = PVmin, Umax = PUmax, Vmax = PVmax;
+ Standard_Real oldWidth = (PUmax - PUmin), oldHeight = (PVmax - PVmin);
+ Standard_Real newWidth = (oldHeight * aWidth) / aHeight;
+ if (newWidth < oldWidth) {
+ Standard_Real newHeight = (oldWidth * aHeight) / aWidth;
+- // Expand height
++ /* Expand height*/
+ Standard_Real delta = 0.5 * (newHeight - oldHeight);
+ Vmin = PVmin - delta;
+ Vmax = PVmax + delta;
+ }
+ else {
+- // Expand width
++ /* Expand width*/
+ Standard_Real delta = 0.5 * (newWidth - oldWidth);
+ Umin = PUmin - delta;
+ Umax = PUmax + delta;
+@@ -3300,7 +3305,7 @@
+
+ Graphic3d_CView* cView = (Graphic3d_CView*)MyView->CView();
+
+- // add bitmap ID and size to the MyCView structure ...
++ /* add bitmap ID and size to the MyCView structure ...*/
+ Standard_Integer aWi, anHe;
+ theBitmap->Size ( aWi, anHe );
+ cView->DefBitmap.bitmap = theBitmap->PixmapID();
+@@ -3308,17 +3313,17 @@
+ cView->DefBitmap.height = anHe;
+ cView->DefBitmap.depth = theBitmap->Depth();
+
+- //szv: apply expanded mapping
++ /*szv: apply expanded mapping*/
+ MyViewMapping.SetWindowLimit(Umin,Vmin,Umax,Vmax);
+ MyView->SetViewMapping(MyViewMapping);
+
+ Redraw ( );
+
+- //szv: restore mapping
++ /*szv: restore mapping*/
+ MyViewMapping = prevMapping;
+ MyView->SetViewMapping(prevMapping);
+
+- // deactivate the bitmap ID in the MyCView structure ...
++ /* deactivate the bitmap ID in the MyCView structure ...*/
+ cView->DefBitmap.bitmap = Aspect_Handle(NULL);
+ cView->DefBitmap.width = 0;
+ cView->DefBitmap.height = 0;
+diff -Naur OpenCASCADE6.3.0/ros/src/ViewerTest/ViewerTest_ViewerCommands.cxx OpenCASCADE6.3.0sp6/ros/src/ViewerTest/ViewerTest_ViewerCommands.cxx
+--- OpenCASCADE6.3.0/ros/src/ViewerTest/ViewerTest_ViewerCommands.cxx 2008-08-15 15:57:34.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/ViewerTest/ViewerTest_ViewerCommands.cxx 2009-10-03 01:04:52.000000000 +0200
+@@ -1411,6 +1411,23 @@
+ return 0;
+ }
+
++//==============================================================================
++//function : VTestZBuffTrihedron
++//purpose : Displays a V3d_ZBUFFER'ed trihedron at the bottom left corner of the view
++//==============================================================================
++
++static int VTestZBuffTrihedron(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
++{
++ Handle(V3d_View) V3dView = ViewerTest::CurrentView();
++ if ( V3dView.IsNull() ) return 1;
++
++ // Set up default trihedron parameters
++ V3dView->ZBufferTriedronSetup();
++ V3dView->TriedronDisplay( Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.1, V3d_ZBUFFER );
++ V3dView->ZFitAll();
++ return 0;
++}
++
+ //=======================================================================
+ //function : ViewerCommands
+ //purpose :
+@@ -1453,5 +1470,8 @@
+ theCommands.Add("vscale",
+ "vscale : vscale X Y Z",
+ __FILE__,VScale,group);
++ theCommands.Add("vzbufftrihedron",
++ "vzbufftrihedron : Displays a V3d_ZBUFFER'ed trihedron at the bottom left corner of the view",
++ __FILE__,VTestZBuffTrihedron,group);
+
+ }
+diff -Naur OpenCASCADE6.3.0/ros/src/Visual3d/Visual3d_View.cxx OpenCASCADE6.3.0sp6/ros/src/Visual3d/Visual3d_View.cxx
+--- OpenCASCADE6.3.0/ros/src/Visual3d/Visual3d_View.cxx 2008-08-22 15:17:03.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/Visual3d/Visual3d_View.cxx 2009-10-03 01:04:52.000000000 +0200
+@@ -59,21 +59,21 @@
+
+ ************************************************************************/
+
+-#define BUC60572 //GG_03-08-99 Add protection on Zclipping & Zcueing planes
+-// positions.
++#define BUC60572 /*GG_03-08-99 Add protection on Zclipping & Zcueing planes */
++/* positions. */
+
+-#define BUC60570 //GG 14-09-99 Don't activates lighting
+-// when the view shading model is NONE.
++#define BUC60570 /*GG 14-09-99 Don't activates lighting
++ when the view shading model is NONE. */
+
+-#define GER61454 //GG 14-09-99 Activates model clipping planes
++#define GER61454 /*GG 14-09-99 Activates model clipping planes */
+
+-#define IMP140100 //GG14-01-00 Add ViewManager( ) method
++#define IMP140100 /*GG14-01-00 Add ViewManager( ) method */
+
+-#define G003 //EUG 30-09-00 Degeneration management
+-// Backfacing management
++#define G003 /*EUG 30-09-00 Degeneration management
++ Backfacing management */
+
+-#define RIC120302 //GG Add a NEW SetWindow method which enable
+-// to connect a graphic widget and context to OGL.
++#define RIC120302 /*GG Add a NEW SetWindow method which enable
++ to connect a graphic widget and context to OGL. */
+
+ #define BUC61044 /* 25/10/01 SAV ; added functionality to control gl depth testing
+ from higher API */
+@@ -110,7 +110,7 @@
+ #include <windows.h>
+ #endif
+
+-// for the class
++/* for the class */
+ #include <Visual3d_View.ixx>
+ #include <Visual3d_View.pxx>
+ #include <Visual3d_DepthCueingDefinitionError.hxx>
+@@ -153,13 +153,13 @@
+ # include <Xw_Window.hxx>
+ #else
+ # include <WNT_Window.hxx>
+-#endif // WNT
++#endif /* WNT */
+
+-//-Aliases
++/*-Aliases*/
+
+-//-Global data definitions
++/*-Global data definitions */
+
+-//-Constructors
++/*-Constructors */
+
+ Visual3d_View::Visual3d_View (const Handle(Visual3d_ViewManager)& AManager):
+ MyContext (),
+@@ -222,14 +222,14 @@
+ MyCView.Orientation.ViewScaleY = float (Sy);
+ MyCView.Orientation.ViewScaleZ = float (Sz);
+
+- // NKV : 23/07/07 - Define custom MODELVIEW matrix
++ /* NKV : 23/07/07 - Define custom MODELVIEW matrix */
+ MyCView.Orientation.IsCustomMatrix = 0;
+ memset( (float*)MyCView.Orientation.ModelViewMatrix, 0, 16*sizeof( float ) );
+ MyCView.Orientation.ModelViewMatrix[0][0] =
+ MyCView.Orientation.ModelViewMatrix[1][1] =
+ MyCView.Orientation.ModelViewMatrix[2][2] =
+ MyCView.Orientation.ModelViewMatrix[3][3] = 1.;
+- //
++ /**/
+
+ Standard_Real um, vm, uM, vM;
+
+@@ -250,14 +250,14 @@
+ MyCView.Mapping.WindowLimit.uM = float (uM);
+ MyCView.Mapping.WindowLimit.vM = float (vM);
+
+- // NKV : 23/07/07 - Define custom MODELVIEW matrix
++ /* NKV : 23/07/07 - Define custom MODELVIEW matrix */
+ MyCView.Mapping.IsCustomMatrix = 0;
+ memset( (float*)MyCView.Mapping.ProjectionMatrix, 0, 16*sizeof( float ) );
+ MyCView.Mapping.ProjectionMatrix[0][0] =
+ MyCView.Mapping.ProjectionMatrix[1][1] =
+ MyCView.Mapping.ProjectionMatrix[2][2] =
+ MyCView.Mapping.ProjectionMatrix[3][3] = 1.;
+- //
++ /**/
+
+ MyCView.Context.ZBufferActivity = -1;
+
+@@ -273,7 +273,7 @@
+ MyCView.IsDegeneratesPrev = 0;
+ ComputedModeIsActive = Standard_False;
+ MyCView.Backfacing = 0;
+-#endif // G003
++#endif /* G003 */
+
+ MyCView.DefBitmap.bitmap = 0;
+ MyCView.ptrUnderLayer = 0;
+@@ -350,8 +350,8 @@
+ MyCView.Orientation.ViewScaleX = float (Sx);
+ MyCView.Orientation.ViewScaleY = float (Sy);
+ MyCView.Orientation.ViewScaleZ = float (Sz);
+-
+- // NKV : 23/07/07 - Define custom MODELVIEW matrix
++
++ /* NKV : 23/07/07 - Define custom MODELVIEW matrix */
+ if (MyViewOrientation.IsCustomMatrix()) {
+ MyCView.Orientation.IsCustomMatrix = 1;
+ for ( i = 0; i < 4; i++)
+@@ -366,7 +366,7 @@
+ MyCView.Orientation.ModelViewMatrix[2][2] =
+ MyCView.Orientation.ModelViewMatrix[3][3] = 1.;
+ }
+- //
++ /**/
+
+ Standard_Real um, vm, uM, vM;
+
+@@ -387,7 +387,7 @@
+ MyCView.Mapping.WindowLimit.uM = float (uM);
+ MyCView.Mapping.WindowLimit.vM = float (vM);
+
+- // NKV : 23/07/07 - Define custom MODELVIEW matrix
++ /* NKV : 23/07/07 - Define custom MODELVIEW matrix */
+ if (MyViewMapping.IsCustomMatrix()) {
+ MyCView.Mapping.IsCustomMatrix = 1;
+ for ( i = 0; i < 4; i++)
+@@ -402,8 +402,8 @@
+ MyCView.Mapping.ProjectionMatrix[2][2] =
+ MyCView.Mapping.ProjectionMatrix[3][3] = 1.;
+ }
+- //
+-
++ /**/
++
+ MyCView.Context.ZBufferActivity = -1;
+
+ MyMatOfMapIsModified = Standard_True;
+@@ -415,7 +415,7 @@
+ MyCView.IsDegenerates = 0;
+ MyCView.IsDegeneratesPrev = 0;
+ ComputedModeIsActive = Standard_False;
+-#endif // G003
++#endif /* G003 */
+
+ MyCView.DefBitmap.bitmap = 0;
+ MyCView.ptrUnderLayer = 0;
+@@ -431,10 +431,10 @@
+
+ }
+
+-//-Destructors
++/*-Destructors */
+
+-//-Methods, in order
+-// RIC120302
++/*-Methods, in order*/
++/* RIC120302 */
+ void Visual3d_View::SetWindow (const Handle(Aspect_Window)& AWindow,
+ const Aspect_RenderingContext AContext,
+ const Aspect_GraphicCallbackProc& ADisplayCB,
+@@ -486,8 +486,8 @@
+
+ Standard_Integer Width, Height;
+ AWindow->Size (Width, Height);
+-
+- MyCView.DefWindow.dx = float( Width );
++
++ MyCView.DefWindow.dx = float( Width );
+ MyCView.DefWindow.dy = float( Height );
+
+ Standard_Real R, G, B;
+@@ -628,7 +628,7 @@
+ MyViewMapping.WindowLimit(Umin,Vmin,Umax,Vmax) ;
+ Xc = (Umin + Umax)/2. ; Yc = (Vmin + Vmax)/2. ;
+ Dxv = Umax - Umin ; Dyv = Vmax - Vmin ;
+- if( Dxw > 0 && Dyw > 0 ) Rap = (Standard_Real)Dyw/(Standard_Real)Dxw ;
++ if( Dxw > 0 && Dyw > 0 ) Rap = (Standard_Real)Dyw/(Standard_Real)Dxw;
+ if( Rap > 0.0 ) {
+
+ if( Dxv <= Dyv )
+@@ -665,11 +665,11 @@
+
+ // Mise a jour avant le SetViewMapping.
+
+- MyCView.DefWindow.dx = float( Dxw );
+- MyCView.DefWindow.dy = float( Dyw );
++ MyCView.DefWindow.dx = float( Dxw );
++ MyCView.DefWindow.dy = float( Dyw );
+
+ SetViewMapping (MyViewMapping);
+-// SetViewMappingDefault ();
++ // SetViewMappingDefault ();
+ // FMN+ Mise a jout Ratio pour le MyViewMappingReset
+
+ MyViewMappingReset.WindowLimit(Umin,Vmin,Umax,Vmax) ;
+@@ -1109,7 +1109,7 @@
+ MyCView.Orientation.ViewScaleY = float (Sy);
+ MyCView.Orientation.ViewScaleZ = float (Sz);
+
+- CustomIsModified =
++ CustomIsModified =
+ MyCView.Orientation.IsCustomMatrix != MyViewOrientation.IsCustomMatrix();
+ MyCView.Orientation.IsCustomMatrix = MyViewOrientation.IsCustomMatrix();
+ if ( MyViewOrientation.IsCustomMatrix() ) {
+@@ -1121,14 +1121,14 @@
+ MyCView.Orientation.ModelViewMatrix[i][j] = MyViewOrientation.MyModelViewMatrix->Value(i,j);
+ }
+ }
+-
++
+ #ifdef TRACE_TRSF
+ cout << "Visual3d_View::SetViewOrientation\n";
+- if (VUPIsModified || VRPIsModified || VRUIsModified || CustomIsModified)
+- cout << "VUPIsModified : " << VUPIsModified
+- << ", VRPIsModified : " << VRPIsModified
+- << ", VRUIsModified : " << VRUIsModified
+- << ", CustomIsModified : " << CustomIsModified << "\n" << flush;
++ if (VUPIsModified || VRPIsModified || VRUIsModified || CustomIsModified)
++ cout << "VUPIsModified : " << VUPIsModified
++ << ", VRPIsModified : " << VRPIsModified
++ << ", VRUIsModified : " << VRUIsModified
++ << ", CustomIsModified : " << CustomIsModified << "\n" << flush;
+ else
+ cout << "no modification\n" << flush;
+ #endif
+@@ -1297,14 +1297,14 @@
+ MyCView.Mapping.WindowLimit.uM = float (uM);
+ MyCView.Mapping.WindowLimit.vM = float (vM);
+
+- MyCView.Mapping.IsCustomMatrix = MyViewMapping.IsCustomMatrix();
++ MyCView.Mapping.IsCustomMatrix = MyViewMapping.IsCustomMatrix();
+ if (MyViewMapping.IsCustomMatrix()) {
+ Standard_Integer i, j;
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < 0; j++)
+ MyCView.Mapping.ProjectionMatrix[i][j] = MyViewMapping.MyProjectionMatrix->Value(i,j);
+ }
+-
++
+ MyMatOfMapIsModified = Standard_True;
+ MyMatOfMapIsEvaluated = Standard_False;
+
+@@ -1365,7 +1365,7 @@
+ MyCView.Mapping.WindowLimit.uM = float (uM);
+ MyCView.Mapping.WindowLimit.vM = float (vM);
+
+- MyCView.Mapping.IsCustomMatrix = MyViewMapping.IsCustomMatrix();
++ MyCView.Mapping.IsCustomMatrix = MyViewMapping.IsCustomMatrix();
+ if (MyViewMapping.IsCustomMatrix()) {
+ Standard_Integer i, j;
+ for (i = 0; i < 4; i++)
+@@ -1605,11 +1605,11 @@
+
+ }
+
+-void Visual3d_View::DisplayedStructures (Graphic3d_MapOfStructure& SG) const
++void Visual3d_View::DisplayedStructures (Graphic3d_MapOfStructure& SG) const
+ {
+
+ if (IsDeleted ()) return;
+-
++
+ Graphic3d_MapIteratorOfMapOfStructure Iterator (MyDisplayedStructure);
+
+ while (Iterator.More ()) {
+@@ -1647,7 +1647,7 @@
+ * la vue directement, si la structure n'est pas deja
+ * affichee et si la vue l'accepte dans son contexte.
+ */
+-
++
+ Visual3d_TypeOfAnswer Answer;
+ Graphic3d_MapOfStructure Map;
+ MyViewManager->DisplayedStructures(Map);
+@@ -1718,7 +1718,8 @@
+ * effacee et si la vue l'accepte dans son contexte.
+ */
+
+- Visual3d_TypeOfAnswer Answer;
++
++ Visual3d_TypeOfAnswer Answer;
+ Graphic3d_MapOfStructure Map;
+ MyViewManager->DisplayedStructures(Map);
+ Graphic3d_MapIteratorOfMapOfStructure it(Map);
+@@ -2083,10 +2084,10 @@
+ Index = 0;
+ }
+
+- Visual3d_TypeOfAnswer Answer = AcceptDisplay (AStructure);
++ Visual3d_TypeOfAnswer Answer = AcceptDisplay (AStructure);
+
+ #ifdef TRACE_DISPLAY
+- Standard_Integer StructId = AStructure->Identification ();
++ Standard_Integer StructId = AStructure->Identification ();
+ cout << "Visual3d_View" << MyCView.ViewId << "::Display ("
+ << StructId << ");\n";
+ cout << flush;
+@@ -2094,8 +2095,8 @@
+
+ if (Answer == Visual3d_TOA_NO) {
+ #ifdef TRACE_DISPLAY
+- cout << "Answer : Visual3d_TOA_NO\n";
+- cout << flush;
++ cout << "Answer : Visual3d_TOA_NO\n";
++ cout << flush;
+ #endif
+ return;
+ }
+@@ -2880,24 +2881,25 @@
+ APX = ( APX + 1 ) * 0.5 * (uM - um) + um;
+ APY = ( APY + 1 ) * 0.5 * (vM - vm) + vm;
+ } else {
+- Ratio = (uM - um) / (vM - vm);
+- if (Ratio >= 1.0)
+- APY *= Ratio;
+- else
+- APX /= Ratio;
+-
+- /*
+- * Les coordonnees de APX, APY, APZ sont decrites dans
+- * l'espace [0-1]x[0-1]x[0-1].
+- * Il faut transformer x et y dans le window space.
+- * Il faut transformer z dans l'espace du back et front
+- * plane, en pensant aux plans de clipping.
+- * Ces plans de z clipping sont definis entre 0 et 1.
+- */
+- APX = APX * (uM - um) + um;
+- APY = APY * (vM - vm) + vm;
+- }
+- APZ = APZ * (fpd - bpd) + bpd;
++ Ratio = (uM - um) / (vM - vm);
++ if (Ratio >= 1.0)
++ APY *= Ratio;
++ else
++ APX /= Ratio;
++
++ /*
++ * Les coordonnees de APX, APY, APZ sont decrites dans
++ * l'espace [0-1]x[0-1]x[0-1].
++ * Il faut transformer x et y dans le window space.
++ * Il faut transformer z dans l'espace du back et front
++ * plane, en pensant aux plans de clipping.
++ * Ces plans de z clipping sont definis entre 0 et 1.
++ */
++
++ APX = APX * (uM - um) + um;
++ APY = APY * (vM - vm) + vm;
++ }
++ APZ = APZ * (fpd - bpd) + bpd;
+ }
+
+ Standard_Integer Visual3d_View::Identification () const {
+@@ -3094,7 +3096,7 @@
+ MyCOMPUTEDSequence.Value (Index)->Identification ();
+ #ifdef TRACE_COMP
+ Standard_Integer StructId = AStructure->Identification ();
+- cout << "La structure " << StructId
++ cout << "La structure " << StructId
+ << " calculee, dans la view "
+ << Identification () << ", par la structure "
+ << OldStructId << " est recalculee.\n";
+diff -Naur OpenCASCADE6.3.0/ros/src/WNT/WNT_Window.cdl OpenCASCADE6.3.0sp6/ros/src/WNT/WNT_Window.cdl
+--- OpenCASCADE6.3.0/ros/src/WNT/WNT_Window.cdl 2005-08-26 18:28:43.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/WNT/WNT_Window.cdl 2009-10-03 01:04:53.000000000 +0200
+@@ -16,6 +16,12 @@
+ -- Warning: The position and size for the creation of the window
+ -- are defined in Device Screen Unit (DSU)
+ -- floating [0,1] space.
++ --
++ -- As 3D view window is the main purpose of this class,
++ -- and 3D view does not need its background to be drawn
++ -- by the system, by default the window background is not drawn.
++ -- This can be overridden by calling ClearFlags( WDF_NOERASEBKGRND ).
++ -- See also WNT_WndProc.cxx and InterfaceGraphic_WNT.hxx.
+
+ uses
+
+@@ -335,11 +341,15 @@
+ is static;
+ ---Level: Public
+ ---Purpose: Sets user defined flags in the extra window data area.
++ -- Supported flags WDF_* are listed in InterfaceGraphic_WNT.hxx
++ -- In particular, the window backround can be turned off using this method.
+
+ ResetFlags ( me : mutable; aFlags : Integer from Standard )
+ is static;
+ ---Level: Public
+ ---Purpose: Reset specified flags in the extra window data area.
++ -- Supported flags WDF_* are listed in InterfaceGraphic_WNT.hxx
++ -- In particular, the window backround can be turned on using this method.
+
+
+ ----------------------------
+diff -Naur OpenCASCADE6.3.0/ros/src/WNT/WNT_Window.cxx OpenCASCADE6.3.0sp6/ros/src/WNT/WNT_Window.cxx
+--- OpenCASCADE6.3.0/ros/src/WNT/WNT_Window.cxx 2008-07-04 17:36:55.000000000 +0200
++++ OpenCASCADE6.3.0sp6/ros/src/WNT/WNT_Window.cxx 2009-10-03 01:04:53.000000000 +0200
+@@ -67,13 +67,13 @@
+ const Aspect_Handle aMenu,
+ const Standard_Address aClientStruct
+ ) : Aspect_Window ( aDevice ), myWClass ( aClass )
+-{
++{
+ int x, y, w, h, px, py, pw, ph;
+ DWORD dwStyle = aStyle;
+ const Handle( WNT_GraphicDevice )& dev = Handle( WNT_GraphicDevice ) ::
+ DownCast ( MyGraphicDevice );
+
+- if ( Xc < 0. || Xc > 1. || Yc < 0. || Yc > 1. ||
++ if ( Xc < 0. || Xc > 1. || Yc < 0. || Yc > 1. ||
+ aWidth <= 0. || aHeight <= 0. )
+
+ Aspect_WindowDefinitionError :: Raise ( "Coordinate(s) out of range" );
+@@ -150,8 +150,7 @@
+ myHPixmap = 0;
+ myHParentWindow = aParent;
+ myWndProc = myWClass -> WndProc ();
+- myHParentWindow = aParent;
+-
++ myHParentWindow = aParent;
+ SetBackground ( aBackColor );
+ #ifndef _WIN64
+ SetWindowLong ( ( HWND )myHWindow, GWL_WNDPROC, ( LONG )WNT_WndProc );
+@@ -177,6 +176,11 @@
+ myImages = new WNT_ImageManager ( this );
+ myFormat = WNT_TOI_XWD;
+
++ /* Bug OCC20596 */
++ SetFlags(WDF_NOERASEBKGRND);
++
++
++
+ } // end constructor
+ //***//
+ //************************* Constructor **********************************//
+@@ -189,6 +193,9 @@
+
+ doCreate ( aDevice, aHandle, aBackColor );
+
++ /* Bug OCC20596 */
++ SetFlags(WDF_NOERASEBKGRND);
++
+ } // end constructor
+ //***//
+ //************************* Constructor **********************************//
+@@ -204,6 +211,9 @@
+
+ doCreate ( aDevice, aHandle, aBackColor );
+
++ /* Bug OCC20596 */
++ SetFlags(WDF_NOERASEBKGRND);
++
+ } // end constructor
+ //***//
+ //***************************** Destroy **********************************//