diff options
Diffstat (limited to 'graphics/OpenCASCADE/opencascade-6.3.0sp6.diff')
-rw-r--r-- | graphics/OpenCASCADE/opencascade-6.3.0sp6.diff | 6563 |
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 **********************************// |