0023015: TKOpenGl redesign regression in text printing
authorapl <apl@opencascade.com>
Fri, 16 Mar 2012 09:12:26 +0000 (13:12 +0400)
committerapl <apl@opencascade.com>
Wed, 21 Mar 2012 14:11:24 +0000 (18:11 +0400)
Changes:
- the lost code block for scaling text restored;
- the color attributes fixed.

src/OpenGl/OpenGl_Display_1.cxx
src/OpenGl/OpenGl_View_2.cxx
src/OpenGl/OpenGl_Workspace.hxx
src/OpenGl/OpenGl_Workspace_5.cxx

index 87ec26b..3e0d48c 100644 (file)
@@ -3,13 +3,14 @@
 // Author:    Sergey ZERCHANINOV
 // Copyright: OPEN CASCADE 2011
 
+#include <OpenGl_tgl_all.hxx>
 #include <OpenGl_Display.hxx>
 
 #include <TCollection_AsciiString.hxx>
 #include <TCollection_HAsciiString.hxx>
 
 #include <OpenGl_FontMgr.hxx>
-
+#include <OpenGl_PrinterContext.hxx>
 #include <OpenGl_AspectText.hxx>
 
 #ifdef HAVE_GL2PS
@@ -554,6 +555,22 @@ void OpenGl_Display::RenderText (const wchar_t* str, const int is2d, const float
 
     if( !aspect->IsZoomable() )
     {
+#ifdef WNT
+      // if the context has assigned printer context, use it's parameters
+      OpenGl_PrinterContext* aPrinterContext = 
+        OpenGl_PrinterContext::GetPrinterContext( GET_GL_CONTEXT() );
+      if( aPrinterContext )
+      {
+        // get printing scaling in x and y dimensions
+        GLfloat aTextScalex = 1, aTextScaley = 1;
+        aPrinterContext->GetScale( aTextScalex, aTextScaley );
+        
+        // text should be scaled in all directions with same
+        // factor to save its proportions, so use height (y) scaling
+        // as it is better for keeping text/3d graphics proportions
+        glScalef( aTextScaley, aTextScaley, aTextScaley );
+      }
+#endif
       glScaled( h, h, h );
     }
     else
index 97c7637..2f7a546 100644 (file)
@@ -1173,6 +1173,12 @@ D = -[Px,Py,Pz] dot |Nx|
   if (!myGraduatedTrihedron.IsNull())
     myGraduatedTrihedron->Render(AWorkspace);
 
+  // The applied aspects should be reset to make it possible to
+  // update gl state and bring it into line with currently set
+  // aspects by reapplying them. Reset should be done, because
+  // the glPopAttrib() will return original gl state while the
+  // internal TKOpenGl state stills unchanged.
+  AWorkspace->ResetAppliedAspect();
   glPopAttrib(); // GL_FOG_BIT | GL_LIGHTING_BIT | GL_ENABLE_BIT
 
   // Restore face culling
index fe2a4ed..7f2a00c 100644 (file)
@@ -146,6 +146,9 @@ public:
   const OpenGl_AspectMarker* AspectMarker (const Standard_Boolean theWithApply);
   const OpenGl_AspectText*   AspectText   (const Standard_Boolean theWithApply);
 
+  //! Clear the applied aspect state.
+  void ResetAppliedAspect();
+
   //// RELATED TO FONTS ////
 
   int FindFont (const char*          theFontName,
index cda04ce..a17e2a7 100644 (file)
@@ -623,3 +623,17 @@ const OpenGl_AspectText * OpenGl_Workspace::AspectText(const Standard_Boolean Wi
 }
 
 /*----------------------------------------------------------------------*/
+
+//=======================================================================
+//function : ResetAppliedAspect
+//purpose  : 
+//=======================================================================
+
+void OpenGl_Workspace::ResetAppliedAspect()
+{
+  AspectLine_applied   = NULL;
+  AspectFace_applied   = NULL;
+  AspectMarker_applied = NULL;
+  AspectText_applied   = NULL;
+  TextParam_applied    = NULL;
+}