0023663: Removing 2D viewer library
[occt.git] / src / V2d / V2d_View.cxx
diff --git a/src/V2d/V2d_View.cxx b/src/V2d/V2d_View.cxx
deleted file mode 100755 (executable)
index ac1ce8e..0000000
+++ /dev/null
@@ -1,1015 +0,0 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
-//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
-//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-/***********************************************************************
-     FUNCTION :
-     ----------
-        Classe V2d_View :
-     HISTORY OF MODIFICATIONS   :
-     --------------------------------
-      00-09-92 : GG  ; Creation.
-      13-11-97 : EUG ; ???????? New method Plot(...) 
-      06-01-98 : FMN ; BUC60065 
-      20-02-98 : STT ; S3558 
-      08-04-98 : STT ; suppr. S3558
-      24-03-98 : GG ; ?????? UseMFT()
-      26-03-98 : GG ; BUC60049 Add conversion method 
-                      View space -> Window pixel space
-      04-05-98 : GG ; PS driver PS is also usable under WNT
-      21-07-98 : DCB/SYL: Remove useless calls to SetXXXMap() methods
-      in PlotScreen ().
-      OCT-98   : DCB/SYL : ScreenCopy() method.
-      12-06-00 : TCL : new method Pick( Xmin, Ymin, Xmax, Ymax ) 
-      03-10-00 : TCL : new methods SetBackground(...)
-      14-11-01 : SAV : Added PickByCircle().
-      24-11-01 : SAV : SetBackground(...) overloaded.
-
-     NOTES :
-     -----------
-
-************************************************************************/
-
-#define TRACE 0
-
-#define PRO16111        //GG_021198
-//                      Correction of method Fitall() that was wrong if 
-//                      the window height was superior to the width
-
-#define BUC60611       //VTN_291198
-//                     Re change Fitall() computation method
-
-#define IMP130300      //GG OPTIMIZATION The V2d_View::UpdateNew() method MUST use 
-//                     Graphic2d_View::TinyUpdate() and no more Update()
-
-#define JAP60249        //GG_131098
-//                      Plots the view accordingly with the requested view center
-
-#define IMP250500       //GG Update() the view after creation
-//                      the driver of the view must be known before
-//                      any minmax computation.
-
-#define OCC540          //SAV Add Color( Quantity_Color& ) to retrieve background via RGB
-
-/*----------------------------------------------------------------------*/
-/*
- * Includes
- */
-
-#include <V2d_View.ixx>
-#include <Aspect_Window.hxx>
-#include <Aspect_Units.hxx>
-#include <Aspect_TypeOfResize.hxx>
-#include <Graphic2d_Array1OfVertex.hxx>
-#include <Graphic2d_Polyline.hxx>
-#include <Graphic2d_Vertex.hxx>
-#include <Graphic2d_Marker.hxx>
-#include <Graphic2d_Text.hxx>
-#include <TCollection_ExtendedString.hxx>
-#include <V2d_DefaultMap.hxx>
-#include <Graphic2d_CircleMarker.hxx>
-#include <Aspect_GenericColorMap.hxx>
-#include <Aspect_ColorMap.hxx>
-#include <Aspect_ColorMapEntry.hxx>
-#include <Quantity_Color.hxx>
-#include <Aspect_Background.hxx>
-#include <Quantity_Color.hxx>
-#include <PS_Driver.hxx>
-#include <Standard_ShortReal.hxx>
-// S3603 - ScreenCopy ()
-#include <Aspect_TypeMap.hxx>
-#include <Aspect_WidthMap.hxx>
-#include <Aspect_FontMap.hxx>
-#include <Aspect_MarkMap.hxx>
-#include <PlotMgt_ImageDriver.hxx>
-#include <TColStd_HSequenceOfInteger.hxx>
-
-//OCC186
-#include <Standard_ErrorHandler.hxx>
-#include <Standard_NumericError.hxx>
-//OCC186
-
-V2d_View::V2d_View(const Handle(Aspect_WindowDriver)& aWindowDriver,
-                   const Handle(V2d_Viewer)& aViewer,
-                   const Standard_Real aXCenter,
-                   const Standard_Real aYCenter,
-                   const Standard_Real aSize)
-
-: myWindowDriver(aWindowDriver) ,
-  myViewer(aViewer.operator->()),
-  myFitallRatio (0.01) ,
-  myHitPoint(new Graphic2d_GraphicObject(aViewer->View())),
-  myHitBuf(new Graphic2d_Buffer(aViewer->View(),0.,0.))
-{
-
-  myViewMapping = new Graphic2d_ViewMapping;
-  myViewMapping->SetViewMapping(aXCenter,aYCenter,aSize);
-  myViewMapping->SetViewMappingDefault();
-  myWindowDriver->WorkSpace(myWidth,myHeight);
-  this->MapToCenter();
-  myEnablePrevious = Standard_True;
-  this->StoreCurrent();
-  myDeflection = 0.0001 METER; // 10th of  millimeter at the screen.
-
-  aWindowDriver->SetColorMap(aViewer->ColorMap());
-  aWindowDriver->SetWidthMap(aViewer->WidthMap());
-  aWindowDriver->SetTypeMap (aViewer->TypeMap());
-  aWindowDriver->SetFontMap (aViewer->FontMap(),aViewer->UseMFT());
-  aWindowDriver->SetMarkMap (aViewer->MarkMap());
-  aViewer->AddView(this);
-#ifdef IMP250500
-  Update();
-#endif
-}
-void V2d_View::SetDefaultPosition(const Standard_Real aXCenter,
-                   const Standard_Real aYCenter,
-                   const Standard_Real aSize) {
-
-  myViewMapping->SetViewMapping(aXCenter,aYCenter,aSize);
-  myViewMapping->SetViewMappingDefault();
-  this->MapToCenter();
-  this->StoreCurrent();
-}
-void V2d_View::Fitall() {
-
-  this->StoreCurrent();
-  this->MapToCenter();
-
-  Quantity_Ratio rat = myWindowDriver->Window()->Ratio();
-
-  Quantity_Length XVMin,YVMin,XVMax,YVMax;
-  myViewer->View()->MinMax(XVMin,XVMax,YVMin,YVMax);
-  if(XVMin < ShortRealFirst() + 1. || YVMin < ShortRealFirst() + 1.) {
-    XVMin = ShortRealLast(); YVMin = ShortRealLast();    // Minmax are crossed, as
-    XVMax = ShortRealFirst();YVMax = ShortRealFirst();   // CAL does not do it!!!!!!!!!!!!
-  }
-
-  Quantity_Length XMMin,YMMin,XMMax,YMMax;
-  myViewer->View()->MarkerMinMax(XMMin,XMMax,YMMin,YMMax);
-  if(XMMin < ShortRealFirst() + 1. || YMMin < ShortRealFirst() + 1.) {
-    XMMin = ShortRealLast(); YMMin = ShortRealLast();    // Minmax are crossed, because 
-    XMMax = ShortRealFirst();YMMax = ShortRealFirst();   // CAL does not do it !!!!!!!!!!!!
-  }
-
-  Quantity_Length XMin = Min(XVMin,XMMin),YMin= Min(YVMin,YMMin),
-                  XMax = Max(XVMax,XMMax),YMax= Max(YVMax,YMMax);
-
-  Quantity_Length Xold,Yold,Sizeold;
-  myViewMapping->ViewMapping(Xold,Yold,Sizeold);
-
-#ifdef PRO16111
-  Quantity_Length Xnew = Xold,Ynew = Yold,Sizenew = Sizeold;
-  Quantity_Length Dxnew = Sizeold, Dynew = Sizeold;
-  if( XMax > XMin ) {
-    Dxnew = XMax - XMin;
-    Xnew =  (XMax+XMin)/2.;
-  }
-  if( YMax > YMin ) {
-    Dynew = YMax - YMin;
-    Ynew =  (YMax+YMin)/2.;
-  }
-  if( rat >= 1. ) {
-#ifdef BUC60611
-    if( Dxnew >= Dynew*rat ) Sizenew = Dxnew/2./rat;
-#else
-    if( Dxnew >= Dynew ) Sizenew = Dxnew/2./rat;
-#endif
-    else Sizenew = Dynew/2.;
-  } else {
-#ifdef BUC60611
-    if( Dynew >= Dxnew/rat ) Sizenew = Dynew/2.*rat;
-    else Sizenew = Dxnew/2;
-#else
-    if( Dxnew >= Dynew ) Sizenew = Dxnew/2.;
-    else Sizenew = Dynew/2.*rat;
-#endif
-  }
-  Sizenew += Sizenew * myFitallRatio;
-#else 
-  Quantity_Length Xnew,Ynew,Sizenew;
-  if ( XMin < XMax ) {
-    Xnew =  (XMax+XMin)/2.;
-    Sizenew = (XMax-XMin)/(1. - myFitallRatio)/2./rat;
-  }
-  else {
-    Xnew = Xold;
-    Sizenew = Sizeold;
-  }
-
-  if ( YMin <  YMax ) {
-    Ynew =  (YMax+YMin)/2.;
-    Sizenew = Max ( Sizenew , (YMax-YMin)/(1. - myFitallRatio)/2.);
-    }
-  else {
-    Ynew = Yold;
-    Sizenew = Max ( Sizenew , Sizeold);
-    }
-#endif
-
-  myViewMapping->SetViewMapping( Xnew ,Ynew , Sizenew);
-  ImmediateUpdate();
-}
-
-void V2d_View::WindowFit(const Standard_Integer aX1,
-                   const Standard_Integer aY1,
-                   const Standard_Integer aX2,
-                   const Standard_Integer aY2) {
- Fit(aX1,aY1,aX2,aY2);
-}
-
-void V2d_View::Fit(const Standard_Integer aX1,
-                   const Standard_Integer aY1,
-                   const Standard_Integer aX2,
-                   const Standard_Integer aY2) {
-
-  if( aX1 != aX2 && aY1 != aY2 ) {
-    this->MapToCenter();
-    Standard_Real x1,y1,x2,y2,xx1,yy1,xx2,yy2;
-    myWindowDriver->Convert(aX1,aY1,xx1,yy1);
-    myWindowDriver->Convert(aX2,aY2,xx2,yy2);
-    myViewer->View()->Convert(myViewMapping,xx1,yy1,myXPosition,myYPosition,myScale,x1,y1);
-    myViewer->View()->Convert(myViewMapping,xx2,yy2,myXPosition,myYPosition,myScale,x2,y2);
-    Fit(x1,y1,x2,y2,Standard_False);
-  }
-}
-void V2d_View::Fit(const Quantity_Length aX1,
-                   const Quantity_Length aY1,
-                   const Quantity_Length aX2,
-                   const Quantity_Length aY2,
-                   const Standard_Boolean UseMinimum) {
-
-  Viewer_BadValue_Raise_if( aX1 == aX2 || aY1 == aY2 ,"coordinates are confused");
-  this->StoreCurrent();
-  Quantity_Ratio rat = myWindowDriver->Window()->Ratio();
-  Quantity_Length XCenter, YCenter, Size;
-  XCenter = (aX1+aX2)/2.; YCenter = (aY1+aY2)/2.;
-  if (UseMinimum)
-    Size = Abs(aX2-aX1)/rat < Abs(aY2-aY1) ? Abs(aX2-aX1)/rat : Abs(aY2-aY1);
-  else
-    Size = Abs(aX2-aX1)/rat > Abs(aY2-aY1) ? Abs(aX2-aX1)/rat : Abs(aY2-aY1);
-
-  myViewMapping->SetViewMapping(XCenter,YCenter,Size/2.);
-//OCC186
-  try {
-    ImmediateUpdate();
-  }
-  catch (Standard_NumericError) {
-    cout << "Exception caught during view Fit. " << endl;
-  }
-//OCC186
-}
-
-void V2d_View::SetFitallRatio (const Standard_Real aRatio) {
-
-  Viewer_BadValue_Raise_if( aRatio < 0 || aRatio >=1 , 
-                            "ratio must be  more than 0. and less than 1.");
-  myFitallRatio = aRatio;
-
-}
-void V2d_View::Zoom (const Standard_Real Zoom) {
-  Viewer_BadValue_Raise_if(Zoom <= 0., "Zoom coefficient must be greater than 0.");
-  this->StoreCurrent();
-  Quantity_Length XCenter, YCenter, Size;
-
-  myViewMapping->ViewMapping(XCenter, YCenter, Size);
-  myViewMapping->SetViewMapping(XCenter,YCenter,Size/Zoom);
-
-//OCC186
-  try {
-    ImmediateUpdate();
-  }
-  catch (Standard_NumericError) {
-    cout << "Exception caught during zooming! Zooming factor is too big." << endl;
-  }
-//OCC186
-}
-
-void V2d_View::Zoom (const Standard_Integer aX1,
-                     const Standard_Integer aY1,
-                     const Standard_Integer aX2,
-                     const Standard_Integer aY2,
-                     const Quantity_Ratio aCoefficient) {
-  Standard_Real D = Abs(aX1-aX2) >= Abs(aY1-aY2) ? aX1-aX2 : aY2-aY1;
-  this->Zoom ( D > 0 ? ( 1. /(1. + aCoefficient * Abs(D))) 
-               : (1. + aCoefficient * Abs(D)));
-}
-
-void V2d_View::Zoom (const Standard_Integer aX,
-                     const Standard_Integer aY,
-                     const Quantity_Ratio aCoefficient) {
-
-  Standard_Integer Width, Height;
-  myWindowDriver->Window()->Size(Width, Height);
-  this->Zoom(Width/2,Height/2,aX,aY,aCoefficient);
-}
-void V2d_View::Magnify(const Handle(V2d_View)& anOriginView,
-                       const Standard_Integer X1,
-                       const Standard_Integer Y1,
-                       const Standard_Integer X2,
-                       const Standard_Integer Y2) {
-  Standard_Real x1,y1,x2,y2;
-  anOriginView->Convert(X1,Y1,x1,y1);
-  anOriginView->Convert(X2,Y2,x2,y2);
-  myViewMapping->SetViewMapping((x1+x2)/2.,(y1+y2)/2.,Max(x2-x1,y2-y1)/2.);
-  myViewMapping->SetViewMappingDefault();
-//OCC186
-  try {
-    ImmediateUpdate();
-  }
-  catch (Standard_NumericError) {
-    cout << "Exception caught during view Magnify. " << endl;
-  }
-//OCC186
-}
-
-void V2d_View::Translate (const Quantity_Length dx, const Quantity_Length dy) {
-
-  this->StoreCurrent();
-
-  Quantity_Length XCenter, YCenter;
-  myViewMapping->Center(XCenter, YCenter);
-  myViewMapping->SetCenter(XCenter+dx,YCenter+dy);
-
-}
-
-void V2d_View::Place (const Standard_Integer x, const Standard_Integer y,
-                      const Quantity_Length aZoomFactor) {
-  Quantity_Length xx,yy;
-  this->Convert(x,y,xx,yy);
-  this->ScreenPlace(xx,yy,aZoomFactor);
-}
-void V2d_View::ScreenPlace (const Quantity_Length x, const Quantity_Length y,
-                     const Quantity_Factor aZoomFactor)  {
-
-  this->StoreCurrent();
-  myViewMapping->SetCenter(x,y);
-  Zoom(aZoomFactor/Zoom());
-}
-void V2d_View::Pan (const Standard_Integer dx, const Standard_Integer dy) {
-
-  Standard_Real x,y;
-  x = myWindowDriver->Convert(dx);
-  y = myWindowDriver->Convert(dy);
-  Standard_Real xx,yy;
-  xx =   myViewer->View()->Convert(myViewMapping,x,myScale);
-  yy =   myViewer->View()->Convert(myViewMapping,y,myScale);
-  this->Translate(-xx,-yy);
-  ImmediateUpdate();
-}
-
-Quantity_Length V2d_View::Convert(const Standard_Integer V) const {
-
-  return myViewer->View()->Convert(myViewMapping,myWindowDriver->Convert(V),myScale);
-}
-
-void V2d_View::Convert (const Standard_Integer X, const Standard_Integer Y,
-                        Quantity_Length& ViewX, Quantity_Length& ViewY) 
-  const {
-
-  Standard_Real xx,yy;
-  myWindowDriver->Convert(X,Y,xx,yy);
-  myViewer->View()->Convert(myViewMapping,xx,yy,myXPosition,myYPosition,myScale,
-           ViewX,ViewY);
-}
-
-void V2d_View::Convert (const Quantity_Length ViewX, const Quantity_Length ViewY, Standard_Integer& X, Standard_Integer &Y)
-  const {
-
-  Standard_Real XCenter,YCenter,Size;
-  myViewMapping->ViewMapping(XCenter,YCenter,Size);
-  Standard_Real x = myXPosition + ((ViewX-XCenter)/Size) *myScale;
-  Standard_Real y = myYPosition + ((ViewY-YCenter)/Size) *myScale;
-  myWindowDriver->Convert(x,y,X,Y);
-}
-
-Quantity_Length V2d_View::Convert(const Quantity_Length DriverSize) const {
-  Quantity_Length X,Y,S;
-  myViewMapping->ViewMapping(X,Y,S);
-  return DriverSize / myScale * S;
-}
-
-void V2d_View::Reset () {
-
-  this->StoreCurrent();
-  this->MapToCenter();
-  myViewMapping->ViewMappingReset();
-  ImmediateUpdate();
-}
-
-Handle(Graphic2d_View) V2d_View::View () const {return myViewer->View();}
-
-Handle(V2d_Viewer) V2d_View::Viewer () const {return myViewer;}
-
-Handle(Aspect_WindowDriver) V2d_View::Driver() const {return myWindowDriver;}
-
-void V2d_View::Update() const { 
-
-//Augustin myWindowDriver->Window()->Clear();
-//  EraseHit();
-  Quantity_Length XCenter, YCenter, Size;
-  myViewer->View()->SetTypeOfDeflection(Aspect_TOD_ABSOLUTE);
-  myViewMapping->ViewMapping(XCenter, YCenter, Size);
-  myViewer->View()->SetDeflection(myDeflection*Size/myScale);
-  myViewer->View()->Update(myWindowDriver,myViewMapping,myXPosition,myYPosition,myScale);}
-
-void V2d_View::UpdateNew() const {
-
-#ifdef IMP130300
-  myViewer->View()->TinyUpdate(myWindowDriver,myViewMapping,myXPosition,myYPosition,myScale,Standard_True);
-#else
-  myViewer->View()->Update(myWindowDriver,myViewMapping,myXPosition,myYPosition,myScale,Standard_False);
-#endif
-}
-void V2d_View::Restore() const { 
-
-  if(myWindowDriver->Window()->BackingStore()) 
-    myWindowDriver->Window()->Restore();
-  else 
-    this->Update();
- }   
-
-void V2d_View::RestoreArea (const Standard_Integer Xc,
-                            const Standard_Integer Yc,
-                            const Standard_Integer Width,
-                            const Standard_Integer Height) const {
-
-  if(myWindowDriver->Window()->BackingStore()) 
-    myWindowDriver->Window()->RestoreArea(Xc,Yc,Width,Height);
-  else 
-    this->Update();
- }   
-        
-void V2d_View::Dump() const { 
- //myView->Update(new V2d_DumpDriver);
-}
-
-void V2d_View::Dump( const Standard_CString aFileName) const { 
- myWindowDriver->Window()->Dump(aFileName); 
-}
-
-Handle(Graphic2d_DisplayList) V2d_View::Pick (
-                               const Standard_Integer X,
-                                const Standard_Integer Y,
-                                const Standard_Integer aPrecision) {
-
-  Standard_Real x,y,xx,yy,prec;
-  myWindowDriver->Convert(X,Y,xx,yy);
-  prec =  myViewer->View()->Convert(myViewMapping,
-                          myWindowDriver->Convert(aPrecision),
-                          myScale);
-  myViewer->View()->Convert(myViewMapping,xx,yy,myXPosition,myYPosition,myScale,x,y);
-  return myViewer->View()->Pick(myViewMapping,x,y,prec,myXPosition,myYPosition,myScale);
-}
-
-//SAV
-Handle(Graphic2d_DisplayList) V2d_View::PickByCircle( const Standard_Integer X,
-                                                     const Standard_Integer Y,
-                                                     const Standard_Integer Radius )
-{
-  Standard_Real x, y, xx, yy, radius;
-  myWindowDriver->Convert(X,Y,xx,yy);
-  radius =  myViewer->View()->Convert( myViewMapping,
-                                      myWindowDriver->Convert( Radius ),
-                                      myScale );
-  myViewer->View()->Convert( myViewMapping,
-                            xx,yy, myXPosition, myYPosition, myScale, x, y );
-  return myViewer->View()->PickByCircle( myViewMapping, x, y, radius, 
-                                        myXPosition, myYPosition, myScale );
-}
-
-Handle(Graphic2d_DisplayList) V2d_View::Pick (
-                               const Standard_Integer Xmin,
-                const Standard_Integer Ymin,
-                const Standard_Integer Xmax,
-                const Standard_Integer Ymax,
-                const Graphic2d_PickMode aPickMode ) {
-
-  Standard_Real x1, y1, xx1, yy1, x2, y2, xx2, yy2;
-  myWindowDriver->Convert( Xmin, Ymin, xx1, yy1 );
-  myWindowDriver->Convert( Xmax, Ymax, xx2, yy2 );
-
-  myViewer->View()->Convert( myViewMapping, xx1, yy1, myXPosition, myYPosition, myScale, x1, y1 );
-  myViewer->View()->Convert( myViewMapping, xx2, yy2, myXPosition, myYPosition, myScale, x2, y2 );
-
-  return myViewer->View()->Pick( myViewMapping, x1, y1, x2, y2, myXPosition, myYPosition, myScale, aPickMode );
-}
-  
-void V2d_View::Erase () { 
-  myViewer->View()->Erase();
-}
-
-void V2d_View::HasBeenMoved() {
-
-  myWindowDriver->ResizeSpace();
-}
-
-void V2d_View::MustBeResized(const V2d_TypeOfWindowResizingEffect anEffect) {
-
-  Standard_Real OldWidth = myWidth, OldHeight = myHeight;
-  Aspect_TypeOfResize TOR = myWindowDriver->ResizeSpace();
-  myWindowDriver->WorkSpace(myWidth,myHeight);
-  
-  switch (anEffect) {
-
-  case V2d_TOWRE_ENLARGE_SPACE: {
-    switch (TOR) {
-      case Aspect_TOR_UNKNOWN : break;
-      case Aspect_TOR_NO_BORDER : break;
-      case Aspect_TOR_TOP_BORDER :  break;
-      case Aspect_TOR_RIGHT_BORDER :  break;
-      case Aspect_TOR_BOTTOM_BORDER :  
-        myYPosition = myHeight - OldHeight + myYPosition;
-        break;
-      case Aspect_TOR_LEFT_BORDER : 
-        myXPosition = myWidth -  OldWidth  + myXPosition;
-        break;
-      case Aspect_TOR_TOP_AND_RIGHT_BORDER : break;
-      case Aspect_TOR_RIGHT_AND_BOTTOM_BORDER : 
-        myYPosition = myHeight - OldHeight + myYPosition;
-        break;
-      case Aspect_TOR_BOTTOM_AND_LEFT_BORDER : 
-        myXPosition = myWidth - OldWidth + myXPosition;
-        myYPosition = myHeight - OldHeight + myYPosition;
-        break;
-      case Aspect_TOR_LEFT_AND_TOP_BORDER: 
-        myXPosition = myWidth - OldWidth + myXPosition;
-        break;
-      }
-    break;
-  }
-  case V2d_TOWRE_ENLARGE_OBJECTS:{
-    
-    this->MapToCenter();
-    break;
-  }
-  }
-  this->StoreCurrent();
-  ImmediateUpdate();
-}
-
-void V2d_View::SetDefaultHighlightColor(const Standard_Integer aColorIndex) {
-
-  myViewer->View()->SetDefaultOverrideColor(aColorIndex);
-
-}
-
-#define SCREENCOPY_FILENAME "screencopy2d.gif"
-#define NO_HILIGHT          0xFFFFFF
-void V2d_View::ScreenCopy (const Handle(PlotMgt_PlotterDriver)& aPlotterDriver,
-                           const Standard_Boolean fWhiteBackground,
-                           const Quantity_Factor aPlotScale)
-{
-  int i ;
-  TCollection_AsciiString aFileToDump;
-  Quantity_Factor    aScale;
-  Quantity_Length    thePixel;
-  Quantity_Parameter theWWidth, theWHeight;
-  Quantity_Parameter thePWidth, thePHeight;
-  Quantity_Length    aViewX, aViewY, aViewSize;
-  aPlotterDriver -> WorkSpace (thePWidth, thePHeight);
-  myWindowDriver -> WorkSpace (theWWidth, theWHeight);
-  myViewMapping  -> ViewMapping (aViewX, aViewY, aViewSize);
-  thePixel = myWindowDriver -> Convert (1);
-
-  if (theWWidth * theWHeight != 0.) {
-    if (aPlotScale == 0.) {
-      aScale = Min (thePWidth / theWWidth, thePHeight / theWHeight);
-    } else {
-      aScale = aPlotScale;
-      aScale *= (aViewSize / theWWidth); 
-    }
-    Quantity_Length aPlotX, aPlotY;
-    aPlotX = theWWidth  /2. * aScale;
-    aPlotY = theWHeight /2. * aScale;
-
-    // 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         () );
-    myViewer -> View() -> SetTypeOfDeflection (Aspect_TOD_ABSOLUTE);
-    myViewer -> View() -> SetDeflection       (myDeflection);
-  
-    // Set backgroung to white, unihiglight if any
-    Handle(TColStd_HSequenceOfInteger) theColors;
-    Handle(Graphic2d_DisplayList)      theDisplayList;
-    Aspect_Background theBack = myWindowDriver->Window()->Background();
-    if (fWhiteBackground)
-      myWindowDriver -> Window() -> SetBackground (Quantity_NOC_WHITE);
-    theDisplayList = myViewer -> View() -> DisplayList();
-    theColors      = new TColStd_HSequenceOfInteger ();
-    for ( i = 1; i <= theDisplayList -> Length(); i++) {
-      if (theDisplayList -> Value(i) -> IsHighlighted()) {
-        theColors -> Append (theDisplayList -> Value(i) -> OverrideColor());
-        theDisplayList -> Value(i) -> Display();
-      } else {
-        theColors -> Append (NO_HILIGHT);
-      }
-    }
-    Update ();
-
-    // Dump the view
-    if (aPlotterDriver->IsKind(STANDARD_TYPE(PlotMgt_ImageDriver))) {
-      aFileToDump  = aPlotterDriver->PlotFileName();
-    } else {
-      aFileToDump  = aPlotterDriver->SpoolDirectory();
-      aFileToDump += SCREENCOPY_FILENAME;
-    }
-    myWindowDriver -> Window() -> Dump (aFileToDump.ToCString());
-
-    // Return background and highlight if any
-    for (i = 1; i <= theDisplayList -> Length(); i++)
-      if (theColors -> Value(i) != NO_HILIGHT)
-        theDisplayList -> Value(i) -> Highlight(theColors -> Value(i));
-    if (fWhiteBackground)
-      myWindowDriver -> Window() -> SetBackground (theBack);
-    Update ();
-
-    // Draw imagefile by plotter driver
-    aPlotterDriver -> SetPixelSize (thePixel);
-    aPlotterDriver -> BeginDraw ();
-    aPlotterDriver -> DrawImageFile (
-      aFileToDump.ToCString(), (float)aPlotX, (float)aPlotY, aScale);
-    aPlotterDriver -> EndDraw   ();
-  }
-}
-#undef NO_HILIGHT
-#undef SCREENCOPY_FILENAME
-
-void V2d_View::Plot(const Handle(PlotMgt_PlotterDriver)& aPlotterDriver,
-                    const Quantity_Length aXCenter,
-                    const Quantity_Length aYCenter,
-                    const Quantity_Factor aPlotScale) const
-{
-  Quantity_Length                 PaperWidth,PaperHeight;
-  
-  aPlotterDriver->SetColorMap(myWindowDriver->ColorMap());
-  aPlotterDriver->SetTypeMap(myWindowDriver->TypeMap());
-  aPlotterDriver->SetWidthMap(myWindowDriver->WidthMap());
-  aPlotterDriver->SetFontMap(myWindowDriver->FontMap(),myWindowDriver->UseMFT());
-  aPlotterDriver->SetMarkMap(myWindowDriver->MarkMap());
-  myViewer->View()->SetTypeOfDeflection(Aspect_TOD_ABSOLUTE);
-  myViewer->View()->SetDeflection(myDeflection);
-  
-  aPlotterDriver->WorkSpace (PaperWidth,PaperHeight);
-  // size of the map to force set the required size 
-  Quantity_Length aViewX , aViewY , aViewSize;
-  myViewMapping -> ViewMapping ( aViewX, aViewY, aViewSize );
-  Quantity_Factor aScale = aViewSize * aPlotScale;
-
-  Quantity_Length aPlotX , aPlotY;
-#ifdef JAP60249
-//printf(" V2d_View::Plot(%f,%f,%f,%f,%f,%f,%f)\n",PaperWidth,PaperHeight,aXCenter,aYCenter,aPlotScale,aViewSize,aScale);
-  Handle(Graphic2d_ViewMapping) myPlotMapping = new Graphic2d_ViewMapping;
-  myPlotMapping->SetViewMapping(aXCenter,aYCenter,aViewSize);
-  aPlotX = /*aPlotScale * */PaperWidth/2.;
-  aPlotY = /*aPlotScale * */PaperHeight/2.;
-  myViewer->View()->Update(aPlotterDriver,myPlotMapping,aPlotX,aPlotY,aScale);
-#else
-  // to place the bottom view to the left of the list and not in the middle  
-  if (myWidth < myHeight ){
-    aPlotX = aViewSize*aPlotScale;
-    aPlotY = aPlotX*myHeight/myWidth;
-    if (PaperWidth > PaperHeight)
-      aPlotX *= 2.;
-  } else {
-    aPlotY  = aViewSize*aPlotScale;
-    aPlotX  = aPlotY*myWidth/myHeight;  
-    if (PaperWidth < PaperHeight)
-      aPlotY *= 2.;
-  }
-
-  myViewer->View()->Update(aPlotterDriver,myViewMapping,aPlotX,aPlotY,aScale);
-#endif
-
-#if TRACE > 0
-  // info size paper 
-  cout << "V2d_View::Plot(Driver,centre X,Y,scale):CenterX" << aViewX << " Y " << aViewY << " Size=" << aViewSize 
-    << " ViewPosX=" << myXPosition << " ViewPosY=" << myYPosition 
-      << " VueX=" << myWidth << " VueY=" << myHeight 
-        << " PlotX=" << PaperWidth << " PlotY=" << PaperHeight
-          << " PlotScale=" << aPlotScale 
-            << " PosX=" << aPlotX << " Posy=" << aPlotY << " Scale " << aScale 
-              << endl ;
-#endif
-}
-
-void V2d_View :: Plot (
-                  const Handle( PlotMgt_PlotterDriver )& aDriver,
-                  const Quantity_Factor          aScale
-                 ) const {
-#if TRACE > 0
- cout << "V2d_View::Plot(driver,scale) scale=" << aScale << endl  ;
-#endif
- Plot( aDriver, (Quantity_Length) 0., (Quantity_Length) 0., aScale);
-}  
-
-void V2d_View::PostScriptOutput(const Standard_CString aFile,
-                                const Quantity_Length aWidth,
-                                const Quantity_Length aHeight,
-                                const Quantity_Length aXCenter,
-                                const Quantity_Length aYCenter,
-                                const Quantity_Factor aScale,
-                                const Aspect_TypeOfColorSpace aTypeOfColorSpace) 
-  const {
-  Handle(PS_Driver) aPSDriver = new PS_Driver(aFile,aWidth,aHeight,aTypeOfColorSpace);
-//  if(aTypeOfColorSpace != PS_TOCS_BlackAndWhite) 
-//     aPSDriver->SetColorMap(myWindowDriver->ColorMap());
-  Plot(aPSDriver,aXCenter,aYCenter,aScale);
-}
-
-void V2d_View::PlotScreen(const Handle(PlotMgt_PlotterDriver)& aPlotterDriver) const {
-  // recuperate size paper
-  Quantity_Length PaperWidth,PaperHeight;
-  aPlotterDriver->WorkSpace(PaperWidth,PaperHeight);
-
-  // Determination size to fit all in the paper
-  Quantity_Length aViewX , aViewY , aViewSize;
-  Quantity_Length aViewSizeX , aViewSizeY;
-  Quantity_Length aPlotX , aPlotY;
-  Standard_Real aPlotScale;
-  myViewMapping -> ViewMapping ( aViewX, aViewY, aViewSize );
-  if (myWidth < myHeight ){
-    aViewSizeX = aViewSize;
-    aViewSizeY = aViewSizeX*myHeight/myWidth;
-  }else {
-    aViewSizeY = aViewSize;
-    aViewSizeX = aViewSizeY*myWidth/myHeight;  
-  }
-  aPlotX = PaperWidth /2./aViewSizeX;
-  aPlotY = PaperHeight/2./aViewSizeY;
-  aPlotScale = (aPlotX < aPlotY  ? aPlotX : aPlotY );
-
-  Quantity_Length aXCenter, aYCenter;
-  this->Center(aXCenter, aYCenter);
-
-#if TRACE > 0
-  cout << "V2d_View::PlotScreen(Driver):Centre X=" << aViewX << " Y=" << aViewY << " Size=" << aViewSize   
-      << " SizeX=" << aViewSizeX << " Y=" << aViewSizeY 
-        << " PlotX=" << PaperWidth << " Y=" << PaperHeight        
-          << " PlotScaleX=" << aPlotX << " Y=" << aPlotY 
-            << " => PlotScale=" << aPlotScale 
-              << endl ;  
-#endif
-
-  this->Plot(aPlotterDriver,aXCenter,aYCenter,aPlotScale);
-
-}
-
-void V2d_View::ScreenPostScriptOutput(const Standard_CString aFile,
-                                const Quantity_Length aWidth,
-                                const Quantity_Length aHeight,
-                                const Aspect_TypeOfColorSpace aTypeOfColorSpace)
- const {
-  Handle(PS_Driver) aPSDriver = new PS_Driver(aFile,aWidth,aHeight,aTypeOfColorSpace);
-//  if(aTypeOfColorSpace != PS_TOCS_BlackAndWhite) 
-//     aPSDriver->SetColorMap(myWindowDriver->ColorMap());
-  PlotScreen(aPSDriver);
-}
-
-
-void V2d_View::StoreCurrent () {
-
-  if(myEnablePrevious) {
-
-    myViewMapping->ViewMapping(myPreviousX,myPreviousY,myPreviousSize);
-    myPreviousXPosition = myXPosition;
-    myPreviousYPosition = myYPosition;
-    myPreviousScale = myScale;
-  }
-
-}
-void V2d_View::Previous () {
-
-  if(myEnablePrevious) {
-    Standard_Real x,y,s,a,b,c;
-    x = myPreviousX;
-    y = myPreviousY;
-    s = myPreviousSize;
-    a = myPreviousXPosition;
-    b = myPreviousYPosition;
-    c = myPreviousScale;
-    this->StoreCurrent();
-    myViewMapping->SetViewMapping(x,y,s);
-    myXPosition = a;
-    myYPosition = b;
-    myScale = c;
-  }
-  ImmediateUpdate();
-}
-void V2d_View::SetDeflection (const Quantity_Length aDeflection) {
-
-  myDeflection = aDeflection;
-
-}
-
-Quantity_Length V2d_View::Deflection() const { 
-
-  return myDeflection; 
-}
-
-void V2d_View::EnableStorePrevious () {myEnablePrevious = Standard_True;}
-
-void V2d_View::DisableStorePrevious () {
-
-this->StoreCurrent();
-myEnablePrevious = Standard_False;}
-
-
-void V2d_View::MapToCenter () {
-
-   myXPosition =  myWidth  /2.;
-   myYPosition =  myHeight /2.;
-   myScale     = ( (myWidth<myHeight) ? myWidth : myHeight ) /2.; 
-
-}
-Quantity_Factor V2d_View::Zoom () const {
-  return 1./myViewMapping->Zoom();
-}
-
-void V2d_View::Center (Quantity_Length& aX, Quantity_Length& aY) const {
-  myViewMapping->Center(aX,aY);
-}
-
-Quantity_Length V2d_View::Size() const {
-  Quantity_Length XCenter, YCenter, Size;
-  myViewMapping->ViewMapping(XCenter, YCenter, Size);
-  return Size;
-}
-
-Quantity_NameOfColor V2d_View::Color () const {
-  return myWindowDriver->Window()->Background().Color().Name();
-}
-
-void V2d_View::Color( Quantity_Color& color ) const
-{
-#ifdef OCC540
-  color.Assign( myWindowDriver->Window()->Background().Color() );
-#endif
-}
-
-void V2d_View::Hit(const Standard_Integer X,
-                   const Standard_Integer Y,
-                   Quantity_Length& gx,
-                   Quantity_Length& gy) const {
-
-  Standard_Real rx,ry;
-  Convert(X,Y,rx,ry);
-  myViewer->Hit(rx,ry,gx,gy);
-}
-
-void V2d_View::ShowHit(const Standard_Integer X,
-                   const Standard_Integer Y) {
-  Standard_Real rx,ry,gx,gy;
-  Convert(X,Y,rx,ry);
-  myViewer->Hit(rx,ry,gx,gy);
-
-  myHitPoint->RemovePrimitives();
-  Handle(Graphic2d_Marker) 
-    M = new Graphic2d_Marker(myHitPoint,
-                             myViewer->HitPointMarkerIndex(),
-                             gx,gy,
-                             0.002 METER,0.002 METER);
-  M->SetColorIndex(myViewer->HitPointColor());
-
-
-  Standard_Real HitTextX,HitTextY;
-  myViewer->View()->Convert(myViewMapping,0.,0.,myXPosition,myYPosition,myScale,HitTextX,HitTextY);
-  Handle(Graphic2d_Text)
-   T1 = new Graphic2d_Text(myHitPoint,
-                           TCollection_ExtendedString(gx),
-                           HitTextX,HitTextY,0.);
-  T1->SetColorIndex(myViewer->CoordinatesColor());
-  T1->SetOffset(0. METER,0.005 METER);
-  T1->SetZoomable(Standard_False); //BUC50093
-  Handle(Graphic2d_Text)
-    T2 = new Graphic2d_Text(myHitPoint,
-                           TCollection_ExtendedString(gy),
-                            HitTextX,HitTextY,0.);
-  T2->SetColorIndex(myViewer->CoordinatesColor());
-  T2->SetZoomable(Standard_False); //BUC50093
-//if(myHitPoint->IsDisplayed()) myHitPoint->Erase();
-//myHitPoint->Display();
-  if(myHitBuf->IsPosted()) myHitBuf->UnPost();
-  myHitBuf->Clear();
-  myHitBuf->Add(myHitPoint);
-  myHitBuf->Post();
-}
-
-void V2d_View::EraseHit() {
-//  if(myHitPoint->IsDisplayed()) myHitPoint->Erase();
-  if(myHitBuf->IsPosted()) myHitBuf->UnPost();
-}  
-void V2d_View::Scroll(Standard_Integer& dxc, Standard_Integer& dyc,
-                 Standard_Integer& lx, Standard_Integer& ly) {
-
-
-  Standard_Boolean Case = lx > 0 ? Standard_True: Standard_False; //war
-// Case = Standard_false: there are only markers at the position 0,0;
-// Case = Standard_True:  works properly only if there is nothing but geometry.
-
-  lx = Abs(lx);  // war
-
-  Quantity_Length XCenter, YCenter, Size;
-  myViewMapping->ViewMapping(XCenter, YCenter, Size);
-
-
-  Convert( - dxc , - dyc ,pxmin,pymax);
-  Convert( - dxc + lx, - dyc + ly ,pxmax,pymin);
-
-
-  Quantity_Length XMin,YMin,XMax,YMax;
-  myViewer->View()->MinMax(XMin,XMax,YMin,YMax);
-
-  dxc = 0;
-  dyc = 0;
-
-  if(XMin <= XMax && YMin <= YMax) { // empty view
-
-// warning !!!
-    if(!Case) {
-      XMin = XMin  / myScale * Size;
-      XMax = XMax  / myScale * Size;
-      YMin = YMin  / myScale * Size;
-      YMax = YMax  / myScale * Size;
-    }
-// end war
-
-    Standard_Boolean t = Standard_False;
-
-    if (XMin < pxmin) {
-      Standard_Real dx = XMin - pxmin;
-      Translate(dx,0);
-      Standard_Real ddx = dx  /Size * myScale; 
-      dxc = myWindowDriver->Convert(ddx);
-      t = Standard_True;
-    }
-    else
-      XMin = pxmin;
-    
-    if (YMax > pymax) {
-      Standard_Real dy = YMax - pymax;
-      Translate(0,dy);
-      Standard_Real ddy = dy  /Size * myScale; 
-      dyc = myWindowDriver->Convert(ddy);
-      t = Standard_True;
-    }    
-    else
-      YMax = pymax;
-    
-    if (XMax < pxmax) XMax = pxmax;
-    if (YMin > pymin) YMin = pymin;
-    
-    if(t) ImmediateUpdate();
-
-    Standard_Real a = (XMax - XMin)/Size * myScale; 
-    Standard_Real b = (YMax - YMin)/Size * myScale; 
-    
-    
-    lx = myWindowDriver->Convert(a);
-    ly = myWindowDriver->Convert(b);
-  }
-}
-
-
-Standard_Integer V2d_View::DefaultHighlightColor() const {
-Standard_Integer index = 
-       (myViewer->View()->IsDefinedColor()) ?
-       myViewer->View()->DefaultOverrideColor() : -1;
-
-  return index;
-}
-
-void V2d_View::SetBackground(const Quantity_NameOfColor aNameColor) {
-
-   myWindowDriver->Window()->SetBackground( aNameColor );
-}
-
-Standard_Boolean V2d_View::SetBackground( const Standard_CString aNameFile,
-                                         const Aspect_FillMethod aMethod ) {
-
-  return myWindowDriver->Window()->SetBackground(aNameFile,aMethod);
-
-}
-
-void V2d_View::SetBackground( const Quantity_Color& color )
-{
-  myWindowDriver->Window()->SetBackground( color );
-}